blake2s: test all four 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: Icc9c3c1d15626e95f0446493b7fa3159bbe9567d
Reviewed-on: https://go-review.googlesource.com/31712
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/blake2s/blake2s_386.go b/blake2s/blake2s_386.go
index e87da61..3ed0c8c 100644
--- a/blake2s/blake2s_386.go
+++ b/blake2s/blake2s_386.go
@@ -7,8 +7,10 @@
package blake2s
var (
- useSSSE3 = supportSSSE3()
- useSSE2 = supportSSE2()
+ useSSE4 = false
+ useSSSE3 = supportSSSE3()
+ useSSE2 = supportSSE2()
+ useGeneric = true
)
//go:noescape
diff --git a/blake2s/blake2s_amd64.go b/blake2s/blake2s_amd64.go
index 6c5d830..c88f330 100644
--- a/blake2s/blake2s_amd64.go
+++ b/blake2s/blake2s_amd64.go
@@ -7,8 +7,10 @@
package blake2s
var (
- useSSE4 = supportSSE4()
- useSSSE3 = supportSSSE3()
+ useSSE4 = supportSSE4()
+ useSSSE3 = supportSSSE3()
+ useSSE2 = true // Always available on amd64
+ useGeneric = false
)
//go:noescape
diff --git a/blake2s/blake2s_ref.go b/blake2s/blake2s_ref.go
index eded925..9ce99f2 100644
--- a/blake2s/blake2s_ref.go
+++ b/blake2s/blake2s_ref.go
@@ -6,6 +6,13 @@
package blake2s
+var (
+ useSSE4 = false
+ useSSSE3 = false
+ useSSE2 = false
+ useGeneric = true
+)
+
func hashBlocks(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) {
hashBlocksGeneric(h, c, flag, blocks)
}
diff --git a/blake2s/blake2s_test.go b/blake2s/blake2s_test.go
index ab73bbb..e6f2eeb 100644
--- a/blake2s/blake2s_test.go
+++ b/blake2s/blake2s_test.go
@@ -11,6 +11,32 @@
)
func TestHashes(t *testing.T) {
+ defer func(sse2, ssse3, sse4 bool) {
+ useSSE2, useSSSE3, useSSE4 = sse2, ssse3, sse4
+ }(useSSE2, useSSSE3, useSSE4)
+
+ if useSSE4 {
+ t.Log("SSE4 version")
+ testHashes(t)
+ useSSE4 = false
+ }
+ if useSSSE3 {
+ t.Log("SSSE3 version")
+ testHashes(t)
+ useSSSE3 = false
+ }
+ if useSSE2 {
+ t.Log("SSE2 version")
+ testHashes(t)
+ useSSE2 = false
+ }
+ if useGeneric {
+ t.Log("generic version")
+ testHashes(t)
+ }
+}
+
+func testHashes(t *testing.T) {
key, _ := hex.DecodeString("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f")
input := make([]byte, 255)