File Coverage

blib/lib/Crypt/Keyczar/RsaPrivateKey.pm
Criterion Covered Total %
statement 79 79 100.0
branch 1 2 50.0
condition n/a
subroutine 16 16 100.0
pod 0 7 0.0
total 96 104 92.3


line stmt bran cond sub pod time code
1             package Crypt::Keyczar::RsaPrivateKey;
2 5     5   1223 use base 'Crypt::Keyczar::Key';
  5         11  
  5         1084  
3 5     5   26 use strict;
  5         10  
  5         77  
4 5     5   28 use warnings;
  5         9  
  5         96  
5              
6 5     5   24 use Crypt::Keyczar::Util;
  5         10  
  5         150  
7 5     5   1532 use Crypt::Keyczar::RsaPublicKey;
  5         12  
  5         2207  
8              
9              
10             sub expose {
11 6     6 0 17 my $self = shift;
12 6         16 my $expose = {};
13 6         21 $expose->{size} = $self->{size};
14 6         23 $expose->{publicKey} = $self->get_public->expose;
15 6         18 $expose->{privateExponent} = $self->{privateExponent};
16 6         16 $expose->{primeP} = $self->{primeP};
17 6         17 $expose->{primeQ} = $self->{primeQ};
18 6         13 $expose->{primeExponentP} = $self->{primeExponentP};
19 6         12 $expose->{primeExponentQ} = $self->{primeExponentQ};
20 6         19 $expose->{crtCoefficient} = $self->{crtCoefficient};
21 6         23 return $expose;
22             }
23              
24              
25             sub read {
26 58     58 0 1179 my $class = shift;
27 58         89 my $json_string = shift;
28              
29 58         166 my $obj = Crypt::Keyczar::Util::decode_json($json_string);
30 58         140 my $self = bless $obj, $class;
31 58         143 $self->{publicKey} = bless $self->{publicKey}, 'Crypt::Keyczar::RsaPublicKey';
32 58         198 $self->{publicKey}->init();
33 58         214 $self->init();
34 58         179 return $self;
35             }
36              
37              
38             sub generate {
39 6     6 0 14 my $class = shift;
40 6         11 my $size = shift;
41              
42 6         4082839 my $key = Crypt::Keyczar::RsaPrivateKeyEngine->generate($size);
43 6         81 my $priv = {};
44 6         35 $priv->{size} = $size;
45 6         69 $priv->{privateExponent} = Crypt::Keyczar::Util::encode($key->{privateExponent});
46 6         24 $priv->{primeP} = Crypt::Keyczar::Util::encode($key->{primeP});
47 6         23 $priv->{primeQ} = Crypt::Keyczar::Util::encode($key->{primeQ});
48 6         26 $priv->{primeExponentP} = Crypt::Keyczar::Util::encode($key->{primeExponentP});
49 6         19 $priv->{primeExponentQ} = Crypt::Keyczar::Util::encode($key->{primeExponentQ});
50 6         28 $priv->{crtCoefficient} = Crypt::Keyczar::Util::encode($key->{crtCoefficient});
51 6         49 my $self = bless $priv, $class;
52              
53 6         20 my $pub = {};
54 6         21 $pub->{size} = $size;
55 6         21 $pub->{modulus} = Crypt::Keyczar::Util::encode($key->{modulus});
56 6 50       36 if (length $key->{publicExponent} < 4) {
57             # padding 32bit big-endian
58 6         17 my $pad = '';
59 6         35 $pad .= "\x00" x (4 - length $key->{publicExponent});
60 6         19 $key->{publicExponent} = $pad . $key->{publicExponent};
61             }
62 6         20 $pub->{publicExponent} = Crypt::Keyczar::Util::encode($key->{publicExponent});
63 6         42 $self->{publicKey} = bless $pub, 'Crypt::Keyczar::RsaPublicKey';
64 6         47 $self->{publicKey}->init();
65 6         38 $self->init();
66              
67 6         49 return $self;
68             }
69              
70              
71             sub get_engine {
72 8     8 0 693 my $self = shift;
73 64         137 my @args = map { Crypt::Keyczar::Util::decode($_) } (
74             $self->get_public->{modulus}, $self->get_public->{publicExponent},
75             $self->{privateExponent}, $self->{primeP}, $self->{primeQ},
76             $self->{primeExponentP}, $self->{primeExponentQ},
77             $self->{crtCoefficient}
78 8         20 );
79 8         37163 my $engine = Crypt::Keyczar::RsaPrivateKeyEngine->new(@args);
80 8         92 $self->{_digest_size} = $engine->digest_size;
81 8         2221 return $engine;
82             }
83              
84              
85 71     71 0 176 sub hash { return $_[0]->get_public->hash(); }
86              
87              
88 2     2 0 10 sub digest_size { return $_[0]->{_digest_size}; }
89              
90              
91 97     97 0 267 sub get_public { return $_[0]->{publicKey}; }
92              
93             1;
94              
95             package Crypt::Keyczar::RsaPrivateKeyEngine;
96 5     5   31 use base 'Exporter';
  5         9  
  5         253  
97 5     5   25 use strict;
  5         9  
  5         80  
98 5     5   18 use warnings;
  5         10  
  5         94  
99 5     5   20 use Crypt::Keyczar::Engine;
  5         10  
  5         107  
100              
101              
102             1;
103             __END__