X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Frsa%2Frsa_crpt.c;h=cec4a7c2bdfe30dbaaa5e6e5c4fae8146a5714b5;hp=f5f29e0e28ffc92748ec1eda89ef4218dc67ad3a;hb=0b1a07c8a70486534526d8967f03e32806da5661;hpb=23a1d5e97cd543d2b8e1b01dbf0f619b2e5ce540 diff --git a/crypto/rsa/rsa_crpt.c b/crypto/rsa/rsa_crpt.c index f5f29e0e28..cec4a7c2bd 100644 --- a/crypto/rsa/rsa_crpt.c +++ b/crypto/rsa/rsa_crpt.c @@ -1,4 +1,3 @@ -/* crypto/rsa/rsa_lib.c */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -58,12 +57,17 @@ #include #include -#include "cryptlib.h" +#include "internal/cryptlib.h" #include #include "internal/bn_int.h" #include #include +int RSA_bits(const RSA *r) +{ + return (BN_num_bits(r->n)); +} + int RSA_size(const RSA *r) { return (BN_num_bytes(r->n)); @@ -154,8 +158,7 @@ static BIGNUM *rsa_get_public_exp(const BIGNUM *d, const BIGNUM *p, BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *in_ctx) { - BIGNUM *local_n = NULL; - BIGNUM *e, *n; + BIGNUM *e; BN_CTX *ctx; BN_BLINDING *ret = NULL; @@ -191,31 +194,38 @@ BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *in_ctx) 0.0); } - if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME)) { - /* Set BN_FLG_CONSTTIME flag */ - local_n = n = BN_new(); - if (!local_n) { - RSAerr(RSA_F_RSA_SETUP_BLINDING, ERR_R_MALLOC_FAILURE); - goto err; + { + BIGNUM *local_n = NULL, *n; + if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME)) { + /* Set BN_FLG_CONSTTIME flag */ + local_n = n = BN_new(); + if (local_n == NULL) { + RSAerr(RSA_F_RSA_SETUP_BLINDING, ERR_R_MALLOC_FAILURE); + goto err; + } + BN_with_flags(n, rsa->n, BN_FLG_CONSTTIME); + } else { + n = rsa->n; } - BN_with_flags(n, rsa->n, BN_FLG_CONSTTIME); - } else - n = rsa->n; - ret = BN_BLINDING_create_param(NULL, e, n, ctx, - rsa->meth->bn_mod_exp, rsa->_method_mod_n); + ret = BN_BLINDING_create_param(NULL, e, n, ctx, rsa->meth->bn_mod_exp, + rsa->_method_mod_n); + /* We MUST free local_n before any further use of rsa->n */ + BN_free(local_n); + } if (ret == NULL) { RSAerr(RSA_F_RSA_SETUP_BLINDING, ERR_R_BN_LIB); goto err; } - CRYPTO_THREADID_current(BN_BLINDING_thread_id(ret)); + + BN_BLINDING_set_current_thread(ret); + err: BN_CTX_end(ctx); if (ctx != in_ctx) BN_CTX_free(ctx); if (e != rsa->e) BN_free(e); - BN_free(local_n); return ret; }