| | |
| | |
| | |
| |
|
| | package cipher_test |
| |
|
| | import ( |
| | "crypto/aes" |
| | "crypto/cipher" |
| | "crypto/des" |
| | "crypto/internal/cryptotest" |
| | "fmt" |
| | "io" |
| | "math/rand" |
| | "testing" |
| | "time" |
| | ) |
| |
|
| | |
| | func TestCBCBlockMode(t *testing.T) { |
| | cryptotest.TestAllImplementations(t, "aes", func(t *testing.T) { |
| | for _, keylen := range []int{128, 192, 256} { |
| | t.Run(fmt.Sprintf("AES-%d", keylen), func(t *testing.T) { |
| | rng := newRandReader(t) |
| |
|
| | key := make([]byte, keylen/8) |
| | rng.Read(key) |
| |
|
| | block, err := aes.NewCipher(key) |
| | if err != nil { |
| | panic(err) |
| | } |
| |
|
| | cryptotest.TestBlockMode(t, block, cipher.NewCBCEncrypter, cipher.NewCBCDecrypter) |
| | }) |
| | } |
| | }) |
| |
|
| | t.Run("DES", func(t *testing.T) { |
| | rng := newRandReader(t) |
| |
|
| | key := make([]byte, 8) |
| | rng.Read(key) |
| |
|
| | block, err := des.NewCipher(key) |
| | if err != nil { |
| | panic(err) |
| | } |
| |
|
| | cryptotest.TestBlockMode(t, block, cipher.NewCBCEncrypter, cipher.NewCBCDecrypter) |
| | }) |
| | } |
| |
|
| | func TestCBCExtraMethods(t *testing.T) { |
| | block, _ := aes.NewCipher(make([]byte, 16)) |
| | iv := make([]byte, block.BlockSize()) |
| | s := cipher.NewCBCEncrypter(block, iv) |
| | cryptotest.NoExtraMethods(t, &s, "SetIV") |
| |
|
| | s = cipher.NewCBCDecrypter(block, iv) |
| | cryptotest.NoExtraMethods(t, &s, "SetIV") |
| | } |
| |
|
| | func newRandReader(t *testing.T) io.Reader { |
| | seed := time.Now().UnixNano() |
| | t.Logf("Deterministic RNG seed: 0x%x", seed) |
| | return rand.New(rand.NewSource(seed)) |
| | } |
| |
|