File Coverage

blib/lib/Net/SSH/Perl/Cipher/CBC.pm
Criterion Covered Total %
statement 29 29 100.0
branch n/a
condition 2 3 66.6
subroutine 4 4 100.0
pod 0 3 0.0
total 35 39 89.7


line stmt bran cond sub pod time code
1             # This code is based in part on the Systemics Crypt::CBC.
2             # Parts copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/)
3             # All rights reserved.
4              
5             package Net::SSH::Perl::Cipher::CBC;
6 2     2   12 use strict;
  2         23  
  2         695  
7              
8             sub new {
9 37     37 0 101 my($class, $ciph, $iv) = @_;
10 37   66     360 bless {
11             cipher => $ciph,
12             iv => $iv || ("\0" x $ciph->blocksize),
13             }, $class;
14             }
15              
16             sub encrypt {
17 18     18 0 37 my $cbc = shift;
18 18         30 my $data = shift;
19              
20 18         29 my $retval = "";
21 18         40 my $iv = $cbc->{iv};
22 18         31 my $ciph = $cbc->{cipher};
23 18         83 my $size = $ciph->blocksize;
24              
25 18         54 while (length $data) {
26 18         51 my $in = substr($data, 0, $size, '') ^ $iv;
27 18         148 $iv = $ciph->encrypt($in);
28 18         53 $retval .= $iv;
29             }
30              
31 18         31 $cbc->{iv} = $iv;
32 18         65 $retval;
33             }
34              
35             sub decrypt {
36 19     19 0 32 my $cbc = shift;
37 19         45 my $data = shift;
38              
39 19         34 my $retval = "";
40 19         45 my $iv = $cbc->{iv};
41 19         32 my $ciph = $cbc->{cipher};
42 19         62 my $size = $ciph->blocksize;
43              
44 19         54 while (length $data) {
45 29         55 my $in = substr($data, 0, $size, '');
46 29         113 $retval .= $ciph->decrypt($in) ^ $iv;
47 29         119 $iv = $in;
48             }
49              
50 19         40 $cbc->{iv} = $iv;
51 19         76 $retval;
52             }
53              
54             1;
55             __END__