diff options
author | Nils Larsch <nils@openssl.org> | 2007-02-11 19:33:21 +0000 |
---|---|---|
committer | Nils Larsch <nils@openssl.org> | 2007-02-11 19:33:21 +0000 |
commit | b900a6b42fc7c380a8720127b285d884296a4359 (patch) | |
tree | 42e2c2c947c0c905b3d70e4acb0f3fd6b48e858b /crypto | |
parent | 15780a1ea03bae4fb6ebf149ec2e291899400163 (diff) |
avoid shifting input
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/dsa/dsa_ossl.c | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/crypto/dsa/dsa_ossl.c b/crypto/dsa/dsa_ossl.c index dc5d4b3f0b..38004eced5 100644 --- a/crypto/dsa/dsa_ossl.c +++ b/crypto/dsa/dsa_ossl.c @@ -134,7 +134,7 @@ static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa) BIGNUM m; BIGNUM xr; BN_CTX *ctx=NULL; - int i, reason=ERR_R_BN_LIB; + int reason=ERR_R_BN_LIB; DSA_SIG *ret=NULL; BN_init(&m); @@ -172,17 +172,14 @@ static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa) dsa->r=NULL; } - if (BN_bin2bn(dgst,dlen,&m) == NULL) - goto err; - i = BN_num_bytes(dsa->q); - if (dlen > i) - { + + if (dlen > BN_num_bytes(dsa->q)) /* if the digest length is greater than the size of q use the * BN_num_bits(dsa->q) leftmost bits of the digest, see * fips 186-3, 4.2 */ - if (!BN_rshift(&m, &m, (dlen - i) << 3)) - goto err; - } + dlen = BN_num_bytes(dsa->q); + if (BN_bin2bn(dgst,dlen,&m) == NULL) + goto err; /* Compute s = inv(k) (m + xr) mod q */ if (!BN_mod_mul(&xr,dsa->priv_key,r,dsa->q,ctx)) goto err;/* s = xr */ @@ -308,7 +305,7 @@ static int dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig, BN_CTX *ctx; BIGNUM u1,u2,t1; BN_MONT_CTX *mont=NULL; - int ret = -1, i, j; + int ret = -1, i; if (!dsa->p || !dsa->q || !dsa->g) { DSAerr(DSA_F_DSA_DO_VERIFY,DSA_R_MISSING_PARAMETERS); @@ -361,16 +358,12 @@ static int dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig, if ((BN_mod_inverse(&u2,sig->s,dsa->q,ctx)) == NULL) goto err; /* save M in u1 */ - if (BN_bin2bn(dgst,dgst_len,&u1) == NULL) goto err; - j = dgst_len << 3; - if (j > i) - { + if (dgst_len > (i >> 3)) /* if the digest length is greater than the size of q use the * BN_num_bits(dsa->q) leftmost bits of the digest, see * fips 186-3, 4.2 */ - if (!BN_rshift(&u1, &u1, j - i)) - goto err; - } + dgst_len = (i >> 3); + if (BN_bin2bn(dgst,dgst_len,&u1) == NULL) goto err; /* u1 = M * w mod q */ if (!BN_mod_mul(&u1,&u1,&u2,dsa->q,ctx)) goto err; |