X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Frsa%2Frsa_lib.c;h=3accf013f3cbee47c73517acbe29621ec323bca2;hp=d3a602f0a5be91bb9944b03c03e6b77760850f9d;hb=5cbc2e8bc187058e2ec2f17f53c3429c16dbc0d8;hpb=12c2fe8d53fd43559ea862c9babfc2abf3c65299 diff --git a/crypto/rsa/rsa_lib.c b/crypto/rsa/rsa_lib.c index d3a602f0a5..3accf013f3 100644 --- a/crypto/rsa/rsa_lib.c +++ b/crypto/rsa/rsa_lib.c @@ -162,16 +162,23 @@ RSA *RSA_new_method(ENGINE *engine) return(NULL); } - if (engine == NULL) + if (engine) { - if((ret->engine=ENGINE_get_default_RSA()) == NULL) - { - OPENSSL_free(ret); - return NULL; - } + if(ENGINE_init(engine)) + ret->engine = engine; + else + ret->engine = NULL; } else - ret->engine=engine; + ret->engine=ENGINE_get_default_RSA(); + + if(ret->engine == NULL) + { + RSAerr(RSA_F_RSA_NEW_METHOD,ERR_LIB_ENGINE); + OPENSSL_free(ret); + return NULL; + } + meth = ENGINE_get_RSA(ret->engine); ret->pad=0; @@ -241,12 +248,29 @@ void RSA_free(RSA *r) OPENSSL_free(r); } +int RSA_up(RSA *r) + { + int i = CRYPTO_add(&r->references, 1, CRYPTO_LOCK_RSA); +#ifdef REF_PRINT + REF_PRINT("RSA",r); +#endif +#ifdef REF_CHECK + if (i < 2) + { + fprintf(stderr, "RSA_up, bad reference count\n"); + abort(); + } +#endif + return ((i > 1) ? 1 : 0); + } + int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) { - rsa_meth_num++; - return(CRYPTO_get_ex_new_index(rsa_meth_num-1, - &rsa_meth,argl,argp,new_func,dup_func,free_func)); + if(CRYPTO_get_ex_new_index(rsa_meth_num, &rsa_meth, argl, argp, + new_func, dup_func, free_func) < 0) + return -1; + return (rsa_meth_num++); } int RSA_set_ex_data(RSA *r, int idx, void *arg)