Codebase list libcryptx-perl / 2e635f9
Ec fixes + some EC tests (#16) * ecc_export_full: make sure key->dp is set * fix parameters defined check in _curve_name_lookup otherwise perl treats "0" as false * t/pk_ecc.t: add import/export tests Manuel Mausz authored 7 years ago karel-m committed 7 years ago
3 changed file(s) with 55 addition(s) and 9 deletion(s). Raw diff Collapse all Expand all
395395
396396 return $key->{curve_name} if $key->{curve_name} && exists $curve{$key->{curve_name}};
397397
398 my $A = $key->{curve_A} or return;
399 my $B = $key->{curve_B} or return;
400 my $Gx = $key->{curve_Gx} or return;
401 my $Gy = $key->{curve_Gy} or return;
402 my $order = $key->{curve_order} or return;
403 my $prime = $key->{curve_prime} or return;
404 my $cofactor = $key->{curve_cofactor} or return;
398 defined(my $A = $key->{curve_A}) or return;
399 defined(my $B = $key->{curve_B}) or return;
400 defined(my $Gx = $key->{curve_Gx}) or return;
401 defined(my $Gy = $key->{curve_Gy}) or return;
402 defined(my $order = $key->{curve_order}) or return;
403 defined(my $prime = $key->{curve_prime}) or return;
404 defined(my $cofactor = $key->{curve_cofactor}) or return;
405405 $A =~ s/^0+//;
406406 $B =~ s/^0+//;
407407 $Gx =~ s/^0+//;
4040
4141 if (key->type != PK_PRIVATE && type == PK_PRIVATE) return CRYPT_PK_TYPE_MISMATCH;
4242 if (ltc_ecc_is_valid_idx(key->idx) == 0) return CRYPT_INVALID_ARG;
43 if (key->dp == NULL) return CRYPT_INVALID_ARG;
4344
4445 if ((err = mp_init_multi(&prime, &order, &a, &b, &gx, &gy, NULL)) != CRYPT_OK) return err;
4546
00 use strict;
11 use warnings;
2 use Test::More tests => 95;
2 use Test::More tests => 108;
33
44 use Crypt::PK::ECC qw(ecc_encrypt ecc_decrypt ecc_sign_message ecc_verify_message ecc_sign_hash ecc_verify_hash ecc_shared_secret);
55
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
618 {
7 my $k;
19 my ($k, $k2);
820
921 $k = Crypt::PK::ECC->new('t/data/cryptx_priv_ecc1.der');
1022 ok($k, 'load cryptx_priv_ecc1.der');
1224 is($k->size, 32, 'size');
1325 is(uc($k->key2hash->{pub_x}), 'C068B754877A4AB328A569BAC6D464A81B17E527D2D652572ABB11BDA3572D50', 'key2hash');
1426 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');
1539
1640 $k = Crypt::PK::ECC->new('t/data/cryptx_priv_ecc2.der');
1741 ok($k, 'load cryptx_priv_ecc2.der');
4266 ok($k, 'load cryptx_pub_ecc2.pem');
4367 ok(!$k->is_private, 'is_private cryptx_pub_ecc2.pem');
4468 $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 }
4581
4682 for (qw( openssl_ec1.pub.pem openssl_ec1.pub.der openssl_ec1.pubc.der openssl_ec1.pubc.pem
4783 cryptx_pub_ecc1_OLD.der cryptx_pub_ecc1_OLD.pem cryptx_pub_ecc2_OLD.der cryptx_pub_ecc2_OLD.pem )) {
138174 is(uc($k->key2hash->{pub_x}), 'A01532A3C0900053DE60FBEFEFCCA58793301598D308B41E6F4E364E388C2711', "key2hash $pub");
139175 is($k->key2hash->{curve_name}, "secp256r1", "EC curve_name is lowercase");
140176 }
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 }