X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fbtls%2Fbtls-key.c;h=462a71419fa66d165f594ca1e5a529bcd542edfe;hb=3ab1a56f73cac926676e24b58d07bf0c4e75d3eb;hp=65909a527d9944e0aa27ca42b05505552ca4584d;hpb=8fcd9402c573d4323f459c6208494adb3e59209f;p=mono.git diff --git a/mono/btls/btls-key.c b/mono/btls/btls-key.c index 65909a527d9..462a71419fa 100644 --- a/mono/btls/btls-key.c +++ b/mono/btls/btls-key.c @@ -8,6 +8,12 @@ #include +MONO_API EVP_PKEY * +mono_btls_key_new () +{ + return EVP_PKEY_new (); +} + MONO_API void mono_btls_key_free (EVP_PKEY *pkey) { @@ -32,6 +38,18 @@ mono_btls_key_is_rsa (EVP_PKEY *pkey) return pkey->type == EVP_PKEY_RSA; } +MONO_API int +mono_btls_key_assign_rsa_private_key (EVP_PKEY *pkey, uint8_t *der_data, int der_length) +{ + RSA *rsa; + + rsa = RSA_private_key_from_bytes (der_data, der_length); + if (!rsa) + return 0; + + return EVP_PKEY_assign_RSA (pkey, rsa); +} + MONO_API int mono_btls_key_get_bytes (EVP_PKEY *pkey, uint8_t **buffer, int *size, int include_private_bits) { @@ -54,6 +72,8 @@ mono_btls_key_get_bytes (EVP_PKEY *pkey, uint8_t **buffer, int *size, int includ else ret = RSA_public_key_to_bytes (buffer, &len, rsa); + RSA_free (rsa); + if (ret != 1) return 0;