1- package openssl
1+ package openssl_test
22
33import (
44 "bytes"
55 "crypto/cipher"
66 "math"
77 "testing"
8+
9+ "github.com/golang-fips/openssl/v2"
810)
911
1012func TestNewGCMNonce (t * testing.T ) {
1113 key := []byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" )
12- ci , err := NewAESCipher (key )
14+ ci , err := openssl . NewAESCipher (key )
1315 if err != nil {
1416 t .Fatal (err )
1517 }
16- c := ci .(* aesCipher )
1718
18- gi , err := c .NewGCM (gcmStandardNonceSize , gcmTagSize )
19+ const (
20+ gcmTagSize = 16
21+ gcmStandardNonceSize = 12
22+ )
23+
24+ c := ci .(interface {
25+ NewGCM (nonceSize , tagSize int ) (cipher.AEAD , error )
26+ })
27+ g , err := c .NewGCM (gcmStandardNonceSize , gcmTagSize )
1928 if err != nil {
2029 t .Errorf ("expected no error for standard nonce size with standard tag size, got: %#v" , err )
2130 }
22- g := gi .(* aesGCM )
2331 if g .NonceSize () != gcmStandardNonceSize {
2432 t .Errorf ("unexpected nonce size\n got: %#v\n exp: %#v" ,
2533 g .NonceSize (), gcmStandardNonceSize )
@@ -49,12 +57,11 @@ func TestNewGCMNonce(t *testing.T) {
4957
5058func TestSealAndOpen (t * testing.T ) {
5159 key := []byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" )
52- ci , err := NewAESCipher (key )
60+ ci , err := openssl . NewAESCipher (key )
5361 if err != nil {
5462 t .Fatal (err )
5563 }
56- c := ci .(* aesCipher )
57- gcm , err := c .NewGCM (gcmStandardNonceSize , gcmTagSize )
64+ gcm , err := cipher .NewGCM (ci )
5865 if err != nil {
5966 t .Fatal (err )
6067 }
@@ -73,12 +80,11 @@ func TestSealAndOpen(t *testing.T) {
7380
7481func TestSealAndOpen_Empty (t * testing.T ) {
7582 key := []byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" )
76- ci , err := NewAESCipher (key )
83+ ci , err := openssl . NewAESCipher (key )
7784 if err != nil {
7885 t .Fatal (err )
7986 }
80- c := ci .(* aesCipher )
81- gcm , err := c .NewGCM (gcmStandardNonceSize , gcmTagSize )
87+ gcm , err := cipher .NewGCM (ci )
8288 if err != nil {
8389 t .Fatal (err )
8490 }
@@ -95,11 +101,11 @@ func TestSealAndOpen_Empty(t *testing.T) {
95101
96102func TestSealAndOpenTLS (t * testing.T ) {
97103 key := []byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" )
98- ci , err := NewAESCipher (key )
104+ ci , err := openssl . NewAESCipher (key )
99105 if err != nil {
100106 t .Fatal (err )
101107 }
102- gcm , err := NewGCMTLS (ci )
108+ gcm , err := openssl . NewGCMTLS (ci )
103109 if err != nil {
104110 t .Fatal (err )
105111 }
@@ -145,12 +151,11 @@ func TestSealAndOpenTLS(t *testing.T) {
145151
146152func TestSealAndOpenAuthenticationError (t * testing.T ) {
147153 key := []byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" )
148- ci , err := NewAESCipher (key )
154+ ci , err := openssl . NewAESCipher (key )
149155 if err != nil {
150156 t .Fatal (err )
151157 }
152- c := ci .(* aesCipher )
153- gcm , err := c .NewGCM (gcmStandardNonceSize , gcmTagSize )
158+ gcm , err := cipher .NewGCM (ci )
154159 if err != nil {
155160 t .Fatal (err )
156161 }
@@ -159,7 +164,7 @@ func TestSealAndOpenAuthenticationError(t *testing.T) {
159164 additionalData := []byte {0x05 , 0x05 , 0x07 }
160165 sealed := gcm .Seal (nil , nonce , plainText , additionalData )
161166 _ , err = gcm .Open (nil , nonce , sealed , nil )
162- if err != errOpen {
167+ if err != openssl . ErrOpen {
163168 t .Errorf ("expected authentication error, got: %#v" , err )
164169 }
165170}
@@ -175,28 +180,27 @@ func assertPanic(t *testing.T, f func()) {
175180}
176181
177182func TestSealPanic (t * testing.T ) {
178- ci , err := NewAESCipher ([]byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" ))
183+ ci , err := openssl . NewAESCipher ([]byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" ))
179184 if err != nil {
180185 t .Fatal (err )
181186 }
182- c := ci .(* aesCipher )
183- gcm , err := c .NewGCM (gcmStandardNonceSize , gcmTagSize )
187+ gcm , err := cipher .NewGCM (ci )
184188 if err != nil {
185189 t .Fatal (err )
186190 }
187191 assertPanic (t , func () {
188- gcm .Seal (nil , make ([]byte , gcmStandardNonceSize - 1 ), []byte {0x01 , 0x02 , 0x03 }, nil )
192+ gcm .Seal (nil , make ([]byte , gcm . NonceSize () - 1 ), []byte {0x01 , 0x02 , 0x03 }, nil )
189193 })
190194 assertPanic (t , func () {
191- gcm .Seal (nil , make ([]byte , gcmStandardNonceSize ), make ([]byte , math .MaxInt ), nil )
195+ gcm .Seal (nil , make ([]byte , gcm . NonceSize () ), make ([]byte , math .MaxInt ), nil )
192196 })
193197}
194198
195199func TestBlobEncryptBasicBlockEncryption (t * testing.T ) {
196200 key := []byte {0x24 , 0xcd , 0x8b , 0x13 , 0x37 , 0xc5 , 0xc1 , 0xb1 , 0x0 , 0xbb , 0x27 , 0x40 , 0x4f , 0xab , 0x5f , 0x7b , 0x2d , 0x0 , 0x20 , 0xf5 , 0x1 , 0x84 , 0x4 , 0xbf , 0xe3 , 0xbd , 0xa1 , 0xc4 , 0xbf , 0x61 , 0x2f , 0xc5 }
197201 iv := []byte {0x91 , 0xc7 , 0xa7 , 0x54 , 0x52 , 0xef , 0x10 , 0xdb , 0x91 , 0xa8 , 0x6c , 0xf9 , 0x79 , 0xd5 , 0xac , 0x74 }
198202
199- block , err := NewAESCipher (key )
203+ block , err := openssl . NewAESCipher (key )
200204 if err != nil {
201205 t .Errorf ("expected no error for aes.NewCipher, got: %s" , err )
202206 }
@@ -205,17 +209,7 @@ func TestBlobEncryptBasicBlockEncryption(t *testing.T) {
205209 if blockSize != 16 {
206210 t .Errorf ("unexpected block size, expected 16 got: %d" , blockSize )
207211 }
208- var encryptor cipher.BlockMode
209- if c , ok := block .(* aesCipher ); ok {
210- encryptor = c .NewCBCEncrypter (iv )
211- if encryptor == nil {
212- t .Error ("unable to create new CBC encrypter" )
213- }
214- }
215-
216- cbc := encryptor .(* aesCBC )
217- cbc .SetIV (iv )
218-
212+ encryptor := cipher .NewCBCEncrypter (block , iv )
219213 encrypted := make ([]byte , 32 )
220214
221215 // First block. 16 bytes.
@@ -238,13 +232,7 @@ func TestBlobEncryptBasicBlockEncryption(t *testing.T) {
238232 t .Error ("unexpected CryptBlocks result for second block" )
239233 }
240234
241- var decrypter cipher.BlockMode
242- if c , ok := block .(* aesCipher ); ok {
243- decrypter = c .NewCBCDecrypter (iv )
244- if decrypter == nil {
245- t .Error ("unable to create new CBC decrypter" )
246- }
247- }
235+ decrypter := cipher .NewCBCDecrypter (block , iv )
248236 plainText := append (srcBlock1 , srcBlock2 ... )
249237 decrypted := make ([]byte , len (plainText ))
250238 decrypter .CryptBlocks (decrypted , encrypted [:16 ])
@@ -262,7 +250,7 @@ func testDecrypt(t *testing.T, resetNonce bool) {
262250 0xe3 , 0xbd , 0xa1 , 0xc4 , 0xbf , 0x61 , 0x2f , 0xc5 ,
263251 }
264252
265- block , err := NewAESCipher (key )
253+ block , err := openssl . NewAESCipher (key )
266254 if err != nil {
267255 panic (err )
268256 }
@@ -271,20 +259,11 @@ func testDecrypt(t *testing.T, resetNonce bool) {
271259 0x91 , 0xc7 , 0xa7 , 0x54 , 0x52 , 0xef , 0x10 , 0xdb ,
272260 0x91 , 0xa8 , 0x6c , 0xf9 , 0x79 , 0xd5 , 0xac , 0x74 ,
273261 }
274- var encrypter , decrypter cipher.BlockMode
275- if c , ok := block .(* aesCipher ); ok {
276- encrypter = c .NewCBCEncrypter (iv )
277- if encrypter == nil {
278- t .Error ("unable to create new CBC encrypter" )
279- }
280- decrypter = c .NewCBCDecrypter (iv )
281- if decrypter == nil {
282- t .Error ("unable to create new CBC decrypter" )
283- }
284- if resetNonce {
285- for i := range iv {
286- iv [i ] = 0
287- }
262+ encrypter := cipher .NewCBCEncrypter (block , iv )
263+ decrypter := cipher .NewCBCDecrypter (block , iv )
264+ if resetNonce {
265+ for i := range iv {
266+ iv [i ] = 0
288267 }
289268 }
290269
@@ -358,25 +337,13 @@ func Test_aesCipher_finalize(t *testing.T) {
358337 // This test is important because aesCipher.finalize contains logic that is normally not exercided while testing.
359338 // We can't used NewAESCipher here because the returned object will be automatically finalized by the GC
360339 // in case test execution takes long enough, and it can't be finalized twice.
361- new (aesCipher ).finalize ()
362- }
363-
364- func Test_aesCBC_finalize (t * testing.T ) {
365- new (aesCBC ).finalize ()
366- }
367-
368- func Test_aesGCM_finalize (t * testing.T ) {
369- new (aesGCM ).finalize ()
370- }
371-
372- func Test_aesCTR_finalize (t * testing.T ) {
373- new (aesCTR ).finalize ()
340+ openssl .EVPCipherFinalize ()
374341}
375342
376343func TestCipherEncryptDecrypt (t * testing.T ) {
377344 key := []byte {0x2b , 0x7e , 0x15 , 0x16 , 0x28 , 0xae , 0xd2 , 0xa6 , 0xab , 0xf7 , 0x15 , 0x88 , 0x09 , 0xcf , 0x4f , 0x3c }
378345 pt := []byte {0x32 , 0x43 , 0xf6 , 0xa8 , 0x88 , 0x5a , 0x30 , 0x8d , 0x31 , 0x31 , 0x98 , 0xa2 , 0xe0 , 0x37 , 0x07 , 0x34 }
379- c , err := NewAESCipher (key )
346+ c , err := openssl . NewAESCipher (key )
380347 if err != nil {
381348 t .Fatal (err )
382349 }
@@ -412,7 +379,7 @@ func TestNewCTR(t *testing.T) {
412379 0x5a , 0xe4 , 0xdf , 0x3e , 0xdb , 0xd5 , 0xd3 , 0x5e , 0x5b , 0x4f , 0x09 , 0x02 , 0x0d , 0xb0 , 0x3e , 0xab ,
413380 0x1e , 0x03 , 0x1d , 0xda , 0x2f , 0xbe , 0x03 , 0xd1 , 0x79 , 0x21 , 0x70 , 0xa0 , 0xf3 , 0x00 , 0x9c , 0xee ,
414381 }
415- c , err := NewAESCipher (key )
382+ c , err := openssl . NewAESCipher (key )
416383 if err != nil {
417384 t .Fatal (err )
418385 }
@@ -430,7 +397,7 @@ func TestNewCTR(t *testing.T) {
430397func TestCipherEncryptDecryptSharedBuffer (t * testing.T ) {
431398 key := []byte {0x2b , 0x7e , 0x15 , 0x16 , 0x28 , 0xae , 0xd2 , 0xa6 , 0xab , 0xf7 , 0x15 , 0x88 , 0x09 , 0xcf , 0x4f , 0x3c }
432399 pt := []byte {0x32 , 0x43 , 0xf6 , 0xa8 , 0x88 , 0x5a , 0x30 , 0x8d , 0x31 , 0x31 , 0x98 , 0xa2 , 0xe0 , 0x37 , 0x07 , 0x34 }
433- c , err := NewAESCipher (key )
400+ c , err := openssl . NewAESCipher (key )
434401 if err != nil {
435402 t .Fatal (err )
436403 }
@@ -448,7 +415,7 @@ func TestCipherEncryptDecryptSharedBuffer(t *testing.T) {
448415func BenchmarkAES_Encrypt (b * testing.B ) {
449416 key := []byte {0x2b , 0x7e , 0x15 , 0x16 , 0x28 , 0xae , 0xd2 , 0xa6 , 0xab , 0xf7 , 0x15 , 0x88 , 0x09 , 0xcf , 0x4f , 0x3c }
450417 in := []byte {0x32 , 0x43 , 0xf6 , 0xa8 , 0x88 , 0x5a , 0x30 , 0x8d , 0x31 , 0x31 , 0x98 , 0xa2 , 0xe0 , 0x37 , 0x07 , 0x34 }
451- c , err := NewAESCipher (key )
418+ c , err := openssl . NewAESCipher (key )
452419 if err != nil {
453420 b .Fatal ("NewCipher:" , err )
454421 }
@@ -464,7 +431,7 @@ func BenchmarkAES_Encrypt(b *testing.B) {
464431func BenchmarkAES_Decrypt (b * testing.B ) {
465432 key := []byte {0x2b , 0x7e , 0x15 , 0x16 , 0x28 , 0xae , 0xd2 , 0xa6 , 0xab , 0xf7 , 0x15 , 0x88 , 0x09 , 0xcf , 0x4f , 0x3c }
466433 in := []byte {0x39 , 0x25 , 0x84 , 0x1d , 0x02 , 0xdc , 0x09 , 0xfb , 0xdc , 0x11 , 0x85 , 0x97 , 0x19 , 0x6a , 0x0b , 0x32 }
467- c , err := NewAESCipher (key )
434+ c , err := openssl . NewAESCipher (key )
468435 if err != nil {
469436 b .Fatal ("NewCipher:" , err )
470437 }
@@ -488,8 +455,8 @@ func BenchmarkAESGCM_Open(b *testing.B) {
488455 var key = make ([]byte , keySize )
489456 var nonce [12 ]byte
490457 var ad [13 ]byte
491- c , _ := NewAESCipher (key )
492- aesgcm , _ := c .( extraModes ). NewGCM (gcmStandardNonceSize , gcmTagSize )
458+ c , _ := openssl . NewAESCipher (key )
459+ aesgcm , _ := cipher . NewGCM (c )
493460 var out []byte
494461
495462 ct := aesgcm .Seal (nil , nonce [:], buf [:], ad [:])
@@ -511,8 +478,8 @@ func BenchmarkAESGCM_Seal(b *testing.B) {
511478 var key = make ([]byte , keySize )
512479 var nonce [12 ]byte
513480 var ad [13 ]byte
514- c , _ := NewAESCipher (key )
515- aesgcm , _ := c .( extraModes ). NewGCM (gcmStandardNonceSize , gcmTagSize )
481+ c , _ := openssl . NewAESCipher (key )
482+ aesgcm , _ := cipher . NewGCM (c )
516483 var out []byte
517484
518485 b .ResetTimer ()
0 commit comments