diff options
Diffstat (limited to 'src/lib/libcrypto/dsa/dsa_sign.c')
-rw-r--r-- | src/lib/libcrypto/dsa/dsa_sign.c | 50 |
1 files changed, 13 insertions, 37 deletions
diff --git a/src/lib/libcrypto/dsa/dsa_sign.c b/src/lib/libcrypto/dsa/dsa_sign.c index c3cc3642ce..17555e5892 100644 --- a/src/lib/libcrypto/dsa/dsa_sign.c +++ b/src/lib/libcrypto/dsa/dsa_sign.c | |||
@@ -61,54 +61,30 @@ | |||
61 | #include "cryptlib.h" | 61 | #include "cryptlib.h" |
62 | #include <openssl/dsa.h> | 62 | #include <openssl/dsa.h> |
63 | #include <openssl/rand.h> | 63 | #include <openssl/rand.h> |
64 | #include <openssl/bn.h> | ||
65 | 64 | ||
66 | DSA_SIG * DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa) | 65 | DSA_SIG * DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa) |
67 | { | 66 | { |
68 | #ifdef OPENSSL_FIPS | ||
69 | if (FIPS_mode() && !(dsa->meth->flags & DSA_FLAG_FIPS_METHOD) | ||
70 | && !(dsa->flags & DSA_FLAG_NON_FIPS_ALLOW)) | ||
71 | { | ||
72 | DSAerr(DSA_F_DSA_DO_SIGN, DSA_R_NON_FIPS_DSA_METHOD); | ||
73 | return NULL; | ||
74 | } | ||
75 | #endif | ||
76 | return dsa->meth->dsa_do_sign(dgst, dlen, dsa); | 67 | return dsa->meth->dsa_do_sign(dgst, dlen, dsa); |
77 | } | 68 | } |
78 | 69 | ||
79 | int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp) | 70 | int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig, |
71 | unsigned int *siglen, DSA *dsa) | ||
80 | { | 72 | { |
81 | #ifdef OPENSSL_FIPS | 73 | DSA_SIG *s; |
82 | if (FIPS_mode() && !(dsa->meth->flags & DSA_FLAG_FIPS_METHOD) | 74 | RAND_seed(dgst, dlen); |
83 | && !(dsa->flags & DSA_FLAG_NON_FIPS_ALLOW)) | 75 | s=DSA_do_sign(dgst,dlen,dsa); |
76 | if (s == NULL) | ||
84 | { | 77 | { |
85 | DSAerr(DSA_F_DSA_SIGN_SETUP, DSA_R_NON_FIPS_DSA_METHOD); | 78 | *siglen=0; |
86 | return 0; | 79 | return(0); |
87 | } | 80 | } |
88 | #endif | 81 | *siglen=i2d_DSA_SIG(s,&sig); |
89 | return dsa->meth->dsa_sign_setup(dsa, ctx_in, kinvp, rp); | 82 | DSA_SIG_free(s); |
83 | return(1); | ||
90 | } | 84 | } |
91 | 85 | ||
92 | DSA_SIG *DSA_SIG_new(void) | 86 | int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp) |
93 | { | ||
94 | DSA_SIG *sig; | ||
95 | sig = OPENSSL_malloc(sizeof(DSA_SIG)); | ||
96 | if (!sig) | ||
97 | return NULL; | ||
98 | sig->r = NULL; | ||
99 | sig->s = NULL; | ||
100 | return sig; | ||
101 | } | ||
102 | |||
103 | void DSA_SIG_free(DSA_SIG *sig) | ||
104 | { | 87 | { |
105 | if (sig) | 88 | return dsa->meth->dsa_sign_setup(dsa, ctx_in, kinvp, rp); |
106 | { | ||
107 | if (sig->r) | ||
108 | BN_free(sig->r); | ||
109 | if (sig->s) | ||
110 | BN_free(sig->s); | ||
111 | OPENSSL_free(sig); | ||
112 | } | ||
113 | } | 89 | } |
114 | 90 | ||