package kdbx import ( "encoding/hex" "testing" ) // RFC 7693 appendix A, and the standard unkeyed vectors for the empty input // and "abc". func TestBlake2bVectors(t *testing.T) { for _, tc := range []struct { in, want string outLen int }{ {"", "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419" + "d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce", 64}, {"abc", "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1" + "7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923", 64}, {"abc", "bddd813c634239723171ef3fee98579b94964e3bb1cb3e427262c8c068d52319", 32}, } { got := hex.EncodeToString(blake2bSum(tc.outLen, []byte(tc.in))) if got != tc.want { t.Errorf("blake2b-%d(%q) =\n%s\nwant\n%s", tc.outLen*8, tc.in, got, tc.want) } } } func TestBlake2bKeyed(t *testing.T) { // RFC 7693 appendix A uses a 64-byte key of 0x00..0x3f with input 0x00. key := make([]byte, 64) for i := range key { key[i] = byte(i) } h := newBlake2b(64, key) h.Write([]byte{0x00}) want := "961f6dd1e4dd30f63901690c512e78e4b45e4742ed197c3c5e45c549fd25f2e4" + "187b0bc9fe30492b16b0d0bc4ef9b0f34c7003fac09a5ef1532e69430234cebd" if got := hex.EncodeToString(h.Sum()); got != want { t.Fatalf("keyed blake2b =\n%s\nwant\n%s", got, want) } } func TestBlake2bAcrossWriteBoundaries(t *testing.T) { data := make([]byte, 300) for i := range data { data[i] = byte(i) } want := hex.EncodeToString(blake2bSum(64, data)) h := newBlake2b(64, nil) for _, n := range []int{1, 127, 1, 128, 43} { h.Write(data[:n]) data = data[n:] } if got := hex.EncodeToString(h.Sum()); got != want { t.Fatal("chunked writes differ from a single write") } }