333 | 333 |
return $self;
|
334 | 334 |
}
|
335 | 335 |
|
|
336 |
sub export_key_pem {
|
|
337 |
my ($self, $type, $password, $cipher) = @_;
|
|
338 |
my $key = $self->export_key_der($type||'');
|
|
339 |
return undef unless $key;
|
|
340 |
return Crypt::PK::_asn1_to_pem($key, "EC PRIVATE KEY", $password, $cipher) if $type eq 'private';
|
|
341 |
return Crypt::PK::_asn1_to_pem($key, "PUBLIC KEY") if $type eq 'public' || $type eq 'public_compressed';
|
|
342 |
}
|
|
343 |
|
336 | 344 |
sub import_key {
|
337 | |
my ($self, $key) = @_;
|
|
345 |
my ($self, $key, $password) = @_;
|
338 | 346 |
croak "FATAL: undefined key" unless $key;
|
339 | 347 |
my $data;
|
340 | 348 |
if (ref($key) eq 'SCALAR') {
|
|
346 | 354 |
else {
|
347 | 355 |
croak "FATAL: non-existing file '$key'";
|
348 | 356 |
}
|
349 | |
### no PEM support
|
350 | |
#if ($data && $data =~ /-----BEGIN (EC PRIVATE|EC PUBLIC|PRIVATE|PUBLIC) KEY-----(.*?)-----END/sg) {
|
351 | |
# $data = decode_base64($2);
|
352 | |
#}
|
|
357 |
if ($data && $data =~ /-----BEGIN (EC PRIVATE|EC PUBLIC|PRIVATE|PUBLIC) KEY-----(.*?)-----END/sg) {
|
|
358 |
$data = Crypt::PK::_pem_to_asn1($data, $password);
|
|
359 |
}
|
353 | 360 |
croak "FATAL: invalid key format" unless $data;
|
354 | 361 |
return $self->_import($data);
|
355 | 362 |
}
|
|
499 | 506 |
$pk->generate_key('secp160r1');
|
500 | 507 |
my $private_der = $pk->export_key_der('private');
|
501 | 508 |
my $public_der = $pk->export_key_der('public');
|
|
509 |
my $private_pem = $pk->export_key_pem('private');
|
|
510 |
my $public_pem = $pk->export_key_pem('public');
|
502 | 511 |
my $public_raw = $pk->export_key_raw('public');
|
503 | 512 |
|
504 | 513 |
### Functional interface
|
|
665 | 674 |
|
666 | 675 |
=head2 import_key
|
667 | 676 |
|
668 | |
Loads private or public key in DER format (exported by L</export_key_der>).
|
|
677 |
Loads private or public key in DER or PEM format.
|
669 | 678 |
|
670 | 679 |
$pk->import_key($filename);
|
671 | 680 |
#or
|
672 | 681 |
$pk->import_key(\$buffer_containing_key);
|
673 | 682 |
|
|
683 |
Support for password protected PEM keys
|
|
684 |
|
|
685 |
$pk->import_key($pem_filename, $password);
|
|
686 |
#or
|
|
687 |
$pk->import_key(\$buffer_containing_pem_key, $password);
|
|
688 |
|
674 | 689 |
=head2 import_key_raw
|
675 | 690 |
|
676 | 691 |
Import raw public/private key - can load data exported by L</export_key_raw>.
|
|
684 | 699 |
my $private_der = $pk->export_key_der('private');
|
685 | 700 |
#or
|
686 | 701 |
my $public_der = $pk->export_key_der('public');
|
|
702 |
|
|
703 |
=head2 export_key_pem
|
|
704 |
|
|
705 |
my $private_pem = $pk->export_key_pem('private');
|
|
706 |
#or
|
|
707 |
my $public_pem = $pk->export_key_pem('public');
|
|
708 |
|
|
709 |
Support for password protected PEM keys
|
|
710 |
|
|
711 |
my $private_pem = $pk->export_key_pem('private', $password);
|
|
712 |
#or
|
|
713 |
my $private_pem = $pk->export_key_pem('private', $password, $cipher);
|
|
714 |
|
|
715 |
# supported ciphers: 'DES-CBC'
|
|
716 |
# 'DES-EDE3-CBC'
|
|
717 |
# 'SEED-CBC'
|
|
718 |
# 'CAMELLIA-128-CBC'
|
|
719 |
# 'CAMELLIA-192-CBC'
|
|
720 |
# 'CAMELLIA-256-CBC'
|
|
721 |
# 'AES-128-CBC'
|
|
722 |
# 'AES-192-CBC'
|
|
723 |
# 'AES-256-CBC' (DEFAULT)
|
687 | 724 |
|
688 | 725 |
=head2 export_key_raw
|
689 | 726 |
|