File Coverage

blib/lib/Crypt/OpenPGP/Digest.pm
Criterion Covered Total %
statement 115 123 93.5
branch 5 12 41.6
condition 2 3 66.6
subroutine 37 39 94.8
pod 4 6 66.6
total 163 183 89.0


line stmt bran cond sub pod time code
1             package Crypt::OpenPGP::Digest;
2 11     11   88079 use strict;
  11         21  
  11         445  
3 11     11   60 use warnings;
  11         21  
  11         856  
4              
5             our $VERSION = '1.19'; # VERSION
6              
7 11     11   428 use Crypt::OpenPGP::ErrorHandler;
  11         20  
  11         405  
8 11     11   80 use base qw( Crypt::OpenPGP::ErrorHandler );
  11         24  
  11         8665  
9              
10             our %ALG = (
11             1 => 'MD5',
12             2 => 'SHA1',
13             3 => 'RIPEMD160',
14             8 => 'SHA256',
15             9 => 'SHA384',
16             10 => 'SHA512',
17             11 => 'SHA224',
18             );
19             our %ALG_BY_NAME = map { $ALG{$_} => $_ } keys %ALG;
20              
21             sub new {
22 205     205 1 177730 my $class = shift;
23 205         930 my $alg = shift;
24 205   66     2569 $alg = $ALG{$alg} || $alg;
25 205 50       1221 return $class->error("Unsupported digest algorithm '$alg'")
26             unless $alg =~ /^\D/;
27 205         761 my $pkg = join '::', $class, $alg;
28             my $dig = bless { __alg => $alg,
29 205         1816 __alg_id => $ALG_BY_NAME{$alg} }, $pkg;
30 205         921 $dig->init(@_);
31             }
32              
33 0     0 0 0 sub init { $_[0] }
34 211     211 1 35991 sub hash { $_[0]->{md}->($_[1]) }
35              
36             sub alg {
37 18 100   18 1 3187 return $_[0]->{__alg} if ref($_[0]);
38 11 50       92 $ALG{$_[1]} || $_[1];
39             }
40              
41             sub alg_id {
42 7 50   7 1 51 return $_[0]->{__alg_id} if ref($_[0]);
43 0 0       0 $ALG_BY_NAME{$_[1]} || $_[1];
44             }
45              
46             sub supported {
47 0     0 0 0 my $class = shift;
48 0         0 my %s;
49 0         0 for my $did (keys %ALG) {
50 0         0 my $digest = $class->new($did);
51 0 0       0 $s{$did} = $digest->alg if $digest;
52             }
53 0         0 \%s;
54             }
55              
56             package Crypt::OpenPGP::Digest::MD5;
57 11     11   110 use strict;
  11         180  
  11         355  
58 11     11   122 use warnings;
  11         25  
  11         602  
59              
60 11     11   61 use base qw( Crypt::OpenPGP::Digest );
  11         22  
  11         2197  
61              
62             sub init {
63 4     4   9 my $dig = shift;
64 4         49 require Digest::MD5;
65 4         28 $dig->{md} = \&Digest::MD5::md5;
66 4         31 $dig;
67             }
68              
69             package Crypt::OpenPGP::Digest::SHA1;
70 11     11   94 use strict;
  11         22  
  11         474  
71 11     11   121 use warnings;
  11         20  
  11         794  
72              
73 11     11   90 use base qw( Crypt::OpenPGP::Digest );
  11         19  
  11         2139  
74              
75             sub init {
76 190     190   415 my $dig = shift;
77 190         6509 require Digest::SHA;
78 190         22499 $dig->{md} = \&Digest::SHA::sha1;
79 190         880 $dig;
80             }
81              
82             package Crypt::OpenPGP::Digest::RIPEMD160;
83 11     11   93 use strict;
  11         23  
  11         339  
84 11     11   62 use warnings;
  11         22  
  11         591  
85              
86 11     11   109 use base qw( Crypt::OpenPGP::Digest );
  11         19  
  11         2559  
87              
88             sub init {
89 2     2   4 my $dig = shift;
90 2         466 require Crypt::RIPEMD160;
91 2     1   3190 $dig->{md} = sub { Crypt::RIPEMD160->hash($_[0]) };
  1         12  
92 2         9 $dig;
93             }
94              
95             package Crypt::OpenPGP::Digest::SHA224;
96 11     11   79 use strict;
  11         20  
  11         284  
97 11     11   52 use warnings;
  11         27  
  11         662  
98              
99 11     11   80 use base qw( Crypt::OpenPGP::Digest );
  11         28  
  11         2201  
100              
101             sub init {
102 2     2   4 my $dig = shift;
103 2         13 require Digest::SHA;
104 2         14 $dig->{md} = \&Digest::SHA::sha224;
105 2         6 $dig;
106             }
107              
108             package Crypt::OpenPGP::Digest::SHA256;
109 11     11   76 use strict;
  11         32  
  11         268  
110 11     11   55 use warnings;
  11         23  
  11         562  
111              
112 11     11   54 use base qw( Crypt::OpenPGP::Digest );
  11         25  
  11         1902  
113              
114             sub init {
115 2     2   5 my $dig = shift;
116 2         16 require Digest::SHA;
117 2         10 $dig->{md} = \&Digest::SHA::sha256;
118 2         7 $dig;
119             }
120              
121             package Crypt::OpenPGP::Digest::SHA384;
122 11     11   85 use strict;
  11         22  
  11         360  
123 11     11   62 use warnings;
  11         28  
  11         609  
124              
125 11     11   67 use base qw( Crypt::OpenPGP::Digest );
  11         29  
  11         1988  
126              
127             sub init {
128 2     2   5 my $dig = shift;
129 2         11 require Digest::SHA;
130 2         15 $dig->{md} = \&Digest::SHA::sha384;
131 2         6 $dig;
132             }
133              
134             package Crypt::OpenPGP::Digest::SHA512;
135 11     11   95 use strict;
  11         29  
  11         316  
136 11     11   46 use warnings;
  11         27  
  11         558  
137              
138 11     11   54 use base qw( Crypt::OpenPGP::Digest );
  11         35  
  11         2215  
139              
140             sub init {
141 3     3   7 my $dig = shift;
142 3         652 require Digest::SHA;
143 3         3068 $dig->{md} = \&Digest::SHA::sha512;
144 3         16 $dig;
145             }
146              
147              
148             1;
149             __END__