diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2011-04-23 21:59:12 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2011-04-23 21:59:12 +0000 |
commit | 69a80f7d5e1363276a9588546df28782a18a8c36 (patch) | |
tree | 0ea39725967589e7a2a3bb9fdd2a648e17755214 | |
parent | dc03504d090d7b4754bdd65f50d71d35ecb08390 (diff) |
More fixes for DSA FIPS overrides.
-rw-r--r-- | apps/dsaparam.c | 10 | ||||
-rw-r--r-- | crypto/dsa/dsa_ossl.c | 3 |
2 files changed, 11 insertions, 2 deletions
diff --git a/apps/dsaparam.c b/apps/dsaparam.c index deb4aa9444..03e33f9f7e 100644 --- a/apps/dsaparam.c +++ b/apps/dsaparam.c @@ -435,13 +435,21 @@ bad: assert(need_rand); if ((dsakey=DSAparams_dup(dsa)) == NULL) goto end; - if (!DSA_generate_key(dsakey)) goto end; + if (non_fips_allow) + dsakey->flags |= DSA_FLAG_NON_FIPS_ALLOW; + if (!DSA_generate_key(dsakey)) + { + ERR_print_errors(bio_err); + DSA_free(dsakey); + goto end; + } if (outformat == FORMAT_ASN1) i=i2d_DSAPrivateKey_bio(out,dsakey); else if (outformat == FORMAT_PEM) i=PEM_write_bio_DSAPrivateKey(out,dsakey,NULL,NULL,0,NULL,NULL); else { BIO_printf(bio_err,"bad output format specified for outfile\n"); + DSA_free(dsakey); goto end; } DSA_free(dsakey); diff --git a/crypto/dsa/dsa_ossl.c b/crypto/dsa/dsa_ossl.c index acf7af95c4..38f667f4e7 100644 --- a/crypto/dsa/dsa_ossl.c +++ b/crypto/dsa/dsa_ossl.c @@ -353,7 +353,8 @@ static int dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig, return -1; } - if (FIPS_mode() && (BN_num_bits(dsa->p) < OPENSSL_DSA_FIPS_MIN_MODULUS_BITS)) + if (FIPS_mode() && !(dsa->flags & DSA_FLAG_NON_FIPS_ALLOW) + && (BN_num_bits(dsa->p) < OPENSSL_DSA_FIPS_MIN_MODULUS_BITS)) { DSAerr(DSA_F_DSA_DO_VERIFY, DSA_R_KEY_SIZE_TOO_SMALL); return -1; |