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 10     10   54 use strict;
  10         18  
  10         337  
6 10     10   59 use warnings;
  10         16  
  10         208  
7              
8 10     10   349 use Crypt::Perl::ASN1 ();
  10         19  
  10         355  
9              
10 10     10   48 use constant ASN1 => <
  10         24  
  10         1805  
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 1     1 0 3 my ($pem_or_der) = @_;
38              
39 1         3 return _asn1()->find('PrivateKeyInfo')->decode($pem_or_der);
40             }
41              
42             sub parse_public {
43 1     1 0 3 my ($pem_or_der) = @_;
44              
45 1         4 return _asn1()->find('SubjectPublicKeyInfo')->decode($pem_or_der);
46             }
47              
48             sub _asn1 {
49 2     2   11 return Crypt::Perl::ASN1->new()->prepare( Crypt::Perl::PKCS8::ASN1() );
50             }
51              
52             1;