File Coverage

lib/Crypt/TripleDES.pm
Criterion Covered Total %
statement 6 35 17.1
branch 0 8 0.0
condition n/a
subroutine 2 6 33.3
pod 2 3 66.6
total 10 52 19.2


line stmt bran cond sub pod time code
1             #!/usr/bin/perl
2             ##
3             ## Crypt::TripleDES -- Pure Perl Triple DES encryption.
4             ##
5             ## Copyright (c) 1999, Vipul Ved Prakash. All rights reserved.
6             ## This code is free software; you can redistribute it and/or modify
7             ## it under the same terms as Perl itself.
8             ##
9             ## $Id: TripleDES.pm,v 0.24 1999/10/13 23:26:15 root Exp root $
10              
11             package Crypt::TripleDES;
12 1     1   3211 use Crypt::PPDES;
  1         2  
  1         29  
13 1     1   4 use vars qw( $AUTOLOAD $VERSION);
  1         1  
  1         436  
14             ( $VERSION ) = '$Revision: 0.24 $' =~ /\s(\d+\.\d+)\s/;
15              
16             sub AUTOLOAD {
17 0     0     my ( $self, @args ) = @_;
18 0           my $key = $AUTOLOAD; $key =~ s/.*://;
  0            
19 0 0         if ( $key eq "encrypt3" ) {
20 0           return $self->decrypt3 ( @args, 1 );
21             }
22             }
23              
24 0     0 1   sub new { return bless {}, shift }
25              
26             sub decrypt3 {
27              
28 0     0 1   my ( $self, $plaintext, $passphrase, $flag ) = @_;
29 0           my %keyvecs;
30 0           $passphrase .= ' ' x (16*3);
31              
32 0           for ( 0..2 ) {
33 0           my @kvs = Crypt::PPDES::des_set_key( pack( "H*", substr($passphrase, 16*$_, 16 )));
34 0           $keyvecs{$_} = \@kvs;
35             }
36              
37 0           my $size = length ( $plaintext );
38 0 0         my $tail = 8 - ( $size % 8 ); $tail = 0 if $tail > 7;
  0            
39 0           $plaintext .= chr(32) x $tail;
40 0           $size = length ( $plaintext );
41 0           my $cyphertext = "";
42              
43 0           for ( 0 .. (($size)/8) -1 ) {
44 0           my $pt = substr( $plaintext, $_*8, 8 );
45 0 0         $pt = Crypt::PPDES::des_ecb_encrypt( $flag ? $keyvecs{0} : $keyvecs{2}, $flag, $pt );
46 0           $pt = Crypt::PPDES::des_ecb_encrypt( $keyvecs{1}, (not $flag), $pt );
47 0 0         $pt = Crypt::PPDES::des_ecb_encrypt( $flag ? $keyvecs{2} : $keyvecs{0}, $flag, $pt );
48 0           $cyphertext .= $pt;
49             }
50              
51 0           return substr ( $cyphertext, 0, $size );
52              
53             }
54              
55             sub debug {
56 0     0 0   my ( @mess ) = @_;
57 0           open D, ">>debug";
58 0           print D "@mess\n";
59 0           close D;
60             }
61              
62             "True Value";
63              
64             =head1 NAME
65              
66             Crypt::TripleDES - Triple DES encyption.
67              
68             =head1 SYNOPSIS
69              
70             my $des = new Crypt::TripleDES;
71             my $cyphertext = $des->encrypt3 ( $plaintext, $passphrase );
72             my $plaintext = $des->decrypt3 ( $cyphertext, $passphrase );
73              
74             =head1 DESCRIPTION
75              
76             This module implements 3DES encryption in ECB mode. The code is based on
77             Eric Young's implementation of DES in pure perl. It's quite slow because of
78             the way Perl handles bit operations and is not recommended for use with
79             large texts.
80              
81             =head1 METHODS
82              
83             =over 4
84              
85             =item B
86              
87             The constructor.
88              
89             =item B $plaintext, $passphrase
90              
91             Encrypts the plaintext string using the passphrase. Whitespace characters
92             are appended to the string if its length is not a multiple of eight. User
93             applications can correct for this by storing plaintext size with the
94             cyphertext. The passphrase is an ASCII character string of upto 48
95             characters.
96              
97             =item B $cyphertext, $passphrase
98              
99             Inverse of encrypt3().
100              
101             =back
102              
103             =head1 AUTHOR
104              
105             Vipul Ved Prakash, mail@vipul.net
106             Eric Young, eay@psych.psy.uq.oz.au
107              
108             Patches:
109             Jonathan Mayer
110              
111             =cut
112              
113