@@ -10,6 +10,7 @@ package scrypt // import "golang.org/x/crypto/scrypt"
10
10
import (
11
11
"crypto/sha256"
12
12
"errors"
13
+ "math/bits"
13
14
14
15
"golang.org/x/crypto/pbkdf2"
15
16
)
@@ -52,77 +53,45 @@ func salsaXOR(tmp *[16]uint32, in, out []uint32) {
52
53
x9 , x10 , x11 , x12 , x13 , x14 , x15 := w9 , w10 , w11 , w12 , w13 , w14 , w15
53
54
54
55
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 )
126
95
}
127
96
x0 += w0
128
97
x1 += w1
0 commit comments