Index: openssl/crypto/dsa/dsa_lib.c |
=================================================================== |
--- openssl/crypto/dsa/dsa_lib.c (revision 105093) |
+++ openssl/crypto/dsa/dsa_lib.c (working copy) |
@@ -76,14 +76,6 @@ |
void DSA_set_default_method(const DSA_METHOD *meth) |
{ |
-#ifdef OPENSSL_FIPS |
- if (FIPS_mode() && !(meth->flags & DSA_FLAG_FIPS_METHOD)) |
- { |
- DSAerr(DSA_F_DSA_SET_DEFAULT_METHOD, DSA_R_NON_FIPS_METHOD); |
- return; |
- } |
-#endif |
- |
default_DSA_method = meth; |
} |
@@ -104,13 +96,6 @@ |
/* NB: The caller is specifically setting a method, so it's not up to us |
* to deal with which ENGINE it comes from. */ |
const DSA_METHOD *mtmp; |
-#ifdef OPENSSL_FIPS |
- if (FIPS_mode() && !(meth->flags & DSA_FLAG_FIPS_METHOD)) |
- { |
- DSAerr(DSA_F_DSA_SET_METHOD, DSA_R_NON_FIPS_METHOD); |
- return 0; |
- } |
-#endif |
mtmp = dsa->meth; |
if (mtmp->finish) mtmp->finish(dsa); |
#ifndef OPENSSL_NO_ENGINE |
@@ -162,18 +147,6 @@ |
} |
} |
#endif |
-#ifdef OPENSSL_FIPS |
- if (FIPS_mode() && !(ret->meth->flags & DSA_FLAG_FIPS_METHOD)) |
- { |
- DSAerr(DSA_F_DSA_NEW_METHOD, DSA_R_NON_FIPS_METHOD); |
-#ifndef OPENSSL_NO_ENGINE |
- if (ret->engine) |
- ENGINE_finish(ret->engine); |
-#endif |
- OPENSSL_free(ret); |
- return NULL; |
- } |
-#endif |
ret->pad=0; |
ret->version=0; |
@@ -190,7 +163,7 @@ |
ret->method_mont_p=NULL; |
ret->references=1; |
- ret->flags=ret->meth->flags & ~DSA_FLAG_NON_FIPS_ALLOW; |
+ ret->flags=ret->meth->flags; |
CRYPTO_new_ex_data(CRYPTO_EX_INDEX_DSA, ret, &ret->ex_data); |
if ((ret->meth->init != NULL) && !ret->meth->init(ret)) |
{ |
@@ -260,6 +233,28 @@ |
return ((i > 1) ? 1 : 0); |
} |
+int DSA_size(const DSA *r) |
+ { |
+ int ret,i; |
+ ASN1_INTEGER bs; |
+ unsigned char buf[4]; /* 4 bytes looks really small. |
+ However, i2d_ASN1_INTEGER() will not look |
+ beyond the first byte, as long as the second |
+ parameter is NULL. */ |
+ |
+ i=BN_num_bits(r->q); |
+ bs.length=(i+7)/8; |
+ bs.data=buf; |
+ bs.type=V_ASN1_INTEGER; |
+ /* If the top bit is set the asn1 encoding is 1 larger. */ |
+ buf[0]=0xff; |
+ |
+ i=i2d_ASN1_INTEGER(&bs,NULL); |
+ i+=i; /* r and s */ |
+ ret=ASN1_object_size(1,i,V_ASN1_SEQUENCE); |
+ return(ret); |
+ } |
+ |
int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, |
CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) |
{ |