http://code.google.com/p/selene-tls/source/detail?r=051fefb6f4f7
Modified:
/include/private/sln_rsa.h
/lib/crypto/rsa_openssl.c
=======================================
--- /include/private/sln_rsa.h Sun Aug 14 00:05:14 2011
+++ /include/private/sln_rsa.h Sun Aug 14 18:18:39 2011
@@ -22,17 +22,20 @@
#ifdef SLN_HAVE_OSX_COMMONCRYPTO
selene_error_t* sln_rsa_osx_cc_public_encrypt(selene_t *s, sln_pubkey_t
*key,
const char *input, size_t
inputlen, char *output);
+size_t sln_rsa_osx_cc_size(sln_pubkey_t *key);
#endif
selene_error_t* sln_rsa_openssl_public_encrypt(selene_t *s, sln_pubkey_t
*key,
const char *input, size_t
inputlen, char *output);
+size_t sln_rsa_openssl_size(sln_pubkey_t *key);
+
#if defined(SLN_HAVE_OSX_COMMONCRYPTO) && defined(__never__)
-/* Use OSX native methods if available */
#define sln_rsa_public_encrypt sln_rsa_osx_cc_public_encrypt
+#define sln_rsa_size sln_rsa_osx_cc_size
#else
-/* OpenSSL Fallbacks */
#define sln_rsa_public_encrypt sln_rsa_openssl_public_encrypt
+#define sln_rsa_size sln_rsa_openssl_size
#endif
#endif
=======================================
--- /lib/crypto/rsa_openssl.c Sun Aug 14 00:05:14 2011
+++ /lib/crypto/rsa_openssl.c Sun Aug 14 18:18:39 2011
@@ -34,7 +34,7 @@
(unsigned char *)output,
rsa, RSA_PKCS1_PADDING);
- if (err) {
+ if (err == -1) {
char buf[121];
unsigned long e = ERR_get_error();
return selene_error_createf(SELENE_EINVAL,
@@ -44,3 +44,13 @@
return SELENE_SUCCESS;
}
+
+size_t
+sln_rsa_openssl_size(sln_pubkey_t *key)
+{
+ RSA *rsa = key->key->pkey.rsa;
+
+ SLN_ASSERT(key->key->type == EVP_PKEY_RSA);
+
+ return RSA_size(rsa);
+}