1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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
|