CryptX
view release on metacpan or search on metacpan
lib/Crypt/PK/RSA.pm view on Meta::CPAN
$key = __PACKAGE__->new($key) unless ref $key;
croak "FATAL: invalid 'key' param" unless ref($key) eq __PACKAGE__;
return $key->encrypt(@_);
}
sub rsa_decrypt { # legacy/obsolete
my $key = shift;
local $SIG{__DIE__} = \&CryptX::_croak;
$key = __PACKAGE__->new($key) unless ref $key;
croak "FATAL: invalid 'key' param" unless ref($key) eq __PACKAGE__;
return $key->decrypt(@_);
}
sub rsa_sign_hash { # legacy/obsolete
my $key = shift;
local $SIG{__DIE__} = \&CryptX::_croak;
$key = __PACKAGE__->new($key) unless ref $key;
croak "FATAL: invalid 'key' param" unless ref($key) eq __PACKAGE__;
return $key->sign_hash(@_);
}
sub rsa_verify_hash { # legacy/obsolete
my $key = shift;
local $SIG{__DIE__} = \&CryptX::_croak;
$key = __PACKAGE__->new($key) unless ref $key;
croak "FATAL: invalid 'key' param" unless ref($key) eq __PACKAGE__;
return $key->verify_hash(@_);
}
sub rsa_sign_message { # legacy/obsolete
my $key = shift;
local $SIG{__DIE__} = \&CryptX::_croak;
$key = __PACKAGE__->new($key) unless ref $key;
croak "FATAL: invalid 'key' param" unless ref($key) eq __PACKAGE__;
return $key->sign_message(@_);
}
sub rsa_verify_message { # legacy/obsolete
my $key = shift;
local $SIG{__DIE__} = \&CryptX::_croak;
$key = __PACKAGE__->new($key) unless ref $key;
croak "FATAL: invalid 'key' param" unless ref($key) eq __PACKAGE__;
return $key->verify_message(@_);
}
sub CLONE_SKIP { 1 } # prevent cloning
1;
=pod
=head1 NAME
Crypt::PK::RSA - Public key cryptography based on RSA
=head1 SYNOPSIS
### OO interface
my $message = 'hello world';
my $private_key = Crypt::PK::RSA->new();
$private_key->generate_key(256, 65537);
my $public_der = $private_key->export_key_der('public');
my $public_key = Crypt::PK::RSA->new(\$public_der);
my $ciphertext = $public_key->encrypt($message);
my $plaintext = $private_key->decrypt($ciphertext);
my $signature = $private_key->sign_message($message);
$public_key->verify_message($signature, $message) or die "ERROR";
my $private_der = $private_key->export_key_der('private');
my $private_pem = $private_key->export_key_pem('private');
my $public_pem = $public_key->export_key_pem('public');
=head1 DESCRIPTION
The module provides a full featured RSA implementation.
Legacy function-style wrappers still exist in code for backwards compatibility,
but they are intentionally undocumented.
=head1 METHODS
=head2 new
my $source = Crypt::PK::RSA->new();
$source->generate_key(256, 65537);
my $public_der = $source->export_key_der('public');
my $pub = Crypt::PK::RSA->new(\$public_der);
my $private_pem = $source->export_key_pem('private', 'secret', 'AES-256-CBC');
my $priv = Crypt::PK::RSA->new(\$private_pem, 'secret');
Passing C<$filename> or C<\$buffer> to C<new> is equivalent: both forms
immediately import the key material into the new object.
=head2 generate_key
Uses the bundled C<chacha20> PRNG via libtomcrypt's C<rng_make_prng>.
Returns the object itself (for chaining).
$pk->generate_key($size, $e);
# $size .. [integer] key size: 128-512 bytes (DEFAULT is 256)
# $e ..... [integer] exponent: 3, 17, 257 or 65537 (DEFAULT is 65537)
The C<$size> and C<$e> arguments use Perl's usual numeric-to-integer coercion
before reaching the XS layer. Pass exact integers; values like C<10.9> or
C<"1e2"> are coerced rather than rejected.
=head2 import_key
Loads private or public key in DER or PEM format.
my $source = Crypt::PK::RSA->new();
$source->generate_key(256, 65537);
my $public_der = $source->export_key_der('public');
my $pub = Crypt::PK::RSA->new();
$pub->import_key(\$public_der);
my $private_pem = $source->export_key_pem('private', 'secret', 'AES-256-CBC');
my $priv = Crypt::PK::RSA->new();
$priv->import_key(\$private_pem, 'secret');
The same method also accepts filenames instead of buffers.
Loading private or public keys from a Perl HASH:
$pk->import_key($hashref);
# the $hashref is either a key exported via key2hash
( run in 0.921 second using v1.01-cache-2.11-cpan-d8267643d1d )