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