#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, 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)
{
size_t len;
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;
-
-}