File Coverage

blib/lib/Crypt/OpenPGP/Key/Public/DSA.pm
Criterion Covered Total %
statement 40 41 97.5
branch n/a
condition 2 3 66.6
subroutine 13 14 92.8
pod 3 9 33.3
total 58 67 86.5


line stmt bran cond sub pod time code
1             package Crypt::OpenPGP::Key::Public::DSA;
2 7     7   91 use strict;
  7         21  
  7         494  
3              
4             our $VERSION = '1.19'; # VERSION
5              
6 7     7   1336 use Crypt::DSA::Key;
  7         19335  
  7         295  
7 7     7   50 use Crypt::OpenPGP::Key::Public;
  7         15  
  7         289  
8 7     7   39 use Crypt::OpenPGP::ErrorHandler;
  7         17  
  7         245  
9 7     7   48 use base qw( Crypt::OpenPGP::Key::Public Crypt::OpenPGP::ErrorHandler );
  7         16  
  7         4552  
10              
11 6     6 1 36 sub can_sign { 1 }
12 0     0 0 0 sub abbrev { 'D' }
13              
14             sub init {
15 78     78 0 171 my $key = shift;
16 78   66     840 $key->{key_data} = shift || Crypt::DSA::Key->new;
17 78         2181 $key;
18             }
19              
20             sub keygen {
21 1     1 1 4 my $class = shift;
22 1         7 my %param = @_;
23 1         549 require Crypt::DSA;
24 1         13431 my $dsa = Crypt::DSA->new;
25 1         31 my $sec = $dsa->keygen( %param );
26 1         189424736 my $pub = bless { }, 'Crypt::DSA::Key';
27 1         11 for my $e (qw( p q g pub_key )) {
28 4         765 $pub->$e( $sec->$e() );
29             }
30 1         284 ($pub, $sec);
31             }
32              
33 137     137 0 724 sub public_props { qw( p q g y ) }
34 61     61 0 254 sub sig_props { qw( r s ) }
35              
36 28     28 0 3023 sub y { $_[0]->{key_data}->pub_key(@_[1..$#_]) }
37              
38 2     2 1 14 sub size { $_[0]->{key_data}->size }
39              
40             sub verify {
41 9     9 0 16 my $key = shift;
42 9         27 my($sig, $dgst) = @_;
43 9         42 require Crypt::DSA;
44 9         72 my $dsa = Crypt::DSA->new;
45 9         270 my $dsa_sig = Crypt::DSA::Signature->new;
46 9         319 $dsa_sig->r($sig->{r});
47 9         1352 $dsa_sig->s($sig->{s});
48             $dsa->verify(
49             Key => $key->{key_data},
50 9         981 Digest => $dgst,
51             Signature => $dsa_sig
52             );
53             }
54              
55             1;