aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDr. Stephen Henson <[email protected]>2006-03-31 19:09:46 +0200
committerDr. Stephen Henson <[email protected]>2006-03-31 19:09:46 +0200
commit6fa6e3e2df566687558ecedae569a1041d99680f (patch)
treeeff73651dfa54dfa851443f5b7735633279f3c0a
parentUpdate build system to make use of validated module in FIPS mode. (diff)
downloadopenssl-6fa6e3e2df566687558ecedae569a1041d99680f.tar.gz
openssl-6fa6e3e2df566687558ecedae569a1041d99680f.zip
Flag to allow use of DSA_METHOD in FIPS mode.
-rw-r--r--crypto/dsa/dsa.h7
-rw-r--r--crypto/dsa/dsa_sign.c6
-rw-r--r--crypto/dsa/dsa_vrf.c3
3 files changed, 13 insertions, 3 deletions
diff --git a/crypto/dsa/dsa.h b/crypto/dsa/dsa.h
index 925f11cd579..851e3f0445c 100644
--- a/crypto/dsa/dsa.h
+++ b/crypto/dsa/dsa.h
@@ -88,6 +88,13 @@
* be used for all exponents.
*/
+/* If this flag is set external DSA_METHOD callbacks are allowed in FIPS mode
+ * it is then the applications responsibility to ensure the external method
+ * is compliant.
+ */
+
+#define DSA_FLAG_FIPS_EXTERNAL_METHOD_ALLOW 0x04
+
#if defined(OPENSSL_FIPS)
#define FIPS_DSA_SIZE_T int
#endif
diff --git a/crypto/dsa/dsa_sign.c b/crypto/dsa/dsa_sign.c
index 3c9753bac39..46601102b57 100644
--- a/crypto/dsa/dsa_sign.c
+++ b/crypto/dsa/dsa_sign.c
@@ -72,7 +72,8 @@
DSA_SIG * DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa)
{
#ifdef OPENSSL_FIPS
- if(FIPS_mode() && !FIPS_dsa_check(dsa))
+ if(FIPS_mode() && !FIPS_dsa_check(dsa)
+ && !(dsa->flags & DSA_FLAG_FIPS_EXTERNAL_METHOD_ALLOW))
return NULL;
#endif
return dsa->meth->dsa_do_sign(dgst, dlen, dsa);
@@ -96,7 +97,8 @@ int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig,
int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)
{
#ifdef OPENSSL_FIPS
- if(FIPS_mode() && !FIPS_dsa_check(dsa))
+ if(FIPS_mode() && !FIPS_dsa_check(dsa)
+ && !(dsa->flags & DSA_FLAG_FIPS_EXTERNAL_METHOD_ALLOW))
return 0;
#endif
return dsa->meth->dsa_sign_setup(dsa, ctx_in, kinvp, rp);
diff --git a/crypto/dsa/dsa_vrf.c b/crypto/dsa/dsa_vrf.c
index 8ef0c450252..608431ca565 100644
--- a/crypto/dsa/dsa_vrf.c
+++ b/crypto/dsa/dsa_vrf.c
@@ -74,7 +74,8 @@ int DSA_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig,
DSA *dsa)
{
#ifdef OPENSSL_FIPS
- if(FIPS_mode() && !FIPS_dsa_check(dsa))
+ if(FIPS_mode() && !FIPS_dsa_check(dsa)
+ && !(dsa->flags & DSA_FLAG_FIPS_EXTERNAL_METHOD_ALLOW))
return -1;
#endif
return dsa->meth->dsa_do_verify(dgst, dgst_len, sig, dsa);