Crypt-Rijndael-PP

 view release on metacpan or  search on metacpan

lib/Crypt/Rijndael/PP.pod  view on Meta::CPAN

=pod

=head1 NAME

Crypt::Rijndael::PP - Pure Perl Implementation of the Rijndael Encryption Algorthim

=head1 SYNOPSIS

    use Crypt::Rijndael::PP;

    # Please use securely generated keys and IV's, these are purely examples!!!
    my $key   = 'A' x 32;
    my $input = 'B' x 16;

    # For you hardcore low level 'I want to control everything!' types:
    {
        my $iv = 'A' x 16;

        # If you aren't sure which mode to use, use CBC (Chaining Block Cipher)
        my $cipher = Crypt::Rijndael::PP->new(
            $key, Crypt::Rijndael::PP::MODE_CBC()
        );

        $cipher->set_iv( $iv );

        my $cipher_text = $cipher->encrypt( $input );
        my $plain_text  = $cipher->decrypt( $cipher_text );
    }

    # For you, 'do it for me' types:
    {
        my $cipher = Crypt::CBC->new(
            -key    => $key,
            -cipher => 'Rijndael::PP',
        );

        my $cipher_text = $cipher->encrypt( $input );
        my $plain_text  = $cipher->decrypt( $cipher_text );
    }

=head1 DESCRIPTION

Crypt::Rijndael::PP is a pure perl drop in alternative to Crypt::Rijndael, fully compatiable with L<Crypt::CBC>.  It exposes the exact same functionatly and can be used in place for any use case where you can not use the XS version of the Rijndael mo...

Though named Crypt::Rinjdae::PP, this module implements the Advanced Encryption Standard (AES) and is suitable for all of your strong cryptographic needs.  It will accept either a 128, 192, or 256 bit key and inputs that are multiples of the blocksiz...

=over 4

=item MODE_ECB - Electronic Code Book

The default, but you most likely do not want to use this.  In Electronic Code Book, each block is encrypted as a seperate indepedent block meaning that the same plain text produces the same cipher text.

=item MODE_CBC - Chaining Block Cipher

My personal choice, uses an initialization vector (IV) as a 'salt' of sorts.  Much better then ECB because the same plain text will not produce the same cipher text.

=item MODE_CTR - Counter

Similiar to CBC, but adds a counter to the IV for each succesive block.

=item MODE_CFB - Cipher Feedback

Similiar to CBC, but uses the IV as input to the cipher algorthim then XOR'ing the plain text with the result of the algorthim.

=item MODE_OFB - Output Feedback

Similiar to CFB, but uses the the result of the cipher algorthim before XOR'ing it with the plain text as input to the next block.

=back

=head1 METHODS

=head2 new

    my $cipher = Crypt::Rijndael::PP->new(
        $key, Crypt::Rijndael::PP::MODE_ECB(),
    )

Generates an instance of Crypt::Rijndael::PP, accepts the key and the mode to use.

=head2 encypt

    my $cipher_text = $cipher->encrypt( $input );

Encrypts the provided input, generating cipher text.

=head2 decrypt

    my $plain-text = $cipher->encrypt( $cipher_text );

Decrypts the provided input, gneerating plain text.

=head2 set_iv

    $cipher->set_iv( 'A' x 16 );

Sets the initialization vector.

=head2 get_iv

    my $iv = $cipher->get_iv();

Gets the current IV.

=head1 COMPATABILITY

Crypt::Rijndael::PP is intended to be fully compatable with Crypt::Rijndael, and is fully compatable with Crypt::CBC when using 256 bit keys.

=head1 REPOSITORY and BUG REPORTING

The repository for this module is publically available on github at L<https://github.com/drzigman/crypt-rijndael-pp> so feel free to go fork yourself!  Please use the github issues tracker for any normal bugs and try to create a failing test case if ...

=head1 EXTERNAL LINKS

=over 4

=item L<My Presentation on the AES Algorthim and How it Works|http://houston.pm.org/talks/2014talks/1410Talk/index.html>

If you aren't a member of your local L<Perl Mongers|http://www.pm.org/> you really should be!

=item L<AES Specification from NIST|http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf>

=item L<Wikipedia's Article on Block Cipher Modes of Operation|http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation>

=back

=head1 ACKNOWLEDGEMENTS

None of this would be possible without the excellent Rijndael algorithm written by Joan Daemen and Vincent Rijmen.

Special thanks to L<brian d foy|http://www252.pair.com/~comdog/> for his faith and entrusting me with the Crypt::Rijndael module, the L<Houston Perl Mongers|http://houston.pm.org/> for allowing me to present to them my initial implementation, and to ...

Thanks to L<Leon Timmermans|https://metacpan.org/author/LEONT> for pointing out a testing dependency on L<Crypt::Rijndal|https://metacpan.org/pod/Crypt::Rijndael> that was removed and for noting a perl 5.10 dependency that was not needed.

=head1 AUTHORS

Robert Stone, C<< <drzigman AT cpan DOT org> >>

=head1 COPYRIGHT & LICENSE

Copyright 2015 Robert Stone
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU Lesser General Public License as published by the Free Software Foundation; or any compatible license.

See http://dev.perl.org/licenses/ for more information.



( run in 0.530 second using v1.01-cache-2.11-cpan-e1769b4cff6 )