summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/regress/lib/libcrypto/wycheproof/wycheproof.go63
1 files changed, 21 insertions, 42 deletions
diff --git a/src/regress/lib/libcrypto/wycheproof/wycheproof.go b/src/regress/lib/libcrypto/wycheproof/wycheproof.go
index 55c10c6634..dfbc721076 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.47 2018/09/15 16:05:17 tb Exp $ */ 1/* $OpenBSD: wycheproof.go,v 1.48 2018/09/15 19:06:47 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2018 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2018 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> 4 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org>
@@ -75,15 +75,15 @@ type wycheproofTestAesCbcPkcs5 struct {
75 Flags []string `json:"flags"` 75 Flags []string `json:"flags"`
76} 76}
77 77
78type wycheproofTestGroupAesCcmOrGcm struct { 78type wycheproofTestGroupAead struct {
79 IVSize int `json:"ivSize"` 79 IVSize int `json:"ivSize"`
80 KeySize int `json:"keySize"` 80 KeySize int `json:"keySize"`
81 TagSize int `json:"tagSize"` 81 TagSize int `json:"tagSize"`
82 Type string `json:"type"` 82 Type string `json:"type"`
83 Tests []*wycheproofTestAesCcmOrGcm `json:"tests"` 83 Tests []*wycheproofTestAead `json:"tests"`
84} 84}
85 85
86type wycheproofTestAesCcmOrGcm struct { 86type wycheproofTestAead struct {
87 TCID int `json:"tcId"` 87 TCID int `json:"tcId"`
88 Comment string `json:"comment"` 88 Comment string `json:"comment"`
89 Key string `json:"key"` 89 Key string `json:"key"`
@@ -113,27 +113,6 @@ type wycheproofTestAesCmac struct {
113 Flags []string `json:"flags"` 113 Flags []string `json:"flags"`
114} 114}
115 115
116type wycheproofTestGroupChaCha20Poly1305 struct {
117 IVSize int `json:"ivSize"`
118 KeySize int `json:"keySize"`
119 TagSize int `json:"tagSize"`
120 Type string `json:"type"`
121 Tests []*wycheproofTestChaCha20Poly1305 `json:"tests"`
122}
123
124type wycheproofTestChaCha20Poly1305 struct {
125 TCID int `json:"tcId"`
126 Comment string `json:"comment"`
127 Key string `json:"key"`
128 IV string `json:"iv"`
129 AAD string `json:"aad"`
130 Msg string `json:"msg"`
131 CT string `json:"ct"`
132 Tag string `json:"tag"`
133 Result string `json:"result"`
134 Flags []string `json:"flags"`
135}
136
137type wycheproofDSAKey struct { 116type wycheproofDSAKey struct {
138 G string `json:"g"` 117 G string `json:"g"`
139 KeySize int `json:"keySize"` 118 KeySize int `json:"keySize"`
@@ -470,7 +449,7 @@ func runAesCbcPkcs5TestGroup(algorithm string, wtg *wycheproofTestGroupAesCbcPkc
470 return success 449 return success
471} 450}
472 451
473func checkAesCcmOrGcm(algorithm string, ctx *C.EVP_CIPHER_CTX, doEncrypt int, key []byte, keyLen int, iv []byte, ivLen int, aad []byte, aadLen int, in []byte, inLen int, out []byte, outLen int, tag []byte, tagLen int, wt *wycheproofTestAesCcmOrGcm) bool { 452func checkAesCcmOrGcm(algorithm string, ctx *C.EVP_CIPHER_CTX, doEncrypt int, key []byte, keyLen int, iv []byte, ivLen int, aad []byte, aadLen int, in []byte, inLen int, out []byte, outLen int, tag []byte, tagLen int, wt *wycheproofTestAead) bool {
474 var ctrlSetIVLen C.int 453 var ctrlSetIVLen C.int
475 var ctrlSetTag C.int 454 var ctrlSetTag C.int
476 var ctrlGetTag C.int 455 var ctrlGetTag C.int
@@ -597,7 +576,7 @@ func checkAesCcmOrGcm(algorithm string, ctx *C.EVP_CIPHER_CTX, doEncrypt int, ke
597 return success 576 return success
598} 577}
599 578
600func runAesCcmOrGcmTest(algorithm string, ctx *C.EVP_CIPHER_CTX, wt *wycheproofTestAesCcmOrGcm) bool { 579func runAesCcmOrGcmTest(algorithm string, ctx *C.EVP_CIPHER_CTX, wt *wycheproofTestAead) bool {
601 key, err := hex.DecodeString(wt.Key) 580 key, err := hex.DecodeString(wt.Key)
602 if err != nil { 581 if err != nil {
603 log.Fatalf("Failed to decode key %q: %v", wt.Key, err) 582 log.Fatalf("Failed to decode key %q: %v", wt.Key, err)
@@ -655,7 +634,7 @@ func runAesCcmOrGcmTest(algorithm string, ctx *C.EVP_CIPHER_CTX, wt *wycheproofT
655 return openSuccess && sealSuccess 634 return openSuccess && sealSuccess
656} 635}
657 636
658func runAesCcmOrGcmTestGroup(algorithm string, wtg *wycheproofTestGroupAesCcmOrGcm) bool { 637func runAesCcmOrGcmTestGroup(algorithm string, wtg *wycheproofTestGroupAead) bool {
659 fmt.Printf("Running %v test group %v with IV size %d, key size %d and tag size %d...\n", algorithm, wtg.Type, wtg.IVSize, wtg.KeySize, wtg.TagSize) 638 fmt.Printf("Running %v test group %v with IV size %d, key size %d and tag size %d...\n", algorithm, wtg.Type, wtg.IVSize, wtg.KeySize, wtg.TagSize)
660 639
661 var cipher *C.EVP_CIPHER 640 var cipher *C.EVP_CIPHER
@@ -793,7 +772,7 @@ func runAesCmacTestGroup(algorithm string, wtg *wycheproofTestGroupAesCmac) bool
793 return success 772 return success
794} 773}
795 774
796func checkChaCha20Poly1305Open(ctx *C.EVP_AEAD_CTX, iv []byte, ivLen int, aad []byte, aadLen int, msg []byte, msgLen int, ct []byte, ctLen int, tag []byte, tagLen int, wt *wycheproofTestChaCha20Poly1305) bool { 775func checkChaCha20Poly1305Open(ctx *C.EVP_AEAD_CTX, iv []byte, ivLen int, aad []byte, aadLen int, msg []byte, msgLen int, ct []byte, ctLen int, tag []byte, tagLen int, wt *wycheproofTestAead) bool {
797 maxOutLen := ctLen + tagLen 776 maxOutLen := ctLen + tagLen
798 777
799 opened := make([]byte, maxOutLen) 778 opened := make([]byte, maxOutLen)
@@ -829,7 +808,7 @@ func checkChaCha20Poly1305Open(ctx *C.EVP_AEAD_CTX, iv []byte, ivLen int, aad []
829 return success 808 return success
830} 809}
831 810
832func checkChaCha20Poly1305Seal(ctx *C.EVP_AEAD_CTX, iv []byte, ivLen int, aad []byte, aadLen int, msg []byte, msgLen int, ct []byte, ctLen int, tag []byte, tagLen int, wt *wycheproofTestChaCha20Poly1305) bool { 811func checkChaCha20Poly1305Seal(ctx *C.EVP_AEAD_CTX, iv []byte, ivLen int, aad []byte, aadLen int, msg []byte, msgLen int, ct []byte, ctLen int, tag []byte, tagLen int, wt *wycheproofTestAead) bool {
833 maxOutLen := msgLen + tagLen 812 maxOutLen := msgLen + tagLen
834 813
835 sealed := make([]byte, maxOutLen) 814 sealed := make([]byte, maxOutLen)
@@ -859,7 +838,7 @@ func checkChaCha20Poly1305Seal(ctx *C.EVP_AEAD_CTX, iv []byte, ivLen int, aad []
859 return success 838 return success
860} 839}
861 840
862func runChaCha20Poly1305Test(iv_len int, key_len int, tag_len int, wt *wycheproofTestChaCha20Poly1305) bool { 841func runChaCha20Poly1305Test(iv_len int, key_len int, tag_len int, wt *wycheproofTestAead) bool {
863 aead := C.EVP_aead_chacha20_poly1305() 842 aead := C.EVP_aead_chacha20_poly1305()
864 if aead == nil { 843 if aead == nil {
865 log.Fatal("EVP_aead_chacha20_poly1305 failed") 844 log.Fatal("EVP_aead_chacha20_poly1305 failed")
@@ -924,7 +903,7 @@ func runChaCha20Poly1305Test(iv_len int, key_len int, tag_len int, wt *wycheproo
924 return openSuccess && sealSuccess 903 return openSuccess && sealSuccess
925} 904}
926 905
927func runChaCha20Poly1305TestGroup(algorithm string, wtg *wycheproofTestGroupChaCha20Poly1305) bool { 906func runChaCha20Poly1305TestGroup(algorithm string, wtg *wycheproofTestGroupAead) bool {
928 // We currently only support nonces of length 12 (96 bits) 907 // We currently only support nonces of length 12 (96 bits)
929 if wtg.IVSize != 96 { 908 if wtg.IVSize != 96 {
930 return true 909 return true
@@ -1513,13 +1492,13 @@ func runTestVectors(path string) bool {
1513 case "AES-CBC-PKCS5": 1492 case "AES-CBC-PKCS5":
1514 wtg = &wycheproofTestGroupAesCbcPkcs5{} 1493 wtg = &wycheproofTestGroupAesCbcPkcs5{}
1515 case "AES-CCM": 1494 case "AES-CCM":
1516 wtg = &wycheproofTestGroupAesCcmOrGcm{} 1495 wtg = &wycheproofTestGroupAead{}
1517 case "AES-CMAC": 1496 case "AES-CMAC":
1518 wtg = &wycheproofTestGroupAesCmac{} 1497 wtg = &wycheproofTestGroupAesCmac{}
1519 case "AES-GCM": 1498 case "AES-GCM":
1520 wtg = &wycheproofTestGroupAesCcmOrGcm{} 1499 wtg = &wycheproofTestGroupAead{}
1521 case "CHACHA20-POLY1305": 1500 case "CHACHA20-POLY1305":
1522 wtg = &wycheproofTestGroupChaCha20Poly1305{} 1501 wtg = &wycheproofTestGroupAead{}
1523 case "DSA": 1502 case "DSA":
1524 wtg = &wycheproofTestGroupDSA{} 1503 wtg = &wycheproofTestGroupDSA{}
1525 case "ECDH": 1504 case "ECDH":
@@ -1547,7 +1526,7 @@ func runTestVectors(path string) bool {
1547 success = false 1526 success = false
1548 } 1527 }
1549 case "AES-CCM": 1528 case "AES-CCM":
1550 if !runAesCcmOrGcmTestGroup(wtv.Algorithm, wtg.(*wycheproofTestGroupAesCcmOrGcm)) { 1529 if !runAesCcmOrGcmTestGroup(wtv.Algorithm, wtg.(*wycheproofTestGroupAead)) {
1551 success = false 1530 success = false
1552 } 1531 }
1553 case "AES-CMAC": 1532 case "AES-CMAC":
@@ -1555,11 +1534,11 @@ func runTestVectors(path string) bool {
1555 success = false 1534 success = false
1556 } 1535 }
1557 case "AES-GCM": 1536 case "AES-GCM":
1558 if !runAesCcmOrGcmTestGroup(wtv.Algorithm, wtg.(*wycheproofTestGroupAesCcmOrGcm)) { 1537 if !runAesCcmOrGcmTestGroup(wtv.Algorithm, wtg.(*wycheproofTestGroupAead)) {
1559 success = false 1538 success = false
1560 } 1539 }
1561 case "CHACHA20-POLY1305": 1540 case "CHACHA20-POLY1305":
1562 if !runChaCha20Poly1305TestGroup(wtv.Algorithm, wtg.(*wycheproofTestGroupChaCha20Poly1305)) { 1541 if !runChaCha20Poly1305TestGroup(wtv.Algorithm, wtg.(*wycheproofTestGroupAead)) {
1563 success = false 1542 success = false
1564 } 1543 }
1565 case "DSA": 1544 case "DSA":