~andersk/ubuntu/oneiric/openssl/spurious-reboot

« back to all changes in this revision

Viewing changes to fips/dh/fips_dh_check.c

  • Committer: Bazaar Package Importer
  • Author(s): Colin Watson
  • Date: 2011-05-01 23:51:53 UTC
  • mfrom: (11.1.20 sid)
  • Revision ID: james.westby@ubuntu.com-20110501235153-bjcxitndquaezb68
Tags: 1.0.0d-2ubuntu1
* Resynchronise with Debian (LP: #675566).  Remaining changes:
  - debian/libssl1.0.0.postinst:
    + Display a system restart required notification bubble on libssl1.0.0
      upgrade.
    + Use a different priority for libssl1.0.0/restart-services depending
      on whether a desktop, or server dist-upgrade is being performed.
  - debian/{libssl1.0.0-udeb.dirs, control, rules}: Create
    libssl1.0.0-udeb, for the benefit of wget-udeb (no wget-udeb package
    in Debian).
  - debian/{libcrypto1.0.0-udeb.dirs, libssl1.0.0.dirs, libssl1.0.0.files,
    rules}: Move runtime libraries to /lib, for the benefit of
    wpasupplicant.
  - debian/patches/aesni.patch: Backport Intel AES-NI support, now from
    http://rt.openssl.org/Ticket/Display.html?id=2065 rather than the
    0.9.8 variant.
  - debian/patches/Bsymbolic-functions.patch: Link using
    -Bsymbolic-functions.
  - debian/patches/perlpath-quilt.patch: Don't change perl #! paths under
    .pc.
  - debian/rules:
    + Don't run 'make test' when cross-building.
    + Use host compiler when cross-building.  Patch from Neil Williams.
    + Don't build for processors no longer supported: i486, i586 (on
      i386), v8 (on sparc).
    + Fix Makefile to properly clean up libs/ dirs in clean target.
    + Replace duplicate files in the doc directory with symlinks.
* Update architectures affected by Bsymbolic-functions.patch.
* Drop debian/patches/no-sslv2.patch; Debian now adds the 'no-ssl2'
  configure option, which compiles out SSLv2 support entirely, so this is
  no longer needed.
* Drop openssl-doc in favour of the libssl-doc package introduced by
  Debian.  Add Conflicts/Replaces until the next LTS release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* crypto/dh/dh_check.c */
2
 
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3
 
 * All rights reserved.
4
 
 *
5
 
 * This package is an SSL implementation written
6
 
 * by Eric Young (eay@cryptsoft.com).
7
 
 * The implementation was written so as to conform with Netscapes SSL.
8
 
 * 
9
 
 * This library is free for commercial and non-commercial use as long as
10
 
 * the following conditions are aheared to.  The following conditions
11
 
 * apply to all code found in this distribution, be it the RC4, RSA,
12
 
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13
 
 * included with this distribution is covered by the same copyright terms
14
 
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15
 
 * 
16
 
 * Copyright remains Eric Young's, and as such any Copyright notices in
17
 
 * the code are not to be removed.
18
 
 * If this package is used in a product, Eric Young should be given attribution
19
 
 * as the author of the parts of the library used.
20
 
 * This can be in the form of a textual message at program startup or
21
 
 * in documentation (online or textual) provided with the package.
22
 
 * 
23
 
 * Redistribution and use in source and binary forms, with or without
24
 
 * modification, are permitted provided that the following conditions
25
 
 * are met:
26
 
 * 1. Redistributions of source code must retain the copyright
27
 
 *    notice, this list of conditions and the following disclaimer.
28
 
 * 2. Redistributions in binary form must reproduce the above copyright
29
 
 *    notice, this list of conditions and the following disclaimer in the
30
 
 *    documentation and/or other materials provided with the distribution.
31
 
 * 3. All advertising materials mentioning features or use of this software
32
 
 *    must display the following acknowledgement:
33
 
 *    "This product includes cryptographic software written by
34
 
 *     Eric Young (eay@cryptsoft.com)"
35
 
 *    The word 'cryptographic' can be left out if the rouines from the library
36
 
 *    being used are not cryptographic related :-).
37
 
 * 4. If you include any Windows specific code (or a derivative thereof) from 
38
 
 *    the apps directory (application code) you must include an acknowledgement:
39
 
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40
 
 * 
41
 
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42
 
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43
 
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44
 
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45
 
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46
 
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47
 
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
 
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49
 
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50
 
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51
 
 * SUCH DAMAGE.
52
 
 * 
53
 
 * The licence and distribution terms for any publically available version or
54
 
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
55
 
 * copied and put under another distribution licence
56
 
 * [including the GNU Public Licence.]
57
 
 */
58
 
 
59
 
#include <stdio.h>
60
 
#include <openssl/bn.h>
61
 
#include <openssl/dh.h>
62
 
#include <openssl/err.h>
63
 
#include <openssl/fips.h>
64
 
 
65
 
/* Check that p is a safe prime and
66
 
 * if g is 2, 3 or 5, check that is is a suitable generator
67
 
 * where
68
 
 * for 2, p mod 24 == 11
69
 
 * for 3, p mod 12 == 5
70
 
 * for 5, p mod 10 == 3 or 7
71
 
 * should hold.
72
 
 */
73
 
 
74
 
#ifdef OPENSSL_FIPS
75
 
 
76
 
int DH_check(const DH *dh, int *ret)
77
 
        {
78
 
        int ok=0;
79
 
        BN_CTX *ctx=NULL;
80
 
        BN_ULONG l;
81
 
        BIGNUM *q=NULL;
82
 
 
83
 
        *ret=0;
84
 
        ctx=BN_CTX_new();
85
 
        if (ctx == NULL) goto err;
86
 
        q=BN_new();
87
 
        if (q == NULL) goto err;
88
 
 
89
 
        if (BN_is_word(dh->g,DH_GENERATOR_2))
90
 
                {
91
 
                l=BN_mod_word(dh->p,24);
92
 
                if (l != 11) *ret|=DH_NOT_SUITABLE_GENERATOR;
93
 
                }
94
 
#if 0
95
 
        else if (BN_is_word(dh->g,DH_GENERATOR_3))
96
 
                {
97
 
                l=BN_mod_word(dh->p,12);
98
 
                if (l != 5) *ret|=DH_NOT_SUITABLE_GENERATOR;
99
 
                }
100
 
#endif
101
 
        else if (BN_is_word(dh->g,DH_GENERATOR_5))
102
 
                {
103
 
                l=BN_mod_word(dh->p,10);
104
 
                if ((l != 3) && (l != 7))
105
 
                        *ret|=DH_NOT_SUITABLE_GENERATOR;
106
 
                }
107
 
        else
108
 
                *ret|=DH_UNABLE_TO_CHECK_GENERATOR;
109
 
 
110
 
        if (!BN_is_prime_ex(dh->p,BN_prime_checks,ctx,NULL))
111
 
                *ret|=DH_CHECK_P_NOT_PRIME;
112
 
        else
113
 
                {
114
 
                if (!BN_rshift1(q,dh->p)) goto err;
115
 
                if (!BN_is_prime_ex(q,BN_prime_checks,ctx,NULL))
116
 
                        *ret|=DH_CHECK_P_NOT_SAFE_PRIME;
117
 
                }
118
 
        ok=1;
119
 
err:
120
 
        if (ctx != NULL) BN_CTX_free(ctx);
121
 
        if (q != NULL) BN_free(q);
122
 
        return(ok);
123
 
        }
124
 
 
125
 
int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *ret)
126
 
        {
127
 
        int ok=0;
128
 
        BIGNUM *q=NULL;
129
 
 
130
 
        *ret=0;
131
 
        q=BN_new();
132
 
        if (q == NULL) goto err;
133
 
        BN_set_word(q,1);
134
 
        if (BN_cmp(pub_key,q) <= 0)
135
 
                *ret|=DH_CHECK_PUBKEY_TOO_SMALL;
136
 
        BN_copy(q,dh->p);
137
 
        BN_sub_word(q,1);
138
 
        if (BN_cmp(pub_key,q) >= 0)
139
 
                *ret|=DH_CHECK_PUBKEY_TOO_LARGE;
140
 
 
141
 
        ok = 1;
142
 
err:
143
 
        if (q != NULL) BN_free(q);
144
 
        return(ok);
145
 
        }
146
 
 
147
 
#endif