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 11     11   65 use strict;
  11         30  
  11         361  
6 11     11   53 use warnings;
  11         22  
  11         232  
7              
8 11     11   418 use Crypt::Perl::ASN1 ();
  11         26  
  11         420  
9              
10 11     11   56 use constant ASN1 => <
  11         21  
  11         2089  
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 11     11 0 28 my ($pem_or_der) = @_;
38              
39 11         35 return _asn1()->find('PrivateKeyInfo')->decode($pem_or_der);
40             }
41              
42             sub parse_public {
43 10     10 0 25 my ($pem_or_der) = @_;
44              
45 10         30 return _asn1()->find('SubjectPublicKeyInfo')->decode($pem_or_der);
46             }
47              
48             sub _asn1 {
49 21     21   82 return Crypt::Perl::ASN1->new()->prepare( Crypt::Perl::PKCS8::ASN1() );
50             }
51              
52             1;