diff options
author | tb <> | 2025-09-04 16:44:14 +0000 |
---|---|---|
committer | tb <> | 2025-09-04 16:44:14 +0000 |
commit | 463c26bfd356c04267b2b1995c3595351dccee59 (patch) | |
tree | 18c25603a65e7d7cde1064ec742e545324e14bf6 /src | |
parent | 5bb84009cdbe7f61b86ba976964b1abca35909ad (diff) | |
download | openbsd-463c26bfd356c04267b2b1995c3595351dccee59.tar.gz openbsd-463c26bfd356c04267b2b1995c3595351dccee59.tar.bz2 openbsd-463c26bfd356c04267b2b1995c3595351dccee59.zip |
wycheproof: add version sum type and annotate all tests as v0
The version is passed to the test runner, so it can unmarshal the v0
and v1 JSON as appropriate later on.
Diffstat (limited to 'src')
-rw-r--r-- | src/regress/lib/libcrypto/wycheproof/wycheproof.go | 71 |
1 files changed, 41 insertions, 30 deletions
diff --git a/src/regress/lib/libcrypto/wycheproof/wycheproof.go b/src/regress/lib/libcrypto/wycheproof/wycheproof.go index 930ba4624c..41ad449b96 100644 --- a/src/regress/lib/libcrypto/wycheproof/wycheproof.go +++ b/src/regress/lib/libcrypto/wycheproof/wycheproof.go | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: wycheproof.go,v 1.163 2025/09/04 16:40:12 tb Exp $ */ | 1 | /* $OpenBSD: wycheproof.go,v 1.164 2025/09/04 16:44:14 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018,2023 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2018,2023 Joel Sing <jsing@openbsd.org> |
4 | * Copyright (c) 2018,2019,2022-2024 Theo Buehler <tb@openbsd.org> | 4 | * Copyright (c) 2018,2019,2022-2024 Theo Buehler <tb@openbsd.org> |
@@ -578,6 +578,13 @@ type wycheproofTestGroupRunner interface { | |||
578 | run(string, testVariant) bool | 578 | run(string, testVariant) bool |
579 | } | 579 | } |
580 | 580 | ||
581 | type wycheproofVersion int | ||
582 | |||
583 | const ( | ||
584 | v0 wycheproofVersion = iota | ||
585 | v1 | ||
586 | ) | ||
587 | |||
581 | type wycheproofTestVectors struct { | 588 | type wycheproofTestVectors struct { |
582 | Algorithm string `json:"algorithm"` | 589 | Algorithm string `json:"algorithm"` |
583 | GeneratorVersion string `json:"generatorVersion"` | 590 | GeneratorVersion string `json:"generatorVersion"` |
@@ -2644,7 +2651,7 @@ func testGroupFromAlgorithm(algorithm string, variant testVariant) wycheproofTes | |||
2644 | } | 2651 | } |
2645 | } | 2652 | } |
2646 | 2653 | ||
2647 | func runTestVectors(path string, variant testVariant) bool { | 2654 | func runTestVectors(path string, variant testVariant, version wycheproofVersion) bool { |
2648 | var algorithm string | 2655 | var algorithm string |
2649 | var testGroups []json.RawMessage | 2656 | var testGroups []json.RawMessage |
2650 | b, err := ioutil.ReadFile(path) | 2657 | b, err := ioutil.ReadFile(path) |
@@ -2725,35 +2732,36 @@ func main() { | |||
2725 | } | 2732 | } |
2726 | 2733 | ||
2727 | tests := []struct { | 2734 | tests := []struct { |
2735 | version wycheproofVersion | ||
2728 | name string | 2736 | name string |
2729 | pattern string | 2737 | pattern string |
2730 | variant testVariant | 2738 | variant testVariant |
2731 | }{ | 2739 | }{ |
2732 | {"AES", "aes_[cg]*[^xv]_test.json", Normal}, // Skip AES-EAX, AES-GCM-SIV and AES-SIV-CMAC. | 2740 | {v0, "AES", "aes_[cg]*[^xv]_test.json", Normal}, // Skip AES-EAX, AES-GCM-SIV and AES-SIV-CMAC. |
2733 | {"ChaCha20-Poly1305", "chacha20_poly1305_test.json", Normal}, | 2741 | {v0, "ChaCha20-Poly1305", "chacha20_poly1305_test.json", Normal}, |
2734 | {"DSA", "dsa_*test.json", Normal}, | 2742 | {v0, "DSA", "dsa_*test.json", Normal}, |
2735 | {"DSA", "dsa_*_p1363_test.json", P1363}, | 2743 | {v0, "DSA", "dsa_*_p1363_test.json", P1363}, |
2736 | {"ECDH", "ecdh_test.json", Normal}, | 2744 | {v0, "ECDH", "ecdh_test.json", Normal}, |
2737 | {"ECDH", "ecdh_[^w_]*_test.json", Normal}, | 2745 | {v0, "ECDH", "ecdh_[^w_]*_test.json", Normal}, |
2738 | {"ECDH EcPoint", "ecdh_*_ecpoint_test.json", EcPoint}, | 2746 | {v0, "ECDH EcPoint", "ecdh_*_ecpoint_test.json", EcPoint}, |
2739 | {"ECDH webcrypto", "ecdh_webcrypto_test.json", Webcrypto}, | 2747 | {v0, "ECDH webcrypto", "ecdh_webcrypto_test.json", Webcrypto}, |
2740 | {"ECDSA", "ecdsa_test.json", Normal}, | 2748 | {v0, "ECDSA", "ecdsa_test.json", Normal}, |
2741 | {"ECDSA", "ecdsa_[^w]*test.json", Normal}, | 2749 | {v0, "ECDSA", "ecdsa_[^w]*test.json", Normal}, |
2742 | {"ECDSA P1363", "ecdsa_*_p1363_test.json", P1363}, | 2750 | {v0, "ECDSA P1363", "ecdsa_*_p1363_test.json", P1363}, |
2743 | {"ECDSA webcrypto", "ecdsa_webcrypto_test.json", Webcrypto}, | 2751 | {v0, "ECDSA webcrypto", "ecdsa_webcrypto_test.json", Webcrypto}, |
2744 | {"EDDSA", "eddsa_test.json", Normal}, | 2752 | {v0, "EDDSA", "eddsa_test.json", Normal}, |
2745 | {"ED448", "ed448_test.json", Skip}, | 2753 | {v0, "ED448", "ed448_test.json", Skip}, |
2746 | {"HKDF", "hkdf_sha*_test.json", Normal}, | 2754 | {v0, "HKDF", "hkdf_sha*_test.json", Normal}, |
2747 | {"HMAC", "hmac_sha*_test.json", Normal}, | 2755 | {v0, "HMAC", "hmac_sha*_test.json", Normal}, |
2748 | {"JSON webcrypto", "json_web_*_test.json", Skip}, | 2756 | {v0, "JSON webcrypto", "json_web_*_test.json", Skip}, |
2749 | {"KW", "kw_test.json", Normal}, | 2757 | {v0, "KW", "kw_test.json", Normal}, |
2750 | {"Primality test", "primality_test.json", Normal}, | 2758 | {v0, "Primality test", "primality_test.json", Normal}, |
2751 | {"RSA", "rsa_*test.json", Normal}, | 2759 | {v0, "RSA", "rsa_*test.json", Normal}, |
2752 | {"X25519", "x25519_test.json", Normal}, | 2760 | {v0, "X25519", "x25519_test.json", Normal}, |
2753 | {"X25519 ASN", "x25519_asn_test.json", Skip}, | 2761 | {v0, "X25519 ASN", "x25519_asn_test.json", Skip}, |
2754 | {"X25519 JWK", "x25519_jwk_test.json", Skip}, | 2762 | {v0, "X25519 JWK", "x25519_jwk_test.json", Skip}, |
2755 | {"X25519 PEM", "x25519_pem_test.json", Skip}, | 2763 | {v0, "X25519 PEM", "x25519_pem_test.json", Skip}, |
2756 | {"XCHACHA20-POLY1305", "xchacha20_poly1305_test.json", Normal}, | 2764 | {v0, "XCHACHA20-POLY1305", "xchacha20_poly1305_test.json", Normal}, |
2757 | } | 2765 | } |
2758 | 2766 | ||
2759 | success := true | 2767 | success := true |
@@ -2772,6 +2780,9 @@ func main() { | |||
2772 | 2780 | ||
2773 | for _, test := range tests { | 2781 | for _, test := range tests { |
2774 | path := testVectorPath | 2782 | path := testVectorPath |
2783 | if test.version == v1 { | ||
2784 | path = path + "_v1" | ||
2785 | } | ||
2775 | tvs, err := filepath.Glob(filepath.Join(path, test.pattern)) | 2786 | tvs, err := filepath.Glob(filepath.Join(path, test.pattern)) |
2776 | if err != nil { | 2787 | if err != nil { |
2777 | log.Fatalf("Failed to glob %v test vectors: %v", test.name, err) | 2788 | log.Fatalf("Failed to glob %v test vectors: %v", test.name, err) |
@@ -2786,15 +2797,15 @@ func main() { | |||
2786 | } | 2797 | } |
2787 | wg.Add(1) | 2798 | wg.Add(1) |
2788 | <-vectorsRateLimitCh | 2799 | <-vectorsRateLimitCh |
2789 | go func(tv string, variant testVariant) { | 2800 | go func(tv string, variant testVariant, version wycheproofVersion) { |
2790 | select { | 2801 | select { |
2791 | case resultCh <- runTestVectors(tv, variant): | 2802 | case resultCh <- runTestVectors(tv, variant, version): |
2792 | default: | 2803 | default: |
2793 | log.Fatal("result channel is full") | 2804 | log.Fatal("result channel is full") |
2794 | } | 2805 | } |
2795 | vectorsRateLimitCh <- true | 2806 | vectorsRateLimitCh <- true |
2796 | wg.Done() | 2807 | wg.Done() |
2797 | }(tv, test.variant) | 2808 | }(tv, test.variant, test.version) |
2798 | } | 2809 | } |
2799 | } | 2810 | } |
2800 | 2811 | ||