Crypt::Cipher - Generic interface to cipher functions

NAME  SYNOPSIS  DESCRIPTION  METHODS  new  encrypt  decrypt  keysize  max_keysize  min_keysize  blocksize  default_rounds  SEE ALSO 

NAME

Crypt::Cipher − Generic interface to cipher functions

SYNOPSIS

#### example 1 (encrypting single block)
use Crypt::Cipher;
my $key = '...'; # length has to be valid key size for this cipher
my $c = Crypt::Cipher−>new('AES', $key);
my $blocksize = $c−>blocksize;
my $ciphertext = $c−>encrypt('plain text block'); #encrypt 1 block
my $plaintext = $c−>decrypt($ciphertext); #decrypt 1 block
### example 2 (using CBC mode)
use Crypt::Mode::CBC;
my $key = '...'; # length has to be valid key size for this cipher
my $iv = '...'; # 16 bytes
my $cbc = Crypt::Mode::CBC−>new('AES');
my $ciphertext = $cbc−>encrypt("secret data", $key, $iv);
#### example 3 (compatibility with Crypt::CBC)
use Crypt::CBC;
use Crypt::Cipher;
my $key = '...'; # length has to be valid key size for this cipher
my $iv = '...'; # 16 bytes
my $cipher = Crypt::Cipher('AES', $key);
my $cbc = Crypt::CBC−>new( −cipher=>$cipher, −iv=>$iv );
my $ciphertext = $cbc−>encrypt("secret data");

DESCRIPTION

Provides an interface to various symmetric cipher algorithms.

BEWARE: This module implements just elementary "one−block−(en|de)cryption" operation − if you want to encrypt/decrypt generic data you have to use some of the cipher block modes − check for example Crypt::Mode::CBC, Crypt::Mode::CTR or Crypt::CBC (which will be slower).

METHODS

new

Constructor, returns a reference to the cipher object.

## basic scenario
$d = Crypt::Cipher−>new($name, $key);
# $name = one of 'AES', 'Anubis', 'Blowfish', 'CAST5', 'Camellia', 'DES', 'DES_EDE',
# 'KASUMI', 'Khazad', 'MULTI2', 'Noekeon', 'RC2', 'RC5', 'RC6',
# 'SAFERP', 'SAFER_K128', 'SAFER_K64', 'SAFER_SK128', 'SAFER_SK64',
# 'SEED', 'Skipjack', 'Twofish', 'XTEA', 'IDEA', 'Serpent'
# simply any <NAME> for which there exists Crypt::Cipher::<NAME>
# $key = binary key (keysize should comply with selected cipher requirements)
## some of the ciphers (e.g. MULTI2, RC5, SAFER) allow one to set number of rounds
$d = Crypt::Cipher−>new('MULTI2', $key, $rounds);
# $rounds = positive integer (should comply with selected cipher requirements)

encrypt

Encrypts $plaintext and returns the $ciphertext where $plaintext and $ciphertext should be of blocksize bytes.

$ciphertext = $d−>encrypt($plaintext);

decrypt

Decrypts $ciphertext and returns the $plaintext where $plaintext and $ciphertext should be of blocksize bytes.

$plaintext = $d−>decrypt($ciphertext);

keysize

Just an alias for max_keysize (needed for Crypt::CBC compatibility).

max_keysize

Returns the maximal allowed key size (in bytes) for given cipher.

$d−>max_keysize;
#or
Crypt::Cipher−>max_keysize('AES');
#or
Crypt::Cipher::max_keysize('AES');

min_keysize

Returns the minimal allowed key size (in bytes) for given cipher.

$d−>min_keysize;
#or
Crypt::Cipher−>min_keysize('AES');
#or
Crypt::Cipher::min_keysize('AES');

blocksize

Returns block size (in bytes) for given cipher.

$d−>blocksize;
#or
Crypt::Cipher−>blocksize('AES');
#or
Crypt::Cipher::blocksize('AES');

default_rounds

Returns default number of rounds for given cipher. NOTE: only some ciphers (e.g. MULTI2, RC5, SAFER) allow one to set number of rounds via new().

$d−>default_rounds;
#or
Crypt::Cipher−>default_rounds('AES');
#or
Crypt::Cipher::default_rounds('AES');

SEE ALSO

CryptX

Check subclasses like Crypt::Cipher::AES, Crypt::Cipher::Blowfish, ...


Updated 2024-01-29 - jenkler.se | uex.se