The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Crypt::PK::RSA - Public key cryptography based on RSA

SYNOPSIS

 ### OO interface
 
 #Encryption: Alice
 my $pub = Crypt::PK::RSA->new('Bob_pub_rsa1.der'); 
 my $ct = $pub->encrypt("secret message");
 #
 #Encryption: Bob (received ciphertext $ct)
 my $priv = Crypt::PK::RSA->new('Bob_priv_rsa1.der');
 my $pt = $priv->decrypt($ct);
  
 #Signature: Alice
 my $priv = Crypt::PK::RSA->new('Alice_priv_rsa1.der');
 my $sig = $priv->sign($message);
 #
 #Signature: Bob (received $message + $sig)
 my $pub = Crypt::PK::RSA->new('Alice_pub_rsa1.der');
 $pub->verify($sig, $message) or die "ERROR";
 
 #Shared secret
 my $priv = Crypt::PK::RSA->new('Alice_priv_rsa1.der');
 my $pub = Crypt::PK::RSA->new('Bob_pub_rsa1.der'); 
 my $shared_secret = $priv->shared_secret($pub);

 #Key generation
 my $pk = Crypt::PK::RSA->new();
 $pk->generate_key(256, 65537);
 my $private_der = $pk->export_key_der('private');
 my $public_der = $pk->export_key_der('public');
 my $private_pem = $pk->export_key_pem('private');
 my $public_pem = $pk->export_key_pem('public');

 ### Functional interface
 
 #Encryption: Alice
 my $ct = rsa_encrypt('Bob_pub_rsa1.der', "secret message");
 #Encryption: Bob (received ciphertext $ct)
 my $pt = rsa_decrypt('Bob_priv_rsa1.der', $ct);
  
 #Signature: Alice
 my $sig = rsa_sign('Alice_priv_rsa1.der', $message);
 #Signature: Bob (received $message + $sig)
 rsa_verify('Alice_pub_rsa1.der', $sig, $message) or die "ERROR";
 
 #Shared secret
 my $shared_secret = rsa_shared_secret('Alice_priv_rsa1.der', 'Bob_pub_rsa1.der');

FUNCTIONS

rsa_encrypt

rsa_decrypt

rsa_sign

rsa_verify

rsa_shared_secret

METHODS

new

generate_key

 $pk->generate_key($size, $e);
 # $size .. (in bytes) 128 - 512
 # $e   ... 3, 17, 257 or 65537

import_key

export_key_der

export_key_pem

encrypt

 my $ct = $pk->encrypt($message);
 #or
 my $ct = $pk->encrypt($message, $padding);
 #or
 my $ct = $pk->encrypt($message, 'oaep', $hash_name, $lparam);
 
 # $padding .. 'oaep', 'v1.5' or 'none'
 # $hash_name (only for oaep) .. 'SHA1' (DEFAULT), 'SHA256' ...
 # $lparam (only for oaep)

decrypt

 my $pt = $pk->decrypt($ciphertext);
 #or
 my $pt = $pk->decrypt($ciphertext, $padding);
 #or
 my $pt = $pk->decrypt($ciphertext, 'oaep', $hash_name, $lparam);

sign

 my $signature = $priv->sign($message);
 #or
 my $signature = $priv->sign($message, $padding);
 #or
 my $signature = $priv->sign($message, $padding, $hash_name);
 #or
 my $signature = $priv->sign($message, $padding, $hash_name, $saltlen);
 
 # $padding .. 'pss' or 'v1.5'
 # $hash_name (only for pss) .. 'SHA1' (DEFAULT), 'SHA256' ...
 # $saltlen (only for pss) ..... DEFAULT: 12

verify

 my $valid = $pub->verify($signature, $message)
 #or
 my $valid = $pub->verify($signature, $padding, $hash_name);
 #or
 my $valid = $pub->verify($signature, $padding, $hash_name, $saltlen);

shared_secret

is_private

size