1
- package openssl
1
+ package openssl_test
2
2
3
3
import (
4
4
"bytes"
5
5
"crypto/cipher"
6
6
"math"
7
7
"testing"
8
+
9
+ "github.com/golang-fips/openssl/v2"
8
10
)
9
11
10
12
func TestNewGCMNonce (t * testing.T ) {
11
13
key := []byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" )
12
- ci , err := NewAESCipher (key )
14
+ ci , err := openssl . NewAESCipher (key )
13
15
if err != nil {
14
16
t .Fatal (err )
15
17
}
16
- c := ci .(* aesCipher )
17
18
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 )
19
28
if err != nil {
20
29
t .Errorf ("expected no error for standard nonce size with standard tag size, got: %#v" , err )
21
30
}
22
- g := gi .(* aesGCM )
23
31
if g .NonceSize () != gcmStandardNonceSize {
24
32
t .Errorf ("unexpected nonce size\n got: %#v\n exp: %#v" ,
25
33
g .NonceSize (), gcmStandardNonceSize )
@@ -49,12 +57,11 @@ func TestNewGCMNonce(t *testing.T) {
49
57
50
58
func TestSealAndOpen (t * testing.T ) {
51
59
key := []byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" )
52
- ci , err := NewAESCipher (key )
60
+ ci , err := openssl . NewAESCipher (key )
53
61
if err != nil {
54
62
t .Fatal (err )
55
63
}
56
- c := ci .(* aesCipher )
57
- gcm , err := c .NewGCM (gcmStandardNonceSize , gcmTagSize )
64
+ gcm , err := cipher .NewGCM (ci )
58
65
if err != nil {
59
66
t .Fatal (err )
60
67
}
@@ -73,12 +80,11 @@ func TestSealAndOpen(t *testing.T) {
73
80
74
81
func TestSealAndOpen_Empty (t * testing.T ) {
75
82
key := []byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" )
76
- ci , err := NewAESCipher (key )
83
+ ci , err := openssl . NewAESCipher (key )
77
84
if err != nil {
78
85
t .Fatal (err )
79
86
}
80
- c := ci .(* aesCipher )
81
- gcm , err := c .NewGCM (gcmStandardNonceSize , gcmTagSize )
87
+ gcm , err := cipher .NewGCM (ci )
82
88
if err != nil {
83
89
t .Fatal (err )
84
90
}
@@ -95,11 +101,11 @@ func TestSealAndOpen_Empty(t *testing.T) {
95
101
96
102
func TestSealAndOpenTLS (t * testing.T ) {
97
103
key := []byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" )
98
- ci , err := NewAESCipher (key )
104
+ ci , err := openssl . NewAESCipher (key )
99
105
if err != nil {
100
106
t .Fatal (err )
101
107
}
102
- gcm , err := NewGCMTLS (ci )
108
+ gcm , err := openssl . NewGCMTLS (ci )
103
109
if err != nil {
104
110
t .Fatal (err )
105
111
}
@@ -145,12 +151,11 @@ func TestSealAndOpenTLS(t *testing.T) {
145
151
146
152
func TestSealAndOpenAuthenticationError (t * testing.T ) {
147
153
key := []byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" )
148
- ci , err := NewAESCipher (key )
154
+ ci , err := openssl . NewAESCipher (key )
149
155
if err != nil {
150
156
t .Fatal (err )
151
157
}
152
- c := ci .(* aesCipher )
153
- gcm , err := c .NewGCM (gcmStandardNonceSize , gcmTagSize )
158
+ gcm , err := cipher .NewGCM (ci )
154
159
if err != nil {
155
160
t .Fatal (err )
156
161
}
@@ -159,7 +164,7 @@ func TestSealAndOpenAuthenticationError(t *testing.T) {
159
164
additionalData := []byte {0x05 , 0x05 , 0x07 }
160
165
sealed := gcm .Seal (nil , nonce , plainText , additionalData )
161
166
_ , err = gcm .Open (nil , nonce , sealed , nil )
162
- if err != errOpen {
167
+ if err != openssl . ErrOpen {
163
168
t .Errorf ("expected authentication error, got: %#v" , err )
164
169
}
165
170
}
@@ -175,28 +180,27 @@ func assertPanic(t *testing.T, f func()) {
175
180
}
176
181
177
182
func TestSealPanic (t * testing.T ) {
178
- ci , err := NewAESCipher ([]byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" ))
183
+ ci , err := openssl . NewAESCipher ([]byte ("D249BF6DEC97B1EBD69BC4D6B3A3C49D" ))
179
184
if err != nil {
180
185
t .Fatal (err )
181
186
}
182
- c := ci .(* aesCipher )
183
- gcm , err := c .NewGCM (gcmStandardNonceSize , gcmTagSize )
187
+ gcm , err := cipher .NewGCM (ci )
184
188
if err != nil {
185
189
t .Fatal (err )
186
190
}
187
191
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 )
189
193
})
190
194
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 )
192
196
})
193
197
}
194
198
195
199
func TestBlobEncryptBasicBlockEncryption (t * testing.T ) {
196
200
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 }
197
201
iv := []byte {0x91 , 0xc7 , 0xa7 , 0x54 , 0x52 , 0xef , 0x10 , 0xdb , 0x91 , 0xa8 , 0x6c , 0xf9 , 0x79 , 0xd5 , 0xac , 0x74 }
198
202
199
- block , err := NewAESCipher (key )
203
+ block , err := openssl . NewAESCipher (key )
200
204
if err != nil {
201
205
t .Errorf ("expected no error for aes.NewCipher, got: %s" , err )
202
206
}
@@ -205,17 +209,7 @@ func TestBlobEncryptBasicBlockEncryption(t *testing.T) {
205
209
if blockSize != 16 {
206
210
t .Errorf ("unexpected block size, expected 16 got: %d" , blockSize )
207
211
}
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 )
219
213
encrypted := make ([]byte , 32 )
220
214
221
215
// First block. 16 bytes.
@@ -238,13 +232,7 @@ func TestBlobEncryptBasicBlockEncryption(t *testing.T) {
238
232
t .Error ("unexpected CryptBlocks result for second block" )
239
233
}
240
234
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 )
248
236
plainText := append (srcBlock1 , srcBlock2 ... )
249
237
decrypted := make ([]byte , len (plainText ))
250
238
decrypter .CryptBlocks (decrypted , encrypted [:16 ])
@@ -262,7 +250,7 @@ func testDecrypt(t *testing.T, resetNonce bool) {
262
250
0xe3 , 0xbd , 0xa1 , 0xc4 , 0xbf , 0x61 , 0x2f , 0xc5 ,
263
251
}
264
252
265
- block , err := NewAESCipher (key )
253
+ block , err := openssl . NewAESCipher (key )
266
254
if err != nil {
267
255
panic (err )
268
256
}
@@ -271,20 +259,11 @@ func testDecrypt(t *testing.T, resetNonce bool) {
271
259
0x91 , 0xc7 , 0xa7 , 0x54 , 0x52 , 0xef , 0x10 , 0xdb ,
272
260
0x91 , 0xa8 , 0x6c , 0xf9 , 0x79 , 0xd5 , 0xac , 0x74 ,
273
261
}
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
288
267
}
289
268
}
290
269
@@ -358,25 +337,13 @@ func Test_aesCipher_finalize(t *testing.T) {
358
337
// This test is important because aesCipher.finalize contains logic that is normally not exercided while testing.
359
338
// We can't used NewAESCipher here because the returned object will be automatically finalized by the GC
360
339
// 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 ()
374
341
}
375
342
376
343
func TestCipherEncryptDecrypt (t * testing.T ) {
377
344
key := []byte {0x2b , 0x7e , 0x15 , 0x16 , 0x28 , 0xae , 0xd2 , 0xa6 , 0xab , 0xf7 , 0x15 , 0x88 , 0x09 , 0xcf , 0x4f , 0x3c }
378
345
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 )
380
347
if err != nil {
381
348
t .Fatal (err )
382
349
}
@@ -412,7 +379,7 @@ func TestNewCTR(t *testing.T) {
412
379
0x5a , 0xe4 , 0xdf , 0x3e , 0xdb , 0xd5 , 0xd3 , 0x5e , 0x5b , 0x4f , 0x09 , 0x02 , 0x0d , 0xb0 , 0x3e , 0xab ,
413
380
0x1e , 0x03 , 0x1d , 0xda , 0x2f , 0xbe , 0x03 , 0xd1 , 0x79 , 0x21 , 0x70 , 0xa0 , 0xf3 , 0x00 , 0x9c , 0xee ,
414
381
}
415
- c , err := NewAESCipher (key )
382
+ c , err := openssl . NewAESCipher (key )
416
383
if err != nil {
417
384
t .Fatal (err )
418
385
}
@@ -430,7 +397,7 @@ func TestNewCTR(t *testing.T) {
430
397
func TestCipherEncryptDecryptSharedBuffer (t * testing.T ) {
431
398
key := []byte {0x2b , 0x7e , 0x15 , 0x16 , 0x28 , 0xae , 0xd2 , 0xa6 , 0xab , 0xf7 , 0x15 , 0x88 , 0x09 , 0xcf , 0x4f , 0x3c }
432
399
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 )
434
401
if err != nil {
435
402
t .Fatal (err )
436
403
}
@@ -448,7 +415,7 @@ func TestCipherEncryptDecryptSharedBuffer(t *testing.T) {
448
415
func BenchmarkAES_Encrypt (b * testing.B ) {
449
416
key := []byte {0x2b , 0x7e , 0x15 , 0x16 , 0x28 , 0xae , 0xd2 , 0xa6 , 0xab , 0xf7 , 0x15 , 0x88 , 0x09 , 0xcf , 0x4f , 0x3c }
450
417
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 )
452
419
if err != nil {
453
420
b .Fatal ("NewCipher:" , err )
454
421
}
@@ -464,7 +431,7 @@ func BenchmarkAES_Encrypt(b *testing.B) {
464
431
func BenchmarkAES_Decrypt (b * testing.B ) {
465
432
key := []byte {0x2b , 0x7e , 0x15 , 0x16 , 0x28 , 0xae , 0xd2 , 0xa6 , 0xab , 0xf7 , 0x15 , 0x88 , 0x09 , 0xcf , 0x4f , 0x3c }
466
433
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 )
468
435
if err != nil {
469
436
b .Fatal ("NewCipher:" , err )
470
437
}
@@ -488,8 +455,8 @@ func BenchmarkAESGCM_Open(b *testing.B) {
488
455
var key = make ([]byte , keySize )
489
456
var nonce [12 ]byte
490
457
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 )
493
460
var out []byte
494
461
495
462
ct := aesgcm .Seal (nil , nonce [:], buf [:], ad [:])
@@ -511,8 +478,8 @@ func BenchmarkAESGCM_Seal(b *testing.B) {
511
478
var key = make ([]byte , keySize )
512
479
var nonce [12 ]byte
513
480
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 )
516
483
var out []byte
517
484
518
485
b .ResetTimer ()
0 commit comments