[BTLS]: Improve error handling. (#4317)
[mono.git] / mono / btls / btls-key.c
index 708abe4cfbbf951bab327ce3a8f1a3d605b6b5c0..462a71419fa66d165f594ca1e5a529bcd542edfe 100644 (file)
@@ -8,31 +8,49 @@
 
 #include <btls-key.h>
 
-void
+MONO_API EVP_PKEY *
+mono_btls_key_new ()
+{
+       return EVP_PKEY_new ();
+}
+
+MONO_API void
 mono_btls_key_free (EVP_PKEY *pkey)
 {
        EVP_PKEY_free (pkey);
 }
 
-EVP_PKEY *
+MONO_API EVP_PKEY *
 mono_btls_key_up_ref (EVP_PKEY *pkey)
 {
        return EVP_PKEY_up_ref (pkey);
 }
 
-int
+MONO_API int
 mono_btls_key_get_bits (EVP_PKEY *pkey)
 {
        return EVP_PKEY_bits (pkey);
 }
 
-int
+MONO_API int
 mono_btls_key_is_rsa (EVP_PKEY *pkey)
 {
        return pkey->type == EVP_PKEY_RSA;
 }
 
-int
+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)
 {
        size_t len;
@@ -54,30 +72,11 @@ 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;
 
        *size = (int)len;
        return 1;
 }
-
-int
-mono_btls_key_test (EVP_PKEY *pkey)
-{
-       RSA *rsa;
-       unsigned char *p = NULL;
-       int ret;
-
-       if (pkey->type != EVP_PKEY_RSA)
-               return 0;
-
-       rsa = EVP_PKEY_get1_RSA (pkey);
-       if (!rsa)
-               return 0;
-
-       ret = i2d_RSA_PUBKEY (rsa, &p);
-
-       RSA_free (rsa);
-       return ret;
-
-}