Skip to content

Commit a29dc8f

Browse files
vitaminniybradfitz
authored andcommitted
scrypt: use math.bits rotate functions instead of ad-hoc implementation
This makes code more readable and idiomatic. No change in benchmarks. Updates golang/go#31456 Change-Id: I010bbff33580350019ce2b0ff13847261905d32f Reviewed-on: https://go-review.googlesource.com/c/crypto/+/174137 Reviewed-by: Brad Fitzpatrick <[email protected]>
1 parent f162ad8 commit a29dc8f

File tree

1 file changed

+40
-71
lines changed

1 file changed

+40
-71
lines changed

Diff for: scrypt/scrypt.go

+40-71
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package scrypt // import "golang.org/x/crypto/scrypt"
1010
import (
1111
"crypto/sha256"
1212
"errors"
13+
"math/bits"
1314

1415
"golang.org/x/crypto/pbkdf2"
1516
)
@@ -52,77 +53,45 @@ func salsaXOR(tmp *[16]uint32, in, out []uint32) {
5253
x9, x10, x11, x12, x13, x14, x15 := w9, w10, w11, w12, w13, w14, w15
5354

5455
for i := 0; i < 8; i += 2 {
55-
u := x0 + x12
56-
x4 ^= u<<7 | u>>(32-7)
57-
u = x4 + x0
58-
x8 ^= u<<9 | u>>(32-9)
59-
u = x8 + x4
60-
x12 ^= u<<13 | u>>(32-13)
61-
u = x12 + x8
62-
x0 ^= u<<18 | u>>(32-18)
63-
64-
u = x5 + x1
65-
x9 ^= u<<7 | u>>(32-7)
66-
u = x9 + x5
67-
x13 ^= u<<9 | u>>(32-9)
68-
u = x13 + x9
69-
x1 ^= u<<13 | u>>(32-13)
70-
u = x1 + x13
71-
x5 ^= u<<18 | u>>(32-18)
72-
73-
u = x10 + x6
74-
x14 ^= u<<7 | u>>(32-7)
75-
u = x14 + x10
76-
x2 ^= u<<9 | u>>(32-9)
77-
u = x2 + x14
78-
x6 ^= u<<13 | u>>(32-13)
79-
u = x6 + x2
80-
x10 ^= u<<18 | u>>(32-18)
81-
82-
u = x15 + x11
83-
x3 ^= u<<7 | u>>(32-7)
84-
u = x3 + x15
85-
x7 ^= u<<9 | u>>(32-9)
86-
u = x7 + x3
87-
x11 ^= u<<13 | u>>(32-13)
88-
u = x11 + x7
89-
x15 ^= u<<18 | u>>(32-18)
90-
91-
u = x0 + x3
92-
x1 ^= u<<7 | u>>(32-7)
93-
u = x1 + x0
94-
x2 ^= u<<9 | u>>(32-9)
95-
u = x2 + x1
96-
x3 ^= u<<13 | u>>(32-13)
97-
u = x3 + x2
98-
x0 ^= u<<18 | u>>(32-18)
99-
100-
u = x5 + x4
101-
x6 ^= u<<7 | u>>(32-7)
102-
u = x6 + x5
103-
x7 ^= u<<9 | u>>(32-9)
104-
u = x7 + x6
105-
x4 ^= u<<13 | u>>(32-13)
106-
u = x4 + x7
107-
x5 ^= u<<18 | u>>(32-18)
108-
109-
u = x10 + x9
110-
x11 ^= u<<7 | u>>(32-7)
111-
u = x11 + x10
112-
x8 ^= u<<9 | u>>(32-9)
113-
u = x8 + x11
114-
x9 ^= u<<13 | u>>(32-13)
115-
u = x9 + x8
116-
x10 ^= u<<18 | u>>(32-18)
117-
118-
u = x15 + x14
119-
x12 ^= u<<7 | u>>(32-7)
120-
u = x12 + x15
121-
x13 ^= u<<9 | u>>(32-9)
122-
u = x13 + x12
123-
x14 ^= u<<13 | u>>(32-13)
124-
u = x14 + x13
125-
x15 ^= u<<18 | u>>(32-18)
56+
x4 ^= bits.RotateLeft32(x0+x12, 7)
57+
x8 ^= bits.RotateLeft32(x4+x0, 9)
58+
x12 ^= bits.RotateLeft32(x8+x4, 13)
59+
x0 ^= bits.RotateLeft32(x12+x8, 18)
60+
61+
x9 ^= bits.RotateLeft32(x5+x1, 7)
62+
x13 ^= bits.RotateLeft32(x9+x5, 9)
63+
x1 ^= bits.RotateLeft32(x13+x9, 13)
64+
x5 ^= bits.RotateLeft32(x1+x13, 18)
65+
66+
x14 ^= bits.RotateLeft32(x10+x6, 7)
67+
x2 ^= bits.RotateLeft32(x14+x10, 9)
68+
x6 ^= bits.RotateLeft32(x2+x14, 13)
69+
x10 ^= bits.RotateLeft32(x6+x2, 18)
70+
71+
x3 ^= bits.RotateLeft32(x15+x11, 7)
72+
x7 ^= bits.RotateLeft32(x3+x15, 9)
73+
x11 ^= bits.RotateLeft32(x7+x3, 13)
74+
x15 ^= bits.RotateLeft32(x11+x7, 18)
75+
76+
x1 ^= bits.RotateLeft32(x0+x3, 7)
77+
x2 ^= bits.RotateLeft32(x1+x0, 9)
78+
x3 ^= bits.RotateLeft32(x2+x1, 13)
79+
x0 ^= bits.RotateLeft32(x3+x2, 18)
80+
81+
x6 ^= bits.RotateLeft32(x5+x4, 7)
82+
x7 ^= bits.RotateLeft32(x6+x5, 9)
83+
x4 ^= bits.RotateLeft32(x7+x6, 13)
84+
x5 ^= bits.RotateLeft32(x4+x7, 18)
85+
86+
x11 ^= bits.RotateLeft32(x10+x9, 7)
87+
x8 ^= bits.RotateLeft32(x11+x10, 9)
88+
x9 ^= bits.RotateLeft32(x8+x11, 13)
89+
x10 ^= bits.RotateLeft32(x9+x8, 18)
90+
91+
x12 ^= bits.RotateLeft32(x15+x14, 7)
92+
x13 ^= bits.RotateLeft32(x12+x15, 9)
93+
x14 ^= bits.RotateLeft32(x13+x12, 13)
94+
x15 ^= bits.RotateLeft32(x14+x13, 18)
12695
}
12796
x0 += w0
12897
x1 += w1

0 commit comments

Comments
 (0)