Add support for alternative RSA implementations
Alternative RSA implementations can be provided by defining MBEDTLS_RSA_ALT in
config.h, defining an mbedtls_rsa_context struct in a new file rsa_alt.h and
re-implementing the RSA interface specified in rsa.h.
Through the previous reworkings, the adherence to the interface is the only
implementation obligation - in particular, implementors are free to use a
different layout for the RSA context structure.
diff --git a/include/mbedtls/config.h b/include/mbedtls/config.h
index 47c7196..ec004f5 100644
--- a/include/mbedtls/config.h
+++ b/include/mbedtls/config.h
@@ -267,6 +267,7 @@
//#define MBEDTLS_BLOWFISH_ALT
//#define MBEDTLS_CAMELLIA_ALT
//#define MBEDTLS_DES_ALT
+//#define MBEDTLS_RSA_ALT
//#define MBEDTLS_XTEA_ALT
//#define MBEDTLS_MD2_ALT
//#define MBEDTLS_MD4_ALT
diff --git a/include/mbedtls/rsa.h b/include/mbedtls/rsa.h
index 8aefdb6..0deff00 100644
--- a/include/mbedtls/rsa.h
+++ b/include/mbedtls/rsa.h
@@ -209,6 +209,8 @@
* Implementation of RSA interface
*/
+#if !defined(MBEDTLS_RSA_ALT)
+
/**
* \brief RSA context structure
*/
@@ -252,6 +254,12 @@
}
mbedtls_rsa_context;
+#else
+
+#include "rsa_alt.h"
+
+#endif /* MBEDTLS_RSA_ALT */
+
/**
* \brief Initialize an RSA context
*
diff --git a/library/rsa.c b/library/rsa.c
index dc1fae5..2976b71 100644
--- a/library/rsa.c
+++ b/library/rsa.c
@@ -464,6 +464,7 @@
* Default RSA interface implementation
*/
+#if !defined(MBEDTLS_RSA_ALT)
int mbedtls_rsa_import( mbedtls_rsa_context *ctx,
const mbedtls_mpi *N,
@@ -2493,6 +2494,8 @@
#endif
}
+#endif /* !MBEDTLS_RSA_ALT */
+
#if defined(MBEDTLS_SELF_TEST)
#include "mbedtls/sha1.h"
diff --git a/library/version_features.c b/library/version_features.c
index 5cbe8ac..9bf6c61 100644
--- a/library/version_features.c
+++ b/library/version_features.c
@@ -99,6 +99,9 @@
#if defined(MBEDTLS_DES_ALT)
"MBEDTLS_DES_ALT",
#endif /* MBEDTLS_DES_ALT */
+#if defined(MBEDTLS_RSA_ALT)
+ "MBEDTLS_RSA_ALT",
+#endif /* MBEDTLS_RSA_ALT */
#if defined(MBEDTLS_XTEA_ALT)
"MBEDTLS_XTEA_ALT",
#endif /* MBEDTLS_XTEA_ALT */