Codebase list libcryptx-perl / ddc2751
enable wycheproof test for ed25519/x25519 Karel Miko 4 years ago
1 changed file(s) with 68 addition(s) and 1 deletion(s). Raw diff Collapse all Expand all
77
88 plan skip_all => "No JSON::* module installed" unless eval { require JSON::PP } || eval { require JSON::XS } || eval { require Cpanel::JSON::XS };
99 #plan skip_all => "Temporarily disabled";
10 plan tests => 14141;
10 plan tests => 14339;
1111
1212 use CryptX;
1313 use Crypt::Misc 'read_rawfile';
1414 use Crypt::Digest 'digest_data';
15
16 if (1) {
17 use Crypt::PK::Ed25519;
18 my $json = 't/wycheproof/eddsa_test.json';
19 my $tests = CryptX::_decode_json read_rawfile $json;
20 for my $g (@{$tests->{testGroups}}) {
21 my $type = $g->{type}; # EDDSAVer
22 my $keyDer = pack "H*", $g->{keyDer};
23 my $keyPem = $g->{keyPem};
24 my $pk = pack "H*", $g->{key}{pk};
25 my $sk = pack "H*", $g->{key}{sk};
26 for my $t (@{$g->{tests}}) {
27 my $tcId = $t->{tcId};
28 my $comment = $t->{comment};
29 my $result = $t->{result};
30 my $message = pack "H*", $t->{msg};
31 my $sig = pack "H*", $t->{sig};
32 my $testname = "($json) type=$type tcId=$tcId comment='$comment' expected-result=$result";
33 my $pk = Crypt::PK::Ed25519->new( \$keyPem );
34 my $valid = $pk->verify_message($sig, $message);
35 if ($result eq 'valid') {
36 ok($valid, "$testname valid=$valid");
37 }
38 elsif ($result eq 'acceptable') {
39 ok($valid, "$testname valid=$valid"); # consider: acceptable == valid
40 }
41 elsif ($result eq 'invalid') {
42 SKIP: {
43 skip "ltc bug ed25519", 1 if $tcId =~ /^(63|64|65|66)$/; #XXX-FIXME
44 ok(!$valid, "$testname valid=$valid");
45 }
46 }
47 else {
48 ok(0, "UNEXPECTED result=$result");
49 }
50 }
51 }
52 }
53
54 if (1) {
55 use Crypt::PK::X25519;
56 my $json = 't/wycheproof/x25519_test.json';
57 my $tests = CryptX::_decode_json read_rawfile $json;
58 for my $g (@{$tests->{testGroups}}) {
59 my $curve = $g->{curve};
60 next if $curve ne 'curve25519';
61 for my $t (@{$g->{tests}}) {
62 my $pk = pack "H*", $t->{public};
63 my $sk = pack "H*", $t->{private};
64 my $sh = pack "H*", $t->{shared};
65 my $result = $t->{result};
66 my $comment = $t->{comment};
67 my $s = Crypt::PK::X25519->new->import_key_raw($sk, 'private');
68 my $p = Crypt::PK::X25519->new->import_key_raw($pk, 'public');
69 my $shared = $s->shared_secret($p);
70 if ($result eq 'valid') {
71 is(unpack("H*", $shared), $t->{shared}, "result=$result comment=$comment");
72 }
73 elsif ($result eq 'acceptable') {
74 is(unpack("H*", $shared), $t->{shared}, "result=$result comment=$comment");
75 }
76 else {
77 isnt(unpack("H*", $shared), $t->{shared}, "result=$result comment=$comment");
78 }
79 }
80 }
81 }
1582
1683 if (1) {
1784 use Crypt::AuthEnc::ChaCha20Poly1305 qw(chacha20poly1305_encrypt_authenticate chacha20poly1305_decrypt_verify);