diff options
author | 2014-07-09 10:16:24 +0000 | |
---|---|---|
committer | 2014-07-09 10:16:24 +0000 | |
commit | e85b1b814f1a1df4b8b146b5d663297f415d0ca8 (patch) | |
tree | 6c3a88d6caf2c126ae5221ae811a71a3d9d59e17 /lib/libssl/src/crypto/dsa/dsa_gen.c | |
parent | config parser improvements: (diff) | |
download | wireguard-openbsd-e85b1b814f1a1df4b8b146b5d663297f415d0ca8.tar.xz wireguard-openbsd-e85b1b814f1a1df4b8b146b5d663297f415d0ca8.zip |
KNF
Diffstat (limited to 'lib/libssl/src/crypto/dsa/dsa_gen.c')
-rw-r--r-- | lib/libssl/src/crypto/dsa/dsa_gen.c | 274 |
1 files changed, 137 insertions, 137 deletions
diff --git a/lib/libssl/src/crypto/dsa/dsa_gen.c b/lib/libssl/src/crypto/dsa/dsa_gen.c index 22c388b9d11..d97f988688a 100644 --- a/lib/libssl/src/crypto/dsa/dsa_gen.c +++ b/lib/libssl/src/crypto/dsa/dsa_gen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dsa_gen.c,v 1.12 2014/06/12 15:49:28 deraadt Exp $ */ +/* $OpenBSD: dsa_gen.c,v 1.13 2014/07/09 10:16:24 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -56,19 +56,6 @@ * [including the GNU Public Licence.] */ -#undef GENUINE_DSA - -#ifdef GENUINE_DSA -/* Parameter generation follows the original release of FIPS PUB 186, - * Appendix 2.2 (i.e. use SHA as defined in FIPS PUB 180) */ -#define HASH EVP_sha() -#else -/* Parameter generation follows the updated Appendix 2.2 for FIPS PUB 186, - * also Appendix 2.2 of FIPS PUB 186-1 (i.e. use SHA as defined in - * FIPS PUB 180-1) */ -#define HASH EVP_sha1() -#endif - #include <openssl/opensslconf.h> /* To see if OPENSSL_NO_SHA is defined */ #ifndef OPENSSL_NO_SHA @@ -81,51 +68,47 @@ #include <openssl/sha.h> #include "dsa_locl.h" -int DSA_generate_parameters_ex(DSA *ret, int bits, - const unsigned char *seed_in, int seed_len, - int *counter_ret, unsigned long *h_ret, BN_GENCB *cb) - { - if(ret->meth->dsa_paramgen) +int +DSA_generate_parameters_ex(DSA *ret, int bits, const unsigned char *seed_in, + int seed_len, int *counter_ret, unsigned long *h_ret, BN_GENCB *cb) +{ + if (ret->meth->dsa_paramgen) return ret->meth->dsa_paramgen(ret, bits, seed_in, seed_len, - counter_ret, h_ret, cb); - else - { + counter_ret, h_ret, cb); + else { const EVP_MD *evpmd; - size_t qbits = bits >= 2048 ? 256 : 160; + size_t qbits; - if (bits >= 2048) - { + if (bits >= 2048) { qbits = 256; evpmd = EVP_sha256(); - } - else - { + } else { qbits = 160; evpmd = EVP_sha1(); - } - - return dsa_builtin_paramgen(ret, bits, qbits, evpmd, - seed_in, seed_len, NULL, counter_ret, h_ret, cb); } - } -int dsa_builtin_paramgen(DSA *ret, size_t bits, size_t qbits, - const EVP_MD *evpmd, const unsigned char *seed_in, size_t seed_len, - unsigned char *seed_out, - int *counter_ret, unsigned long *h_ret, BN_GENCB *cb) - { - int ok=0; + return dsa_builtin_paramgen(ret, bits, qbits, evpmd, seed_in, + seed_len, NULL, counter_ret, h_ret, cb); + } +} + +int +dsa_builtin_paramgen(DSA *ret, size_t bits, size_t qbits, const EVP_MD *evpmd, + const unsigned char *seed_in, size_t seed_len, unsigned char *seed_out, + int *counter_ret, unsigned long *h_ret, BN_GENCB *cb) +{ + int ok = 0; unsigned char seed[SHA256_DIGEST_LENGTH]; unsigned char md[SHA256_DIGEST_LENGTH]; - unsigned char buf[SHA256_DIGEST_LENGTH],buf2[SHA256_DIGEST_LENGTH]; - BIGNUM *r0,*W,*X,*c,*test; - BIGNUM *g=NULL,*q=NULL,*p=NULL; - BN_MONT_CTX *mont=NULL; - int i, k, n=0, m=0, qsize = qbits >> 3; - int counter=0; - int r=0; - BN_CTX *ctx=NULL; - unsigned int h=2; + unsigned char buf[SHA256_DIGEST_LENGTH], buf2[SHA256_DIGEST_LENGTH]; + BIGNUM *r0, *W, *X, *c, *test; + BIGNUM *g = NULL, *q = NULL, *p = NULL; + BN_MONT_CTX *mont = NULL; + int i, k, n = 0, m = 0, qsize = qbits >> 3; + int counter = 0; + int r = 0; + BN_CTX *ctx = NULL; + unsigned int h = 2; if (qsize != SHA_DIGEST_LENGTH && qsize != SHA224_DIGEST_LENGTH && qsize != SHA256_DIGEST_LENGTH) @@ -139,16 +122,20 @@ int dsa_builtin_paramgen(DSA *ret, size_t bits, size_t qbits, if (bits < 512) bits = 512; - bits = (bits+63)/64*64; + bits = (bits + 63) / 64 * 64; - /* NB: seed_len == 0 is special case: copy generated seed to + /* + * NB: seed_len == 0 is special case: copy generated seed to * seed_in if it is not NULL. */ - if (seed_len && (seed_len < (size_t)qsize)) + if (seed_len && seed_len < (size_t)qsize) seed_in = NULL; /* seed buffer too small -- ignore */ + /* + * App. 2.2 of FIPS PUB 186 allows larger SEED, + * but our internal buffers are restricted to 160 bits + */ if (seed_len > (size_t)qsize) - seed_len = qsize; /* App. 2.2 of FIPS PUB 186 allows larger SEED, - * but our internal buffers are restricted to 160 bits*/ + seed_len = qsize; if (seed_in != NULL) memcpy(seed, seed_in, seed_len); @@ -168,38 +155,34 @@ int dsa_builtin_paramgen(DSA *ret, size_t bits, size_t qbits, p = BN_CTX_get(ctx); test = BN_CTX_get(ctx); - if (!BN_lshift(test,BN_value_one(),bits-1)) + if (!BN_lshift(test, BN_value_one(), bits - 1)) goto err; - for (;;) - { - for (;;) /* find q */ - { + for (;;) { + for (;;) { /* find q */ int seed_is_random; /* step 1 */ - if(!BN_GENCB_call(cb, 0, m++)) + if (!BN_GENCB_call(cb, 0, m++)) goto err; - if (!seed_len) - { + if (!seed_len) { RAND_pseudo_bytes(seed, qsize); seed_is_random = 1; - } - else - { + } else { seed_is_random = 0; - seed_len=0; /* use random seed if 'seed_in' turns out to be bad*/ - } - memcpy(buf , seed, qsize); + /* use random seed if 'seed_in' turns out + to be bad */ + seed_len = 0; + } + memcpy(buf, seed, qsize); memcpy(buf2, seed, qsize); /* precompute "SEED + 1" for step 7: */ - for (i = qsize-1; i >= 0; i--) - { + for (i = qsize - 1; i >= 0; i--) { buf[i]++; if (buf[i] != 0) break; - } + } /* step 2 */ if (!EVP_Digest(seed, qsize, md, NULL, evpmd, NULL)) @@ -207,17 +190,17 @@ int dsa_builtin_paramgen(DSA *ret, size_t bits, size_t qbits, if (!EVP_Digest(buf, qsize, buf2, NULL, evpmd, NULL)) goto err; for (i = 0; i < qsize; i++) - md[i]^=buf2[i]; + md[i] ^= buf2[i]; /* step 3 */ md[0] |= 0x80; - md[qsize-1] |= 0x01; + md[qsize - 1] |= 0x01; if (!BN_bin2bn(md, qsize, q)) goto err; /* step 4 */ r = BN_is_prime_fasttest_ex(q, DSS_prime_checks, ctx, - seed_is_random, cb); + seed_is_random, cb); if (r > 0) break; if (r != 0) @@ -225,127 +208,144 @@ int dsa_builtin_paramgen(DSA *ret, size_t bits, size_t qbits, /* do a callback call */ /* step 5 */ - } + } - if(!BN_GENCB_call(cb, 2, 0)) goto err; - if(!BN_GENCB_call(cb, 3, 0)) goto err; + if (!BN_GENCB_call(cb, 2, 0)) + goto err; + if (!BN_GENCB_call(cb, 3, 0)) + goto err; /* step 6 */ - counter=0; + counter = 0; /* "offset = 2" */ - n=(bits-1)/160; + n = (bits - 1) / 160; - for (;;) - { - if ((counter != 0) && !BN_GENCB_call(cb, 0, counter)) + for (;;) { + if (counter != 0 && !BN_GENCB_call(cb, 0, counter)) goto err; /* step 7 */ BN_zero(W); /* now 'buf' contains "SEED + offset - 1" */ - for (k=0; k<=n; k++) - { + for (k = 0; k <= n; k++) { /* obtain "SEED + offset + k" by incrementing: */ - for (i = qsize-1; i >= 0; i--) - { + for (i = qsize - 1; i >= 0; i--) { buf[i]++; if (buf[i] != 0) break; - } + } if (!EVP_Digest(buf, qsize, md ,NULL, evpmd, - NULL)) + NULL)) goto err; /* step 8 */ if (!BN_bin2bn(md, qsize, r0)) goto err; - if (!BN_lshift(r0,r0,(qsize << 3)*k)) goto err; - if (!BN_add(W,W,r0)) goto err; - } + if (!BN_lshift(r0, r0, (qsize << 3) * k)) + goto err; + if (!BN_add(W, W, r0)) + goto err; + } /* more of step 8 */ - if (!BN_mask_bits(W,bits-1)) goto err; - if (!BN_copy(X,W)) goto err; - if (!BN_add(X,X,test)) goto err; + if (!BN_mask_bits(W, bits - 1)) + goto err; + if (!BN_copy(X, W)) + goto err; + if (!BN_add(X, X, test)) + goto err; /* step 9 */ - if (!BN_lshift1(r0,q)) goto err; - if (!BN_mod(c,X,r0,ctx)) goto err; - if (!BN_sub(r0,c,BN_value_one())) goto err; - if (!BN_sub(p,X,r0)) goto err; + if (!BN_lshift1(r0, q)) + goto err; + if (!BN_mod(c, X, r0, ctx)) + goto err; + if (!BN_sub(r0, c, BN_value_one())) + goto err; + if (!BN_sub(p, X, r0)) + goto err; /* step 10 */ - if (BN_cmp(p,test) >= 0) - { + if (BN_cmp(p, test) >= 0) { /* step 11 */ r = BN_is_prime_fasttest_ex(p, DSS_prime_checks, - ctx, 1, cb); + ctx, 1, cb); if (r > 0) - goto end; /* found it */ + goto end; /* found it */ if (r != 0) goto err; - } + } /* step 13 */ counter++; /* "offset = offset + n + 1" */ /* step 14 */ - if (counter >= 4096) break; - } + if (counter >= 4096) + break; } + } end: - if(!BN_GENCB_call(cb, 2, 1)) + if (!BN_GENCB_call(cb, 2, 1)) goto err; /* We now need to generate g */ /* Set r0=(p-1)/q */ - if (!BN_sub(test,p,BN_value_one())) goto err; - if (!BN_div(r0,NULL,test,q,ctx)) goto err; + if (!BN_sub(test, p, BN_value_one())) + goto err; + if (!BN_div(r0, NULL, test, q, ctx)) + goto err; - if (!BN_set_word(test,h)) goto err; - if (!BN_MONT_CTX_set(mont,p,ctx)) goto err; + if (!BN_set_word(test, h)) + goto err; + if (!BN_MONT_CTX_set(mont, p, ctx)) + goto err; - for (;;) - { + for (;;) { /* g=test^r0%p */ - if (!BN_mod_exp_mont(g,test,r0,p,ctx,mont)) goto err; - if (!BN_is_one(g)) break; - if (!BN_add(test,test,BN_value_one())) goto err; + if (!BN_mod_exp_mont(g, test, r0, p, ctx, mont)) + goto err; + if (!BN_is_one(g)) + break; + if (!BN_add(test, test, BN_value_one())) + goto err; h++; - } + } - if(!BN_GENCB_call(cb, 3, 1)) + if (!BN_GENCB_call(cb, 3, 1)) goto err; - ok=1; + ok = 1; err: - if (ok) - { - if(ret->p) BN_free(ret->p); - if(ret->q) BN_free(ret->q); - if(ret->g) BN_free(ret->g); - ret->p=BN_dup(p); - ret->q=BN_dup(q); - ret->g=BN_dup(g); - if (ret->p == NULL || ret->q == NULL || ret->g == NULL) - { - ok=0; + if (ok) { + if (ret->p) + BN_free(ret->p); + if (ret->q) + BN_free(ret->q); + if (ret->g) + BN_free(ret->g); + ret->p = BN_dup(p); + ret->q = BN_dup(q); + ret->g = BN_dup(g); + if (ret->p == NULL || ret->q == NULL || ret->g == NULL) { + ok = 0; goto err; - } - if (counter_ret != NULL) *counter_ret=counter; - if (h_ret != NULL) *h_ret=h; + } + if (counter_ret != NULL) + *counter_ret = counter; + if (h_ret != NULL) + *h_ret = h; if (seed_out) memcpy(seed_out, seed, qsize); - } - if(ctx) - { + } + if (ctx) { BN_CTX_end(ctx); BN_CTX_free(ctx); - } - if (mont != NULL) BN_MONT_CTX_free(mont); - return ok; } + if (mont != NULL) + BN_MONT_CTX_free(mont); + return ok; +} #endif |