File Coverage

blib/lib/Crypt/RIPEMD160/MAC.pm
Criterion Covered Total %
statement 43 54 79.6
branch 3 8 37.5
condition n/a
subroutine 9 10 90.0
pod 0 6 0.0
total 55 78 70.5


line stmt bran cond sub pod time code
1             package Crypt::RIPEMD160::MAC;
2              
3 2     2   1748 use Crypt::RIPEMD160 0.03;
  2         35  
  2         101  
4              
5 2     2   12 use strict;
  2         8  
  2         75  
6 2     2   9 use warnings;
  2         4  
  2         890  
7              
8             our $VERSION = '0.11';
9              
10             sub new {
11 20     20 0 47800 my($pkg, $key) = @_;
12              
13 20         172 my $self = {
14             'key' => $key,
15             'hash' => Crypt::RIPEMD160->new,
16             'k_ipad' => chr(0x36) x 64,
17             'k_opad' => chr(0x5c) x 64,
18             };
19              
20 20         44 bless $self, $pkg;
21              
22 20 100       78 if (length($self->{'key'}) > 64) {
23 6         22 $self->{'key'} = Crypt::RIPEMD160->hash($self->{'key'});
24             }
25              
26 20         56 $self->{'k_ipad'} ^= $self->{'key'};
27 20         36 $self->{'k_opad'} ^= $self->{'key'};
28              
29 20         124 $self->{'hash'}->add($self->{'k_ipad'});
30              
31 20         51 return $self;
32             }
33              
34             sub reset {
35 0     0 0 0 my($self) = @_;
36              
37 0         0 $self->{'hash'}->reset();
38 0         0 $self->{'k_ipad'} = chr(0x36) x 64;
39 0         0 $self->{'k_opad'} = chr(0x5c) x 64;
40              
41 0 0       0 if (length($self->{'key'}) > 64) {
42 0         0 $self->{'key'} = Crypt::RIPEMD160->hash($self->{'key'});
43             }
44              
45 0         0 $self->{'k_ipad'} ^= $self->{'key'};
46 0         0 $self->{'k_opad'} ^= $self->{'key'};
47              
48 0         0 $self->{'hash'}->add($self->{'k_ipad'});
49              
50 0         0 return $self;
51             }
52              
53             sub add {
54 18     18 0 80 my($self, @data) = @_;
55              
56 18         172 $self->{'hash'}->add(@data);
57             }
58              
59             sub addfile
60             {
61 2     2   15 no strict 'refs';
  2         4  
  2         717  
62 1     1 0 9 my ($self, $handle) = @_;
63 1         8 my ($package, $file, $line) = caller;
64 1         3 my ($data);
65              
66 1 50       10 if (!ref($handle)) {
67 0 0       0 $handle = $package . "::" . $handle unless ($handle =~ /(\:\:|\')/);
68             }
69 1         54 while (read($handle, $data, 8192)) {
70 1         14 $self->{'hash'}->add($data);
71             }
72             }
73              
74             sub mac {
75 1     1 0 6 my($self) = @_;
76              
77 1         6 my($inner) = $self->{'hash'}->digest();
78              
79 1         8 my($outer) = Crypt::RIPEMD160->hash($self->{'k_opad'}.$inner);
80              
81 1         3 $self->{'key'} = "";
82 1         3 $self->{'k_ipad'} = "";
83 1         2 $self->{'k_opad'} = "";
84              
85 1         2 return($outer);
86             }
87              
88             sub hexmac {
89 18     18 0 81 my($self) = @_;
90              
91 18         94 my($inner) = $self->{'hash'}->digest();
92              
93 18         89 my($outer) = Crypt::RIPEMD160->hexhash($self->{'k_opad'}.$inner);
94              
95 18         37 $self->{'key'} = "";
96 18         33 $self->{'k_ipad'} = "";
97 18         30 $self->{'k_opad'} = "";
98              
99 18         58 return($outer);
100             }
101              
102             1;
103             __END__