1 | .text
|
---|
2 | .align 4
|
---|
3 | __KeccakF1600:
|
---|
4 | movq 60(%esi),%mm0
|
---|
5 | movq 68(%esi),%mm1
|
---|
6 | movq 76(%esi),%mm2
|
---|
7 | movq 84(%esi),%mm3
|
---|
8 | movq 92(%esi),%mm4
|
---|
9 | movl $24,%ecx
|
---|
10 | jmp L000loop
|
---|
11 | .align 4,0x90
|
---|
12 | L000loop:
|
---|
13 | pxor -100(%esi),%mm0
|
---|
14 | pxor -92(%esi),%mm1
|
---|
15 | pxor -84(%esi),%mm2
|
---|
16 | pxor -76(%esi),%mm3
|
---|
17 | pxor -68(%esi),%mm4
|
---|
18 | pxor -60(%esi),%mm0
|
---|
19 | pxor -52(%esi),%mm1
|
---|
20 | pxor -44(%esi),%mm2
|
---|
21 | pxor -36(%esi),%mm3
|
---|
22 | pxor -28(%esi),%mm4
|
---|
23 | pxor -20(%esi),%mm0
|
---|
24 | pxor -12(%esi),%mm1
|
---|
25 | pxor -4(%esi),%mm2
|
---|
26 | pxor 4(%esi),%mm3
|
---|
27 | pxor 12(%esi),%mm4
|
---|
28 | pxor 36(%esi),%mm2
|
---|
29 | pxor 20(%esi),%mm0
|
---|
30 | pxor 28(%esi),%mm1
|
---|
31 | pxor 44(%esi),%mm3
|
---|
32 | movq %mm2,%mm5
|
---|
33 | pxor 52(%esi),%mm4
|
---|
34 | movq %mm2,%mm7
|
---|
35 | psrlq $63,%mm5
|
---|
36 | movq %mm0,%mm6
|
---|
37 | psllq $1,%mm7
|
---|
38 | pxor %mm0,%mm5
|
---|
39 | psrlq $63,%mm0
|
---|
40 | pxor %mm7,%mm5
|
---|
41 | psllq $1,%mm6
|
---|
42 | movq %mm1,%mm7
|
---|
43 | movq %mm5,12(%esp)
|
---|
44 | pxor %mm0,%mm6
|
---|
45 | psrlq $63,%mm7
|
---|
46 | pxor %mm3,%mm6
|
---|
47 | movq %mm1,%mm0
|
---|
48 | movq %mm6,36(%esp)
|
---|
49 | psllq $1,%mm0
|
---|
50 | pxor %mm4,%mm7
|
---|
51 | pxor %mm7,%mm0
|
---|
52 | movq %mm3,%mm7
|
---|
53 | psrlq $63,%mm3
|
---|
54 | movq %mm0,4(%esp)
|
---|
55 | psllq $1,%mm7
|
---|
56 | movq %mm4,%mm5
|
---|
57 | psrlq $63,%mm4
|
---|
58 | pxor %mm3,%mm1
|
---|
59 | psllq $1,%mm5
|
---|
60 | pxor %mm7,%mm1
|
---|
61 | pxor %mm4,%mm2
|
---|
62 | movq %mm1,20(%esp)
|
---|
63 | pxor %mm5,%mm2
|
---|
64 | movq 44(%esi),%mm3
|
---|
65 | movq %mm2,28(%esp)
|
---|
66 | pxor %mm2,%mm3
|
---|
67 | movq 92(%esi),%mm4
|
---|
68 | movq %mm3,%mm7
|
---|
69 | psrlq $43,%mm3
|
---|
70 | pxor %mm6,%mm4
|
---|
71 | psllq $21,%mm7
|
---|
72 | movq %mm4,%mm6
|
---|
73 | psrlq $50,%mm4
|
---|
74 | por %mm7,%mm3
|
---|
75 | psllq $14,%mm6
|
---|
76 | movq -4(%esi),%mm2
|
---|
77 | por %mm6,%mm4
|
---|
78 | pxor %mm1,%mm2
|
---|
79 | movq -52(%esi),%mm1
|
---|
80 | movq %mm2,%mm6
|
---|
81 | psrlq $21,%mm2
|
---|
82 | pxor 12(%esp),%mm1
|
---|
83 | psllq $43,%mm6
|
---|
84 | movq %mm1,%mm7
|
---|
85 | psrlq $20,%mm1
|
---|
86 | por %mm6,%mm2
|
---|
87 | psllq $44,%mm7
|
---|
88 | pxor -100(%esi),%mm0
|
---|
89 | por %mm7,%mm1
|
---|
90 | movq %mm1,%mm5
|
---|
91 | movq %mm2,%mm6
|
---|
92 | pandn %mm2,%mm5
|
---|
93 | pandn %mm3,%mm2
|
---|
94 | pxor %mm0,%mm5
|
---|
95 | pxor %mm1,%mm2
|
---|
96 | pxor (%ebx),%mm5
|
---|
97 | leal 8(%ebx),%ebx
|
---|
98 | movq %mm3,%mm7
|
---|
99 | movq %mm5,-100(%edi)
|
---|
100 | movq %mm4,%mm5
|
---|
101 | pandn %mm4,%mm3
|
---|
102 | pandn %mm0,%mm4
|
---|
103 | pxor %mm6,%mm3
|
---|
104 | movq %mm2,-92(%edi)
|
---|
105 | pxor %mm7,%mm4
|
---|
106 | movq -76(%esi),%mm7
|
---|
107 | movq %mm3,-84(%edi)
|
---|
108 | pandn %mm1,%mm0
|
---|
109 | movq %mm4,-76(%edi)
|
---|
110 | pxor %mm5,%mm0
|
---|
111 | pxor 28(%esp),%mm7
|
---|
112 | movq %mm0,-68(%edi)
|
---|
113 | movq %mm7,%mm0
|
---|
114 | psrlq $36,%mm7
|
---|
115 | movq -28(%esi),%mm1
|
---|
116 | psllq $28,%mm0
|
---|
117 | pxor 36(%esp),%mm1
|
---|
118 | por %mm7,%mm0
|
---|
119 | movq %mm1,%mm6
|
---|
120 | psrlq $44,%mm1
|
---|
121 | movq -20(%esi),%mm2
|
---|
122 | psllq $20,%mm6
|
---|
123 | pxor 4(%esp),%mm2
|
---|
124 | por %mm6,%mm1
|
---|
125 | movq %mm2,%mm7
|
---|
126 | psrlq $61,%mm2
|
---|
127 | movq 28(%esi),%mm3
|
---|
128 | psllq $3,%mm7
|
---|
129 | pxor 12(%esp),%mm3
|
---|
130 | por %mm7,%mm2
|
---|
131 | movq %mm3,%mm5
|
---|
132 | psrlq $19,%mm3
|
---|
133 | movq 76(%esi),%mm4
|
---|
134 | psllq $45,%mm5
|
---|
135 | pxor 20(%esp),%mm4
|
---|
136 | por %mm5,%mm3
|
---|
137 | movq %mm4,%mm6
|
---|
138 | psrlq $3,%mm4
|
---|
139 | psllq $61,%mm6
|
---|
140 | por %mm6,%mm4
|
---|
141 | movq %mm1,%mm5
|
---|
142 | movq %mm2,%mm6
|
---|
143 | pandn %mm2,%mm5
|
---|
144 | pandn %mm3,%mm2
|
---|
145 | pxor %mm0,%mm5
|
---|
146 | pxor %mm1,%mm2
|
---|
147 | movq %mm3,%mm7
|
---|
148 | movq %mm5,-60(%edi)
|
---|
149 | movq %mm4,%mm5
|
---|
150 | pandn %mm4,%mm3
|
---|
151 | pandn %mm0,%mm4
|
---|
152 | pxor %mm6,%mm3
|
---|
153 | movq %mm2,-52(%edi)
|
---|
154 | pxor %mm7,%mm4
|
---|
155 | movq -92(%esi),%mm7
|
---|
156 | movq %mm3,-44(%edi)
|
---|
157 | pandn %mm1,%mm0
|
---|
158 | movq %mm4,-36(%edi)
|
---|
159 | pxor %mm5,%mm0
|
---|
160 | pxor 12(%esp),%mm7
|
---|
161 | movq %mm0,-28(%edi)
|
---|
162 | movq %mm7,%mm0
|
---|
163 | psrlq $63,%mm7
|
---|
164 | movq -44(%esi),%mm1
|
---|
165 | psllq $1,%mm0
|
---|
166 | pxor 20(%esp),%mm1
|
---|
167 | por %mm7,%mm0
|
---|
168 | movq %mm1,%mm6
|
---|
169 | psrlq $58,%mm1
|
---|
170 | movq 4(%esi),%mm2
|
---|
171 | psllq $6,%mm6
|
---|
172 | pxor 28(%esp),%mm2
|
---|
173 | por %mm6,%mm1
|
---|
174 | movq %mm2,%mm7
|
---|
175 | psrlq $39,%mm2
|
---|
176 | movq 52(%esi),%mm3
|
---|
177 | psllq $25,%mm7
|
---|
178 | pxor 36(%esp),%mm3
|
---|
179 | por %mm7,%mm2
|
---|
180 | movq %mm3,%mm5
|
---|
181 | psrlq $56,%mm3
|
---|
182 | movq 60(%esi),%mm4
|
---|
183 | psllq $8,%mm5
|
---|
184 | pxor 4(%esp),%mm4
|
---|
185 | por %mm5,%mm3
|
---|
186 | movq %mm4,%mm6
|
---|
187 | psrlq $46,%mm4
|
---|
188 | psllq $18,%mm6
|
---|
189 | por %mm6,%mm4
|
---|
190 | movq %mm1,%mm5
|
---|
191 | movq %mm2,%mm6
|
---|
192 | pandn %mm2,%mm5
|
---|
193 | pandn %mm3,%mm2
|
---|
194 | pxor %mm0,%mm5
|
---|
195 | pxor %mm1,%mm2
|
---|
196 | movq %mm3,%mm7
|
---|
197 | movq %mm5,-20(%edi)
|
---|
198 | movq %mm4,%mm5
|
---|
199 | pandn %mm4,%mm3
|
---|
200 | pandn %mm0,%mm4
|
---|
201 | pxor %mm6,%mm3
|
---|
202 | movq %mm2,-12(%edi)
|
---|
203 | pxor %mm7,%mm4
|
---|
204 | movq -68(%esi),%mm7
|
---|
205 | movq %mm3,-4(%edi)
|
---|
206 | pandn %mm1,%mm0
|
---|
207 | movq %mm4,4(%edi)
|
---|
208 | pxor %mm5,%mm0
|
---|
209 | pxor 36(%esp),%mm7
|
---|
210 | movq %mm0,12(%edi)
|
---|
211 | movq %mm7,%mm0
|
---|
212 | psrlq $37,%mm7
|
---|
213 | movq -60(%esi),%mm1
|
---|
214 | psllq $27,%mm0
|
---|
215 | pxor 4(%esp),%mm1
|
---|
216 | por %mm7,%mm0
|
---|
217 | movq %mm1,%mm6
|
---|
218 | psrlq $28,%mm1
|
---|
219 | movq -12(%esi),%mm2
|
---|
220 | psllq $36,%mm6
|
---|
221 | pxor 12(%esp),%mm2
|
---|
222 | por %mm6,%mm1
|
---|
223 | movq %mm2,%mm7
|
---|
224 | psrlq $54,%mm2
|
---|
225 | movq 36(%esi),%mm3
|
---|
226 | psllq $10,%mm7
|
---|
227 | pxor 20(%esp),%mm3
|
---|
228 | por %mm7,%mm2
|
---|
229 | movq %mm3,%mm5
|
---|
230 | psrlq $49,%mm3
|
---|
231 | movq 84(%esi),%mm4
|
---|
232 | psllq $15,%mm5
|
---|
233 | pxor 28(%esp),%mm4
|
---|
234 | por %mm5,%mm3
|
---|
235 | movq %mm4,%mm6
|
---|
236 | psrlq $8,%mm4
|
---|
237 | psllq $56,%mm6
|
---|
238 | por %mm6,%mm4
|
---|
239 | movq %mm1,%mm5
|
---|
240 | movq %mm2,%mm6
|
---|
241 | pandn %mm2,%mm5
|
---|
242 | pandn %mm3,%mm2
|
---|
243 | pxor %mm0,%mm5
|
---|
244 | pxor %mm1,%mm2
|
---|
245 | movq %mm3,%mm7
|
---|
246 | movq %mm5,20(%edi)
|
---|
247 | movq %mm4,%mm5
|
---|
248 | pandn %mm4,%mm3
|
---|
249 | pandn %mm0,%mm4
|
---|
250 | pxor %mm6,%mm3
|
---|
251 | movq %mm2,28(%edi)
|
---|
252 | pxor %mm7,%mm4
|
---|
253 | movq -84(%esi),%mm7
|
---|
254 | movq %mm3,36(%edi)
|
---|
255 | pandn %mm1,%mm0
|
---|
256 | movq %mm4,44(%edi)
|
---|
257 | pxor %mm5,%mm0
|
---|
258 | pxor 20(%esp),%mm7
|
---|
259 | movq %mm0,52(%edi)
|
---|
260 | movq %mm7,%mm0
|
---|
261 | psrlq $2,%mm7
|
---|
262 | movq -36(%esi),%mm1
|
---|
263 | psllq $62,%mm0
|
---|
264 | pxor 28(%esp),%mm1
|
---|
265 | por %mm7,%mm0
|
---|
266 | movq %mm1,%mm6
|
---|
267 | psrlq $9,%mm1
|
---|
268 | movq 12(%esi),%mm2
|
---|
269 | psllq $55,%mm6
|
---|
270 | pxor 36(%esp),%mm2
|
---|
271 | por %mm6,%mm1
|
---|
272 | movq %mm2,%mm7
|
---|
273 | psrlq $25,%mm2
|
---|
274 | movq 20(%esi),%mm3
|
---|
275 | psllq $39,%mm7
|
---|
276 | pxor 4(%esp),%mm3
|
---|
277 | por %mm7,%mm2
|
---|
278 | movq %mm3,%mm5
|
---|
279 | psrlq $23,%mm3
|
---|
280 | movq 68(%esi),%mm4
|
---|
281 | psllq $41,%mm5
|
---|
282 | pxor 12(%esp),%mm4
|
---|
283 | por %mm5,%mm3
|
---|
284 | movq %mm4,%mm6
|
---|
285 | psrlq $62,%mm4
|
---|
286 | psllq $2,%mm6
|
---|
287 | por %mm6,%mm4
|
---|
288 | movq %mm0,%mm5
|
---|
289 | xorl %esi,%edi
|
---|
290 | movq %mm1,12(%esp)
|
---|
291 | xorl %edi,%esi
|
---|
292 | xorl %esi,%edi
|
---|
293 | movq %mm1,%mm6
|
---|
294 | movq %mm2,%mm7
|
---|
295 | pandn %mm2,%mm6
|
---|
296 | pandn %mm3,%mm7
|
---|
297 | pxor %mm6,%mm0
|
---|
298 | pxor %mm7,%mm1
|
---|
299 | movq %mm3,%mm6
|
---|
300 | movq %mm0,60(%esi)
|
---|
301 | pandn %mm4,%mm6
|
---|
302 | movq %mm1,68(%esi)
|
---|
303 | pxor %mm6,%mm2
|
---|
304 | movq %mm4,%mm7
|
---|
305 | movq %mm2,76(%esi)
|
---|
306 | pandn %mm5,%mm7
|
---|
307 | pandn 12(%esp),%mm5
|
---|
308 | pxor %mm7,%mm3
|
---|
309 | pxor %mm5,%mm4
|
---|
310 | movq %mm3,84(%esi)
|
---|
311 | subl $1,%ecx
|
---|
312 | movq %mm4,92(%esi)
|
---|
313 | jnz L000loop
|
---|
314 | leal -192(%ebx),%ebx
|
---|
315 | ret
|
---|
316 | .globl _KeccakF1600
|
---|
317 | .align 4
|
---|
318 | _KeccakF1600:
|
---|
319 | L_KeccakF1600_begin:
|
---|
320 | pushl %ebp
|
---|
321 | pushl %ebx
|
---|
322 | pushl %esi
|
---|
323 | pushl %edi
|
---|
324 | movl 20(%esp),%esi
|
---|
325 | movl %esp,%ebp
|
---|
326 | subl $240,%esp
|
---|
327 | call L001pic_point
|
---|
328 | L001pic_point:
|
---|
329 | popl %ebx
|
---|
330 | leal Liotas-L001pic_point(%ebx),%ebx
|
---|
331 | andl $-8,%esp
|
---|
332 | leal 100(%esi),%esi
|
---|
333 | leal 140(%esp),%edi
|
---|
334 | call __KeccakF1600
|
---|
335 | movl %ebp,%esp
|
---|
336 | emms
|
---|
337 | popl %edi
|
---|
338 | popl %esi
|
---|
339 | popl %ebx
|
---|
340 | popl %ebp
|
---|
341 | ret
|
---|
342 | .globl _SHA3_absorb
|
---|
343 | .align 4
|
---|
344 | _SHA3_absorb:
|
---|
345 | L_SHA3_absorb_begin:
|
---|
346 | pushl %ebp
|
---|
347 | pushl %ebx
|
---|
348 | pushl %esi
|
---|
349 | pushl %edi
|
---|
350 | movl 20(%esp),%esi
|
---|
351 | movl 24(%esp),%eax
|
---|
352 | movl 28(%esp),%ecx
|
---|
353 | movl 32(%esp),%edx
|
---|
354 | movl %esp,%ebp
|
---|
355 | subl $248,%esp
|
---|
356 | call L002pic_point
|
---|
357 | L002pic_point:
|
---|
358 | popl %ebx
|
---|
359 | leal Liotas-L002pic_point(%ebx),%ebx
|
---|
360 | andl $-8,%esp
|
---|
361 | movl %esi,%edi
|
---|
362 | leal 100(%esi),%esi
|
---|
363 | movl %edx,-4(%ebp)
|
---|
364 | jmp L003loop
|
---|
365 | .align 4,0x90
|
---|
366 | L003loop:
|
---|
367 | cmpl %edx,%ecx
|
---|
368 | jc L004absorbed
|
---|
369 | shrl $3,%edx
|
---|
370 | L005block:
|
---|
371 | movq (%eax),%mm0
|
---|
372 | leal 8(%eax),%eax
|
---|
373 | pxor (%edi),%mm0
|
---|
374 | leal 8(%edi),%edi
|
---|
375 | subl $8,%ecx
|
---|
376 | movq %mm0,-8(%edi)
|
---|
377 | decl %edx
|
---|
378 | jnz L005block
|
---|
379 | leal 140(%esp),%edi
|
---|
380 | movl %ecx,-8(%ebp)
|
---|
381 | call __KeccakF1600
|
---|
382 | movl -8(%ebp),%ecx
|
---|
383 | movl -4(%ebp),%edx
|
---|
384 | leal -100(%esi),%edi
|
---|
385 | jmp L003loop
|
---|
386 | .align 4,0x90
|
---|
387 | L004absorbed:
|
---|
388 | movl %ecx,%eax
|
---|
389 | movl %ebp,%esp
|
---|
390 | emms
|
---|
391 | popl %edi
|
---|
392 | popl %esi
|
---|
393 | popl %ebx
|
---|
394 | popl %ebp
|
---|
395 | ret
|
---|
396 | .globl _SHA3_squeeze
|
---|
397 | .align 4
|
---|
398 | _SHA3_squeeze:
|
---|
399 | L_SHA3_squeeze_begin:
|
---|
400 | pushl %ebp
|
---|
401 | pushl %ebx
|
---|
402 | pushl %esi
|
---|
403 | pushl %edi
|
---|
404 | movl 20(%esp),%esi
|
---|
405 | movl 24(%esp),%eax
|
---|
406 | movl 28(%esp),%ecx
|
---|
407 | movl 32(%esp),%edx
|
---|
408 | movl %esp,%ebp
|
---|
409 | subl $248,%esp
|
---|
410 | call L006pic_point
|
---|
411 | L006pic_point:
|
---|
412 | popl %ebx
|
---|
413 | leal Liotas-L006pic_point(%ebx),%ebx
|
---|
414 | andl $-8,%esp
|
---|
415 | shrl $3,%edx
|
---|
416 | movl %esi,%edi
|
---|
417 | leal 100(%esi),%esi
|
---|
418 | movl %edx,-4(%ebp)
|
---|
419 | jmp L007loop
|
---|
420 | .align 4,0x90
|
---|
421 | L007loop:
|
---|
422 | cmpl $8,%ecx
|
---|
423 | jc L008tail
|
---|
424 | movq (%edi),%mm0
|
---|
425 | leal 8(%edi),%edi
|
---|
426 | movq %mm0,(%eax)
|
---|
427 | leal 8(%eax),%eax
|
---|
428 | subl $8,%ecx
|
---|
429 | jz L009done
|
---|
430 | decl %edx
|
---|
431 | jnz L007loop
|
---|
432 | leal 140(%esp),%edi
|
---|
433 | movl %ecx,-8(%ebp)
|
---|
434 | call __KeccakF1600
|
---|
435 | movl -8(%ebp),%ecx
|
---|
436 | movl -4(%ebp),%edx
|
---|
437 | leal -100(%esi),%edi
|
---|
438 | jmp L007loop
|
---|
439 | .align 4,0x90
|
---|
440 | L008tail:
|
---|
441 | movl %edi,%esi
|
---|
442 | movl %eax,%edi
|
---|
443 | .long 0xA4F39066
|
---|
444 | L009done:
|
---|
445 | movl %ebp,%esp
|
---|
446 | emms
|
---|
447 | popl %edi
|
---|
448 | popl %esi
|
---|
449 | popl %ebx
|
---|
450 | popl %ebp
|
---|
451 | ret
|
---|
452 | .align 5,0x90
|
---|
453 | Liotas:
|
---|
454 | .long 1,0
|
---|
455 | .long 32898,0
|
---|
456 | .long 32906,2147483648
|
---|
457 | .long 2147516416,2147483648
|
---|
458 | .long 32907,0
|
---|
459 | .long 2147483649,0
|
---|
460 | .long 2147516545,2147483648
|
---|
461 | .long 32777,2147483648
|
---|
462 | .long 138,0
|
---|
463 | .long 136,0
|
---|
464 | .long 2147516425,0
|
---|
465 | .long 2147483658,0
|
---|
466 | .long 2147516555,0
|
---|
467 | .long 139,2147483648
|
---|
468 | .long 32905,2147483648
|
---|
469 | .long 32771,2147483648
|
---|
470 | .long 32770,2147483648
|
---|
471 | .long 128,2147483648
|
---|
472 | .long 32778,0
|
---|
473 | .long 2147483658,2147483648
|
---|
474 | .long 2147516545,2147483648
|
---|
475 | .long 32896,2147483648
|
---|
476 | .long 2147483649,0
|
---|
477 | .long 2147516424,2147483648
|
---|
478 | .byte 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111
|
---|
479 | .byte 114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102
|
---|
480 | .byte 111,114,32,77,77,88,44,32,67,82,89,80,84,79,71,65
|
---|
481 | .byte 77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
|
---|
482 | .byte 110,115,115,108,46,111,114,103,62,0
|
---|