aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Osadchiy <ivan.osadchii@gmail.com>2019-04-13 16:55:24 +0300
committerIlya Tokar <tocarip@gmail.com>2019-04-16 10:53:44 +0000
commit36b0593f79c17c45985b17239e5f65d13da49949 (patch)
treef1cfc54abc82857b71f7f2869a75f49acdd323d9 /src
parent0f79510dc5d2e586924dae6e531529fe5fa7cbd2 (diff)
downloadgo-36b0593f79c17c45985b17239e5f65d13da49949.tar.xz
crypto/sha256: Use bits.RotateLeft32 instead of ad-hoc implementation
Improves readability of the generic implementation. Updates #31456. Benchmarks (i7-4980HQ CPU) name old time/op new time/op delta Hash8Bytes-8 339ns ± 3% 337ns ± 2% ~ (p=0.595 n=5+5) Hash1K-8 5.12µs ± 6% 4.97µs ± 6% ~ (p=0.310 n=5+5) Hash8K-8 37.6µs ± 5% 38.1µs ± 6% ~ (p=0.841 n=5+5) name old speed new speed delta Hash8Bytes-8 23.6MB/s ± 3% 23.8MB/s ± 3% ~ (p=0.690 n=5+5) Hash1K-8 200MB/s ± 6% 206MB/s ± 5% ~ (p=0.310 n=5+5) Hash8K-8 218MB/s ± 5% 215MB/s ± 6% ~ (p=0.841 n=5+5) Change-Id: Ic488841699138efde76e900bce1dd38fdbc88ec6 Reviewed-on: https://go-review.googlesource.com/c/go/+/171731 Reviewed-by: Ilya Tokar <tocarip@gmail.com> Run-TryBot: Ilya Tokar <tocarip@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/crypto/sha256/sha256block.go10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/crypto/sha256/sha256block.go b/src/crypto/sha256/sha256block.go
index d43bbf0245..bd2f9da93c 100644
--- a/src/crypto/sha256/sha256block.go
+++ b/src/crypto/sha256/sha256block.go
@@ -8,6 +8,8 @@
package sha256
+import "math/bits"
+
var _K = []uint32{
0x428a2f98,
0x71374491,
@@ -87,18 +89,18 @@ func blockGeneric(dig *digest, p []byte) {
}
for i := 16; i < 64; i++ {
v1 := w[i-2]
- t1 := (v1>>17 | v1<<(32-17)) ^ (v1>>19 | v1<<(32-19)) ^ (v1 >> 10)
+ t1 := (bits.RotateLeft32(v1, -17)) ^ (bits.RotateLeft32(v1, -19)) ^ (v1 >> 10)
v2 := w[i-15]
- t2 := (v2>>7 | v2<<(32-7)) ^ (v2>>18 | v2<<(32-18)) ^ (v2 >> 3)
+ t2 := (bits.RotateLeft32(v2, -7)) ^ (bits.RotateLeft32(v2, -18)) ^ (v2 >> 3)
w[i] = t1 + w[i-7] + t2 + w[i-16]
}
a, b, c, d, e, f, g, h := h0, h1, h2, h3, h4, h5, h6, h7
for i := 0; i < 64; i++ {
- t1 := h + ((e>>6 | e<<(32-6)) ^ (e>>11 | e<<(32-11)) ^ (e>>25 | e<<(32-25))) + ((e & f) ^ (^e & g)) + _K[i] + w[i]
+ t1 := h + ((bits.RotateLeft32(e, -6)) ^ (bits.RotateLeft32(e, -11)) ^ (bits.RotateLeft32(e, -25))) + ((e & f) ^ (^e & g)) + _K[i] + w[i]
- t2 := ((a>>2 | a<<(32-2)) ^ (a>>13 | a<<(32-13)) ^ (a>>22 | a<<(32-22))) + ((a & b) ^ (a & c) ^ (b & c))
+ t2 := ((bits.RotateLeft32(a, -2)) ^ (bits.RotateLeft32(a, -13)) ^ (bits.RotateLeft32(a, -22))) + ((a & b) ^ (a & c) ^ (b & c))
h = g
g = f