diff options
Diffstat (limited to 'Master/tlpkg/tlperl0/lib/Crypt/DES_EDE3.pm')
-rwxr-xr-x | Master/tlpkg/tlperl0/lib/Crypt/DES_EDE3.pm | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl0/lib/Crypt/DES_EDE3.pm b/Master/tlpkg/tlperl0/lib/Crypt/DES_EDE3.pm new file mode 100755 index 00000000000..5bb52e97955 --- /dev/null +++ b/Master/tlpkg/tlperl0/lib/Crypt/DES_EDE3.pm @@ -0,0 +1,118 @@ +# $Id: DES_EDE3.pm,v 1.2 2001/09/15 03:41:09 btrott Exp $ + +package Crypt::DES_EDE3; +use strict; + +use Crypt::DES; +use vars qw( $VERSION ); +$VERSION = '0.01'; + +sub new { + my $class = shift; + my $ede3 = bless {}, $class; + $ede3->init(@_); +} + +sub keysize { 24 } +sub blocksize { 8 } + +sub init { + my $ede3 = shift; + my($key) = @_; + for my $i (1..3) { + $ede3->{"des$i"} = Crypt::DES->new(substr $key, 8*($i-1), 8); + } + $ede3; +} + +sub encrypt { + my($ede3, $block) = @_; + $ede3->{des3}->encrypt( + $ede3->{des2}->decrypt( + $ede3->{des1}->encrypt($block) + ) + ); +} + +sub decrypt { + my($ede3, $block) = @_; + $ede3->{des1}->decrypt( + $ede3->{des2}->encrypt( + $ede3->{des3}->decrypt($block) + ) + ); +} + +1; +__END__ + +=head1 NAME + +Crypt::DES_EDE3 - Triple-DES EDE encryption/decryption + +=head1 SYNOPSIS + + use Crypt::DES_EDE3; + my $ede3 = Crypt::DES_EDE3->new($key); + $ede3->encrypt($block); + +=head1 DESCRIPTION + +I<Crypt::DES_EDE3> implements DES-EDE3 encryption. This is triple-DES +encryption where an encrypt operation is encrypt-decrypt-encrypt, and +decrypt is decrypt-encrypt-decrypt. This implementation uses I<Crypt::DES> +to do its dirty DES work, and simply provides a wrapper around that +module: setting up the individual DES ciphers, initializing the keys, +and performing the encryption/decryption steps. + +DES-EDE3 encryption requires a key size of 24 bytes. + +You're probably best off not using this module directly, as the I<encrypt> +and I<decrypt> methods expect 8-octet blocks. You might want to use the +module in conjunction with I<Crypt::CBC>, for example. This would be +DES-EDE3-CBC, or triple-DES in outer CBC mode. + +=head1 USAGE + +=head2 $ede3 = Crypt::DES_EDE3->new($key) + +Creates a new I<Crypt::DES_EDE3> object (really, a collection of three DES +ciphers), and initializes each cipher with part of I<$key>, which should be +at least 24 bytes. If it's longer than 24 bytes, the extra bytes will be +ignored. + +Returns the new object. + +=head2 $ede3->encrypt($block) + +Encrypts an 8-byte block of data I<$block> using the three DES ciphers in +an encrypt-decrypt-encrypt operation. + +Returns the encrypted block. + +=head2 $ede3->decrypt($block) + +Decrypts an 8-byte block of data I<$block> using the three DES ciphers in +a decrypt-encrypt-decrypt operation. + +Returns the decrypted block. + +=head2 $ede3->blocksize + +Returns the block size (8). + +=head2 $ede3->keysize + +Returns the key size (24). + +=head1 LICENSE + +Crypt::DES_EDE3 is free software; you may redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 AUTHOR & COPYRIGHTS + +Crypt::DES_EDE3 is Copyright 2001 Benjamin Trott, ben@rhumba.pair.com. All +rights reserved. + +=cut |