git.iko.soy/typeable/oauth2-proxy
on master help sign in
Ensure Cipher.Encrypt doesn't mangle input data []byte
9382293Nick Meves
pkg/encryption/cipher_test.go+9−3
@@ -80,20 +80,26 @@ func TestEncryptAndDecrypt(t *testing.T) {
80 _, err := io.ReadFull(rand.Reader, data)
80 _, err := io.ReadFull(rand.Reader, data)
81 assert.Equal(t, nil, err)
81 assert.Equal(t, nil, err)
82
82
83+ // Ensure our Encrypt function doesn't encrypt in place
84+ immutableData := make([]byte, len(data))
85+ copy(immutableData, data)
86+
83 encrypted, err := c.Encrypt(data)
87 encrypted, err := c.Encrypt(data)
84 assert.Equal(t, nil, err)
88 assert.Equal(t, nil, err)
85 assert.NotEqual(t, encrypted, data)
89 assert.NotEqual(t, encrypted, data)
90+ // Encrypt didn't operate in-place on []byte
91+ assert.Equal(t, data, immutableData)
86
92
87 // Ensure our Decrypt function doesn't decrypt in place
93 // Ensure our Decrypt function doesn't decrypt in place
88− immutable := make([]byte, len(encrypted))
94+ immutableEnc := make([]byte, len(encrypted))
89− copy(immutable, encrypted)
95+ copy(immutableEnc, encrypted)
90
96
91 decrypted, err := c.Decrypt(encrypted)
97 decrypted, err := c.Decrypt(encrypted)
92 assert.Equal(t, nil, err)
98 assert.Equal(t, nil, err)
93 // Original data back
99 // Original data back
94 assert.Equal(t, data, decrypted)
100 assert.Equal(t, data, decrypted)
95 // Decrypt didn't operate in-place on []byte
101 // Decrypt didn't operate in-place on []byte
96− assert.Equal(t, encrypted, immutable)
102+ assert.Equal(t, encrypted, immutableEnc)
97 // Encrypt/Decrypt actually did something
103 // Encrypt/Decrypt actually did something
98 assert.NotEqual(t, encrypted, decrypted)
104 assert.NotEqual(t, encrypted, decrypted)
99 })
105 })