mirror of
https://github.com/beard7n/bsdports.git
synced 2026-04-10 10:31:20 +02:00
109 lines
2.4 KiB
Plaintext
109 lines
2.4 KiB
Plaintext
--- ./RSA.xs.orig 2011-08-25 01:57:35.000000000 +0300
|
|
+++ ./RSA.xs 2017-03-24 23:24:34.644786000 +0200
|
|
@@ -179,6 +179,30 @@
|
|
return rsa;
|
|
}
|
|
|
|
+
|
|
+RSA* _load_enc_rsa_key(SV* p_keyStringSv,
|
|
+ RSA*(*p_loader)(BIO*, RSA**, pem_password_cb*, void*), const char* password)
|
|
+{
|
|
+ STRLEN keyStringLength;
|
|
+ char* keyString;
|
|
+
|
|
+ RSA* rsa;
|
|
+ BIO* stringBIO;
|
|
+
|
|
+ keyString = SvPV(p_keyStringSv, keyStringLength);
|
|
+
|
|
+ CHECK_OPEN_SSL(stringBIO = BIO_new_mem_buf(keyString, keyStringLength));
|
|
+
|
|
+ rsa = p_loader(stringBIO, NULL, NULL, password);
|
|
+
|
|
+ CHECK_OPEN_SSL(BIO_set_close(stringBIO, BIO_CLOSE) == 1);
|
|
+ BIO_free(stringBIO);
|
|
+
|
|
+ CHECK_OPEN_SSL(rsa);
|
|
+ return rsa;
|
|
+}
|
|
+
|
|
+
|
|
SV* rsa_crypt(rsaData* p_rsa, SV* p_from,
|
|
int (*p_crypt)(int, const unsigned char*, unsigned char*, RSA*, int))
|
|
{
|
|
@@ -214,7 +238,7 @@
|
|
ERR_load_crypto_strings();
|
|
|
|
SV*
|
|
-new_private_key(proto, key_string_SV)
|
|
+_new_private_key(proto, key_string_SV)
|
|
SV* proto;
|
|
SV* key_string_SV;
|
|
CODE:
|
|
@@ -223,6 +247,23 @@
|
|
OUTPUT:
|
|
RETVAL
|
|
|
|
+
|
|
+SV*
|
|
+_new_enc_private_key(proto, key_string_SV, password_SV)
|
|
+ SV* proto;
|
|
+ SV* key_string_SV;
|
|
+ SV* password_SV;
|
|
+ PREINIT:
|
|
+ char* password;
|
|
+ CODE:
|
|
+ password = SvPV_nolen(password_SV);
|
|
+
|
|
+ RETVAL = make_rsa_obj(
|
|
+ proto, _load_enc_rsa_key(key_string_SV, PEM_read_bio_RSAPrivateKey, password));
|
|
+ OUTPUT:
|
|
+ RETVAL
|
|
+
|
|
+
|
|
SV*
|
|
_new_public_key_pkcs1(proto, key_string_SV)
|
|
SV* proto;
|
|
@@ -251,7 +292,7 @@
|
|
Safefree(p_rsa);
|
|
|
|
SV*
|
|
-get_private_key_string(p_rsa)
|
|
+_get_private_key_string(p_rsa)
|
|
rsaData* p_rsa;
|
|
PREINIT:
|
|
BIO* stringBIO;
|
|
@@ -264,6 +305,32 @@
|
|
OUTPUT:
|
|
RETVAL
|
|
|
|
+
|
|
+SV*
|
|
+_get_enc_private_key_string(p_rsa, passout_SV, cipher_SV)
|
|
+ rsaData* p_rsa;
|
|
+ SV* passout_SV;
|
|
+ SV* cipher_SV;
|
|
+ PREINIT:
|
|
+ char* passout;
|
|
+ char* cipher;
|
|
+
|
|
+ BIO* stringBIO;
|
|
+ const EVP_CIPHER *enc;
|
|
+ CODE:
|
|
+ passout = SvPV_nolen(passout_SV);
|
|
+ cipher = SvPV_nolen(cipher_SV);
|
|
+
|
|
+ CHECK_OPEN_SSL(stringBIO = BIO_new(BIO_s_mem()));
|
|
+ enc = EVP_get_cipherbyname(cipher);
|
|
+ if (enc == NULL) { enc = EVP_get_cipherbyname("DES3"); }
|
|
+ PEM_write_bio_RSAPrivateKey(
|
|
+ stringBIO, p_rsa->rsa, enc, NULL, 0, NULL, passout);
|
|
+ RETVAL = extractBioString(stringBIO);
|
|
+
|
|
+ OUTPUT:
|
|
+ RETVAL
|
|
+
|
|
SV*
|
|
get_public_key_string(p_rsa)
|
|
rsaData* p_rsa;
|