New functions to allow RSA_METHODs to be changed without poking round in RSA structure internals.
diff --git a/CHANGES b/CHANGES index 70dcca1..23082d3 100644 --- a/CHANGES +++ b/CHANGES
@@ -4,6 +4,11 @@ Changes between 0.9.3a and 0.9.4 + *) New functions RSA_get_default_method(), RSA_set_method() and + RSA_get_method(). These allows replacement of RSA_METHODs without having + to mess around with the internals of an RSA structure. + [Steve Henson] + *) Fix memory leaks in DSA_do_sign and DSA_is_prime. Also really enable memory leak checks in openssl.c and in some test programs.
diff --git a/crypto/rsa/rsa.h b/crypto/rsa/rsa.h index 11f66b6..3be447d 100644 --- a/crypto/rsa/rsa.h +++ b/crypto/rsa/rsa.h
@@ -161,6 +161,9 @@ int RSA_flags(RSA *r); void RSA_set_default_method(RSA_METHOD *meth); +RSA_METHOD *RSA_get_default_method(void); +RSA_METHOD *RSA_get_method(RSA *rsa); +RSA_METHOD *RSA_set_method(RSA *rsa, RSA_METHOD *meth); /* This function needs the memory locking malloc callbacks to be installed */ int RSA_memory_lock(RSA *r);
diff --git a/crypto/rsa/rsa_lib.c b/crypto/rsa/rsa_lib.c index 1ac1331..c0ca292 100644 --- a/crypto/rsa/rsa_lib.c +++ b/crypto/rsa/rsa_lib.c
@@ -79,6 +79,26 @@ default_RSA_meth=meth; } +RSA_METHOD *RSA_get_default_method(void) +{ + return default_RSA_meth; +} + +RSA_METHOD *RSA_get_method(RSA *rsa) +{ + return rsa->meth; +} + +RSA_METHOD *RSA_set_method(RSA *rsa, RSA_METHOD *meth) +{ + RSA_METHOD *mtmp; + mtmp = rsa->meth; + if (mtmp->finish) mtmp->finish(rsa); + rsa->meth = meth; + if (meth->init) meth->init(rsa); + return mtmp; +} + RSA *RSA_new_method(RSA_METHOD *meth) { RSA *ret;
diff --git a/util/libeay.num b/util/libeay.num index 4c49be6..f9ea4e8 100755 --- a/util/libeay.num +++ b/util/libeay.num
@@ -1818,3 +1818,6 @@ sk_ASN1_OBJECT_push 1843 d2i_ASN1_SET_OF_ASN1_OBJECT 1844 PKCS7_signatureVerify 1845 +RSA_set_method 1846 +RSA_get_method 1847 +RSA_get_default_method 1848