0 | 0 |
use strict;
|
1 | 1 |
use warnings;
|
2 | |
use Test::More tests => 95;
|
|
2 |
use Test::More tests => 108;
|
3 | 3 |
|
4 | 4 |
use Crypt::PK::ECC qw(ecc_encrypt ecc_decrypt ecc_sign_message ecc_verify_message ecc_sign_hash ecc_verify_hash ecc_shared_secret);
|
5 | 5 |
|
|
6 |
sub read_file {
|
|
7 |
my ($file) = @_;
|
|
8 |
return unless $file;
|
|
9 |
if (open(my $fh, "<", $file)) {
|
|
10 |
local $/;
|
|
11 |
binmode($fh);
|
|
12 |
my $content = <$fh>;
|
|
13 |
close($fh);
|
|
14 |
return $content;
|
|
15 |
}
|
|
16 |
}
|
|
17 |
|
6 | 18 |
{
|
7 | |
my $k;
|
|
19 |
my ($k, $k2);
|
8 | 20 |
|
9 | 21 |
$k = Crypt::PK::ECC->new('t/data/cryptx_priv_ecc1.der');
|
10 | 22 |
ok($k, 'load cryptx_priv_ecc1.der');
|
|
12 | 24 |
is($k->size, 32, 'size');
|
13 | 25 |
is(uc($k->key2hash->{pub_x}), 'C068B754877A4AB328A569BAC6D464A81B17E527D2D652572ABB11BDA3572D50', 'key2hash');
|
14 | 26 |
is(uc($k->curve2hash->{prime}), 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F', 'curve2hash');
|
|
27 |
|
|
28 |
$k2 = Crypt::PK::ECC->new;
|
|
29 |
$k2->import_key(\$k->export_key_pem('private'));
|
|
30 |
is($k->export_key_der('private'), $k2->export_key_der('private'), 'import_key priv pem');
|
|
31 |
|
|
32 |
$k2 = Crypt::PK::ECC->new;
|
|
33 |
$k2->import_key(\$k->export_key_pem('public'));
|
|
34 |
is($k->export_key_der('public'), $k2->export_key_der('public'), 'import_key pub pem');
|
|
35 |
|
|
36 |
$k2 = Crypt::PK::ECC->new;
|
|
37 |
$k2->import_key($k->key2hash);
|
|
38 |
is($k->export_key_der('private'), $k2->export_key_der('private'), 'import_key hash');
|
15 | 39 |
|
16 | 40 |
$k = Crypt::PK::ECC->new('t/data/cryptx_priv_ecc2.der');
|
17 | 41 |
ok($k, 'load cryptx_priv_ecc2.der');
|
|
42 | 66 |
ok($k, 'load cryptx_pub_ecc2.pem');
|
43 | 67 |
ok(!$k->is_private, 'is_private cryptx_pub_ecc2.pem');
|
44 | 68 |
$k = Crypt::PK::ECC->new('t/data/cryptx_pub_ecc2.pem');
|
|
69 |
|
|
70 |
for (qw( cryptx_pub_ecc1.der cryptx_pub_ecc1.pem cryptx_pub_ecc2.der cryptx_pub_ecc2.pem )) {
|
|
71 |
$k = Crypt::PK::ECC->new("t/data/$_");
|
|
72 |
is($k->export_key_der('public'), read_file("t/data/$_"), 'export_key_der public') if (substr($_, -3) eq "der");
|
|
73 |
is($k->export_key_pem('public'), read_file("t/data/$_"), 'export_key_pem public') if (substr($_, -3) eq "pem");
|
|
74 |
}
|
|
75 |
|
|
76 |
for (qw( cryptx_priv_ecc1.der cryptx_priv_ecc1.pem cryptx_priv_ecc2.der cryptx_priv_ecc2.pem )) {
|
|
77 |
$k = Crypt::PK::ECC->new("t/data/$_");
|
|
78 |
is($k->export_key_der('private'), read_file("t/data/$_"), 'export_key_der private') if (substr($_, -3) eq "der");
|
|
79 |
is($k->export_key_pem('private'), read_file("t/data/$_"), 'export_key_pem private') if (substr($_, -3) eq "pem");
|
|
80 |
}
|
45 | 81 |
|
46 | 82 |
for (qw( openssl_ec1.pub.pem openssl_ec1.pub.der openssl_ec1.pubc.der openssl_ec1.pubc.pem
|
47 | 83 |
cryptx_pub_ecc1_OLD.der cryptx_pub_ecc1_OLD.pem cryptx_pub_ecc2_OLD.der cryptx_pub_ecc2_OLD.pem )) {
|
|
138 | 174 |
is(uc($k->key2hash->{pub_x}), 'A01532A3C0900053DE60FBEFEFCCA58793301598D308B41E6F4E364E388C2711', "key2hash $pub");
|
139 | 175 |
is($k->key2hash->{curve_name}, "secp256r1", "EC curve_name is lowercase");
|
140 | 176 |
}
|
|
177 |
|
|
178 |
{
|
|
179 |
my $k = Crypt::PK::ECC->new;
|
|
180 |
eval { $k->export_key_pem('public'); };
|
|
181 |
ok($@, 'key not generated');
|
|
182 |
|
|
183 |
my $params = $Crypt::PK::ECC::curve{secp384r1};
|
|
184 |
ok($k->generate_key($params), "generate_key hash params");
|
|
185 |
}
|