Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package perl-Crypt-OpenSSL-RSA for openSUSE:Factory checked in at 2022-07-14 16:33:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Crypt-OpenSSL-RSA (Old) and /work/SRC/openSUSE:Factory/.perl-Crypt-OpenSSL-RSA.new.1523 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Crypt-OpenSSL-RSA" Thu Jul 14 16:33:23 2022 rev:23 rq:988975 version:0.33 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Crypt-OpenSSL-RSA/perl-Crypt-OpenSSL-RSA.changes 2021-10-20 20:23:05.465333882 +0200 +++ /work/SRC/openSUSE:Factory/.perl-Crypt-OpenSSL-RSA.new.1523/perl-Crypt-OpenSSL-RSA.changes 2022-07-14 16:33:29.672584119 +0200 @@ -1,0 +2,18 @@ +Sat Jul 9 03:06:13 UTC 2022 - Tina M??ller <timueller+p...@suse.de> + +- updated to 0.33 + see /usr/share/doc/packages/perl-Crypt-OpenSSL-RSA/Changes + + 0.33 July 7 2022 + - Update for windows github CI + - Remove duplicit 'LICENSE' key + - Remove EUMM Remove version check + - #31 by removing reference to RSA_SSLV23_PADDING (removed from OpenSSL starting from v3.0.0) + - support passphase protected private key load + - fix 'unsupported encryption' error on old library versions + - Clarify croak message for missing passphrase on older cyphers + - More structs opaqued in LibreSSL 3.5 + - Use a macro for dealing with older SSL lacking macros + - more CI fixups. Drop testing for 5.10 and 5.8. Something is broken upstream. + +------------------------------------------------------------------- Old: ---- Crypt-OpenSSL-RSA-0.32.tar.gz New: ---- Crypt-OpenSSL-RSA-0.33.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Crypt-OpenSSL-RSA.spec ++++++ --- /var/tmp/diff_new_pack.27iSAH/_old 2022-07-14 16:33:30.124584543 +0200 +++ /var/tmp/diff_new_pack.27iSAH/_new 2022-07-14 16:33:30.128584547 +0200 @@ -1,7 +1,7 @@ # # spec file for package perl-Crypt-OpenSSL-RSA # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,15 +18,14 @@ %define cpan_name Crypt-OpenSSL-RSA Name: perl-Crypt-OpenSSL-RSA -Version: 0.32 +Version: 0.33 Release: 0 -Summary: RSA encoding and decoding, using the openSSL libraries License: Artistic-1.0 OR GPL-1.0-or-later +Summary: RSA encoding and decoding, using the openSSL libraries URL: https://metacpan.org/release/%{cpan_name} Source0: https://cpan.metacpan.org/authors/id/T/TO/TODDR/%{cpan_name}-%{version}.tar.gz Source1: cpanspec.yml Patch0: Crypt-OpenSSL-RSA.patch -BuildRequires: openssl-devel BuildRequires: perl BuildRequires: perl-macros BuildRequires: perl(Crypt::OpenSSL::Guess) >= 0.11 @@ -34,6 +33,9 @@ Requires: perl(Crypt::OpenSSL::Random) Recommends: perl(Crypt::OpenSSL::Bignum) %{perl_requires} +# MANUAL BEGIN +BuildRequires: openssl-devel +# MANUAL END %description 'Crypt::OpenSSL::RSA' provides the ability to RSA encrypt strings which are @@ -46,7 +48,7 @@ documented) behavior is no longer the case. %prep -%autosetup -n %{cpan_name}-%{version} +%autosetup -n %{cpan_name}-%{version} -p1 %build perl Makefile.PL INSTALLDIRS=vendor OPTIMIZE="%{optflags}" ++++++ Crypt-OpenSSL-RSA-0.32.tar.gz -> Crypt-OpenSSL-RSA-0.33.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Crypt-OpenSSL-RSA-0.32/Changes new/Crypt-OpenSSL-RSA-0.33/Changes --- old/Crypt-OpenSSL-RSA-0.32/Changes 2021-09-08 17:49:07.000000000 +0200 +++ new/Crypt-OpenSSL-RSA-0.33/Changes 2022-07-08 02:46:41.000000000 +0200 @@ -1,5 +1,17 @@ Revision history for Perl extension Crypt::OpenSSL::RSA. +0.33 July 7 2022 + - Update for windows github CI + - Remove duplicit 'LICENSE' key + - Remove EUMM Remove version check + - #31 by removing reference to RSA_SSLV23_PADDING (removed from OpenSSL starting from v3.0.0) + - support passphase protected private key load + - fix 'unsupported encryption' error on old library versions + - Clarify croak message for missing passphrase on older cyphers + - More structs opaqued in LibreSSL 3.5 + - Use a macro for dealing with older SSL lacking macros + - more CI fixups. Drop testing for 5.10 and 5.8. Something is broken upstream. + 0.32 Wed Sep 8 2021 - Prefix internal bn2sv function so it doesn't collide with Net::SSLeay - Ensure that verify() leaves openssl error stack clean on failure diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Crypt-OpenSSL-RSA-0.32/META.json new/Crypt-OpenSSL-RSA-0.33/META.json --- old/Crypt-OpenSSL-RSA-0.32/META.json 2021-09-08 17:49:08.000000000 +0200 +++ new/Crypt-OpenSSL-RSA-0.33/META.json 2022-07-08 02:46:41.000000000 +0200 @@ -56,6 +56,6 @@ "url" : "http://github.com/toddr/Crypt-OpenSSL-RSA" } }, - "version" : "0.32", + "version" : "0.33", "x_serialization_backend" : "JSON::PP version 4.04" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Crypt-OpenSSL-RSA-0.32/META.yml new/Crypt-OpenSSL-RSA-0.33/META.yml --- old/Crypt-OpenSSL-RSA-0.32/META.yml 2021-09-08 17:49:08.000000000 +0200 +++ new/Crypt-OpenSSL-RSA-0.33/META.yml 2022-07-08 02:46:41.000000000 +0200 @@ -30,5 +30,5 @@ homepage: http://github.com/toddr/Crypt-OpenSSL-RSA license: http://dev.perl.org/licenses/ repository: http://github.com/toddr/Crypt-OpenSSL-RSA -version: '0.32' +version: '0.33' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Crypt-OpenSSL-RSA-0.32/Makefile.PL new/Crypt-OpenSSL-RSA-0.33/Makefile.PL --- old/Crypt-OpenSSL-RSA-0.32/Makefile.PL 2021-09-08 17:49:02.000000000 +0200 +++ new/Crypt-OpenSSL-RSA-0.33/Makefile.PL 2022-07-08 02:46:41.000000000 +0200 @@ -10,13 +10,13 @@ WriteMakefile( 'NAME' => 'Crypt::OpenSSL::RSA', - AUTHOR => 'Ian Robertson <irobe...@cpan.org>', + 'AUTHOR' => 'Ian Robertson <irobe...@cpan.org>', 'VERSION_FROM' => 'RSA.pm', # finds $VERSION 'DISTNAME' => 'Crypt-OpenSSL-RSA', 'ABSTRACT_FROM' => 'RSA.pm', 'MIN_PERL_VERSION' => 5.006, 'PL_FILES' => {}, - ( $ExtUtils::MakeMaker::VERSION >= 6.3002 ? ( 'LICENSE' => 'perl', ) : () ), + 'LICENSE' => 'perl', 'PREREQ_PM' => { 'Crypt::OpenSSL::Random' => 0, 'Test::More' => 0, @@ -30,29 +30,21 @@ 'dist' => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, 'clean' => { FILES => 'Crypt-OpenSSL-RSA-*' }, - ( $ExtUtils::MakeMaker::VERSION >= 6.3002 ? ( 'LICENSE' => 'perl', ) : () ), - ( - $ExtUtils::MakeMaker::VERSION >= 6.46 - ? ( - 'META_MERGE' => { - recommends => { - 'Crypt::OpenSSL::Bignum' => 0, - }, - configure_requires => { - 'Crypt::OpenSSL::Guess' => '0.11', - }, - build_requires => { - 'Test' => 0, # For testing - }, - resources => { - 'license' => 'http://dev.perl.org/licenses/', - 'homepage' => 'http://github.com/toddr/Crypt-OpenSSL-RSA', - 'bugtracker' => 'https://github.com/toddr/Crypt-OpenSSL-RSA/issues', - 'repository' => 'http://github.com/toddr/Crypt-OpenSSL-RSA', - } - } - ) - : () - ), + 'META_MERGE' => { + recommends => { + 'Crypt::OpenSSL::Bignum' => 0, + }, + configure_requires => { + 'Crypt::OpenSSL::Guess' => '0.11', + }, + build_requires => { + 'Test' => 0, # For testing + }, + resources => { + 'license' => 'http://dev.perl.org/licenses/', + 'homepage' => 'http://github.com/toddr/Crypt-OpenSSL-RSA', + 'bugtracker' => 'https://github.com/toddr/Crypt-OpenSSL-RSA/issues', + 'repository' => 'http://github.com/toddr/Crypt-OpenSSL-RSA', + } + } ); - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Crypt-OpenSSL-RSA-0.32/RSA.pm new/Crypt-OpenSSL-RSA-0.33/RSA.pm --- old/Crypt-OpenSSL-RSA-0.32/RSA.pm 2021-09-08 17:49:02.000000000 +0200 +++ new/Crypt-OpenSSL-RSA-0.33/RSA.pm 2022-07-08 02:46:41.000000000 +0200 @@ -5,7 +5,7 @@ use Carp; # Removing carp will break the XS code. -our $VERSION = '0.32'; +our $VERSION = '0.33'; our $AUTOLOAD; use AutoLoader 'AUTOLOAD'; @@ -37,7 +37,6 @@ Crypt::OpenSSL::Random::random_seed($good_entropy); Crypt::OpenSSL::RSA->import_random_seed(); $rsa_pub = Crypt::OpenSSL::RSA->new_public_key($key_string); - $rsa_pub->use_sslv23_padding(); # use_pkcs1_oaep_padding is the default $ciphertext = $rsa->encrypt($plaintext); $rsa_priv = Crypt::OpenSSL::RSA->new_private_key($key_string); @@ -103,6 +102,16 @@ C<-----BEGIN...-----> and C<-----END...-----> lines. The padding is set to PKCS1_OAEP, but can be changed with C<use_xxx_padding>. +An optional parameter can be passed for passphase protected private key: + +=over + +=item passphase + +The passphase which protects the private key. + +=back + =item generate_key Create a new C<Crypt::OpenSSL::RSA> object by constructing a @@ -180,6 +189,22 @@ -----BEGIN RSA PRIVATE KEY------ -----END RSA PRIVATE KEY------ +2 optional parameters can be passed for passphase protected private key +string: + +=over + +=item passphase + +The passphase which protects the private key. + +=item cipher name + +The cipher algorithm used to protect the private key. Default to +'des3'. + +=back + =item encrypt Encrypt a binary "string" using the public (portion of the) key. @@ -228,6 +253,8 @@ Use C<PKCS #1 v1.5> padding with an SSL-specific modification that denotes that the server is SSL3 capable. +Not available since OpenSSL 3. + =item use_md5_hash Use the RFC 1321 MD5 hashing algorithm by Ron Rivest when signing and @@ -324,11 +351,11 @@ =head1 SEE ALSO -L<perl(1)>, L<Crypt::OpenSSL::Random>, L<Crypt::OpenSSL::Bignum>, -L<rsa(3)>, L<RSA_new(3)|http://man.he.net/?topic=RSA_new§ion=3>, -L<RSA_public_encrypt(3)|http://man.he.net/?topic=RSA_public_encrypt§ion=3>, +L<perl(1)>, L<Crypt::OpenSSL::Random>, L<Crypt::OpenSSL::Bignum>, +L<rsa(3)>, L<RSA_new(3)|http://man.he.net/?topic=RSA_new§ion=3>, +L<RSA_public_encrypt(3)|http://man.he.net/?topic=RSA_public_encrypt§ion=3>, L<RSA_size(3)|http://man.he.net/?topic=RSA_size§ion=3>, -L<RSA_generate_key(3)|http://man.he.net/?topic=RSA_generate_key§ion=3>, +L<RSA_generate_key(3)|http://man.he.net/?topic=RSA_generate_key§ion=3>, L<RSA_check_key(3)|http://man.he.net/?topic=RSA_check_key§ion=3> =cut diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Crypt-OpenSSL-RSA-0.32/RSA.xs new/Crypt-OpenSSL-RSA-0.33/RSA.xs --- old/Crypt-OpenSSL-RSA-0.32/RSA.xs 2021-09-08 17:49:02.000000000 +0200 +++ new/Crypt-OpenSSL-RSA-0.33/RSA.xs 2022-07-08 02:46:41.000000000 +0200 @@ -13,6 +13,7 @@ #include <openssl/rsa.h> #include <openssl/sha.h> #include <openssl/ssl.h> +#include <openssl/evp.h> typedef struct { @@ -29,6 +30,8 @@ #define PACKAGE_NAME "Crypt::OpenSSL::RSA" +#define OLD_CRUFTY_SSL_VERSION (OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x03050000fL)) + void croakSsl(char* p_file, int p_line) { const char* errorReason; @@ -50,7 +53,7 @@ char _is_private(rsaData* p_rsa) { const BIGNUM *d; -#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined LIBRESSL_VERSION_NUMBER +#if OLD_CRUFTY_SSL_VERSION d = p_rsa->rsa->d; #else RSA_get0_key(p_rsa->rsa, NULL, NULL, &d); @@ -174,19 +177,25 @@ } RSA* _load_rsa_key(SV* p_keyStringSv, - RSA*(*p_loader)(BIO*, RSA**, pem_password_cb*, void*)) + RSA*(*p_loader)(BIO*, RSA**, pem_password_cb*, void*), + SV* p_passphaseSv) { STRLEN keyStringLength; char* keyString; + char* passphase = NULL; RSA* rsa; BIO* stringBIO; keyString = SvPV(p_keyStringSv, keyStringLength); + if (SvPOK(p_passphaseSv)) { + passphase = SvPV_nolen(p_passphaseSv); + } + CHECK_OPEN_SSL(stringBIO = BIO_new_mem_buf(keyString, keyStringLength)); - rsa = p_loader(stringBIO, NULL, NULL, NULL); + rsa = p_loader(stringBIO, NULL, NULL, passphase); CHECK_OPEN_SSL(BIO_set_close(stringBIO, BIO_CLOSE) == 1); BIO_free(stringBIO); @@ -227,15 +236,23 @@ PROTOTYPES: DISABLE BOOT: +#if OPENSSL_VERSION_NUMBER < 0x10100000L + # might introduce memory leak without calling EVP_cleanup() on exit + # see https://wiki.openssl.org/index.php/Library_Initialization ERR_load_crypto_strings(); + OpenSSL_add_all_algorithms(); +#else + # NOOP +#endif SV* -new_private_key(proto, key_string_SV) +new_private_key(proto, key_string_SV, passphase_SV=&PL_sv_undef) SV* proto; SV* key_string_SV; + SV* passphase_SV; CODE: RETVAL = make_rsa_obj( - proto, _load_rsa_key(key_string_SV, PEM_read_bio_RSAPrivateKey)); + proto, _load_rsa_key(key_string_SV, PEM_read_bio_RSAPrivateKey, passphase_SV)); OUTPUT: RETVAL @@ -245,7 +262,7 @@ SV* key_string_SV; CODE: RETVAL = make_rsa_obj( - proto, _load_rsa_key(key_string_SV, PEM_read_bio_RSAPublicKey)); + proto, _load_rsa_key(key_string_SV, PEM_read_bio_RSAPublicKey, &PL_sv_undef)); OUTPUT: RETVAL @@ -255,7 +272,7 @@ SV* key_string_SV; CODE: RETVAL = make_rsa_obj( - proto, _load_rsa_key(key_string_SV, PEM_read_bio_RSA_PUBKEY)); + proto, _load_rsa_key(key_string_SV, PEM_read_bio_RSA_PUBKEY, &PL_sv_undef)); OUTPUT: RETVAL @@ -267,14 +284,37 @@ Safefree(p_rsa); SV* -get_private_key_string(p_rsa) +get_private_key_string(p_rsa, passphase_SV=&PL_sv_undef, cipher_name_SV=&PL_sv_undef) rsaData* p_rsa; + SV* passphase_SV; + SV* cipher_name_SV; PREINIT: BIO* stringBIO; + char* passphase = NULL; + STRLEN passphaseLength = 0; + char* cipher_name; + const EVP_CIPHER* enc = NULL; CODE: + if (SvPOK(cipher_name_SV) && !SvPOK(passphase_SV)) { + croak("Passphrase is required for cipher"); + } + if (SvPOK(passphase_SV)) { + passphase = SvPV(passphase_SV, passphaseLength); + if (SvPOK(cipher_name_SV)) { + cipher_name = SvPV_nolen(cipher_name_SV); + } + else { + cipher_name = "des3"; + } + enc = EVP_get_cipherbyname(cipher_name); + if (enc == NULL) { + croak("Unsupported cipher: %s", cipher_name); + } + } + CHECK_OPEN_SSL(stringBIO = BIO_new(BIO_s_mem())); PEM_write_bio_RSAPrivateKey( - stringBIO, p_rsa->rsa, NULL, NULL, 0, NULL, NULL); + stringBIO, p_rsa->rsa, enc, passphase, passphaseLength, NULL, NULL); RETVAL = extractBioString(stringBIO); OUTPUT: @@ -357,7 +397,7 @@ croak("At least a modulus and public key must be provided"); } CHECK_OPEN_SSL(rsa = RSA_new()); -#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined LIBRESSL_VERSION_NUMBER +#if OLD_CRUFTY_SSL_VERSION rsa->n = n; rsa->e = e; #endif @@ -375,7 +415,7 @@ q = BN_new(); THROW(BN_div(q, NULL, n, p, ctx)); } -#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined LIBRESSL_VERSION_NUMBER +#if OLD_CRUFTY_SSL_VERSION rsa->p = p; rsa->q = q; #else @@ -391,7 +431,7 @@ THROW(BN_mul(d, p_minus_1, q_minus_1, ctx)); THROW(BN_mod_inverse(d, e, d, ctx)); } -#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined LIBRESSL_VERSION_NUMBER +#if OLD_CRUFTY_SSL_VERSION rsa->d = d; #else THROW(RSA_set0_key(rsa, n, e, d)); @@ -402,7 +442,7 @@ THROW(BN_mod(dmq1, d, q_minus_1, ctx)); THROW(iqmp = BN_new()); THROW(BN_mod_inverse(iqmp, q, p, ctx)); -#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined LIBRESSL_VERSION_NUMBER +#if OLD_CRUFTY_SSL_VERSION rsa->dmp1 = dmp1; rsa->dmq1 = dmq1; rsa->iqmp = iqmp; @@ -426,7 +466,7 @@ } else { -#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined LIBRESSL_VERSION_NUMBER +#if OLD_CRUFTY_SSL_VERSION rsa->d = d; #else CHECK_OPEN_SSL(RSA_set0_key(rsa, n, e, d)); @@ -453,7 +493,7 @@ { RSA* rsa; rsa = p_rsa->rsa; -#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined LIBRESSL_VERSION_NUMBER +#if OLD_CRUFTY_SSL_VERSION n = rsa->n; e = rsa->e; d = rsa->d; @@ -640,12 +680,16 @@ CODE: p_rsa->padding = RSA_PKCS1_OAEP_PADDING; +#if OPENSSL_VERSION_NUMBER < 0x30000000L + void use_sslv23_padding(p_rsa) rsaData* p_rsa; CODE: p_rsa->padding = RSA_SSLV23_PADDING; +#endif + # Sign text. Returns the signature. SV* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Crypt-OpenSSL-RSA-0.32/t/format.t new/Crypt-OpenSSL-RSA-0.33/t/format.t --- old/Crypt-OpenSSL-RSA-0.32/t/format.t 2021-09-08 17:49:02.000000000 +0200 +++ new/Crypt-OpenSSL-RSA-0.33/t/format.t 2022-07-08 02:46:41.000000000 +0200 @@ -3,7 +3,7 @@ use Crypt::OpenSSL::RSA; -BEGIN { plan tests => 10 } +BEGIN { plan tests => 19 } my $PRIVATE_KEY_STRING = <<EOF; -----BEGIN RSA PRIVATE KEY----- @@ -23,7 +23,47 @@ -----END PUBLIC KEY----- EOF -my ( $private_key, $public_key ); +# openssl genrsa -des3 -passout pass:123456 1024 +my $ENCRYPT_PRIVATE_KEY_STRING = <<EOF; +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,319C89EE262DB309 + +FPj3QbILNMiDvpoSkA38WZnjvjH+c2b5lKdge0mXJu2k3ZnbM+D51RL/iCTbItsU +Pgw1pjB7w2pkapSwdwzOwbsaiznLF9S8fj4XxDYWuWAlPGAwk6GA8YxAaCIbpSkr +QdJoDAsdaIBj1JA73C8HCtnw7h5dN3VLZfwmJVcFeSddz1S5MgN5tgD6YyIhdVwe +0tlQ3Jk4/j80MzgBoJlkKccVurnUVUKw6S5RkVd91tAj7WXlqepuGV4a1X4JtFpV +KUNlNt8Hrnf6zq5mNqHqLtXtDpVWj9zW7FIYFqXiq37VKr5qJ8s8RI/ACQK2q7E/ +rJTXqoZFg2fpVW4CDO1Rpm3HF3k8hzCpVFYHHI6j0qmLl7YY5aSKUqFaVIv3O9so +w/dXO1jWLxiQH1rijl1GBdg86012CtT5hwQbetUjo2leaq5hxdHo0ynXM0Q8aYPU +I/QUGJvDW5gHE0n6aKQxfWq9OfhraqBKF/SA6S7aHdk7lrjsJPAxa0IGJfO0O471 +SjXj6HHuL376r0KQmDAO4qXpckzfthztwRqDGpdStTVdD+iDOD7NbRW5OJZTvjvM +/866bpy5py65E6DtQJDAi2NHwQHbV4KEGlocavJybQ7Smaf2JSOMg4DKRwyIQucw +KdgWUX1Brg70pd8Zr/iGpvE1I7bBWzNbwGbO51srKD+0uZMBz3dwJ0iVrbBInSFW +UOviCyfFSHIyA5gWxi7ccQYfFj71FH5//4dJOLlh1FtNEYaNod57jE9yDtUPEunQ +Kg+us0d7vFPttZ5QfBq5yP1povSTgITcXLjjkBxJVvqH0exmSIA22w== +-----END RSA PRIVATE KEY----- +EOF + +my $DECRYPT_PRIVATE_KEY_STRING = <<EOF; +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQC9KazkIUqBOg6QBQJTItC5XBhQYyf+ohQZHsQ/f1URKOYtqsv9 +VtKBSxc7ObSw9ctWEca8VWqqV2Xfmika5XCC/t91Sx8QLO9UAO2ycQeHSFjoYZ18 +ch4Ostgmkbr1blbEDPCFCyIJFb3UzhX5raCIfIByWOvtkXKWuKDkPZD6VQIDAQAB +AoGBALxoFP7HtciOhdCmXJFnfNMSSllO2ZgB4NjATyEbdyP3Q4O6uSCkaFhE7Wec +6z7SIeuhGvuca/grwpj6l/RlEDCBYWk1JXJCAvnJkoBCwW70thOXFJ0gDfrJq3Co +GWntC/fdkv6HJx1axQF3xn9oDVHIn0fscS7D6FzN1jwSgRLhAkEA7kJt09/OlUnY +pV/9iVvswnnSsxEanoLchzA1bAaDNa9vkIU/BrFwQO9ctw+RQbHrvc/5KPbZoGsq +bfQ/wOXUnQJBAMs/ZGlziX19lOEGfziugMR33ybLxkBS7qcrpBebAED/8etijASp +LgMEOKeRz11WAVJJ5A4wi1yxD4fnBxp44xkCQG4RejNbPVByYQdlJPeD5Aijxta6 +nBWGVuKNPuC80XjHpz6Yj9lDt5wH+EkJhA1ZaJKztWNbRoZ5e4x4PcubYXECQHA0 +KubcVcblkU85Gvrbu1K7KoJsdKIGJqI7QXeWpmk74v4jhVD9ZN1dczlvEZ9hX5Fi +IXiD7Cvbw8svC4jdu+ECQQCw1ZlQPz2rGE+pFQiKOFPprH+pT+zkINh1d83jeMYd +GG7hKgfQB5J/B0u8/XzEtGnCq8m0xTADx2eplIoKhAFi +-----END RSA PRIVATE KEY----- +EOF + +my ( $private_key, $public_key, $private_key2 ); ok( $private_key = Crypt::OpenSSL::RSA->new_private_key($PRIVATE_KEY_STRING) ); ok( $PRIVATE_KEY_STRING eq $private_key->get_private_key_string() ); @@ -37,3 +77,14 @@ ok( $public_key = Crypt::OpenSSL::RSA->new_public_key($PUBLIC_KEY_X509_STRING) ); ok( $PUBLIC_KEY_PKCS1_STRING eq $public_key->get_public_key_string() ); ok( $PUBLIC_KEY_X509_STRING eq $public_key->get_public_key_x509_string() ); + +my $passphase = '123456'; +ok( $private_key = Crypt::OpenSSL::RSA->new_private_key($ENCRYPT_PRIVATE_KEY_STRING, $passphase) ); +ok( $DECRYPT_PRIVATE_KEY_STRING eq $private_key->get_private_key_string() ); +ok( $private_key = Crypt::OpenSSL::RSA->new_private_key($DECRYPT_PRIVATE_KEY_STRING) ); +ok( $private_key2 = Crypt::OpenSSL::RSA->new_private_key($private_key->get_private_key_string($passphase), $passphase) ); +ok( $DECRYPT_PRIVATE_KEY_STRING eq $private_key2->get_private_key_string() ); +ok( $private_key2 = Crypt::OpenSSL::RSA->new_private_key($private_key->get_private_key_string($passphase, 'des3'), $passphase) ); +ok( $DECRYPT_PRIVATE_KEY_STRING eq $private_key2->get_private_key_string() ); +ok( $private_key2 = Crypt::OpenSSL::RSA->new_private_key($private_key->get_private_key_string($passphase, 'aes-128-cbc'), $passphase) ); +ok( $DECRYPT_PRIVATE_KEY_STRING eq $private_key2->get_private_key_string() ); \ No newline at end of file