Skip to content

Commit a4761ff

Browse files
authored
Merge pull request #108 from golang-fips/des
Support crypto/des
2 parents 13f20f3 + 3fefef4 commit a4761ff

File tree

8 files changed

+2435
-580
lines changed

8 files changed

+2435
-580
lines changed

aes.go

+26-494
Large diffs are not rendered by default.

aes_test.go

+45-78
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
1-
package openssl
1+
package openssl_test
22

33
import (
44
"bytes"
55
"crypto/cipher"
66
"math"
77
"testing"
8+
9+
"github.com/golang-fips/openssl/v2"
810
)
911

1012
func 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\ngot: %#v\nexp: %#v",
2533
g.NonceSize(), gcmStandardNonceSize)
@@ -49,12 +57,11 @@ func TestNewGCMNonce(t *testing.T) {
4957

5058
func 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

7481
func 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

96102
func 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

146152
func 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

177182
func 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

195199
func 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

376343
func 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) {
430397
func 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) {
448415
func 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) {
464431
func 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

Comments
 (0)