File Coverage

lib/Crypt/Perl/PKCS8.pm
Criterion Covered Total %
statement 17 17 100.0
branch n/a
condition n/a
subroutine 7 7 100.0
pod 0 2 0.0
total 24 26 92.3


line stmt bran cond sub pod time code
1             package Crypt::Perl::PKCS8;
2              
3             #TODO: Rename this, and split up the public/private as appropriate.
4              
5 13     13   103 use strict;
  13         31  
  13         483  
6 13     13   75 use warnings;
  13         51  
  13         356  
7              
8 13     13   488 use Crypt::Perl::ASN1 ();
  13         54  
  13         577  
9              
10 13     13   94 use constant ASN1 => <
  13         39  
  13         3107  
11             -- FG: simplified from RFC for Convert::ASN1
12             Version ::= INTEGER
13              
14             -- cf. RFC 3280 4.1.1.2
15             AlgorithmIdentifier ::= SEQUENCE {
16             algorithm OBJECT IDENTIFIER,
17             parameters ANY DEFINED BY algorithm OPTIONAL
18             }
19              
20             -- cf. RFC 5208 appendix A
21             PrivateKeyInfo ::= SEQUENCE {
22             version Version,
23             privateKeyAlgorithm AlgorithmIdentifier,
24             privateKey PrivateKey
25             }
26              
27             PrivateKey ::= OCTET STRING
28              
29             -- cf. RFC 3280 4.1
30             SubjectPublicKeyInfo ::= SEQUENCE {
31             algorithm AlgorithmIdentifier,
32             subjectPublicKey BIT STRING
33             }
34             END
35              
36             sub parse_private {
37 12     12 0 42 my ($pem_or_der) = @_;
38              
39 12         55 return _asn1()->find('PrivateKeyInfo')->decode($pem_or_der);
40             }
41              
42             sub parse_public {
43 11     11 0 63 my ($pem_or_der) = @_;
44              
45 11         46 return _asn1()->find('SubjectPublicKeyInfo')->decode($pem_or_der);
46             }
47              
48             sub _asn1 {
49 23     23   99 return Crypt::Perl::ASN1->new()->prepare( Crypt::Perl::PKCS8::ASN1() );
50             }
51              
52             1;