summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/regress/lib/libcrypto/wycheproof/wycheproof.go122
1 files changed, 79 insertions, 43 deletions
diff --git a/src/regress/lib/libcrypto/wycheproof/wycheproof.go b/src/regress/lib/libcrypto/wycheproof/wycheproof.go
index 3a2a1b7fde..f161211d3e 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.175 2025/09/05 11:25:50 tb Exp $ */ 1/* $OpenBSD: wycheproof.go,v 1.176 2025/09/05 13:47:41 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>
@@ -461,15 +461,31 @@ func (wt *wycheproofTestRSA) String() string {
461} 461}
462 462
463type wycheproofTestGroupRSA struct { 463type wycheproofTestGroupRSA struct {
464 E string `json:"e"` 464 PrivateKey *wycheproofRSAPrivateKey `json:"privateKey"`
465 KeyASN string `json:"keyAsn"` 465 PublicKey *wycheproofRSAPublicKey `json:"publicKey"`
466 KeyDER string `json:"keyDer"` 466 KeyASN string `json:"keyAsn"`
467 KeyPEM string `json:"keyPem"` 467 KeyDER string `json:"keyDer"`
468 KeySize int `json:"keysize"` 468 KeyPEM string `json:"keyPem"`
469 N string `json:"n"` 469 KeySize int `json:"keysize"`
470 SHA string `json:"sha"` 470 SHA string `json:"sha"`
471 Type string `json:"type"` 471 Type string `json:"type"`
472 Tests []*wycheproofTestRSA `json:"tests"` 472 Tests []*wycheproofTestRSA `json:"tests"`
473}
474
475type wycheproofRSAPublicKey struct {
476 Modulus string `json:"modulus"`
477 PublicExponent string `json:"publicExponent"`
478}
479
480type wycheproofRSAPrivateKey struct {
481 Modulus string `json:"modulus"`
482 PrivateExponent string `json:"privateExponent"`
483 PublicExponent string `json:"publicExponent"`
484 Prime1 string `json:"prime1"`
485 Prime2 string `json:"prime2"`
486 Exponent1 string `json:"exponent1"`
487 Exponent2 string `json:"exponent2"`
488 Coefficient string `json:"coefficient"`
473} 489}
474 490
475type wycheproofPrivateKeyJwk struct { 491type wycheproofPrivateKeyJwk struct {
@@ -501,29 +517,25 @@ func (wt *wycheproofTestRsaes) String() string {
501} 517}
502 518
503type wycheproofTestGroupRsaesOaep struct { 519type wycheproofTestGroupRsaesOaep struct {
504 D string `json:"d"` 520 Type string `json:"type"`
505 E string `json:"e"`
506 KeySize int `json:"keysize"` 521 KeySize int `json:"keysize"`
522 SHA string `json:"sha"`
507 MGF string `json:"mgf"` 523 MGF string `json:"mgf"`
508 MGFSHA string `json:"mgfSha"` 524 MGFSHA string `json:"mgfSha"`
509 N string `json:"n"` 525 PrivateKey *wycheproofRSAPrivateKey `json:"privateKey"`
510 PrivateKeyJwk *wycheproofPrivateKeyJwk `json:"privateKeyJwk"` 526 PrivateKeyJwk *wycheproofPrivateKeyJwk `json:"privateKeyJwk"`
511 PrivateKeyPem string `json:"privateKeyPem"` 527 PrivateKeyPem string `json:"privateKeyPem"`
512 PrivateKeyPkcs8 string `json:"privateKeyPkcs8"` 528 PrivateKeyPkcs8 string `json:"privateKeyPkcs8"`
513 SHA string `json:"sha"`
514 Type string `json:"type"`
515 Tests []*wycheproofTestRsaes `json:"tests"` 529 Tests []*wycheproofTestRsaes `json:"tests"`
516} 530}
517 531
518type wycheproofTestGroupRsaesPkcs1 struct { 532type wycheproofTestGroupRsaesPkcs1 struct {
519 D string `json:"d"` 533 Type string `json:"type"`
520 E string `json:"e"` 534 PrivateKey *wycheproofRSAPrivateKey `json:"privateKey"`
521 KeySize int `json:"keysize"`
522 N string `json:"n"`
523 PrivateKeyJwk *wycheproofPrivateKeyJwk `json:"privateKeyJwk"` 535 PrivateKeyJwk *wycheproofPrivateKeyJwk `json:"privateKeyJwk"`
524 PrivateKeyPem string `json:"privateKeyPem"` 536 PrivateKeyPem string `json:"privateKeyPem"`
525 PrivateKeyPkcs8 string `json:"privateKeyPkcs8"` 537 PrivateKeyPkcs8 string `json:"privateKeyPkcs8"`
526 Type string `json:"type"` 538 KeySize int `json:"keysize"`
527 Tests []*wycheproofTestRsaes `json:"tests"` 539 Tests []*wycheproofTestRsaes `json:"tests"`
528} 540}
529 541
@@ -541,18 +553,18 @@ func (wt *wycheproofTestRsassa) String() string {
541} 553}
542 554
543type wycheproofTestGroupRsassa struct { 555type wycheproofTestGroupRsassa struct {
544 E string `json:"e"` 556 PrivateKey *wycheproofRSAPrivateKey `json:"privateKey"`
545 KeyASN string `json:"keyAsn"` 557 PublicKey *wycheproofRSAPublicKey `json:"publicKey"`
546 KeyDER string `json:"keyDer"` 558 KeyASN string `json:"keyAsn"`
547 KeyPEM string `json:"keyPem"` 559 KeyDER string `json:"keyDer"`
548 KeySize int `json:"keysize"` 560 KeyPEM string `json:"keyPem"`
549 MGF string `json:"mgf"` 561 KeySize int `json:"keysize"`
550 MGFSHA string `json:"mgfSha"` 562 MGF string `json:"mgf"`
551 N string `json:"n"` 563 MGFSHA string `json:"mgfSha"`
552 SLen int `json:"sLen"` 564 SLen int `json:"sLen"`
553 SHA string `json:"sha"` 565 SHA string `json:"sha"`
554 Type string `json:"type"` 566 Type string `json:"type"`
555 Tests []*wycheproofTestRsassa `json:"tests"` 567 Tests []*wycheproofTestRsassa `json:"tests"`
556} 568}
557 569
558type wycheproofTestX25519 struct { 570type wycheproofTestX25519 struct {
@@ -2303,7 +2315,7 @@ func (wtg *wycheproofTestGroupRsaesOaep) run(algorithm string, variant testVaria
2303 } 2315 }
2304 defer C.RSA_free(rsa) 2316 defer C.RSA_free(rsa)
2305 2317
2306 d := C.CString(wtg.D) 2318 d := C.CString(wtg.PrivateKey.PrivateExponent)
2307 var rsaD *C.BIGNUM 2319 var rsaD *C.BIGNUM
2308 defer C.BN_free(rsaD) 2320 defer C.BN_free(rsaD)
2309 if C.BN_hex2bn(&rsaD, d) == 0 { 2321 if C.BN_hex2bn(&rsaD, d) == 0 {
@@ -2311,7 +2323,7 @@ func (wtg *wycheproofTestGroupRsaesOaep) run(algorithm string, variant testVaria
2311 } 2323 }
2312 C.free(unsafe.Pointer(d)) 2324 C.free(unsafe.Pointer(d))
2313 2325
2314 e := C.CString(wtg.E) 2326 e := C.CString(wtg.PrivateKey.PublicExponent)
2315 var rsaE *C.BIGNUM 2327 var rsaE *C.BIGNUM
2316 defer C.BN_free(rsaE) 2328 defer C.BN_free(rsaE)
2317 if C.BN_hex2bn(&rsaE, e) == 0 { 2329 if C.BN_hex2bn(&rsaE, e) == 0 {
@@ -2319,7 +2331,7 @@ func (wtg *wycheproofTestGroupRsaesOaep) run(algorithm string, variant testVaria
2319 } 2331 }
2320 C.free(unsafe.Pointer(e)) 2332 C.free(unsafe.Pointer(e))
2321 2333
2322 n := C.CString(wtg.N) 2334 n := C.CString(wtg.PrivateKey.Modulus)
2323 var rsaN *C.BIGNUM 2335 var rsaN *C.BIGNUM
2324 defer C.BN_free(rsaN) 2336 defer C.BN_free(rsaN)
2325 if C.BN_hex2bn(&rsaN, n) == 0 { 2337 if C.BN_hex2bn(&rsaN, n) == 0 {
@@ -2393,7 +2405,7 @@ func (wtg *wycheproofTestGroupRsaesPkcs1) run(algorithm string, variant testVari
2393 } 2405 }
2394 defer C.RSA_free(rsa) 2406 defer C.RSA_free(rsa)
2395 2407
2396 d := C.CString(wtg.D) 2408 d := C.CString(wtg.PrivateKey.PrivateExponent)
2397 var rsaD *C.BIGNUM 2409 var rsaD *C.BIGNUM
2398 defer C.BN_free(rsaD) 2410 defer C.BN_free(rsaD)
2399 if C.BN_hex2bn(&rsaD, d) == 0 { 2411 if C.BN_hex2bn(&rsaD, d) == 0 {
@@ -2401,7 +2413,7 @@ func (wtg *wycheproofTestGroupRsaesPkcs1) run(algorithm string, variant testVari
2401 } 2413 }
2402 C.free(unsafe.Pointer(d)) 2414 C.free(unsafe.Pointer(d))
2403 2415
2404 e := C.CString(wtg.E) 2416 e := C.CString(wtg.PrivateKey.PublicExponent)
2405 var rsaE *C.BIGNUM 2417 var rsaE *C.BIGNUM
2406 defer C.BN_free(rsaE) 2418 defer C.BN_free(rsaE)
2407 if C.BN_hex2bn(&rsaE, e) == 0 { 2419 if C.BN_hex2bn(&rsaE, e) == 0 {
@@ -2409,7 +2421,7 @@ func (wtg *wycheproofTestGroupRsaesPkcs1) run(algorithm string, variant testVari
2409 } 2421 }
2410 C.free(unsafe.Pointer(e)) 2422 C.free(unsafe.Pointer(e))
2411 2423
2412 n := C.CString(wtg.N) 2424 n := C.CString(wtg.PrivateKey.Modulus)
2413 var rsaN *C.BIGNUM 2425 var rsaN *C.BIGNUM
2414 defer C.BN_free(rsaN) 2426 defer C.BN_free(rsaN)
2415 if C.BN_hex2bn(&rsaN, n) == 0 { 2427 if C.BN_hex2bn(&rsaN, n) == 0 {
@@ -2474,7 +2486,19 @@ func (wtg *wycheproofTestGroupRsassa) run(algorithm string, variant testVariant)
2474 } 2486 }
2475 defer C.RSA_free(rsa) 2487 defer C.RSA_free(rsa)
2476 2488
2477 e := C.CString(wtg.E) 2489 var publicExponent, modulus string
2490 if wtg.PublicKey != nil {
2491 publicExponent = wtg.PublicKey.PublicExponent
2492 modulus = wtg.PublicKey.Modulus
2493 } else if wtg.PrivateKey != nil {
2494 publicExponent = wtg.PrivateKey.PublicExponent
2495 modulus = wtg.PrivateKey.Modulus
2496 }
2497 if publicExponent == "" || modulus == "" {
2498 return true
2499 }
2500
2501 e := C.CString(publicExponent)
2478 var rsaE *C.BIGNUM 2502 var rsaE *C.BIGNUM
2479 defer C.BN_free(rsaE) 2503 defer C.BN_free(rsaE)
2480 if C.BN_hex2bn(&rsaE, e) == 0 { 2504 if C.BN_hex2bn(&rsaE, e) == 0 {
@@ -2482,7 +2506,7 @@ func (wtg *wycheproofTestGroupRsassa) run(algorithm string, variant testVariant)
2482 } 2506 }
2483 C.free(unsafe.Pointer(e)) 2507 C.free(unsafe.Pointer(e))
2484 2508
2485 n := C.CString(wtg.N) 2509 n := C.CString(modulus)
2486 var rsaN *C.BIGNUM 2510 var rsaN *C.BIGNUM
2487 defer C.BN_free(rsaN) 2511 defer C.BN_free(rsaN)
2488 if C.BN_hex2bn(&rsaN, n) == 0 { 2512 if C.BN_hex2bn(&rsaN, n) == 0 {
@@ -2539,7 +2563,19 @@ func (wtg *wycheproofTestGroupRSA) run(algorithm string, variant testVariant) bo
2539 } 2563 }
2540 defer C.RSA_free(rsa) 2564 defer C.RSA_free(rsa)
2541 2565
2542 e := C.CString(wtg.E) 2566 var publicExponent, modulus string
2567 if wtg.PublicKey != nil {
2568 publicExponent = wtg.PublicKey.PublicExponent
2569 modulus = wtg.PublicKey.Modulus
2570 } else if wtg.PrivateKey != nil {
2571 publicExponent = wtg.PrivateKey.PublicExponent
2572 modulus = wtg.PrivateKey.Modulus
2573 }
2574 if publicExponent == "" || modulus == "" {
2575 return true
2576 }
2577
2578 e := C.CString(publicExponent)
2543 var rsaE *C.BIGNUM 2579 var rsaE *C.BIGNUM
2544 defer C.BN_free(rsaE) 2580 defer C.BN_free(rsaE)
2545 if C.BN_hex2bn(&rsaE, e) == 0 { 2581 if C.BN_hex2bn(&rsaE, e) == 0 {
@@ -2547,7 +2583,7 @@ func (wtg *wycheproofTestGroupRSA) run(algorithm string, variant testVariant) bo
2547 } 2583 }
2548 C.free(unsafe.Pointer(e)) 2584 C.free(unsafe.Pointer(e))
2549 2585
2550 n := C.CString(wtg.N) 2586 n := C.CString(modulus)
2551 var rsaN *C.BIGNUM 2587 var rsaN *C.BIGNUM
2552 defer C.BN_free(rsaN) 2588 defer C.BN_free(rsaN)
2553 if C.BN_hex2bn(&rsaN, n) == 0 { 2589 if C.BN_hex2bn(&rsaN, n) == 0 {
@@ -2775,7 +2811,7 @@ func main() {
2775 {v0, "JSON webcrypto", "json_web_*_test.json", Skip}, 2811 {v0, "JSON webcrypto", "json_web_*_test.json", Skip},
2776 {v0, "KW", "kw_test.json", Normal}, 2812 {v0, "KW", "kw_test.json", Normal},
2777 {v0, "Primality test", "primality_test.json", Normal}, 2813 {v0, "Primality test", "primality_test.json", Normal},
2778 {v0, "RSA", "rsa_*test.json", Normal}, 2814 {v1, "RSA", "rsa_*test.json", Normal},
2779 {v1, "X25519", "x25519_test.json", Normal}, 2815 {v1, "X25519", "x25519_test.json", Normal},
2780 {v1, "X25519 ASN", "x25519_asn_test.json", Skip}, 2816 {v1, "X25519 ASN", "x25519_asn_test.json", Skip},
2781 {v1, "X25519 JWK", "x25519_jwk_test.json", Skip}, 2817 {v1, "X25519 JWK", "x25519_jwk_test.json", Skip},