From d9fc652df0957e464d83c87a164ee2b70cb9e4ee Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Mon, 26 Sep 2016 23:06:40 +0200 Subject: siv_aead: add AES-SIV AEAD wrapper --- internal/siv_aead/correctness_test.go | 66 +++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 internal/siv_aead/correctness_test.go (limited to 'internal/siv_aead/correctness_test.go') diff --git a/internal/siv_aead/correctness_test.go b/internal/siv_aead/correctness_test.go new file mode 100644 index 0000000..c271970 --- /dev/null +++ b/internal/siv_aead/correctness_test.go @@ -0,0 +1,66 @@ +package siv_aead + +import ( + "bytes" + "encoding/hex" + "testing" + + "github.com/jacobsa/crypto/siv" +) + +func TestAll(t *testing.T) { + key := bytes.Repeat([]byte{1}, 32) + nonce := bytes.Repeat([]byte{2}, 16) + plaintext := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9} + aData := make([]byte, 24) + // Compare siv and siv_aead results + sResult, err := siv.Encrypt(nonce, key, plaintext, [][]byte{aData, nonce}) + if err != nil { + t.Fatal(err) + } + a := New(key) + aResult := a.Seal(nonce, nonce, plaintext, aData) + if !bytes.Equal(sResult, aResult) { + t.Errorf("siv and siv_aead produce different results") + } + expectedResult, _ := hex.DecodeString( + "02020202020202020202020202020202ad7a4010649a84d8c1dd5f752e935eed57d45b8b10008f3834") + if !bytes.Equal(aResult, expectedResult) { + t.Errorf(hex.EncodeToString(aResult)) + } + // Verify overhead + overhead := len(aResult) - len(plaintext) - len(nonce) + if overhead != a.Overhead() { + t.Errorf("Overhead() returns a wrong value") + } + // Decrypt + p1, err := a.Open(nil, aResult[:16], aResult[16:], aData) + if err != nil { + t.Error(err) + } + if !bytes.Equal(plaintext, p1) { + t.Errorf("wrong plaintext") + } + // Decrypt and append + dst := []byte{0xaa, 0xbb, 0xcc} + p2, err := a.Open(dst, aResult[:16], aResult[16:], aData) + if err != nil { + t.Error(err) + } + p2e := append(dst, plaintext...) + if !bytes.Equal(p2e, p2) { + t.Errorf("wrong plaintext: %s", hex.EncodeToString(p2)) + } + // Decrypt corrupt + aResult[17] = 0 + _, err = a.Open(nil, aResult[:16], aResult[16:], aData) + if err == nil { + t.Error("should have failed") + } + // Decrypt and append corrupt + aResult[17] = 0 + _, err = a.Open(dst, aResult[:16], aResult[16:], aData) + if err == nil { + t.Error("should have failed") + } +} -- cgit v1.2.3