File Coverage

blib/lib/Crypt/OpenPGP/KeyBlock.pm
Criterion Covered Total %
statement 44 48 91.6
branch 9 14 64.2
condition 2 6 33.3
subroutine 13 15 86.6
pod 6 12 50.0
total 74 95 77.8


line stmt bran cond sub pod time code
1             package Crypt::OpenPGP::KeyBlock;
2 12     12   134 use strict;
  12         47  
  12         503  
3 12     12   84 use warnings;
  12         23  
  12         1130  
4              
5             our $VERSION = '1.19'; # VERSION
6              
7 12     12   6573 use Crypt::OpenPGP::PacketFactory;
  12         59  
  12         8952  
8              
9             sub primary_uid {
10             $_[0]->{pkt}{ 'Crypt::OpenPGP::UserID' } ?
11 47 50   47 0 30846697 $_[0]->{pkt}{ 'Crypt::OpenPGP::UserID' }->[0]->id : undef;
12             }
13              
14 23     23 0 18727 sub key { $_[0]->get('Crypt::OpenPGP::Certificate')->[0] }
15 0     0 0 0 sub subkey { $_[0]->get('Crypt::OpenPGP::Certificate')->[1] }
16              
17             sub encrypting_key {
18 15     15 1 55 my $kb = shift;
19 15         106 my $keys = $kb->get('Crypt::OpenPGP::Certificate');
20 15 50 33     118 return unless $keys && @$keys;
21 15         67 for my $key (@$keys) {
22 30 100       155 return $key if $key->can_encrypt;
23             }
24             }
25              
26             sub signing_key {
27 6     6 1 22 my $kb = shift;
28 6         25 my $keys = $kb->get('Crypt::OpenPGP::Certificate');
29 6 50 33     67 return unless $keys && @$keys;
30 6         23 for my $key (@$keys) {
31 6 50       79 return $key if $key->can_sign;
32             }
33             }
34              
35             sub key_by_id { $_[0]->{keys_by_id}->{$_[1]} ||
36 18 50   18 0 135 $_[0]->{keys_by_short_id}->{$_[1]} }
37              
38             sub new {
39 25     25 1 71 my $class = shift;
40 25         80 my $kb = bless { }, $class;
41 25         121 $kb->init(@_);
42             }
43              
44             sub init {
45 25     25 0 56 my $kb = shift;
46 25         172 $kb->{pkt} = { };
47 25         95 $kb->{order} = [ ];
48 25         89 $kb->{keys_by_id} = { };
49 25         87 $kb;
50             }
51              
52             sub add {
53 181     181 1 365 my $kb = shift;
54 181         493 my($pkt) = @_;
55 181         340 push @{ $kb->{pkt}->{ ref($pkt) } }, $pkt;
  181         849  
56 181         331 push @{ $kb->{order} }, $pkt;
  181         551  
57 181 100       705 if (ref($pkt) eq 'Crypt::OpenPGP::Certificate') {
58 50         264 my $kid = $pkt->key_id;
59 50         227 $kb->{keys_by_id}{ $kid } = $pkt;
60 50         366 $kb->{keys_by_short_id}{ substr $kid, -4, 4 } = $pkt;
61             }
62             }
63              
64 48     48 0 9184 sub get { $_[0]->{pkt}->{ $_[1] } }
65              
66             sub save {
67 2     2 1 19 my $kb = shift;
68 2         7 Crypt::OpenPGP::PacketFactory->save( @{ $kb->{order} } );
  2         70  
69             }
70              
71             sub save_armoured {
72 0     0 1   my $kb = shift;
73 0           require Crypt::OpenPGP::Armour;
74 0           Crypt::OpenPGP::Armour->armour(
75             Data => $kb->save,
76             Object => 'PUBLIC KEY BLOCK'
77             );
78             }
79              
80             1;
81             __END__