summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2011-04-23 21:59:12 +0000
committerDr. Stephen Henson <steve@openssl.org>2011-04-23 21:59:12 +0000
commit69a80f7d5e1363276a9588546df28782a18a8c36 (patch)
tree0ea39725967589e7a2a3bb9fdd2a648e17755214
parentdc03504d090d7b4754bdd65f50d71d35ecb08390 (diff)
More fixes for DSA FIPS overrides.
-rw-r--r--apps/dsaparam.c10
-rw-r--r--crypto/dsa/dsa_ossl.c3
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;