Skip to content

Commit 69eec03

Browse files
authored
remove when nimvm condition for keccak declarations (#83)
* remove `when nimvm` condition for keccak declarations Both `when nimvm` branches are always compiled. * remove unnecessary diff
1 parent eeb4978 commit 69eec03

File tree

1 file changed

+168
-170
lines changed

1 file changed

+168
-170
lines changed

nimcrypto/keccak.nim

+168-170
Original file line numberDiff line numberDiff line change
@@ -58,176 +58,174 @@ type
5858
# then 256 registers and so it is not enough for it to perform round in
5959
# template.
6060
# See also https://github.com/nim-lang/Nim/issues/23688
61-
when nimvm:
62-
proc THETA1V(a: var openArray[uint64], b: openArray[uint64],
63-
c: int) {.inline.} =
64-
a[c] = b[c] xor b[c + 5] xor b[c + 10] xor b[c + 15] xor b[c + 20]
65-
66-
proc THETA2V(a: var uint64, b: openArray[uint64], c: int) {.inline.} =
67-
a = b[(c + 4) mod 5] xor ROL(uint64(b[(c + 1) mod 5]), 1)
68-
69-
proc THETA3V(a: var openArray[uint64], b: int, c: uint64) {.inline.} =
70-
a[b] = a[b] xor c
71-
a[b + 5] = a[b + 5] xor c
72-
a[b + 10] = a[b + 10] xor c
73-
a[b + 15] = a[b + 15] xor c
74-
a[b + 20] = a[b + 20] xor c
75-
76-
proc RHOPIV(a: var openArray[uint64], b: var openArray[uint64], c: var uint64,
77-
d, e: int) {.inline.} =
78-
a[0] = b[d]
79-
b[d] = ROL(c, e)
80-
c = uint64(a[0])
81-
82-
proc CHIV(a: var openArray[uint64], b: var openArray[uint64],
83-
c: int) {.inline.} =
84-
a[0] = b[c]
85-
a[1] = b[c + 1]
86-
a[2] = b[c + 2]
87-
a[3] = b[c + 3]
88-
a[4] = b[c + 4]
89-
b[c] = b[c] xor (not(a[1]) and a[2])
90-
b[c + 1] = b[c + 1] xor (not(a[2]) and a[3])
91-
b[c + 2] = b[c + 2] xor (not(a[3]) and a[4])
92-
b[c + 3] = b[c + 3] xor (not(a[4]) and a[0])
93-
b[c + 4] = b[c + 4] xor (not(a[0]) and a[1])
94-
95-
96-
proc KECCAKROUNDP(a: var openArray[uint64], b: var openArray[uint64],
97-
c: var uint64, r: int) {.inline.} =
98-
THETA1V(b, a, 0)
99-
THETA1V(b, a, 1)
100-
THETA1V(b, a, 2)
101-
THETA1V(b, a, 3)
102-
THETA1V(b, a, 4)
103-
104-
THETA2V(c, b, 0)
105-
THETA3V(a, 0, c)
106-
THETA2V(c, b, 1)
107-
THETA3V(a, 1, c)
108-
THETA2V(c, b, 2)
109-
THETA3V(a, 2, c)
110-
THETA2V(c, b, 3)
111-
THETA3V(a, 3, c)
112-
THETA2V(c, b, 4)
113-
THETA3V(a, 4, c)
114-
115-
c = a[1]
116-
RHOPIV(b, a, c, 10, 1)
117-
RHOPIV(b, a, c, 7, 3)
118-
RHOPIV(b, a, c, 11, 6)
119-
RHOPIV(b, a, c, 17, 10)
120-
RHOPIV(b, a, c, 18, 15)
121-
RHOPIV(b, a, c, 3, 21)
122-
RHOPIV(b, a, c, 5, 28)
123-
RHOPIV(b, a, c, 16, 36)
124-
RHOPIV(b, a, c, 8, 45)
125-
RHOPIV(b, a, c, 21, 55)
126-
RHOPIV(b, a, c, 24, 2)
127-
RHOPIV(b, a, c, 4, 14)
128-
RHOPIV(b, a, c, 15, 27)
129-
RHOPIV(b, a, c, 23, 41)
130-
RHOPIV(b, a, c, 19, 56)
131-
RHOPIV(b, a, c, 13, 8)
132-
RHOPIV(b, a, c, 12, 25)
133-
RHOPIV(b, a, c, 2, 43)
134-
RHOPIV(b, a, c, 20, 62)
135-
RHOPIV(b, a, c, 14, 18)
136-
RHOPIV(b, a, c, 22, 39)
137-
RHOPIV(b, a, c, 9, 61)
138-
RHOPIV(b, a, c, 6, 20)
139-
RHOPIV(b, a, c, 1, 44)
140-
141-
CHIV(b, a, 0)
142-
CHIV(b, a, 5)
143-
CHIV(b, a, 10)
144-
CHIV(b, a, 15)
145-
CHIV(b, a, 20)
146-
147-
a[0] = a[0] xor RNDC[r]
148-
149-
else:
150-
template THETA1(a, b, c: untyped) =
151-
a[c] = b[c] xor b[c + 5] xor b[c + 10] xor b[c + 15] xor b[c + 20]
152-
153-
template THETA2(a, b, c: untyped) =
154-
a = b[(c + 4) mod 5] xor ROL(uint64(b[(c + 1) mod 5]), 1)
155-
156-
template THETA3(a, b, c) =
157-
a[b] = a[b] xor c
158-
a[b + 5] = a[b + 5] xor c
159-
a[b + 10] = a[b + 10] xor c
160-
a[b + 15] = a[b + 15] xor c
161-
a[b + 20] = a[b + 20] xor c
162-
163-
template RHOPI(a, b, c, d, e) =
164-
a[0] = b[d]
165-
b[d] = ROL(c, e)
166-
c = a[0]
167-
168-
template CHI(a, b, c) =
169-
a[0] = b[c]
170-
a[1] = b[c + 1]
171-
a[2] = b[c + 2]
172-
a[3] = b[c + 3]
173-
a[4] = b[c + 4]
174-
b[c] = b[c] xor (not(a[1]) and a[2])
175-
b[c + 1] = b[c + 1] xor (not(a[2]) and a[3])
176-
b[c + 2] = b[c + 2] xor (not(a[3]) and a[4])
177-
b[c + 3] = b[c + 3] xor (not(a[4]) and a[0])
178-
b[c + 4] = b[c + 4] xor (not(a[0]) and a[1])
179-
180-
template KECCAKROUND(a, b, c, r) =
181-
THETA1(b, a, 0)
182-
THETA1(b, a, 1)
183-
THETA1(b, a, 2)
184-
THETA1(b, a, 3)
185-
THETA1(b, a, 4)
186-
187-
THETA2(c, b, 0)
188-
THETA3(a, 0, c)
189-
THETA2(c, b, 1)
190-
THETA3(a, 1, c)
191-
THETA2(c, b, 2)
192-
THETA3(a, 2, c)
193-
THETA2(c, b, 3)
194-
THETA3(a, 3, c)
195-
THETA2(c, b, 4)
196-
THETA3(a, 4, c)
197-
198-
c = a[1]
199-
RHOPI(b, a, c, 10, 1)
200-
RHOPI(b, a, c, 7, 3)
201-
RHOPI(b, a, c, 11, 6)
202-
RHOPI(b, a, c, 17, 10)
203-
RHOPI(b, a, c, 18, 15)
204-
RHOPI(b, a, c, 3, 21)
205-
RHOPI(b, a, c, 5, 28)
206-
RHOPI(b, a, c, 16, 36)
207-
RHOPI(b, a, c, 8, 45)
208-
RHOPI(b, a, c, 21, 55)
209-
RHOPI(b, a, c, 24, 2)
210-
RHOPI(b, a, c, 4, 14)
211-
RHOPI(b, a, c, 15, 27)
212-
RHOPI(b, a, c, 23, 41)
213-
RHOPI(b, a, c, 19, 56)
214-
RHOPI(b, a, c, 13, 8)
215-
RHOPI(b, a, c, 12, 25)
216-
RHOPI(b, a, c, 2, 43)
217-
RHOPI(b, a, c, 20, 62)
218-
RHOPI(b, a, c, 14, 18)
219-
RHOPI(b, a, c, 22, 39)
220-
RHOPI(b, a, c, 9, 61)
221-
RHOPI(b, a, c, 6, 20)
222-
RHOPI(b, a, c, 1, 44)
223-
224-
CHI(b, a, 0)
225-
CHI(b, a, 5)
226-
CHI(b, a, 10)
227-
CHI(b, a, 15)
228-
CHI(b, a, 20)
229-
230-
a[0] = a[0] xor RNDC[r]
61+
proc THETA1V(a: var openArray[uint64], b: openArray[uint64],
62+
c: int) {.inline.} =
63+
a[c] = b[c] xor b[c + 5] xor b[c + 10] xor b[c + 15] xor b[c + 20]
64+
65+
proc THETA2V(a: var uint64, b: openArray[uint64], c: int) {.inline.} =
66+
a = b[(c + 4) mod 5] xor ROL(uint64(b[(c + 1) mod 5]), 1)
67+
68+
proc THETA3V(a: var openArray[uint64], b: int, c: uint64) {.inline.} =
69+
a[b] = a[b] xor c
70+
a[b + 5] = a[b + 5] xor c
71+
a[b + 10] = a[b + 10] xor c
72+
a[b + 15] = a[b + 15] xor c
73+
a[b + 20] = a[b + 20] xor c
74+
75+
proc RHOPIV(a: var openArray[uint64], b: var openArray[uint64], c: var uint64,
76+
d, e: int) {.inline.} =
77+
a[0] = b[d]
78+
b[d] = ROL(c, e)
79+
c = uint64(a[0])
80+
81+
proc CHIV(a: var openArray[uint64], b: var openArray[uint64],
82+
c: int) {.inline.} =
83+
a[0] = b[c]
84+
a[1] = b[c + 1]
85+
a[2] = b[c + 2]
86+
a[3] = b[c + 3]
87+
a[4] = b[c + 4]
88+
b[c] = b[c] xor (not(a[1]) and a[2])
89+
b[c + 1] = b[c + 1] xor (not(a[2]) and a[3])
90+
b[c + 2] = b[c + 2] xor (not(a[3]) and a[4])
91+
b[c + 3] = b[c + 3] xor (not(a[4]) and a[0])
92+
b[c + 4] = b[c + 4] xor (not(a[0]) and a[1])
93+
94+
95+
proc KECCAKROUNDP(a: var openArray[uint64], b: var openArray[uint64],
96+
c: var uint64, r: int) {.inline.} =
97+
THETA1V(b, a, 0)
98+
THETA1V(b, a, 1)
99+
THETA1V(b, a, 2)
100+
THETA1V(b, a, 3)
101+
THETA1V(b, a, 4)
102+
103+
THETA2V(c, b, 0)
104+
THETA3V(a, 0, c)
105+
THETA2V(c, b, 1)
106+
THETA3V(a, 1, c)
107+
THETA2V(c, b, 2)
108+
THETA3V(a, 2, c)
109+
THETA2V(c, b, 3)
110+
THETA3V(a, 3, c)
111+
THETA2V(c, b, 4)
112+
THETA3V(a, 4, c)
113+
114+
c = a[1]
115+
RHOPIV(b, a, c, 10, 1)
116+
RHOPIV(b, a, c, 7, 3)
117+
RHOPIV(b, a, c, 11, 6)
118+
RHOPIV(b, a, c, 17, 10)
119+
RHOPIV(b, a, c, 18, 15)
120+
RHOPIV(b, a, c, 3, 21)
121+
RHOPIV(b, a, c, 5, 28)
122+
RHOPIV(b, a, c, 16, 36)
123+
RHOPIV(b, a, c, 8, 45)
124+
RHOPIV(b, a, c, 21, 55)
125+
RHOPIV(b, a, c, 24, 2)
126+
RHOPIV(b, a, c, 4, 14)
127+
RHOPIV(b, a, c, 15, 27)
128+
RHOPIV(b, a, c, 23, 41)
129+
RHOPIV(b, a, c, 19, 56)
130+
RHOPIV(b, a, c, 13, 8)
131+
RHOPIV(b, a, c, 12, 25)
132+
RHOPIV(b, a, c, 2, 43)
133+
RHOPIV(b, a, c, 20, 62)
134+
RHOPIV(b, a, c, 14, 18)
135+
RHOPIV(b, a, c, 22, 39)
136+
RHOPIV(b, a, c, 9, 61)
137+
RHOPIV(b, a, c, 6, 20)
138+
RHOPIV(b, a, c, 1, 44)
139+
140+
CHIV(b, a, 0)
141+
CHIV(b, a, 5)
142+
CHIV(b, a, 10)
143+
CHIV(b, a, 15)
144+
CHIV(b, a, 20)
145+
146+
a[0] = a[0] xor RNDC[r]
147+
148+
template THETA1(a, b, c: untyped) =
149+
a[c] = b[c] xor b[c + 5] xor b[c + 10] xor b[c + 15] xor b[c + 20]
150+
151+
template THETA2(a, b, c: untyped) =
152+
a = b[(c + 4) mod 5] xor ROL(uint64(b[(c + 1) mod 5]), 1)
153+
154+
template THETA3(a, b, c) =
155+
a[b] = a[b] xor c
156+
a[b + 5] = a[b + 5] xor c
157+
a[b + 10] = a[b + 10] xor c
158+
a[b + 15] = a[b + 15] xor c
159+
a[b + 20] = a[b + 20] xor c
160+
161+
template RHOPI(a, b, c, d, e) =
162+
a[0] = b[d]
163+
b[d] = ROL(c, e)
164+
c = a[0]
165+
166+
template CHI(a, b, c) =
167+
a[0] = b[c]
168+
a[1] = b[c + 1]
169+
a[2] = b[c + 2]
170+
a[3] = b[c + 3]
171+
a[4] = b[c + 4]
172+
b[c] = b[c] xor (not(a[1]) and a[2])
173+
b[c + 1] = b[c + 1] xor (not(a[2]) and a[3])
174+
b[c + 2] = b[c + 2] xor (not(a[3]) and a[4])
175+
b[c + 3] = b[c + 3] xor (not(a[4]) and a[0])
176+
b[c + 4] = b[c + 4] xor (not(a[0]) and a[1])
177+
178+
template KECCAKROUND(a, b, c, r) =
179+
THETA1(b, a, 0)
180+
THETA1(b, a, 1)
181+
THETA1(b, a, 2)
182+
THETA1(b, a, 3)
183+
THETA1(b, a, 4)
184+
185+
THETA2(c, b, 0)
186+
THETA3(a, 0, c)
187+
THETA2(c, b, 1)
188+
THETA3(a, 1, c)
189+
THETA2(c, b, 2)
190+
THETA3(a, 2, c)
191+
THETA2(c, b, 3)
192+
THETA3(a, 3, c)
193+
THETA2(c, b, 4)
194+
THETA3(a, 4, c)
195+
196+
c = a[1]
197+
RHOPI(b, a, c, 10, 1)
198+
RHOPI(b, a, c, 7, 3)
199+
RHOPI(b, a, c, 11, 6)
200+
RHOPI(b, a, c, 17, 10)
201+
RHOPI(b, a, c, 18, 15)
202+
RHOPI(b, a, c, 3, 21)
203+
RHOPI(b, a, c, 5, 28)
204+
RHOPI(b, a, c, 16, 36)
205+
RHOPI(b, a, c, 8, 45)
206+
RHOPI(b, a, c, 21, 55)
207+
RHOPI(b, a, c, 24, 2)
208+
RHOPI(b, a, c, 4, 14)
209+
RHOPI(b, a, c, 15, 27)
210+
RHOPI(b, a, c, 23, 41)
211+
RHOPI(b, a, c, 19, 56)
212+
RHOPI(b, a, c, 13, 8)
213+
RHOPI(b, a, c, 12, 25)
214+
RHOPI(b, a, c, 2, 43)
215+
RHOPI(b, a, c, 20, 62)
216+
RHOPI(b, a, c, 14, 18)
217+
RHOPI(b, a, c, 22, 39)
218+
RHOPI(b, a, c, 9, 61)
219+
RHOPI(b, a, c, 6, 20)
220+
RHOPI(b, a, c, 1, 44)
221+
222+
CHI(b, a, 0)
223+
CHI(b, a, 5)
224+
CHI(b, a, 10)
225+
CHI(b, a, 15)
226+
CHI(b, a, 20)
227+
228+
a[0] = a[0] xor RNDC[r]
231229

232230
proc keccakTransform(data: var array[200, byte]) {.inline.} =
233231
var

0 commit comments

Comments
 (0)