summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2025-09-05 13:47:41 +0000
committertb <>2025-09-05 13:47:41 +0000
commit472f58fac15ad5c1fc0917e726d4a95b388127fc (patch)
treeecf392a423c8851c4640dd34d7193cadf195eca8
parent3391ce89dec660073cd78f2b759e1b6ed694db25 (diff)
downloadopenbsd-472f58fac15ad5c1fc0917e726d4a95b388127fc.tar.gz
openbsd-472f58fac15ad5c1fc0917e726d4a95b388127fc.tar.bz2
openbsd-472f58fac15ad5c1fc0917e726d4a95b388127fc.zip
wycheproof: make RSA tests work
There's more work needed here since some of the tests are designed to test the signing side of things, where we only verify. To be dealt with later.
-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},