Skip to content

Commit d864b10

Browse files
vitaminniybradfitz
authored andcommitted
blake2s: use math.bits rotate functions instead of ad-hoc implementation
This makes code more readable and idiomatic. Updates golang/go#31456 Benchstat: name old time/op new time/op delta Write64-8 211ns ± 6% 205ns ± 2% ~ (p=0.243 n=10+9) Write1K-8 3.26µs ± 3% 3.12µs ± 2% -4.44% (p=0.000 n=9+9) Sum64-8 227ns ± 5% 217ns ± 6% -4.58% (p=0.009 n=10+10) Sum1K-8 3.28µs ± 2% 3.31µs ± 4% ~ (p=0.412 n=10+9) name old speed new speed delta Write64-8 303MB/s ± 6% 312MB/s ± 1% ~ (p=0.203 n=10+8) Write1K-8 314MB/s ± 3% 329MB/s ± 2% +4.64% (p=0.000 n=9+9) Sum64-8 281MB/s ± 5% 295MB/s ± 5% +4.93% (p=0.009 n=10+10) Sum1K-8 313MB/s ± 2% 310MB/s ± 4% ~ (p=0.447 n=10+9) Change-Id: Iee0e88f4405d4da1feacddaf24835e86d8ddeff7 Reviewed-on: https://go-review.googlesource.com/c/crypto/+/173278 Reviewed-by: Brad Fitzpatrick <[email protected]> Run-TryBot: Brad Fitzpatrick <[email protected]> TryBot-Result: Gobot Gobot <[email protected]>
1 parent f856061 commit d864b10

File tree

1 file changed

+36
-32
lines changed

1 file changed

+36
-32
lines changed

Diff for: blake2s/blake2s_generic.go

+36-32
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
package blake2s
66

7+
import (
8+
"math/bits"
9+
)
10+
711
// the precomputed values for BLAKE2s
812
// there are 10 16-byte arrays - one for each round
913
// the entries are calculated from the sigma constants.
@@ -47,118 +51,118 @@ func hashBlocksGeneric(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) {
4751
v0 += m[s[0]]
4852
v0 += v4
4953
v12 ^= v0
50-
v12 = v12<<(32-16) | v12>>16
54+
v12 = bits.RotateLeft32(v12, -16)
5155
v8 += v12
5256
v4 ^= v8
53-
v4 = v4<<(32-12) | v4>>12
57+
v4 = bits.RotateLeft32(v4, -12)
5458
v1 += m[s[1]]
5559
v1 += v5
5660
v13 ^= v1
57-
v13 = v13<<(32-16) | v13>>16
61+
v13 = bits.RotateLeft32(v13, -16)
5862
v9 += v13
5963
v5 ^= v9
60-
v5 = v5<<(32-12) | v5>>12
64+
v5 = bits.RotateLeft32(v5, -12)
6165
v2 += m[s[2]]
6266
v2 += v6
6367
v14 ^= v2
64-
v14 = v14<<(32-16) | v14>>16
68+
v14 = bits.RotateLeft32(v14, -16)
6569
v10 += v14
6670
v6 ^= v10
67-
v6 = v6<<(32-12) | v6>>12
71+
v6 = bits.RotateLeft32(v6, -12)
6872
v3 += m[s[3]]
6973
v3 += v7
7074
v15 ^= v3
71-
v15 = v15<<(32-16) | v15>>16
75+
v15 = bits.RotateLeft32(v15, -16)
7276
v11 += v15
7377
v7 ^= v11
74-
v7 = v7<<(32-12) | v7>>12
78+
v7 = bits.RotateLeft32(v7, -12)
7579

7680
v0 += m[s[4]]
7781
v0 += v4
7882
v12 ^= v0
79-
v12 = v12<<(32-8) | v12>>8
83+
v12 = bits.RotateLeft32(v12, -8)
8084
v8 += v12
8185
v4 ^= v8
82-
v4 = v4<<(32-7) | v4>>7
86+
v4 = bits.RotateLeft32(v4, -7)
8387
v1 += m[s[5]]
8488
v1 += v5
8589
v13 ^= v1
86-
v13 = v13<<(32-8) | v13>>8
90+
v13 = bits.RotateLeft32(v13, -8)
8791
v9 += v13
8892
v5 ^= v9
89-
v5 = v5<<(32-7) | v5>>7
93+
v5 = bits.RotateLeft32(v5, -7)
9094
v2 += m[s[6]]
9195
v2 += v6
9296
v14 ^= v2
93-
v14 = v14<<(32-8) | v14>>8
97+
v14 = bits.RotateLeft32(v14, -8)
9498
v10 += v14
9599
v6 ^= v10
96-
v6 = v6<<(32-7) | v6>>7
100+
v6 = bits.RotateLeft32(v6, -7)
97101
v3 += m[s[7]]
98102
v3 += v7
99103
v15 ^= v3
100-
v15 = v15<<(32-8) | v15>>8
104+
v15 = bits.RotateLeft32(v15, -8)
101105
v11 += v15
102106
v7 ^= v11
103-
v7 = v7<<(32-7) | v7>>7
107+
v7 = bits.RotateLeft32(v7, -7)
104108

105109
v0 += m[s[8]]
106110
v0 += v5
107111
v15 ^= v0
108-
v15 = v15<<(32-16) | v15>>16
112+
v15 = bits.RotateLeft32(v15, -16)
109113
v10 += v15
110114
v5 ^= v10
111-
v5 = v5<<(32-12) | v5>>12
115+
v5 = bits.RotateLeft32(v5, -12)
112116
v1 += m[s[9]]
113117
v1 += v6
114118
v12 ^= v1
115-
v12 = v12<<(32-16) | v12>>16
119+
v12 = bits.RotateLeft32(v12, -16)
116120
v11 += v12
117121
v6 ^= v11
118-
v6 = v6<<(32-12) | v6>>12
122+
v6 = bits.RotateLeft32(v6, -12)
119123
v2 += m[s[10]]
120124
v2 += v7
121125
v13 ^= v2
122-
v13 = v13<<(32-16) | v13>>16
126+
v13 = bits.RotateLeft32(v13, -16)
123127
v8 += v13
124128
v7 ^= v8
125-
v7 = v7<<(32-12) | v7>>12
129+
v7 = bits.RotateLeft32(v7, -12)
126130
v3 += m[s[11]]
127131
v3 += v4
128132
v14 ^= v3
129-
v14 = v14<<(32-16) | v14>>16
133+
v14 = bits.RotateLeft32(v14, -16)
130134
v9 += v14
131135
v4 ^= v9
132-
v4 = v4<<(32-12) | v4>>12
136+
v4 = bits.RotateLeft32(v4, -12)
133137

134138
v0 += m[s[12]]
135139
v0 += v5
136140
v15 ^= v0
137-
v15 = v15<<(32-8) | v15>>8
141+
v15 = bits.RotateLeft32(v15, -8)
138142
v10 += v15
139143
v5 ^= v10
140-
v5 = v5<<(32-7) | v5>>7
144+
v5 = bits.RotateLeft32(v5, -7)
141145
v1 += m[s[13]]
142146
v1 += v6
143147
v12 ^= v1
144-
v12 = v12<<(32-8) | v12>>8
148+
v12 = bits.RotateLeft32(v12, -8)
145149
v11 += v12
146150
v6 ^= v11
147-
v6 = v6<<(32-7) | v6>>7
151+
v6 = bits.RotateLeft32(v6, -7)
148152
v2 += m[s[14]]
149153
v2 += v7
150154
v13 ^= v2
151-
v13 = v13<<(32-8) | v13>>8
155+
v13 = bits.RotateLeft32(v13, -8)
152156
v8 += v13
153157
v7 ^= v8
154-
v7 = v7<<(32-7) | v7>>7
158+
v7 = bits.RotateLeft32(v7, -7)
155159
v3 += m[s[15]]
156160
v3 += v4
157161
v14 ^= v3
158-
v14 = v14<<(32-8) | v14>>8
162+
v14 = bits.RotateLeft32(v14, -8)
159163
v9 += v14
160164
v4 ^= v9
161-
v4 = v4<<(32-7) | v4>>7
165+
v4 = bits.RotateLeft32(v4, -7)
162166
}
163167

164168
h[0] ^= v0 ^ v8

0 commit comments

Comments
 (0)