blake2b: test all three hashing implementations This adds use* flags for all arches so a common test can observe what implementations are supported and test all supported implementations. Change-Id: I0497b91294ed99309074ac4614ac996e006630c5 Reviewed-on: https://go-review.googlesource.com/31714 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Minux Ma <minux@golang.org> Reviewed-by: Andreas Auernhammer <aead@mail.de>
diff --git a/blake2b/blake2b_amd64.go b/blake2b/blake2b_amd64.go index 374b5f7..f11dcbc 100644 --- a/blake2b/blake2b_amd64.go +++ b/blake2b/blake2b_amd64.go
@@ -6,6 +6,7 @@ package blake2b +var useAVX2 = false var useSSE4 = supportSSE4() //go:noescape
diff --git a/blake2b/blake2b_ref.go b/blake2b/blake2b_ref.go index da156a1..2c3c68b 100644 --- a/blake2b/blake2b_ref.go +++ b/blake2b/blake2b_ref.go
@@ -6,6 +6,9 @@ package blake2b +var useAVX2 = false +var useSSE4 = false + func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { hashBlocksGeneric(h, c, flag, blocks) }
diff --git a/blake2b/blake2b_test.go b/blake2b/blake2b_test.go index 54778d1..4607fda 100644 --- a/blake2b/blake2b_test.go +++ b/blake2b/blake2b_test.go
@@ -21,6 +21,25 @@ } func TestHashes(t *testing.T) { + defer func(sse4, avx2 bool) { + useSSE4, useAVX2 = sse4, avx2 + }(useSSE4, useAVX2) + + if useAVX2 { + t.Log("AVX2 version") + testHashes(t) + useAVX2 = false + } + if useSSE4 { + t.Log("SSE4 version") + testHashes(t) + useSSE4 = false + } + t.Log("generic version") + testHashes(t) +} + +func testHashes(t *testing.T) { key, _ := hex.DecodeString("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f") input := make([]byte, 255)