Crypt::PK::ECC - Public key cryptography based on EC
### OO interface #Encryption: Alice my $pub = Crypt::PK::ECC->new('Bob_pub_ecc1.der'); my $ct = $pub->encrypt("secret message"); # #Encryption: Bob (received ciphertext $ct) my $priv = Crypt::PK::ECC->new('Bob_priv_ecc1.der'); my $pt = $priv->decrypt($ct); #Signature: Alice my $priv = Crypt::PK::ECC->new('Alice_priv_ecc1.der'); my $sig = $priv->sign($message); # #Signature: Bob (received $message + $sig) my $pub = Crypt::PK::ECC->new('Alice_pub_ecc1.der'); $pub->verify($sig, $message) or die "ERROR"; #Shared secret my $priv = Crypt::PK::ECC->new('Alice_priv_ecc1.der'); my $pub = Crypt::PK::ECC->new('Bob_pub_ecc1.der'); my $shared_secret = $priv->shared_secret($pub); #Key generation my $pk = Crypt::PK::ECC->new(); $pk->generate_key(24); my $private_der = $pk->export_key_der('private'); my $public_der = $pk->export_key_der('public'); my $public_ansi_x963 = $pk->export_key_x963(); ### Functional interface #Encryption: Alice my $ct = ecc_encrypt('Bob_pub_ecc1.der', "secret message"); #Encryption: Bob (received ciphertext $ct) my $pt = ecc_decrypt('Bob_priv_ecc1.der', $ct); #Signature: Alice my $sig = ecc_sign('Alice_priv_ecc1.der', $message); #Signature: Bob (received $message + $sig) ecc_verify('Alice_pub_ecc1.der', $sig, $message) or die "ERROR"; #Shared secret my $shared_secret = ecc_shared_secret('Alice_priv_ecc1.der', 'Bob_pub_ecc1.der');
The module provides a set of core ECC functions as well that are designed to be the Elliptic Curve analogy of all of the Diffie-Hellman routines (ECDH).
Elliptic Curve Diffie-Hellman (ECDH) encryption.
ECCDH Encryption is performed by producing a random key, hashing it, and XOR'ing the digest against the plaintext.
Elliptic Curve Diffie-Hellman (ECDH) decryption
Elliptic Curve Digital Signature Algorithm (ECDSA) - signature generation
Elliptic Curve Digital Signature Algorithm (ECDSA) - signature verification
Elliptic curve Diffie-Hellman (ECDH) - construct a Diffie-Hellman shared secret with a private and public ECC key.
$pk->generate_key($keysize); # $keysize .. key size in bytes: 14, 16, 20, 24, 28, 32, 48 or 65 # 14 => use curve SECP112R1 # 16 => use curve SECP128R1 # 20 => use curve SECP160R1 # 24 => use curve P-192 recommended by FIPS 186-3 # 28 => use curve P-224 recommended by FIPS 186-3 # 32 => use curve P-256 recommended by FIPS 186-3 # 48 => use curve P-384 recommended by FIPS 186-3 # 65 => use curve P-521 recommended by FIPS 186-3
See http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf and http://www.secg.org/collateral/sec2_final.pdf
ANSI X9.63 Import (public key only)
ANSI X9.63 Export (public key only)
To install CryptX, copy and paste the appropriate command in to your terminal.
cpanm
cpanm CryptX
CPAN shell
perl -MCPAN -e shell install CryptX
For more information on module installation, please visit the detailed CPAN module installation guide.