X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fbtls%2Fbtls-key.c;h=17168153b112240fbbb1dabb8c79d863fb7e40ac;hb=5b014f9c48539c744b0eff8eeb8890f3a120a238;hp=65909a527d9944e0aa27ca42b05505552ca4584d;hpb=be95f699da177f6e2d13937062b8c6eca449104f;p=mono.git diff --git a/mono/btls/btls-key.c b/mono/btls/btls-key.c index 65909a527d9..17168153b11 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,19 @@ 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, size_t der_length) +{ + RSA *rsa; + int ret; + + 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 +73,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;