Thread-safety fixes

This commit is contained in:
Bodo Möller
2006-06-16 01:01:34 +00:00
parent c098e8b6ca
commit 094c6aa51d
2 changed files with 32 additions and 11 deletions

View File

@@ -403,18 +403,32 @@ BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from)
BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock, BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock,
const BIGNUM *mod, BN_CTX *ctx) const BIGNUM *mod, BN_CTX *ctx)
{ {
if (*pmont) int got_write_lock = 0;
return *pmont; BN_MONT_CTX *ret;
CRYPTO_w_lock(lock);
CRYPTO_r_lock(lock);
if (!*pmont) if (!*pmont)
{ {
BN_MONT_CTX *mtmp; CRYPTO_r_unlock(lock);
mtmp = BN_MONT_CTX_new(); CRYPTO_w_lock(lock);
if (mtmp && !BN_MONT_CTX_set(mtmp, mod, ctx)) got_write_lock = 1;
BN_MONT_CTX_free(mtmp);
if (!*pmont)
{
ret = BN_MONT_CTX_new();
if (ret && !BN_MONT_CTX_set(ret, mod, ctx))
BN_MONT_CTX_free(ret);
else else
*pmont = mtmp; *pmont = ret;
} }
}
ret = *pmont;
if (got_write_lock)
CRYPTO_w_unlock(lock); CRYPTO_w_unlock(lock);
return *pmont; else
CRYPTO_r_unlock(lock);
return ret;
} }

View File

@@ -287,6 +287,13 @@ static BN_BLINDING *setup_blinding(RSA *rsa, BN_CTX *ctx)
} }
if ((Ai=BN_mod_inverse(NULL,A,rsa->n,ctx)) == NULL) goto err; if ((Ai=BN_mod_inverse(NULL,A,rsa->n,ctx)) == NULL) goto err;
if (rsa->flags & RSA_FLAG_CACHE_PUBLIC)
{
if (!BN_MONT_CTX_set_locked(&rsa->_method_mod_n,
CRYPTO_LOCK_RSA, rsa->n, ctx))
goto err;
}
if (!rsa->meth->bn_mod_exp(A,A,rsa->e,rsa->n,ctx,rsa->_method_mod_n)) if (!rsa->meth->bn_mod_exp(A,A,rsa->e,rsa->n,ctx,rsa->_method_mod_n))
goto err; goto err;
ret = BN_BLINDING_new(A,Ai,rsa->n); ret = BN_BLINDING_new(A,Ai,rsa->n);