diff options
Diffstat (limited to 'src/lib/libcrypto/dsa/dsa_ossl.c')
-rw-r--r-- | src/lib/libcrypto/dsa/dsa_ossl.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/lib/libcrypto/dsa/dsa_ossl.c b/src/lib/libcrypto/dsa/dsa_ossl.c index a3ddd7d281..4fead07e80 100644 --- a/src/lib/libcrypto/dsa/dsa_ossl.c +++ b/src/lib/libcrypto/dsa/dsa_ossl.c | |||
@@ -148,6 +148,15 @@ static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa) | |||
148 | 148 | ||
149 | s=BN_new(); | 149 | s=BN_new(); |
150 | if (s == NULL) goto err; | 150 | if (s == NULL) goto err; |
151 | |||
152 | /* reject a excessive digest length (currently at most | ||
153 | * dsa-with-SHA256 is supported) */ | ||
154 | if (dlen > SHA256_DIGEST_LENGTH) | ||
155 | { | ||
156 | reason=DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE; | ||
157 | goto err; | ||
158 | } | ||
159 | |||
151 | ctx=BN_CTX_new(); | 160 | ctx=BN_CTX_new(); |
152 | if (ctx == NULL) goto err; | 161 | if (ctx == NULL) goto err; |
153 | 162 | ||
@@ -176,7 +185,7 @@ static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa) | |||
176 | if (!BN_mod_mul(&xr,dsa->priv_key,r,dsa->q,ctx)) goto err;/* s = xr */ | 185 | if (!BN_mod_mul(&xr,dsa->priv_key,r,dsa->q,ctx)) goto err;/* s = xr */ |
177 | if (!BN_add(s, &xr, &m)) goto err; /* s = m + xr */ | 186 | if (!BN_add(s, &xr, &m)) goto err; /* s = m + xr */ |
178 | if (BN_cmp(s,dsa->q) > 0) | 187 | if (BN_cmp(s,dsa->q) > 0) |
179 | if (!BN_sub(s,s,dsa->q)) goto err; | 188 | BN_sub(s,s,dsa->q); |
180 | if (!BN_mod_mul(s,s,kinv,dsa->q,ctx)) goto err; | 189 | if (!BN_mod_mul(s,s,kinv,dsa->q,ctx)) goto err; |
181 | 190 | ||
182 | ret=DSA_SIG_new(); | 191 | ret=DSA_SIG_new(); |
@@ -316,6 +325,15 @@ static int dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig, | |||
316 | DSAerr(DSA_F_DSA_DO_VERIFY,DSA_R_MODULUS_TOO_LARGE); | 325 | DSAerr(DSA_F_DSA_DO_VERIFY,DSA_R_MODULUS_TOO_LARGE); |
317 | return -1; | 326 | return -1; |
318 | } | 327 | } |
328 | |||
329 | /* reject a excessive digest length (currently at most | ||
330 | * dsa-with-SHA256 is supported) */ | ||
331 | if (dgst_len > SHA256_DIGEST_LENGTH) | ||
332 | { | ||
333 | DSAerr(DSA_F_DSA_DO_VERIFY,DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE); | ||
334 | return -1; | ||
335 | } | ||
336 | |||
319 | BN_init(&u1); | 337 | BN_init(&u1); |
320 | BN_init(&u2); | 338 | BN_init(&u2); |
321 | BN_init(&t1); | 339 | BN_init(&t1); |