|
- // Package data provides utilities for interacting with database data
- // throughout Write.as.
- package data
-
- import (
- "bytes"
- "crypto/rand"
- "strings"
- "testing"
- )
-
- func TestEncDec(t *testing.T) {
- // Generate a random key with a valid length
- k := make([]byte, keyLen)
- _, err := rand.Read(k)
- if err != nil {
- t.Fatal(err)
- }
-
- runEncDec(t, k, "this is my secret message™. 😄", nil)
- runEncDec(t, k, "mygreatemailaddress@gmail.com", nil)
- }
-
- func TestAuthentication(t *testing.T) {
- // Generate a random key with a valid length
- k := make([]byte, keyLen)
- _, err := rand.Read(k)
- if err != nil {
- t.Fatal(err)
- }
-
- runEncDec(t, k, "mygreatemailaddress@gmail.com", func(c []byte) []byte {
- c[0] = 'a'
- t.Logf("Modified: %s\n", c)
- return c
- })
- }
-
- func runEncDec(t *testing.T, k []byte, plaintext string, transform func([]byte) []byte) {
- t.Logf("Plaintext: %s\n", plaintext)
-
- // Encrypt the data
- ciphertext, err := Encrypt(k, plaintext)
- if err != nil {
- t.Fatal(err)
- }
-
- t.Logf("Ciphertext: %s\n", ciphertext)
-
- if transform != nil {
- ciphertext = transform(ciphertext)
- }
-
- // Decrypt the data
- decryptedText, err := Decrypt(k, ciphertext)
- if err != nil {
- if transform != nil && strings.Contains(err.Error(), "message authentication failed") {
- // We modified the ciphertext; make sure we're getting the right error
- t.Logf("%v\n", err)
- return
- }
- t.Fatal(err)
- }
-
- t.Logf("Decrypted: %s\n", string(decryptedText))
-
- if !bytes.Equal([]byte(plaintext), decryptedText) {
- t.Errorf("Plaintext mismatch: got %x vs %x", plaintext, decryptedText)
- }
- }
|