summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dsa/dsa_ossl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/dsa/dsa_ossl.c')
-rw-r--r--src/lib/libcrypto/dsa/dsa_ossl.c20
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);