summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2025-09-04 16:44:14 +0000
committertb <>2025-09-04 16:44:14 +0000
commit463c26bfd356c04267b2b1995c3595351dccee59 (patch)
tree18c25603a65e7d7cde1064ec742e545324e14bf6 /src
parent5bb84009cdbe7f61b86ba976964b1abca35909ad (diff)
downloadopenbsd-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.go71
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
581type wycheproofVersion int
582
583const (
584 v0 wycheproofVersion = iota
585 v1
586)
587
581type wycheproofTestVectors struct { 588type 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
2647func runTestVectors(path string, variant testVariant) bool { 2654func 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