Crypt::Rijndael_PP - Perl implementation of Rijndael


Crypt-Rijndael_PP documentation  | view source Contained in the Crypt-Rijndael_PP distribution.

Index


NAME

Top

Crypt::Rijndael_PP - Perl implementation of Rijndael

DISCLAIMER

Top

This is a pure perl implementation of the new AES Rijndael. You want to use Crypt::Rijndael where available. This implementation is really slow, but I am working on it.

SYNOPSIS

Top

 # Functional style
 use Crypt::Rijndael_PP ':all';

 $key = '1234567890ABCDEF' x 4; # 256bit hex number

 # keysize = 256bit, blocksize = 128bit
 $c_txt = rijndael_encrypt($key, MODE_CBC, $data,  256, 128);
 $p_txt = rijndael_decrypt($key, MODE_CBC, $c_txt, 256, 128);




 # OO style
 # same interface as Crypt::Rijndael
 use Crypt::Rijndael_PP;

 $cipher = Crypt::Rijndael_PP->new( pack('H*', $key), MODE_CBC );

 $c_txt = $cipher->encrypt($data);
 $p_txt = $cipher->decrypt($c_txt);

DESCRIPTION

Top

This modules shares the OO style interface with Crypt::Rijndael from Rafael R. Sevilla.

Supported modes: Electronic CodeBook (MODE_ECB) and Cipher Block Chaining (MODE_CBC). Please use Crypt::CBC for CBC-Mode, as my CBC is not compatible with neither Crypt::CBC nor Crypt::Rijndael and it is subject to change in the near future. When using Crypt::CBC this module is 100% compatible to Crypt::Rijndael and you can decrypt and encrypt your data with both modules!

Supported keysizes: 128, 192 and 256 (default)

Supported blocksizes: 128 (default), 192 and 256

If the size of the key does not match the given keysize then the key is padded with "0" (hex) or truncated to the right size.

The last data block is padded with "\0" if it does not match a multiple of the blocksize.

Warnings a raised in both cases.

EXAMPLES

Top

Using Crypt::CBC

 use Crypt::CBC;

 my $key = 'my secret key';
 my $input = 'The answer is 42.';
 my $cipher = new Crypt::CBC($key,'Rijndael_PP');

 my $ciphertext = $cipher->encrypt($input);
 my $plaintext  = $cipher->decrypt($ciphertext);




 # - or -

 #!/usr/local/bin/perl -w
 #
 # Usage: r.pl e "my secret key" < in > out
 #
 use strict;
 use Crypt::CBC;
 die "Usage: $0 mode([ed]) key\n" unless @ARGV == 2;
 my $cipher = new Crypt::CBC($ARGV[1],'Rijndael_PP');
 $cipher->start($ARGV[0]);
 my $buffer;
 while( read(STDIN, $buffer, 1024) ) {
	 print $cipher->crypt($buffer);
 }
 print $cipher->finish;




LIMITATIONS

Top

This implementation is really slow. I'm trying to tweak the performance in coming releases.

CBC-Mode is not yet compatible to Crypt::Rijndael. But you are advised to use Crypt::CBC for this mode anyway.

SEE ALSO

Top

Crypt::Rijndael

Crypt::CBC

http://csrc.nist.gov/encryption/aes/

COPYRIGHT

Top

AUTHORS

Top

The original algorithm was developed by Vincent Rijmen and Joan Daemen.

This release was made by Christian Lackas <delta@lackas.net>. http://www.lackas.net/. It is based on the reference implementation for the AES contest. At present I am working on a faster version.


Crypt-Rijndael_PP documentation  | view source Contained in the Crypt-Rijndael_PP distribution.