Lemonldap-NG-Common
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Lemonldap/NG/Common/Util/Crypto.pm view on Meta::CPAN
use Digest::MD5 qw(md5_base64);
use Convert::PEM;
use Net::SSLeay;
sub genRsaKey {
my ( $key_size, $password ) = @_;
my $rsa = Crypt::OpenSSL::RSA->generate_key( $key_size );
my $keys = {
'private' => $rsa->get_private_key_string(),
'public' => $rsa->get_public_key_x509_string(),
'hash' => md5_base64( $rsa->get_public_key_string() ),
};
if ( $password ) {
my $pem = Convert::PEM->new(
Name => 'RSA PRIVATE KEY',
ASN => q(
RSAPrivateKey SEQUENCE {
version INTEGER,
n INTEGER,
t/71-Util-Crypto.t view on Meta::CPAN
BEGIN { use_ok('Lemonldap::NG::Common::Util::Crypto') }
use Crypt::OpenSSL::RSA;
use Crypt::OpenSSL::X509;
# Use small key size to avoid burning too much CPU
our $key_size = 1024;
subtest "Check genRsaKey" => sub {
my ( $result, $checkpriv, $checkpub );
$result = Lemonldap::NG::Common::Util::Crypto::genRsaKey($key_size);
$checkpriv = Crypt::OpenSSL::RSA->new_private_key( $result->{private} );
$checkpub = Crypt::OpenSSL::RSA->new_public_key( $result->{public} );
is( $checkpriv->size * 8, $key_size, "Correct key size" );
is(
$checkpriv->get_public_key_string(),
$checkpub->get_public_key_string(),
'Public key matches private key'
);
ok( $result->{hash}, "Hash is non empty" );
my $result =
Lemonldap::NG::Common::Util::Crypto::genRsaKey( $key_size, "mytestkey" );
SKIP: {
skip "Crypt::OpenSSL::RSA doesn't support loading key with passphrase"
if $Crypt::OpenSSL::RSA::VERSION < 0.33;
$checkpriv = Crypt::OpenSSL::RSA->new_private_key( $result->{private},
"mytestkey" );
$checkpub = Crypt::OpenSSL::RSA->new_public_key( $result->{public} );
is( $checkpriv->size * 8, $key_size, "Correct key size" );
is(
$checkpriv->get_public_key_string(),
$checkpub->get_public_key_string(),
'Public key matches private key'
);
ok( $result->{hash}, "Hash is non empty" );
}
};
subtest "Check genCertKey" => sub {
my ( $result, $checkpriv, $checkpub, $checkcert );
$result = Lemonldap::NG::Common::Util::Crypto::genCertKey($key_size);
$checkpriv = Crypt::OpenSSL::RSA->new_private_key( $result->{private} );
$checkcert = Crypt::OpenSSL::X509->new_from_string( $result->{public},
Crypt::OpenSSL::X509::FORMAT_PEM );
$checkpub = Crypt::OpenSSL::RSA->new_public_key( $checkcert->pubkey() );
is( $checkpriv->size * 8, $key_size, "Correct key size" );
is(
$checkpriv->get_public_key_string(),
$checkpub->get_public_key_string(),
'Public key matches private key'
);
is( $checkcert->subject(), "CN=localhost", "Correct subject" );
ok( $result->{hash}, "Hash is non empty" );
SKIP: {
skip "Crypt::OpenSSL::RSA doesn't support loading key with passphrase"
if $Crypt::OpenSSL::RSA::VERSION < 0.33;
my $result = Lemonldap::NG::Common::Util::Crypto::genCertKey( $key_size,
"mytestkey" );
$checkpriv = Crypt::OpenSSL::RSA->new_private_key( $result->{private},
"mytestkey" );
$checkcert = Crypt::OpenSSL::X509->new_from_string( $result->{public},
Crypt::OpenSSL::X509::FORMAT_PEM );
$checkpub = Crypt::OpenSSL::RSA->new_public_key( $checkcert->pubkey() );
is( $checkpriv->size * 8, $key_size, "Correct key size" );
is(
$checkpriv->get_public_key_string(),
$checkpub->get_public_key_string(),
'Public key matches private key'
);
is( $checkcert->subject(), "CN=localhost", "Correct subject" );
ok( $result->{hash}, "Hash is non empty" );
}
my $result =
Lemonldap::NG::Common::Util::Crypto::genCertKey( $key_size, undef,
"example.com" );
$checkpriv = Crypt::OpenSSL::RSA->new_private_key( $result->{private} );
$checkcert = Crypt::OpenSSL::X509->new_from_string( $result->{public},
Crypt::OpenSSL::X509::FORMAT_PEM );
$checkpub = Crypt::OpenSSL::RSA->new_public_key( $checkcert->pubkey() );
is( $checkpriv->size * 8, $key_size, "Correct key size" );
is(
$checkpriv->get_public_key_string(),
$checkpub->get_public_key_string(),
'Public key matches private key'
);
is( $checkcert->subject(), "CN=example.com", "Correct subject" );
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.805 second using v1.00-cache-2.02-grep-82fe00e-cpan-5f49755563f )