File Coverage

blib/lib/Crypt/Keyczar/Key.pm
Criterion Covered Total %
statement 432 432 100.0
branch 9 14 64.2
condition n/a
subroutine 144 144 100.0
pod 0 13 0.0
total 585 603 97.0


line stmt bran cond sub pod time code
1             package Crypt::Keyczar::Key;
2 28     28   117097 use strict;
  28         53  
  28         816  
3 24     24   813 use warnings;
  24         46  
  24         765  
4 23     23   855 use Carp;
  23         45  
  23         1672  
5              
6 16     16   2236 use Crypt::Keyczar::Util;
  16         36  
  16         12864  
7              
8              
9              
10             my %POLICY = (
11             'AES' => {
12             object => 'Crypt::Keyczar::AesKey',
13             keysize => [128, 192, 256],
14             outsize => 0
15             },
16             'HMAC_SHA1' => {
17             object => 'Crypt::Keyczar::HmacKey',
18             keysize => [256],
19             outsize => 20
20             },
21             'DSA_PRIV' => {
22             object => 'Crypt::Keyczar::DsaPrivateKey',
23             keysize => [1024],
24             outsize => 48
25             },
26             'DSA_PUB' => {
27             object => 'Crypt::Keyczar::DsaPublicKey',
28             keysize => [1024],
29             outsize => 48
30             },
31             'RSA_PRIV' => {
32             object => 'Crypt::Keyczar::RsaPrivateKey',
33             keysize => [4096, 2048, 1024, 768, 512],
34             outsize => 256
35             },
36             'RSA_PUB' => {
37             object => 'Crypt::Keyczar::RsaPublicKey',
38             keysize => [4096, 2048, 1024, 768, 512],
39             outsize => 256
40             },
41              
42             'HMAC_SHA224' => {
43             object => 'Crypt::Keyczar::HmacSHA224Key',
44             keysize => [256],
45             outsize => 28
46             },
47             'HMAC_SHA256' => {
48             object => 'Crypt::Keyczar::HmacSHA256Key',
49             keysize => [256],
50             outsize => 32
51             },
52             'HMAC_SHA384' => {
53             object => 'Crypt::Keyczar::HmacSHA384Key',
54             keysize => [256],
55             outsize => 48
56             },
57             'HMAC_SHA512' => {
58             object => 'Crypt::Keyczar::HmacSHA512Key',
59             keysize => [256],
60             outsize => 64
61             },
62             );
63              
64              
65             sub set_policy {
66 1     1 0 6 my $class = shift;
67 1         2 %POLICY = @_;
68             }
69              
70              
71             sub new {
72 13     13 0 42 my $class = shift;
73 13         50 return bless {}, $class;
74             }
75              
76              
77 94     94 0 192 sub init {}
78              
79              
80             sub get_header {
81 22     22 0 48 my $self = shift;
82 22         96 return pack 'C1 a*', Crypt::Keyczar::FORMAT_VERSION(), $self->hash();
83             }
84              
85             sub expose {
86 1     1 0 2 my $self = shift;
87 1         14 my $expose = {};
88 1         6 $expose->{size} = $self->{size};
89 1         2 return $expose;
90             }
91              
92              
93             sub hash {
94 442     442 0 590 my $self = shift;
95 442 100       1491 $self->{__hash} = shift if @_;
96 442         2082 return $self->{__hash};
97             }
98              
99              
100 1     1 0 15 sub get_size {}
101 1     1 0 6 sub get_type {}
102 1     1 0 2 sub get_engine {}
103 2     2 0 24 sub get_sign_engine { return Crypt::Keyczar::_NullSignEngine->new(); }
104              
105              
106              
107             sub generate_key {
108 19     19 0 75 my $class = shift;
109 19         39 my ($type, $size) = @_;
110              
111 19 50       98 if (!exists $POLICY{uc $type}) {
112 1         7 croak "unsupported key type: $type";
113             }
114              
115 19         60 my $key = $POLICY{uc $type}->{object};
116 19     1   2120 eval "use $key";
  1     1   2  
  1     1   19  
  1     1   6  
  1     1   175667  
  1     1   81  
  1     1   12  
  1     1   3  
  1     1   19  
  1     1   12  
  1     1   3  
  1     1   24  
  1     1   6  
  1     1   2  
  1     1   22  
  1         6  
  1         2  
  1         19  
  1         5  
  1         3  
  1         18  
  1         6  
  1         3  
  1         18  
  1         6  
  1         2  
  1         16  
  1         5  
  1         3  
  1         22  
  1         5  
  1         2  
  1         18  
  1         9  
  1         1  
  1         16  
  1         7  
  1         2  
  1         14  
  1         4  
  1         3  
  1         14  
  1         7  
  1         3  
  1         16  
  1         9  
117 19 50       81 if ($@) {
118 1         3 croak "$type: $@";
119             }
120 19 100       67 if ($size) {
121 6 50       19 if (scalar(grep {$_ == $size} @{$POLICY{uc $type}->{keysize}}) == 0) {
  22         75  
  6         44  
122 1         9 croak "unacceptable key size: $size\@$type";
123             }
124             }
125             else {
126 14         50 $size = $POLICY{uc $type}->{keysize}->[0]; # set default key size
127             }
128 19         103 return $key->generate($size);
129             }
130              
131              
132             sub read_key {
133 166     166 0 1279 my $class = shift;
134 166         280 my ($type, $json_string_key) = @_;
135              
136 166 50       1045 if (!exists $POLICY{uc $type}) {
137 1         840 croak "unsupported key type: $type";
138             }
139 166         428 my $key = $POLICY{uc $type}->{object};
140 11     11   4858 eval "use $key";
  11     3   26  
  11     1   265  
  166     1   13001  
  3     1   1227  
  3     1   23  
  3     1   46  
  1     1   2  
  1     1   13  
  1     1   9  
  1     1   3  
  1     1   88  
  1     1   5  
  1     1   2  
  1     1   14  
  1     1   7  
  1     1   2  
  1     1   15  
  1     1   8  
  1     1   5  
  1     1   33  
  1     1   9  
  1     1   4  
  1     1   25  
  1     1   9  
  1     1   3  
  1     1   27  
  1     1   8  
  1     1   2  
  1     1   27  
  1     1   5  
  1     1   1  
  1     1   13  
  1     1   6  
  1     1   1  
  1     1   15  
  1     1   5  
  1     1   2  
  1     1   16  
  1     1   5  
  1     1   2  
  1     1   13  
  1     1   4  
  1     1   2  
  1     1   13  
  1     1   7  
  1     1   3  
  1     1   18  
  1     1   4  
  1     1   2  
  1     1   14  
  1     1   6  
  1     1   2  
  1     1   16  
  1     1   6  
  1     1   2  
  1     1   16  
  1     1   5  
  1     1   2  
  1     1   15  
  1     1   6  
  1     1   2  
  1     1   16  
  1     1   5  
  1     1   2  
  1     1   15  
  1     1   636  
  1     1   3  
  1     1   15  
  1     1   9  
  1     1   3  
  1     1   15  
  1     1   8  
  1     1   2  
  1     1   15  
  1     1   5  
  1     1   2  
  1     1   14  
  1     1   9  
  1     1   2  
  1     1   15  
  1     1   6  
  1     1   3  
  1     1   16  
  1     1   7  
  1     1   1  
  1     1   19  
  1     1   6  
  1     1   2  
  1     1   17  
  1     1   6  
  1     1   2  
  1     1   16  
  1     1   9  
  1     1   2  
  1     1   24  
  1     1   6  
  1     1   2  
  1     1   17  
  1     1   6  
  1     1   2  
  1     1   16  
  1     1   7  
  1     1   3  
  1         18  
  1         7  
  1         2  
  1         15  
  1         6  
  1         1  
  1         17  
  1         6  
  1         3  
  1         17  
  1         5  
  1         3  
  1         17  
  1         6  
  1         4  
  1         14  
  1         10  
  1         3  
  1         30  
  1         8  
  1         3  
  1         17  
  1         6  
  1         3  
  1         16  
  1         7  
  1         2  
  1         20  
  1         7  
  1         2  
  1         17  
  1         8  
  1         2  
  1         19  
  1         6  
  1         2  
  1         18  
  1         902  
  1         4  
  1         18  
  1         8  
  1         2  
  1         14  
  1         7  
  1         1  
  1         17  
  1         6  
  1         2  
  1         11  
  1         6  
  1         3  
  1         13  
  1         7  
  1         2  
  1         16  
  1         8  
  1         3  
  1         19  
  1         6  
  1         1  
  1         13  
  1         6  
  1         4  
  1         18  
  1         7  
  1         2  
  1         18  
  1         6  
  1         2  
  1         16  
  1         6  
  1         2  
  1         16  
  1         8  
  1         2  
  1         17  
  1         6  
  1         2  
  1         16  
  1         6  
  1         3  
  1         17  
  1         7  
  1         2  
  1         81  
  1         5  
  1         1  
  1         13  
  1         6  
  1         1  
  1         13  
  1         6  
  1         2  
  1         16  
  1         6  
  1         3  
  1         18  
  1         6  
  1         2  
  1         13  
  1         7  
  1         3  
  1         20  
  1         6  
  1         4  
  1         17  
  1         10  
  1         5  
  1         23  
  1         11  
  1         3  
  1         25  
  1         6  
  1         2  
  1         16  
  1         111  
  1         2  
  1         16  
  1         8  
  1         3  
  1         18  
  1         6  
  1         3  
  1         15  
  1         6  
  1         3  
  1         18  
  1         7  
  1         3  
  1         16  
  1         7  
  1         2  
  1         15  
  1         8  
  1         3  
  1         18  
  1         7  
  1         2  
  1         15  
  1         6  
  1         3  
  1         16  
  1         8  
  1         2  
  1         18  
  1         7  
  1         2  
  1         18  
  1         7  
  1         3  
  1         16  
  1         8  
  1         3  
  1         20  
  1         7  
  1         2  
  1         16  
  1         6  
  1         3  
  1         16  
  1         9  
  1         2  
  1         18  
  1         6  
  1         2  
  1         15  
  1         6  
  1         3  
  1         18  
  1         8  
  1         2  
  1         20  
  1         6  
  1         2  
  1         24  
  1         6  
  1         3  
  1         18  
  1         6  
  1         2  
  1         15  
  1         9  
  1         3  
  1         21  
  1         6  
  1         2  
  1         11  
  1         5  
  1         2  
  1         16  
  1         7  
  1         2  
  1         18  
  1         6  
  1         2  
  1         22  
  1         6  
  1         2  
  1         16  
  1         9  
  1         3  
  1         20  
  1         7  
  1         2  
  1         15  
  1         7  
  1         2  
  1         16  
  1         5  
  1         2  
  1         14  
  1         8  
  1         13  
  1         17  
  1         5  
  1         2  
  1         16  
141 166 50       598 if ($@) {
142 1         2 croak "$type: $@";
143             }
144 166         842 return $key->read($json_string_key);
145             }
146              
147              
148             sub to_string {
149 27     27 0 127 return Crypt::Keyczar::Util::encode_json($_[0]->expose);
150             }
151              
152             1;
153              
154              
155             package Crypt::Keyczar::_NullSignEngine;
156 16     16   110 use strict;
  16         33  
  16         472  
157 16     16   86 use warnings;
  16         65  
  16         2309  
158              
159 2     2   6 sub new { return bless {}, $_[0]; }
160 4     4   30 sub digest_size { return 0 }
161 1     1   9 sub init { return '' }
162 2     2   6 sub update {}
163 1     1   23 sub sign { return '' }
164 2     2   13 sub verify { return 1 }
165              
166              
167              
168             __END__