summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/regress/lib/libcrypto/wycheproof/wycheproof.go73
1 files changed, 2 insertions, 71 deletions
diff --git a/src/regress/lib/libcrypto/wycheproof/wycheproof.go b/src/regress/lib/libcrypto/wycheproof/wycheproof.go
index 41e5794fdd..718369c5f4 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.183 2025/09/06 17:35:29 tb Exp $ */ 1/* $OpenBSD: wycheproof.go,v 1.184 2025/09/07 19:26:28 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-2025 Theo Buehler <tb@openbsd.org> 4 * Copyright (c) 2018,2019,2022-2025 Theo Buehler <tb@openbsd.org>
@@ -371,16 +371,6 @@ type wycheproofTestGroupECDSA struct {
371 Tests []*wycheproofTestECDSA `json:"tests"` 371 Tests []*wycheproofTestECDSA `json:"tests"`
372} 372}
373 373
374type wycheproofTestGroupECDSAWebCrypto struct {
375 JWK *wycheproofJWKPublic `json:"publicKeyJwk"`
376 Key *wycheproofECDSAKey `json:"publicKey"`
377 KeyDER string `json:"publicKeyDer"`
378 KeyPEM string `json:"publicKeyPem"`
379 SHA string `json:"sha"`
380 Type string `json:"type"`
381 Tests []*wycheproofTestECDSA `json:"tests"`
382}
383
384type wycheproofTestEcCurve struct { 374type wycheproofTestEcCurve struct {
385 TCID int `json:"tcId"` 375 TCID int `json:"tcId"`
386 Comment string `json:"comment"` 376 Comment string `json:"comment"`
@@ -1858,7 +1848,7 @@ func runECDSATest(ecKey *C.EC_KEY, md *C.EVP_MD, nid int, variant testVariant, w
1858 msg, msgLen := mustHashHexMessage(md, wt.Msg) 1848 msg, msgLen := mustHashHexMessage(md, wt.Msg)
1859 1849
1860 var ret C.int 1850 var ret C.int
1861 if variant == Webcrypto || variant == P1363 { 1851 if variant == P1363 {
1862 order_bytes := int((C.EC_GROUP_order_bits(C.EC_KEY_get0_group(ecKey)) + 7) / 8) 1852 order_bytes := int((C.EC_GROUP_order_bits(C.EC_KEY_get0_group(ecKey)) + 7) / 8)
1863 if len(wt.Sig)/2 != 2*order_bytes { 1853 if len(wt.Sig)/2 != 2*order_bytes {
1864 if wt.Result == "valid" { 1854 if wt.Result == "valid" {
@@ -1993,61 +1983,6 @@ func encodeECDSAWebCryptoSig(wtSig string) (*C.uchar, C.int) {
1993 return cDer, derLen 1983 return cDer, derLen
1994} 1984}
1995 1985
1996func (wtg *wycheproofTestGroupECDSAWebCrypto) run(algorithm string, variant testVariant) bool {
1997 fmt.Printf("Running %v test group %v with curve %v, key size %d and %v...\n", algorithm, wtg.Type, wtg.Key.Curve, wtg.Key.KeySize, wtg.SHA)
1998
1999 nid, err := nidFromString(wtg.JWK.Crv)
2000 if err != nil {
2001 log.Fatalf("Failed to get nid for curve: %v", err)
2002 }
2003 ecKey := C.EC_KEY_new_by_curve_name(C.int(nid))
2004 if ecKey == nil {
2005 log.Fatal("EC_KEY_new_by_curve_name failed")
2006 }
2007 defer C.EC_KEY_free(ecKey)
2008
2009 x, err := base64.RawURLEncoding.DecodeString(wtg.JWK.X)
2010 if err != nil {
2011 log.Fatalf("Failed to base64 decode X: %v", err)
2012 }
2013 bnX := C.BN_bin2bn((*C.uchar)(unsafe.Pointer(&x[0])), C.int(len(x)), nil)
2014 if bnX == nil {
2015 log.Fatal("Failed to decode X")
2016 }
2017 defer C.BN_free(bnX)
2018
2019 y, err := base64.RawURLEncoding.DecodeString(wtg.JWK.Y)
2020 if err != nil {
2021 log.Fatalf("Failed to base64 decode Y: %v", err)
2022 }
2023 bnY := C.BN_bin2bn((*C.uchar)(unsafe.Pointer(&y[0])), C.int(len(y)), nil)
2024 if bnY == nil {
2025 log.Fatal("Failed to decode Y")
2026 }
2027 defer C.BN_free(bnY)
2028
2029 if C.EC_KEY_set_public_key_affine_coordinates(ecKey, bnX, bnY) != 1 {
2030 log.Fatal("Failed to set EC public key")
2031 }
2032
2033 nid, err = nidFromString(wtg.SHA)
2034 if err != nil {
2035 log.Fatalf("Failed to get MD NID: %v", err)
2036 }
2037 md, err := hashEvpMdFromString(wtg.SHA)
2038 if err != nil {
2039 log.Fatalf("Failed to get hash: %v", err)
2040 }
2041
2042 success := true
2043 for _, wt := range wtg.Tests {
2044 if !runECDSATest(ecKey, md, nid, Webcrypto, wt) {
2045 success = false
2046 }
2047 }
2048 return success
2049}
2050
2051func runEcCurveTest(wt *wycheproofTestEcCurve) bool { 1986func runEcCurveTest(wt *wycheproofTestEcCurve) bool {
2052 oid := C.CString(wt.OID) 1987 oid := C.CString(wt.OID)
2053 defer C.free(unsafe.Pointer(oid)) 1988 defer C.free(unsafe.Pointer(oid))
@@ -2794,9 +2729,6 @@ func testGroupFromAlgorithm(algorithm string, variant testVariant) wycheproofTes
2794 if algorithm == "ECDH" && variant == Webcrypto { 2729 if algorithm == "ECDH" && variant == Webcrypto {
2795 return &wycheproofTestGroupECDHWebCrypto{} 2730 return &wycheproofTestGroupECDHWebCrypto{}
2796 } 2731 }
2797 if algorithm == "ECDSA" && variant == Webcrypto {
2798 return &wycheproofTestGroupECDSAWebCrypto{}
2799 }
2800 switch algorithm { 2732 switch algorithm {
2801 case "AES-CBC-PKCS5": 2733 case "AES-CBC-PKCS5":
2802 return &wycheproofTestGroupAesCbcPkcs5{} 2734 return &wycheproofTestGroupAesCbcPkcs5{}
@@ -2936,7 +2868,6 @@ func main() {
2936 {"ECDH webcrypto", "ecdh_*_webcrypto_test.json", Webcrypto}, 2868 {"ECDH webcrypto", "ecdh_*_webcrypto_test.json", Webcrypto},
2937 {"ECDSA", "ecdsa_[^w]*test.json", Normal}, 2869 {"ECDSA", "ecdsa_[^w]*test.json", Normal},
2938 {"ECDSA P1363", "ecdsa_*_sha[1-9][1-9][1-9]_p1363_test.json", P1363}, 2870 {"ECDSA P1363", "ecdsa_*_sha[1-9][1-9][1-9]_p1363_test.json", P1363},
2939 {"ECDSA webcrypto", "ecdsa_*_webcrypto_test.json", Webcrypto},
2940 {"ECDSA shake", "ecdsa_*_shake*_test.json", Skip}, 2871 {"ECDSA shake", "ecdsa_*_shake*_test.json", Skip},
2941 {"EDDSA", "ed25519_test.json", Normal}, 2872 {"EDDSA", "ed25519_test.json", Normal},
2942 {"ED448", "ed448_test.json", Skip}, 2873 {"ED448", "ed448_test.json", Skip},