stupidgcm: deduplicate tests 2/2
Deduplicate the cipher setup that was identical for all tests for each cipher.
This commit is contained in:
parent
676a4ceb87
commit
961b8ca438
@ -3,10 +3,20 @@ package stupidgcm
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/cipher"
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"log"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func testCiphers(t *testing.T, c1 cipher.AEAD, c2 cipher.AEAD) {
|
||||
t.Run("testEncryptDecrypt", func(t *testing.T) { testEncryptDecrypt(t, c1, c2) })
|
||||
t.Run("testInplaceSeal", func(t *testing.T) { testInplaceSeal(t, c1, c2) })
|
||||
t.Run("testInplaceOpen", func(t *testing.T) { testInplaceOpen(t, c1, c2) })
|
||||
t.Run("testCorruption_c1", func(t *testing.T) { testCorruption(t, c1) })
|
||||
t.Run("testCorruption_c2", func(t *testing.T) { testCorruption(t, c2) })
|
||||
}
|
||||
|
||||
// testEncryptDecrypt encrypts and decrypts using both stupidgcm and Go's built-in
|
||||
// GCM implementation and verifies that the results are identical.
|
||||
func testEncryptDecrypt(t *testing.T, c1 cipher.AEAD, c2 cipher.AEAD) {
|
||||
@ -150,3 +160,13 @@ func testCorruption(t *testing.T, c cipher.AEAD) {
|
||||
t.Fatalf("Should have gotten error")
|
||||
}
|
||||
}
|
||||
|
||||
// Get "n" random bytes from /dev/urandom or panic
|
||||
func randBytes(n int) []byte {
|
||||
b := make([]byte, n)
|
||||
_, err := rand.Read(b)
|
||||
if err != nil {
|
||||
log.Panic("Failed to read random bytes: " + err.Error())
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
@ -11,9 +11,7 @@ import (
|
||||
"golang.org/x/crypto/chacha20poly1305"
|
||||
)
|
||||
|
||||
// TestEncryptDecrypt encrypts and decrypts using both stupidgcm and Go's built-in
|
||||
// GCM implementation and verifies that the results are identical.
|
||||
func TestEncryptDecryptChacha(t *testing.T) {
|
||||
func TestStupidChacha20poly1305(t *testing.T) {
|
||||
key := randBytes(32)
|
||||
c := newChacha20poly1305(key)
|
||||
ref, err := chacha20poly1305.New(key)
|
||||
@ -21,42 +19,5 @@ func TestEncryptDecryptChacha(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
testEncryptDecrypt(t, c, ref)
|
||||
}
|
||||
|
||||
// Seal re-uses the "dst" buffer it is large enough.
|
||||
// Check that this works correctly by testing different "dst" capacities from
|
||||
// 5000 to 16 and "in" lengths from 1 to 5000.
|
||||
func TestInplaceSealChacha(t *testing.T) {
|
||||
key := randBytes(32)
|
||||
c := newChacha20poly1305(key)
|
||||
ref, err := chacha20poly1305.New(key)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
testInplaceSeal(t, c, ref)
|
||||
}
|
||||
|
||||
// Open re-uses the "dst" buffer it is large enough.
|
||||
// Check that this works correctly by testing different "dst" capacities from
|
||||
// 5000 to 16 and "in" lengths from 1 to 5000.
|
||||
func TestInplaceOpenChacha(t *testing.T) {
|
||||
key := randBytes(32)
|
||||
c := newChacha20poly1305(key)
|
||||
ref, err := chacha20poly1305.New(key)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
testInplaceOpen(t, c, ref)
|
||||
}
|
||||
|
||||
// TestCorruption verifies that changes in the ciphertext result in a decryption
|
||||
// error
|
||||
func TestCorruptionChacha(t *testing.T) {
|
||||
key := randBytes(32)
|
||||
c := newChacha20poly1305(key)
|
||||
|
||||
testCorruption(t, c)
|
||||
testCiphers(t, c, ref)
|
||||
}
|
||||
|
@ -8,24 +8,10 @@ package stupidgcm
|
||||
import (
|
||||
"crypto/aes"
|
||||
"crypto/cipher"
|
||||
"crypto/rand"
|
||||
"log"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// Get "n" random bytes from /dev/urandom or panic
|
||||
func randBytes(n int) []byte {
|
||||
b := make([]byte, n)
|
||||
_, err := rand.Read(b)
|
||||
if err != nil {
|
||||
log.Panic("Failed to read random bytes: " + err.Error())
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
// TestEncryptDecrypt encrypts and decrypts using both stupidgcm and Go's built-in
|
||||
// GCM implementation and verifies that the results are identical.
|
||||
func TestEncryptDecrypt(t *testing.T) {
|
||||
func TestStupidGCM(t *testing.T) {
|
||||
key := randBytes(32)
|
||||
sGCM := New(key, false)
|
||||
|
||||
@ -38,52 +24,5 @@ func TestEncryptDecrypt(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
testEncryptDecrypt(t, sGCM, gGCM)
|
||||
}
|
||||
|
||||
// Seal re-uses the "dst" buffer it is large enough.
|
||||
// Check that this works correctly by testing different "dst" capacities from
|
||||
// 5000 to 16 and "in" lengths from 1 to 5000.
|
||||
func TestInplaceSeal(t *testing.T) {
|
||||
key := randBytes(32)
|
||||
sGCM := New(key, false)
|
||||
|
||||
gAES, err := aes.NewCipher(key)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
gGCM, err := cipher.NewGCMWithNonceSize(gAES, 16)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
testInplaceSeal(t, sGCM, gGCM)
|
||||
}
|
||||
|
||||
// Open re-uses the "dst" buffer it is large enough.
|
||||
// Check that this works correctly by testing different "dst" capacities from
|
||||
// 5000 to 16 and "in" lengths from 1 to 5000.
|
||||
func TestInplaceOpen(t *testing.T) {
|
||||
key := randBytes(32)
|
||||
sGCM := New(key, false)
|
||||
|
||||
gAES, err := aes.NewCipher(key)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
gGCM, err := cipher.NewGCMWithNonceSize(gAES, 16)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
testInplaceOpen(t, sGCM, gGCM)
|
||||
}
|
||||
|
||||
// TestCorruption verifies that changes in the ciphertext result in a decryption
|
||||
// error
|
||||
func TestCorruption(t *testing.T) {
|
||||
key := randBytes(32)
|
||||
sGCM := New(key, false)
|
||||
|
||||
testCorruption(t, sGCM)
|
||||
testCiphers(t, sGCM, gGCM)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user