OLD | NEW |
| (Empty) |
1 default rel | |
2 %define XMMWORD | |
3 %define YMMWORD | |
4 %define ZMMWORD | |
5 section .text code align=64 | |
6 | |
7 EXTERN OPENSSL_ia32cap_P | |
8 global aesni_encrypt | |
9 | |
10 ALIGN 16 | |
11 aesni_encrypt: | |
12 movups xmm2,XMMWORD[rcx] | |
13 mov eax,DWORD[240+r8] | |
14 movups xmm0,XMMWORD[r8] | |
15 movups xmm1,XMMWORD[16+r8] | |
16 lea r8,[32+r8] | |
17 xorps xmm2,xmm0 | |
18 $L$oop_enc1_1: | |
19 DB 102,15,56,220,209 | |
20 dec eax | |
21 movups xmm1,XMMWORD[r8] | |
22 lea r8,[16+r8] | |
23 jnz NEAR $L$oop_enc1_1 | |
24 DB 102,15,56,221,209 | |
25 pxor xmm0,xmm0 | |
26 pxor xmm1,xmm1 | |
27 movups XMMWORD[rdx],xmm2 | |
28 pxor xmm2,xmm2 | |
29 DB 0F3h,0C3h ;repret | |
30 | |
31 | |
32 global aesni_decrypt | |
33 | |
34 ALIGN 16 | |
35 aesni_decrypt: | |
36 movups xmm2,XMMWORD[rcx] | |
37 mov eax,DWORD[240+r8] | |
38 movups xmm0,XMMWORD[r8] | |
39 movups xmm1,XMMWORD[16+r8] | |
40 lea r8,[32+r8] | |
41 xorps xmm2,xmm0 | |
42 $L$oop_dec1_2: | |
43 DB 102,15,56,222,209 | |
44 dec eax | |
45 movups xmm1,XMMWORD[r8] | |
46 lea r8,[16+r8] | |
47 jnz NEAR $L$oop_dec1_2 | |
48 DB 102,15,56,223,209 | |
49 pxor xmm0,xmm0 | |
50 pxor xmm1,xmm1 | |
51 movups XMMWORD[rdx],xmm2 | |
52 pxor xmm2,xmm2 | |
53 DB 0F3h,0C3h ;repret | |
54 | |
55 | |
56 ALIGN 16 | |
57 _aesni_encrypt2: | |
58 movups xmm0,XMMWORD[rcx] | |
59 shl eax,4 | |
60 movups xmm1,XMMWORD[16+rcx] | |
61 xorps xmm2,xmm0 | |
62 xorps xmm3,xmm0 | |
63 movups xmm0,XMMWORD[32+rcx] | |
64 lea rcx,[32+rax*1+rcx] | |
65 neg rax | |
66 add rax,16 | |
67 | |
68 $L$enc_loop2: | |
69 DB 102,15,56,220,209 | |
70 DB 102,15,56,220,217 | |
71 movups xmm1,XMMWORD[rax*1+rcx] | |
72 add rax,32 | |
73 DB 102,15,56,220,208 | |
74 DB 102,15,56,220,216 | |
75 movups xmm0,XMMWORD[((-16))+rax*1+rcx] | |
76 jnz NEAR $L$enc_loop2 | |
77 | |
78 DB 102,15,56,220,209 | |
79 DB 102,15,56,220,217 | |
80 DB 102,15,56,221,208 | |
81 DB 102,15,56,221,216 | |
82 DB 0F3h,0C3h ;repret | |
83 | |
84 | |
85 ALIGN 16 | |
86 _aesni_decrypt2: | |
87 movups xmm0,XMMWORD[rcx] | |
88 shl eax,4 | |
89 movups xmm1,XMMWORD[16+rcx] | |
90 xorps xmm2,xmm0 | |
91 xorps xmm3,xmm0 | |
92 movups xmm0,XMMWORD[32+rcx] | |
93 lea rcx,[32+rax*1+rcx] | |
94 neg rax | |
95 add rax,16 | |
96 | |
97 $L$dec_loop2: | |
98 DB 102,15,56,222,209 | |
99 DB 102,15,56,222,217 | |
100 movups xmm1,XMMWORD[rax*1+rcx] | |
101 add rax,32 | |
102 DB 102,15,56,222,208 | |
103 DB 102,15,56,222,216 | |
104 movups xmm0,XMMWORD[((-16))+rax*1+rcx] | |
105 jnz NEAR $L$dec_loop2 | |
106 | |
107 DB 102,15,56,222,209 | |
108 DB 102,15,56,222,217 | |
109 DB 102,15,56,223,208 | |
110 DB 102,15,56,223,216 | |
111 DB 0F3h,0C3h ;repret | |
112 | |
113 | |
114 ALIGN 16 | |
115 _aesni_encrypt3: | |
116 movups xmm0,XMMWORD[rcx] | |
117 shl eax,4 | |
118 movups xmm1,XMMWORD[16+rcx] | |
119 xorps xmm2,xmm0 | |
120 xorps xmm3,xmm0 | |
121 xorps xmm4,xmm0 | |
122 movups xmm0,XMMWORD[32+rcx] | |
123 lea rcx,[32+rax*1+rcx] | |
124 neg rax | |
125 add rax,16 | |
126 | |
127 $L$enc_loop3: | |
128 DB 102,15,56,220,209 | |
129 DB 102,15,56,220,217 | |
130 DB 102,15,56,220,225 | |
131 movups xmm1,XMMWORD[rax*1+rcx] | |
132 add rax,32 | |
133 DB 102,15,56,220,208 | |
134 DB 102,15,56,220,216 | |
135 DB 102,15,56,220,224 | |
136 movups xmm0,XMMWORD[((-16))+rax*1+rcx] | |
137 jnz NEAR $L$enc_loop3 | |
138 | |
139 DB 102,15,56,220,209 | |
140 DB 102,15,56,220,217 | |
141 DB 102,15,56,220,225 | |
142 DB 102,15,56,221,208 | |
143 DB 102,15,56,221,216 | |
144 DB 102,15,56,221,224 | |
145 DB 0F3h,0C3h ;repret | |
146 | |
147 | |
148 ALIGN 16 | |
149 _aesni_decrypt3: | |
150 movups xmm0,XMMWORD[rcx] | |
151 shl eax,4 | |
152 movups xmm1,XMMWORD[16+rcx] | |
153 xorps xmm2,xmm0 | |
154 xorps xmm3,xmm0 | |
155 xorps xmm4,xmm0 | |
156 movups xmm0,XMMWORD[32+rcx] | |
157 lea rcx,[32+rax*1+rcx] | |
158 neg rax | |
159 add rax,16 | |
160 | |
161 $L$dec_loop3: | |
162 DB 102,15,56,222,209 | |
163 DB 102,15,56,222,217 | |
164 DB 102,15,56,222,225 | |
165 movups xmm1,XMMWORD[rax*1+rcx] | |
166 add rax,32 | |
167 DB 102,15,56,222,208 | |
168 DB 102,15,56,222,216 | |
169 DB 102,15,56,222,224 | |
170 movups xmm0,XMMWORD[((-16))+rax*1+rcx] | |
171 jnz NEAR $L$dec_loop3 | |
172 | |
173 DB 102,15,56,222,209 | |
174 DB 102,15,56,222,217 | |
175 DB 102,15,56,222,225 | |
176 DB 102,15,56,223,208 | |
177 DB 102,15,56,223,216 | |
178 DB 102,15,56,223,224 | |
179 DB 0F3h,0C3h ;repret | |
180 | |
181 | |
182 ALIGN 16 | |
183 _aesni_encrypt4: | |
184 movups xmm0,XMMWORD[rcx] | |
185 shl eax,4 | |
186 movups xmm1,XMMWORD[16+rcx] | |
187 xorps xmm2,xmm0 | |
188 xorps xmm3,xmm0 | |
189 xorps xmm4,xmm0 | |
190 xorps xmm5,xmm0 | |
191 movups xmm0,XMMWORD[32+rcx] | |
192 lea rcx,[32+rax*1+rcx] | |
193 neg rax | |
194 DB 0x0f,0x1f,0x00 | |
195 add rax,16 | |
196 | |
197 $L$enc_loop4: | |
198 DB 102,15,56,220,209 | |
199 DB 102,15,56,220,217 | |
200 DB 102,15,56,220,225 | |
201 DB 102,15,56,220,233 | |
202 movups xmm1,XMMWORD[rax*1+rcx] | |
203 add rax,32 | |
204 DB 102,15,56,220,208 | |
205 DB 102,15,56,220,216 | |
206 DB 102,15,56,220,224 | |
207 DB 102,15,56,220,232 | |
208 movups xmm0,XMMWORD[((-16))+rax*1+rcx] | |
209 jnz NEAR $L$enc_loop4 | |
210 | |
211 DB 102,15,56,220,209 | |
212 DB 102,15,56,220,217 | |
213 DB 102,15,56,220,225 | |
214 DB 102,15,56,220,233 | |
215 DB 102,15,56,221,208 | |
216 DB 102,15,56,221,216 | |
217 DB 102,15,56,221,224 | |
218 DB 102,15,56,221,232 | |
219 DB 0F3h,0C3h ;repret | |
220 | |
221 | |
222 ALIGN 16 | |
223 _aesni_decrypt4: | |
224 movups xmm0,XMMWORD[rcx] | |
225 shl eax,4 | |
226 movups xmm1,XMMWORD[16+rcx] | |
227 xorps xmm2,xmm0 | |
228 xorps xmm3,xmm0 | |
229 xorps xmm4,xmm0 | |
230 xorps xmm5,xmm0 | |
231 movups xmm0,XMMWORD[32+rcx] | |
232 lea rcx,[32+rax*1+rcx] | |
233 neg rax | |
234 DB 0x0f,0x1f,0x00 | |
235 add rax,16 | |
236 | |
237 $L$dec_loop4: | |
238 DB 102,15,56,222,209 | |
239 DB 102,15,56,222,217 | |
240 DB 102,15,56,222,225 | |
241 DB 102,15,56,222,233 | |
242 movups xmm1,XMMWORD[rax*1+rcx] | |
243 add rax,32 | |
244 DB 102,15,56,222,208 | |
245 DB 102,15,56,222,216 | |
246 DB 102,15,56,222,224 | |
247 DB 102,15,56,222,232 | |
248 movups xmm0,XMMWORD[((-16))+rax*1+rcx] | |
249 jnz NEAR $L$dec_loop4 | |
250 | |
251 DB 102,15,56,222,209 | |
252 DB 102,15,56,222,217 | |
253 DB 102,15,56,222,225 | |
254 DB 102,15,56,222,233 | |
255 DB 102,15,56,223,208 | |
256 DB 102,15,56,223,216 | |
257 DB 102,15,56,223,224 | |
258 DB 102,15,56,223,232 | |
259 DB 0F3h,0C3h ;repret | |
260 | |
261 | |
262 ALIGN 16 | |
263 _aesni_encrypt6: | |
264 movups xmm0,XMMWORD[rcx] | |
265 shl eax,4 | |
266 movups xmm1,XMMWORD[16+rcx] | |
267 xorps xmm2,xmm0 | |
268 pxor xmm3,xmm0 | |
269 pxor xmm4,xmm0 | |
270 DB 102,15,56,220,209 | |
271 lea rcx,[32+rax*1+rcx] | |
272 neg rax | |
273 DB 102,15,56,220,217 | |
274 pxor xmm5,xmm0 | |
275 pxor xmm6,xmm0 | |
276 DB 102,15,56,220,225 | |
277 pxor xmm7,xmm0 | |
278 movups xmm0,XMMWORD[rax*1+rcx] | |
279 add rax,16 | |
280 jmp NEAR $L$enc_loop6_enter | |
281 ALIGN 16 | |
282 $L$enc_loop6: | |
283 DB 102,15,56,220,209 | |
284 DB 102,15,56,220,217 | |
285 DB 102,15,56,220,225 | |
286 $L$enc_loop6_enter: | |
287 DB 102,15,56,220,233 | |
288 DB 102,15,56,220,241 | |
289 DB 102,15,56,220,249 | |
290 movups xmm1,XMMWORD[rax*1+rcx] | |
291 add rax,32 | |
292 DB 102,15,56,220,208 | |
293 DB 102,15,56,220,216 | |
294 DB 102,15,56,220,224 | |
295 DB 102,15,56,220,232 | |
296 DB 102,15,56,220,240 | |
297 DB 102,15,56,220,248 | |
298 movups xmm0,XMMWORD[((-16))+rax*1+rcx] | |
299 jnz NEAR $L$enc_loop6 | |
300 | |
301 DB 102,15,56,220,209 | |
302 DB 102,15,56,220,217 | |
303 DB 102,15,56,220,225 | |
304 DB 102,15,56,220,233 | |
305 DB 102,15,56,220,241 | |
306 DB 102,15,56,220,249 | |
307 DB 102,15,56,221,208 | |
308 DB 102,15,56,221,216 | |
309 DB 102,15,56,221,224 | |
310 DB 102,15,56,221,232 | |
311 DB 102,15,56,221,240 | |
312 DB 102,15,56,221,248 | |
313 DB 0F3h,0C3h ;repret | |
314 | |
315 | |
316 ALIGN 16 | |
317 _aesni_decrypt6: | |
318 movups xmm0,XMMWORD[rcx] | |
319 shl eax,4 | |
320 movups xmm1,XMMWORD[16+rcx] | |
321 xorps xmm2,xmm0 | |
322 pxor xmm3,xmm0 | |
323 pxor xmm4,xmm0 | |
324 DB 102,15,56,222,209 | |
325 lea rcx,[32+rax*1+rcx] | |
326 neg rax | |
327 DB 102,15,56,222,217 | |
328 pxor xmm5,xmm0 | |
329 pxor xmm6,xmm0 | |
330 DB 102,15,56,222,225 | |
331 pxor xmm7,xmm0 | |
332 movups xmm0,XMMWORD[rax*1+rcx] | |
333 add rax,16 | |
334 jmp NEAR $L$dec_loop6_enter | |
335 ALIGN 16 | |
336 $L$dec_loop6: | |
337 DB 102,15,56,222,209 | |
338 DB 102,15,56,222,217 | |
339 DB 102,15,56,222,225 | |
340 $L$dec_loop6_enter: | |
341 DB 102,15,56,222,233 | |
342 DB 102,15,56,222,241 | |
343 DB 102,15,56,222,249 | |
344 movups xmm1,XMMWORD[rax*1+rcx] | |
345 add rax,32 | |
346 DB 102,15,56,222,208 | |
347 DB 102,15,56,222,216 | |
348 DB 102,15,56,222,224 | |
349 DB 102,15,56,222,232 | |
350 DB 102,15,56,222,240 | |
351 DB 102,15,56,222,248 | |
352 movups xmm0,XMMWORD[((-16))+rax*1+rcx] | |
353 jnz NEAR $L$dec_loop6 | |
354 | |
355 DB 102,15,56,222,209 | |
356 DB 102,15,56,222,217 | |
357 DB 102,15,56,222,225 | |
358 DB 102,15,56,222,233 | |
359 DB 102,15,56,222,241 | |
360 DB 102,15,56,222,249 | |
361 DB 102,15,56,223,208 | |
362 DB 102,15,56,223,216 | |
363 DB 102,15,56,223,224 | |
364 DB 102,15,56,223,232 | |
365 DB 102,15,56,223,240 | |
366 DB 102,15,56,223,248 | |
367 DB 0F3h,0C3h ;repret | |
368 | |
369 | |
370 ALIGN 16 | |
371 _aesni_encrypt8: | |
372 movups xmm0,XMMWORD[rcx] | |
373 shl eax,4 | |
374 movups xmm1,XMMWORD[16+rcx] | |
375 xorps xmm2,xmm0 | |
376 xorps xmm3,xmm0 | |
377 pxor xmm4,xmm0 | |
378 pxor xmm5,xmm0 | |
379 pxor xmm6,xmm0 | |
380 lea rcx,[32+rax*1+rcx] | |
381 neg rax | |
382 DB 102,15,56,220,209 | |
383 pxor xmm7,xmm0 | |
384 pxor xmm8,xmm0 | |
385 DB 102,15,56,220,217 | |
386 pxor xmm9,xmm0 | |
387 movups xmm0,XMMWORD[rax*1+rcx] | |
388 add rax,16 | |
389 jmp NEAR $L$enc_loop8_inner | |
390 ALIGN 16 | |
391 $L$enc_loop8: | |
392 DB 102,15,56,220,209 | |
393 DB 102,15,56,220,217 | |
394 $L$enc_loop8_inner: | |
395 DB 102,15,56,220,225 | |
396 DB 102,15,56,220,233 | |
397 DB 102,15,56,220,241 | |
398 DB 102,15,56,220,249 | |
399 DB 102,68,15,56,220,193 | |
400 DB 102,68,15,56,220,201 | |
401 $L$enc_loop8_enter: | |
402 movups xmm1,XMMWORD[rax*1+rcx] | |
403 add rax,32 | |
404 DB 102,15,56,220,208 | |
405 DB 102,15,56,220,216 | |
406 DB 102,15,56,220,224 | |
407 DB 102,15,56,220,232 | |
408 DB 102,15,56,220,240 | |
409 DB 102,15,56,220,248 | |
410 DB 102,68,15,56,220,192 | |
411 DB 102,68,15,56,220,200 | |
412 movups xmm0,XMMWORD[((-16))+rax*1+rcx] | |
413 jnz NEAR $L$enc_loop8 | |
414 | |
415 DB 102,15,56,220,209 | |
416 DB 102,15,56,220,217 | |
417 DB 102,15,56,220,225 | |
418 DB 102,15,56,220,233 | |
419 DB 102,15,56,220,241 | |
420 DB 102,15,56,220,249 | |
421 DB 102,68,15,56,220,193 | |
422 DB 102,68,15,56,220,201 | |
423 DB 102,15,56,221,208 | |
424 DB 102,15,56,221,216 | |
425 DB 102,15,56,221,224 | |
426 DB 102,15,56,221,232 | |
427 DB 102,15,56,221,240 | |
428 DB 102,15,56,221,248 | |
429 DB 102,68,15,56,221,192 | |
430 DB 102,68,15,56,221,200 | |
431 DB 0F3h,0C3h ;repret | |
432 | |
433 | |
434 ALIGN 16 | |
435 _aesni_decrypt8: | |
436 movups xmm0,XMMWORD[rcx] | |
437 shl eax,4 | |
438 movups xmm1,XMMWORD[16+rcx] | |
439 xorps xmm2,xmm0 | |
440 xorps xmm3,xmm0 | |
441 pxor xmm4,xmm0 | |
442 pxor xmm5,xmm0 | |
443 pxor xmm6,xmm0 | |
444 lea rcx,[32+rax*1+rcx] | |
445 neg rax | |
446 DB 102,15,56,222,209 | |
447 pxor xmm7,xmm0 | |
448 pxor xmm8,xmm0 | |
449 DB 102,15,56,222,217 | |
450 pxor xmm9,xmm0 | |
451 movups xmm0,XMMWORD[rax*1+rcx] | |
452 add rax,16 | |
453 jmp NEAR $L$dec_loop8_inner | |
454 ALIGN 16 | |
455 $L$dec_loop8: | |
456 DB 102,15,56,222,209 | |
457 DB 102,15,56,222,217 | |
458 $L$dec_loop8_inner: | |
459 DB 102,15,56,222,225 | |
460 DB 102,15,56,222,233 | |
461 DB 102,15,56,222,241 | |
462 DB 102,15,56,222,249 | |
463 DB 102,68,15,56,222,193 | |
464 DB 102,68,15,56,222,201 | |
465 $L$dec_loop8_enter: | |
466 movups xmm1,XMMWORD[rax*1+rcx] | |
467 add rax,32 | |
468 DB 102,15,56,222,208 | |
469 DB 102,15,56,222,216 | |
470 DB 102,15,56,222,224 | |
471 DB 102,15,56,222,232 | |
472 DB 102,15,56,222,240 | |
473 DB 102,15,56,222,248 | |
474 DB 102,68,15,56,222,192 | |
475 DB 102,68,15,56,222,200 | |
476 movups xmm0,XMMWORD[((-16))+rax*1+rcx] | |
477 jnz NEAR $L$dec_loop8 | |
478 | |
479 DB 102,15,56,222,209 | |
480 DB 102,15,56,222,217 | |
481 DB 102,15,56,222,225 | |
482 DB 102,15,56,222,233 | |
483 DB 102,15,56,222,241 | |
484 DB 102,15,56,222,249 | |
485 DB 102,68,15,56,222,193 | |
486 DB 102,68,15,56,222,201 | |
487 DB 102,15,56,223,208 | |
488 DB 102,15,56,223,216 | |
489 DB 102,15,56,223,224 | |
490 DB 102,15,56,223,232 | |
491 DB 102,15,56,223,240 | |
492 DB 102,15,56,223,248 | |
493 DB 102,68,15,56,223,192 | |
494 DB 102,68,15,56,223,200 | |
495 DB 0F3h,0C3h ;repret | |
496 | |
497 global aesni_ecb_encrypt | |
498 | |
499 ALIGN 16 | |
500 aesni_ecb_encrypt: | |
501 mov QWORD[8+rsp],rdi ;WIN64 prologue | |
502 mov QWORD[16+rsp],rsi | |
503 mov rax,rsp | |
504 $L$SEH_begin_aesni_ecb_encrypt: | |
505 mov rdi,rcx | |
506 mov rsi,rdx | |
507 mov rdx,r8 | |
508 mov rcx,r9 | |
509 mov r8,QWORD[40+rsp] | |
510 | |
511 | |
512 lea rsp,[((-88))+rsp] | |
513 movaps XMMWORD[rsp],xmm6 | |
514 movaps XMMWORD[16+rsp],xmm7 | |
515 movaps XMMWORD[32+rsp],xmm8 | |
516 movaps XMMWORD[48+rsp],xmm9 | |
517 $L$ecb_enc_body: | |
518 and rdx,-16 | |
519 jz NEAR $L$ecb_ret | |
520 | |
521 mov eax,DWORD[240+rcx] | |
522 movups xmm0,XMMWORD[rcx] | |
523 mov r11,rcx | |
524 mov r10d,eax | |
525 test r8d,r8d | |
526 jz NEAR $L$ecb_decrypt | |
527 | |
528 cmp rdx,0x80 | |
529 jb NEAR $L$ecb_enc_tail | |
530 | |
531 movdqu xmm2,XMMWORD[rdi] | |
532 movdqu xmm3,XMMWORD[16+rdi] | |
533 movdqu xmm4,XMMWORD[32+rdi] | |
534 movdqu xmm5,XMMWORD[48+rdi] | |
535 movdqu xmm6,XMMWORD[64+rdi] | |
536 movdqu xmm7,XMMWORD[80+rdi] | |
537 movdqu xmm8,XMMWORD[96+rdi] | |
538 movdqu xmm9,XMMWORD[112+rdi] | |
539 lea rdi,[128+rdi] | |
540 sub rdx,0x80 | |
541 jmp NEAR $L$ecb_enc_loop8_enter | |
542 ALIGN 16 | |
543 $L$ecb_enc_loop8: | |
544 movups XMMWORD[rsi],xmm2 | |
545 mov rcx,r11 | |
546 movdqu xmm2,XMMWORD[rdi] | |
547 mov eax,r10d | |
548 movups XMMWORD[16+rsi],xmm3 | |
549 movdqu xmm3,XMMWORD[16+rdi] | |
550 movups XMMWORD[32+rsi],xmm4 | |
551 movdqu xmm4,XMMWORD[32+rdi] | |
552 movups XMMWORD[48+rsi],xmm5 | |
553 movdqu xmm5,XMMWORD[48+rdi] | |
554 movups XMMWORD[64+rsi],xmm6 | |
555 movdqu xmm6,XMMWORD[64+rdi] | |
556 movups XMMWORD[80+rsi],xmm7 | |
557 movdqu xmm7,XMMWORD[80+rdi] | |
558 movups XMMWORD[96+rsi],xmm8 | |
559 movdqu xmm8,XMMWORD[96+rdi] | |
560 movups XMMWORD[112+rsi],xmm9 | |
561 lea rsi,[128+rsi] | |
562 movdqu xmm9,XMMWORD[112+rdi] | |
563 lea rdi,[128+rdi] | |
564 $L$ecb_enc_loop8_enter: | |
565 | |
566 call _aesni_encrypt8 | |
567 | |
568 sub rdx,0x80 | |
569 jnc NEAR $L$ecb_enc_loop8 | |
570 | |
571 movups XMMWORD[rsi],xmm2 | |
572 mov rcx,r11 | |
573 movups XMMWORD[16+rsi],xmm3 | |
574 mov eax,r10d | |
575 movups XMMWORD[32+rsi],xmm4 | |
576 movups XMMWORD[48+rsi],xmm5 | |
577 movups XMMWORD[64+rsi],xmm6 | |
578 movups XMMWORD[80+rsi],xmm7 | |
579 movups XMMWORD[96+rsi],xmm8 | |
580 movups XMMWORD[112+rsi],xmm9 | |
581 lea rsi,[128+rsi] | |
582 add rdx,0x80 | |
583 jz NEAR $L$ecb_ret | |
584 | |
585 $L$ecb_enc_tail: | |
586 movups xmm2,XMMWORD[rdi] | |
587 cmp rdx,0x20 | |
588 jb NEAR $L$ecb_enc_one | |
589 movups xmm3,XMMWORD[16+rdi] | |
590 je NEAR $L$ecb_enc_two | |
591 movups xmm4,XMMWORD[32+rdi] | |
592 cmp rdx,0x40 | |
593 jb NEAR $L$ecb_enc_three | |
594 movups xmm5,XMMWORD[48+rdi] | |
595 je NEAR $L$ecb_enc_four | |
596 movups xmm6,XMMWORD[64+rdi] | |
597 cmp rdx,0x60 | |
598 jb NEAR $L$ecb_enc_five | |
599 movups xmm7,XMMWORD[80+rdi] | |
600 je NEAR $L$ecb_enc_six | |
601 movdqu xmm8,XMMWORD[96+rdi] | |
602 xorps xmm9,xmm9 | |
603 call _aesni_encrypt8 | |
604 movups XMMWORD[rsi],xmm2 | |
605 movups XMMWORD[16+rsi],xmm3 | |
606 movups XMMWORD[32+rsi],xmm4 | |
607 movups XMMWORD[48+rsi],xmm5 | |
608 movups XMMWORD[64+rsi],xmm6 | |
609 movups XMMWORD[80+rsi],xmm7 | |
610 movups XMMWORD[96+rsi],xmm8 | |
611 jmp NEAR $L$ecb_ret | |
612 ALIGN 16 | |
613 $L$ecb_enc_one: | |
614 movups xmm0,XMMWORD[rcx] | |
615 movups xmm1,XMMWORD[16+rcx] | |
616 lea rcx,[32+rcx] | |
617 xorps xmm2,xmm0 | |
618 $L$oop_enc1_3: | |
619 DB 102,15,56,220,209 | |
620 dec eax | |
621 movups xmm1,XMMWORD[rcx] | |
622 lea rcx,[16+rcx] | |
623 jnz NEAR $L$oop_enc1_3 | |
624 DB 102,15,56,221,209 | |
625 movups XMMWORD[rsi],xmm2 | |
626 jmp NEAR $L$ecb_ret | |
627 ALIGN 16 | |
628 $L$ecb_enc_two: | |
629 call _aesni_encrypt2 | |
630 movups XMMWORD[rsi],xmm2 | |
631 movups XMMWORD[16+rsi],xmm3 | |
632 jmp NEAR $L$ecb_ret | |
633 ALIGN 16 | |
634 $L$ecb_enc_three: | |
635 call _aesni_encrypt3 | |
636 movups XMMWORD[rsi],xmm2 | |
637 movups XMMWORD[16+rsi],xmm3 | |
638 movups XMMWORD[32+rsi],xmm4 | |
639 jmp NEAR $L$ecb_ret | |
640 ALIGN 16 | |
641 $L$ecb_enc_four: | |
642 call _aesni_encrypt4 | |
643 movups XMMWORD[rsi],xmm2 | |
644 movups XMMWORD[16+rsi],xmm3 | |
645 movups XMMWORD[32+rsi],xmm4 | |
646 movups XMMWORD[48+rsi],xmm5 | |
647 jmp NEAR $L$ecb_ret | |
648 ALIGN 16 | |
649 $L$ecb_enc_five: | |
650 xorps xmm7,xmm7 | |
651 call _aesni_encrypt6 | |
652 movups XMMWORD[rsi],xmm2 | |
653 movups XMMWORD[16+rsi],xmm3 | |
654 movups XMMWORD[32+rsi],xmm4 | |
655 movups XMMWORD[48+rsi],xmm5 | |
656 movups XMMWORD[64+rsi],xmm6 | |
657 jmp NEAR $L$ecb_ret | |
658 ALIGN 16 | |
659 $L$ecb_enc_six: | |
660 call _aesni_encrypt6 | |
661 movups XMMWORD[rsi],xmm2 | |
662 movups XMMWORD[16+rsi],xmm3 | |
663 movups XMMWORD[32+rsi],xmm4 | |
664 movups XMMWORD[48+rsi],xmm5 | |
665 movups XMMWORD[64+rsi],xmm6 | |
666 movups XMMWORD[80+rsi],xmm7 | |
667 jmp NEAR $L$ecb_ret | |
668 | |
669 ALIGN 16 | |
670 $L$ecb_decrypt: | |
671 cmp rdx,0x80 | |
672 jb NEAR $L$ecb_dec_tail | |
673 | |
674 movdqu xmm2,XMMWORD[rdi] | |
675 movdqu xmm3,XMMWORD[16+rdi] | |
676 movdqu xmm4,XMMWORD[32+rdi] | |
677 movdqu xmm5,XMMWORD[48+rdi] | |
678 movdqu xmm6,XMMWORD[64+rdi] | |
679 movdqu xmm7,XMMWORD[80+rdi] | |
680 movdqu xmm8,XMMWORD[96+rdi] | |
681 movdqu xmm9,XMMWORD[112+rdi] | |
682 lea rdi,[128+rdi] | |
683 sub rdx,0x80 | |
684 jmp NEAR $L$ecb_dec_loop8_enter | |
685 ALIGN 16 | |
686 $L$ecb_dec_loop8: | |
687 movups XMMWORD[rsi],xmm2 | |
688 mov rcx,r11 | |
689 movdqu xmm2,XMMWORD[rdi] | |
690 mov eax,r10d | |
691 movups XMMWORD[16+rsi],xmm3 | |
692 movdqu xmm3,XMMWORD[16+rdi] | |
693 movups XMMWORD[32+rsi],xmm4 | |
694 movdqu xmm4,XMMWORD[32+rdi] | |
695 movups XMMWORD[48+rsi],xmm5 | |
696 movdqu xmm5,XMMWORD[48+rdi] | |
697 movups XMMWORD[64+rsi],xmm6 | |
698 movdqu xmm6,XMMWORD[64+rdi] | |
699 movups XMMWORD[80+rsi],xmm7 | |
700 movdqu xmm7,XMMWORD[80+rdi] | |
701 movups XMMWORD[96+rsi],xmm8 | |
702 movdqu xmm8,XMMWORD[96+rdi] | |
703 movups XMMWORD[112+rsi],xmm9 | |
704 lea rsi,[128+rsi] | |
705 movdqu xmm9,XMMWORD[112+rdi] | |
706 lea rdi,[128+rdi] | |
707 $L$ecb_dec_loop8_enter: | |
708 | |
709 call _aesni_decrypt8 | |
710 | |
711 movups xmm0,XMMWORD[r11] | |
712 sub rdx,0x80 | |
713 jnc NEAR $L$ecb_dec_loop8 | |
714 | |
715 movups XMMWORD[rsi],xmm2 | |
716 pxor xmm2,xmm2 | |
717 mov rcx,r11 | |
718 movups XMMWORD[16+rsi],xmm3 | |
719 pxor xmm3,xmm3 | |
720 mov eax,r10d | |
721 movups XMMWORD[32+rsi],xmm4 | |
722 pxor xmm4,xmm4 | |
723 movups XMMWORD[48+rsi],xmm5 | |
724 pxor xmm5,xmm5 | |
725 movups XMMWORD[64+rsi],xmm6 | |
726 pxor xmm6,xmm6 | |
727 movups XMMWORD[80+rsi],xmm7 | |
728 pxor xmm7,xmm7 | |
729 movups XMMWORD[96+rsi],xmm8 | |
730 pxor xmm8,xmm8 | |
731 movups XMMWORD[112+rsi],xmm9 | |
732 pxor xmm9,xmm9 | |
733 lea rsi,[128+rsi] | |
734 add rdx,0x80 | |
735 jz NEAR $L$ecb_ret | |
736 | |
737 $L$ecb_dec_tail: | |
738 movups xmm2,XMMWORD[rdi] | |
739 cmp rdx,0x20 | |
740 jb NEAR $L$ecb_dec_one | |
741 movups xmm3,XMMWORD[16+rdi] | |
742 je NEAR $L$ecb_dec_two | |
743 movups xmm4,XMMWORD[32+rdi] | |
744 cmp rdx,0x40 | |
745 jb NEAR $L$ecb_dec_three | |
746 movups xmm5,XMMWORD[48+rdi] | |
747 je NEAR $L$ecb_dec_four | |
748 movups xmm6,XMMWORD[64+rdi] | |
749 cmp rdx,0x60 | |
750 jb NEAR $L$ecb_dec_five | |
751 movups xmm7,XMMWORD[80+rdi] | |
752 je NEAR $L$ecb_dec_six | |
753 movups xmm8,XMMWORD[96+rdi] | |
754 movups xmm0,XMMWORD[rcx] | |
755 xorps xmm9,xmm9 | |
756 call _aesni_decrypt8 | |
757 movups XMMWORD[rsi],xmm2 | |
758 pxor xmm2,xmm2 | |
759 movups XMMWORD[16+rsi],xmm3 | |
760 pxor xmm3,xmm3 | |
761 movups XMMWORD[32+rsi],xmm4 | |
762 pxor xmm4,xmm4 | |
763 movups XMMWORD[48+rsi],xmm5 | |
764 pxor xmm5,xmm5 | |
765 movups XMMWORD[64+rsi],xmm6 | |
766 pxor xmm6,xmm6 | |
767 movups XMMWORD[80+rsi],xmm7 | |
768 pxor xmm7,xmm7 | |
769 movups XMMWORD[96+rsi],xmm8 | |
770 pxor xmm8,xmm8 | |
771 pxor xmm9,xmm9 | |
772 jmp NEAR $L$ecb_ret | |
773 ALIGN 16 | |
774 $L$ecb_dec_one: | |
775 movups xmm0,XMMWORD[rcx] | |
776 movups xmm1,XMMWORD[16+rcx] | |
777 lea rcx,[32+rcx] | |
778 xorps xmm2,xmm0 | |
779 $L$oop_dec1_4: | |
780 DB 102,15,56,222,209 | |
781 dec eax | |
782 movups xmm1,XMMWORD[rcx] | |
783 lea rcx,[16+rcx] | |
784 jnz NEAR $L$oop_dec1_4 | |
785 DB 102,15,56,223,209 | |
786 movups XMMWORD[rsi],xmm2 | |
787 pxor xmm2,xmm2 | |
788 jmp NEAR $L$ecb_ret | |
789 ALIGN 16 | |
790 $L$ecb_dec_two: | |
791 call _aesni_decrypt2 | |
792 movups XMMWORD[rsi],xmm2 | |
793 pxor xmm2,xmm2 | |
794 movups XMMWORD[16+rsi],xmm3 | |
795 pxor xmm3,xmm3 | |
796 jmp NEAR $L$ecb_ret | |
797 ALIGN 16 | |
798 $L$ecb_dec_three: | |
799 call _aesni_decrypt3 | |
800 movups XMMWORD[rsi],xmm2 | |
801 pxor xmm2,xmm2 | |
802 movups XMMWORD[16+rsi],xmm3 | |
803 pxor xmm3,xmm3 | |
804 movups XMMWORD[32+rsi],xmm4 | |
805 pxor xmm4,xmm4 | |
806 jmp NEAR $L$ecb_ret | |
807 ALIGN 16 | |
808 $L$ecb_dec_four: | |
809 call _aesni_decrypt4 | |
810 movups XMMWORD[rsi],xmm2 | |
811 pxor xmm2,xmm2 | |
812 movups XMMWORD[16+rsi],xmm3 | |
813 pxor xmm3,xmm3 | |
814 movups XMMWORD[32+rsi],xmm4 | |
815 pxor xmm4,xmm4 | |
816 movups XMMWORD[48+rsi],xmm5 | |
817 pxor xmm5,xmm5 | |
818 jmp NEAR $L$ecb_ret | |
819 ALIGN 16 | |
820 $L$ecb_dec_five: | |
821 xorps xmm7,xmm7 | |
822 call _aesni_decrypt6 | |
823 movups XMMWORD[rsi],xmm2 | |
824 pxor xmm2,xmm2 | |
825 movups XMMWORD[16+rsi],xmm3 | |
826 pxor xmm3,xmm3 | |
827 movups XMMWORD[32+rsi],xmm4 | |
828 pxor xmm4,xmm4 | |
829 movups XMMWORD[48+rsi],xmm5 | |
830 pxor xmm5,xmm5 | |
831 movups XMMWORD[64+rsi],xmm6 | |
832 pxor xmm6,xmm6 | |
833 pxor xmm7,xmm7 | |
834 jmp NEAR $L$ecb_ret | |
835 ALIGN 16 | |
836 $L$ecb_dec_six: | |
837 call _aesni_decrypt6 | |
838 movups XMMWORD[rsi],xmm2 | |
839 pxor xmm2,xmm2 | |
840 movups XMMWORD[16+rsi],xmm3 | |
841 pxor xmm3,xmm3 | |
842 movups XMMWORD[32+rsi],xmm4 | |
843 pxor xmm4,xmm4 | |
844 movups XMMWORD[48+rsi],xmm5 | |
845 pxor xmm5,xmm5 | |
846 movups XMMWORD[64+rsi],xmm6 | |
847 pxor xmm6,xmm6 | |
848 movups XMMWORD[80+rsi],xmm7 | |
849 pxor xmm7,xmm7 | |
850 | |
851 $L$ecb_ret: | |
852 xorps xmm0,xmm0 | |
853 pxor xmm1,xmm1 | |
854 movaps xmm6,XMMWORD[rsp] | |
855 movaps XMMWORD[rsp],xmm0 | |
856 movaps xmm7,XMMWORD[16+rsp] | |
857 movaps XMMWORD[16+rsp],xmm0 | |
858 movaps xmm8,XMMWORD[32+rsp] | |
859 movaps XMMWORD[32+rsp],xmm0 | |
860 movaps xmm9,XMMWORD[48+rsp] | |
861 movaps XMMWORD[48+rsp],xmm0 | |
862 lea rsp,[88+rsp] | |
863 $L$ecb_enc_ret: | |
864 mov rdi,QWORD[8+rsp] ;WIN64 epilogue | |
865 mov rsi,QWORD[16+rsp] | |
866 DB 0F3h,0C3h ;repret | |
867 $L$SEH_end_aesni_ecb_encrypt: | |
868 global aesni_ccm64_encrypt_blocks | |
869 | |
870 ALIGN 16 | |
871 aesni_ccm64_encrypt_blocks: | |
872 mov QWORD[8+rsp],rdi ;WIN64 prologue | |
873 mov QWORD[16+rsp],rsi | |
874 mov rax,rsp | |
875 $L$SEH_begin_aesni_ccm64_encrypt_blocks: | |
876 mov rdi,rcx | |
877 mov rsi,rdx | |
878 mov rdx,r8 | |
879 mov rcx,r9 | |
880 mov r8,QWORD[40+rsp] | |
881 mov r9,QWORD[48+rsp] | |
882 | |
883 | |
884 lea rsp,[((-88))+rsp] | |
885 movaps XMMWORD[rsp],xmm6 | |
886 movaps XMMWORD[16+rsp],xmm7 | |
887 movaps XMMWORD[32+rsp],xmm8 | |
888 movaps XMMWORD[48+rsp],xmm9 | |
889 $L$ccm64_enc_body: | |
890 mov eax,DWORD[240+rcx] | |
891 movdqu xmm6,XMMWORD[r8] | |
892 movdqa xmm9,XMMWORD[$L$increment64] | |
893 movdqa xmm7,XMMWORD[$L$bswap_mask] | |
894 | |
895 shl eax,4 | |
896 mov r10d,16 | |
897 lea r11,[rcx] | |
898 movdqu xmm3,XMMWORD[r9] | |
899 movdqa xmm2,xmm6 | |
900 lea rcx,[32+rax*1+rcx] | |
901 DB 102,15,56,0,247 | |
902 sub r10,rax | |
903 jmp NEAR $L$ccm64_enc_outer | |
904 ALIGN 16 | |
905 $L$ccm64_enc_outer: | |
906 movups xmm0,XMMWORD[r11] | |
907 mov rax,r10 | |
908 movups xmm8,XMMWORD[rdi] | |
909 | |
910 xorps xmm2,xmm0 | |
911 movups xmm1,XMMWORD[16+r11] | |
912 xorps xmm0,xmm8 | |
913 xorps xmm3,xmm0 | |
914 movups xmm0,XMMWORD[32+r11] | |
915 | |
916 $L$ccm64_enc2_loop: | |
917 DB 102,15,56,220,209 | |
918 DB 102,15,56,220,217 | |
919 movups xmm1,XMMWORD[rax*1+rcx] | |
920 add rax,32 | |
921 DB 102,15,56,220,208 | |
922 DB 102,15,56,220,216 | |
923 movups xmm0,XMMWORD[((-16))+rax*1+rcx] | |
924 jnz NEAR $L$ccm64_enc2_loop | |
925 DB 102,15,56,220,209 | |
926 DB 102,15,56,220,217 | |
927 paddq xmm6,xmm9 | |
928 dec rdx | |
929 DB 102,15,56,221,208 | |
930 DB 102,15,56,221,216 | |
931 | |
932 lea rdi,[16+rdi] | |
933 xorps xmm8,xmm2 | |
934 movdqa xmm2,xmm6 | |
935 movups XMMWORD[rsi],xmm8 | |
936 DB 102,15,56,0,215 | |
937 lea rsi,[16+rsi] | |
938 jnz NEAR $L$ccm64_enc_outer | |
939 | |
940 pxor xmm0,xmm0 | |
941 pxor xmm1,xmm1 | |
942 pxor xmm2,xmm2 | |
943 movups XMMWORD[r9],xmm3 | |
944 pxor xmm3,xmm3 | |
945 pxor xmm8,xmm8 | |
946 pxor xmm6,xmm6 | |
947 movaps xmm6,XMMWORD[rsp] | |
948 movaps XMMWORD[rsp],xmm0 | |
949 movaps xmm7,XMMWORD[16+rsp] | |
950 movaps XMMWORD[16+rsp],xmm0 | |
951 movaps xmm8,XMMWORD[32+rsp] | |
952 movaps XMMWORD[32+rsp],xmm0 | |
953 movaps xmm9,XMMWORD[48+rsp] | |
954 movaps XMMWORD[48+rsp],xmm0 | |
955 lea rsp,[88+rsp] | |
956 $L$ccm64_enc_ret: | |
957 mov rdi,QWORD[8+rsp] ;WIN64 epilogue | |
958 mov rsi,QWORD[16+rsp] | |
959 DB 0F3h,0C3h ;repret | |
960 $L$SEH_end_aesni_ccm64_encrypt_blocks: | |
961 global aesni_ccm64_decrypt_blocks | |
962 | |
963 ALIGN 16 | |
964 aesni_ccm64_decrypt_blocks: | |
965 mov QWORD[8+rsp],rdi ;WIN64 prologue | |
966 mov QWORD[16+rsp],rsi | |
967 mov rax,rsp | |
968 $L$SEH_begin_aesni_ccm64_decrypt_blocks: | |
969 mov rdi,rcx | |
970 mov rsi,rdx | |
971 mov rdx,r8 | |
972 mov rcx,r9 | |
973 mov r8,QWORD[40+rsp] | |
974 mov r9,QWORD[48+rsp] | |
975 | |
976 | |
977 lea rsp,[((-88))+rsp] | |
978 movaps XMMWORD[rsp],xmm6 | |
979 movaps XMMWORD[16+rsp],xmm7 | |
980 movaps XMMWORD[32+rsp],xmm8 | |
981 movaps XMMWORD[48+rsp],xmm9 | |
982 $L$ccm64_dec_body: | |
983 mov eax,DWORD[240+rcx] | |
984 movups xmm6,XMMWORD[r8] | |
985 movdqu xmm3,XMMWORD[r9] | |
986 movdqa xmm9,XMMWORD[$L$increment64] | |
987 movdqa xmm7,XMMWORD[$L$bswap_mask] | |
988 | |
989 movaps xmm2,xmm6 | |
990 mov r10d,eax | |
991 mov r11,rcx | |
992 DB 102,15,56,0,247 | |
993 movups xmm0,XMMWORD[rcx] | |
994 movups xmm1,XMMWORD[16+rcx] | |
995 lea rcx,[32+rcx] | |
996 xorps xmm2,xmm0 | |
997 $L$oop_enc1_5: | |
998 DB 102,15,56,220,209 | |
999 dec eax | |
1000 movups xmm1,XMMWORD[rcx] | |
1001 lea rcx,[16+rcx] | |
1002 jnz NEAR $L$oop_enc1_5 | |
1003 DB 102,15,56,221,209 | |
1004 shl r10d,4 | |
1005 mov eax,16 | |
1006 movups xmm8,XMMWORD[rdi] | |
1007 paddq xmm6,xmm9 | |
1008 lea rdi,[16+rdi] | |
1009 sub rax,r10 | |
1010 lea rcx,[32+r10*1+r11] | |
1011 mov r10,rax | |
1012 jmp NEAR $L$ccm64_dec_outer | |
1013 ALIGN 16 | |
1014 $L$ccm64_dec_outer: | |
1015 xorps xmm8,xmm2 | |
1016 movdqa xmm2,xmm6 | |
1017 movups XMMWORD[rsi],xmm8 | |
1018 lea rsi,[16+rsi] | |
1019 DB 102,15,56,0,215 | |
1020 | |
1021 sub rdx,1 | |
1022 jz NEAR $L$ccm64_dec_break | |
1023 | |
1024 movups xmm0,XMMWORD[r11] | |
1025 mov rax,r10 | |
1026 movups xmm1,XMMWORD[16+r11] | |
1027 xorps xmm8,xmm0 | |
1028 xorps xmm2,xmm0 | |
1029 xorps xmm3,xmm8 | |
1030 movups xmm0,XMMWORD[32+r11] | |
1031 jmp NEAR $L$ccm64_dec2_loop | |
1032 ALIGN 16 | |
1033 $L$ccm64_dec2_loop: | |
1034 DB 102,15,56,220,209 | |
1035 DB 102,15,56,220,217 | |
1036 movups xmm1,XMMWORD[rax*1+rcx] | |
1037 add rax,32 | |
1038 DB 102,15,56,220,208 | |
1039 DB 102,15,56,220,216 | |
1040 movups xmm0,XMMWORD[((-16))+rax*1+rcx] | |
1041 jnz NEAR $L$ccm64_dec2_loop | |
1042 movups xmm8,XMMWORD[rdi] | |
1043 paddq xmm6,xmm9 | |
1044 DB 102,15,56,220,209 | |
1045 DB 102,15,56,220,217 | |
1046 DB 102,15,56,221,208 | |
1047 DB 102,15,56,221,216 | |
1048 lea rdi,[16+rdi] | |
1049 jmp NEAR $L$ccm64_dec_outer | |
1050 | |
1051 ALIGN 16 | |
1052 $L$ccm64_dec_break: | |
1053 | |
1054 mov eax,DWORD[240+r11] | |
1055 movups xmm0,XMMWORD[r11] | |
1056 movups xmm1,XMMWORD[16+r11] | |
1057 xorps xmm8,xmm0 | |
1058 lea r11,[32+r11] | |
1059 xorps xmm3,xmm8 | |
1060 $L$oop_enc1_6: | |
1061 DB 102,15,56,220,217 | |
1062 dec eax | |
1063 movups xmm1,XMMWORD[r11] | |
1064 lea r11,[16+r11] | |
1065 jnz NEAR $L$oop_enc1_6 | |
1066 DB 102,15,56,221,217 | |
1067 pxor xmm0,xmm0 | |
1068 pxor xmm1,xmm1 | |
1069 pxor xmm2,xmm2 | |
1070 movups XMMWORD[r9],xmm3 | |
1071 pxor xmm3,xmm3 | |
1072 pxor xmm8,xmm8 | |
1073 pxor xmm6,xmm6 | |
1074 movaps xmm6,XMMWORD[rsp] | |
1075 movaps XMMWORD[rsp],xmm0 | |
1076 movaps xmm7,XMMWORD[16+rsp] | |
1077 movaps XMMWORD[16+rsp],xmm0 | |
1078 movaps xmm8,XMMWORD[32+rsp] | |
1079 movaps XMMWORD[32+rsp],xmm0 | |
1080 movaps xmm9,XMMWORD[48+rsp] | |
1081 movaps XMMWORD[48+rsp],xmm0 | |
1082 lea rsp,[88+rsp] | |
1083 $L$ccm64_dec_ret: | |
1084 mov rdi,QWORD[8+rsp] ;WIN64 epilogue | |
1085 mov rsi,QWORD[16+rsp] | |
1086 DB 0F3h,0C3h ;repret | |
1087 $L$SEH_end_aesni_ccm64_decrypt_blocks: | |
1088 global aesni_ctr32_encrypt_blocks | |
1089 | |
1090 ALIGN 16 | |
1091 aesni_ctr32_encrypt_blocks: | |
1092 mov QWORD[8+rsp],rdi ;WIN64 prologue | |
1093 mov QWORD[16+rsp],rsi | |
1094 mov rax,rsp | |
1095 $L$SEH_begin_aesni_ctr32_encrypt_blocks: | |
1096 mov rdi,rcx | |
1097 mov rsi,rdx | |
1098 mov rdx,r8 | |
1099 mov rcx,r9 | |
1100 mov r8,QWORD[40+rsp] | |
1101 | |
1102 | |
1103 cmp rdx,1 | |
1104 jne NEAR $L$ctr32_bulk | |
1105 | |
1106 | |
1107 | |
1108 movups xmm2,XMMWORD[r8] | |
1109 movups xmm3,XMMWORD[rdi] | |
1110 mov edx,DWORD[240+rcx] | |
1111 movups xmm0,XMMWORD[rcx] | |
1112 movups xmm1,XMMWORD[16+rcx] | |
1113 lea rcx,[32+rcx] | |
1114 xorps xmm2,xmm0 | |
1115 $L$oop_enc1_7: | |
1116 DB 102,15,56,220,209 | |
1117 dec edx | |
1118 movups xmm1,XMMWORD[rcx] | |
1119 lea rcx,[16+rcx] | |
1120 jnz NEAR $L$oop_enc1_7 | |
1121 DB 102,15,56,221,209 | |
1122 pxor xmm0,xmm0 | |
1123 pxor xmm1,xmm1 | |
1124 xorps xmm2,xmm3 | |
1125 pxor xmm3,xmm3 | |
1126 movups XMMWORD[rsi],xmm2 | |
1127 xorps xmm2,xmm2 | |
1128 jmp NEAR $L$ctr32_epilogue | |
1129 | |
1130 ALIGN 16 | |
1131 $L$ctr32_bulk: | |
1132 lea rax,[rsp] | |
1133 push rbp | |
1134 sub rsp,288 | |
1135 and rsp,-16 | |
1136 movaps XMMWORD[(-168)+rax],xmm6 | |
1137 movaps XMMWORD[(-152)+rax],xmm7 | |
1138 movaps XMMWORD[(-136)+rax],xmm8 | |
1139 movaps XMMWORD[(-120)+rax],xmm9 | |
1140 movaps XMMWORD[(-104)+rax],xmm10 | |
1141 movaps XMMWORD[(-88)+rax],xmm11 | |
1142 movaps XMMWORD[(-72)+rax],xmm12 | |
1143 movaps XMMWORD[(-56)+rax],xmm13 | |
1144 movaps XMMWORD[(-40)+rax],xmm14 | |
1145 movaps XMMWORD[(-24)+rax],xmm15 | |
1146 $L$ctr32_body: | |
1147 lea rbp,[((-8))+rax] | |
1148 | |
1149 | |
1150 | |
1151 | |
1152 movdqu xmm2,XMMWORD[r8] | |
1153 movdqu xmm0,XMMWORD[rcx] | |
1154 mov r8d,DWORD[12+r8] | |
1155 pxor xmm2,xmm0 | |
1156 mov r11d,DWORD[12+rcx] | |
1157 movdqa XMMWORD[rsp],xmm2 | |
1158 bswap r8d | |
1159 movdqa xmm3,xmm2 | |
1160 movdqa xmm4,xmm2 | |
1161 movdqa xmm5,xmm2 | |
1162 movdqa XMMWORD[64+rsp],xmm2 | |
1163 movdqa XMMWORD[80+rsp],xmm2 | |
1164 movdqa XMMWORD[96+rsp],xmm2 | |
1165 mov r10,rdx | |
1166 movdqa XMMWORD[112+rsp],xmm2 | |
1167 | |
1168 lea rax,[1+r8] | |
1169 lea rdx,[2+r8] | |
1170 bswap eax | |
1171 bswap edx | |
1172 xor eax,r11d | |
1173 xor edx,r11d | |
1174 DB 102,15,58,34,216,3 | |
1175 lea rax,[3+r8] | |
1176 movdqa XMMWORD[16+rsp],xmm3 | |
1177 DB 102,15,58,34,226,3 | |
1178 bswap eax | |
1179 mov rdx,r10 | |
1180 lea r10,[4+r8] | |
1181 movdqa XMMWORD[32+rsp],xmm4 | |
1182 xor eax,r11d | |
1183 bswap r10d | |
1184 DB 102,15,58,34,232,3 | |
1185 xor r10d,r11d | |
1186 movdqa XMMWORD[48+rsp],xmm5 | |
1187 lea r9,[5+r8] | |
1188 mov DWORD[((64+12))+rsp],r10d | |
1189 bswap r9d | |
1190 lea r10,[6+r8] | |
1191 mov eax,DWORD[240+rcx] | |
1192 xor r9d,r11d | |
1193 bswap r10d | |
1194 mov DWORD[((80+12))+rsp],r9d | |
1195 xor r10d,r11d | |
1196 lea r9,[7+r8] | |
1197 mov DWORD[((96+12))+rsp],r10d | |
1198 bswap r9d | |
1199 mov r10d,DWORD[((OPENSSL_ia32cap_P+4))] | |
1200 xor r9d,r11d | |
1201 and r10d,71303168 | |
1202 mov DWORD[((112+12))+rsp],r9d | |
1203 | |
1204 movups xmm1,XMMWORD[16+rcx] | |
1205 | |
1206 movdqa xmm6,XMMWORD[64+rsp] | |
1207 movdqa xmm7,XMMWORD[80+rsp] | |
1208 | |
1209 cmp rdx,8 | |
1210 jb NEAR $L$ctr32_tail | |
1211 | |
1212 sub rdx,6 | |
1213 cmp r10d,4194304 | |
1214 je NEAR $L$ctr32_6x | |
1215 | |
1216 lea rcx,[128+rcx] | |
1217 sub rdx,2 | |
1218 jmp NEAR $L$ctr32_loop8 | |
1219 | |
1220 ALIGN 16 | |
1221 $L$ctr32_6x: | |
1222 shl eax,4 | |
1223 mov r10d,48 | |
1224 bswap r11d | |
1225 lea rcx,[32+rax*1+rcx] | |
1226 sub r10,rax | |
1227 jmp NEAR $L$ctr32_loop6 | |
1228 | |
1229 ALIGN 16 | |
1230 $L$ctr32_loop6: | |
1231 add r8d,6 | |
1232 movups xmm0,XMMWORD[((-48))+r10*1+rcx] | |
1233 DB 102,15,56,220,209 | |
1234 mov eax,r8d | |
1235 xor eax,r11d | |
1236 DB 102,15,56,220,217 | |
1237 DB 0x0f,0x38,0xf1,0x44,0x24,12 | |
1238 lea eax,[1+r8] | |
1239 DB 102,15,56,220,225 | |
1240 xor eax,r11d | |
1241 DB 0x0f,0x38,0xf1,0x44,0x24,28 | |
1242 DB 102,15,56,220,233 | |
1243 lea eax,[2+r8] | |
1244 xor eax,r11d | |
1245 DB 102,15,56,220,241 | |
1246 DB 0x0f,0x38,0xf1,0x44,0x24,44 | |
1247 lea eax,[3+r8] | |
1248 DB 102,15,56,220,249 | |
1249 movups xmm1,XMMWORD[((-32))+r10*1+rcx] | |
1250 xor eax,r11d | |
1251 | |
1252 DB 102,15,56,220,208 | |
1253 DB 0x0f,0x38,0xf1,0x44,0x24,60 | |
1254 lea eax,[4+r8] | |
1255 DB 102,15,56,220,216 | |
1256 xor eax,r11d | |
1257 DB 0x0f,0x38,0xf1,0x44,0x24,76 | |
1258 DB 102,15,56,220,224 | |
1259 lea eax,[5+r8] | |
1260 xor eax,r11d | |
1261 DB 102,15,56,220,232 | |
1262 DB 0x0f,0x38,0xf1,0x44,0x24,92 | |
1263 mov rax,r10 | |
1264 DB 102,15,56,220,240 | |
1265 DB 102,15,56,220,248 | |
1266 movups xmm0,XMMWORD[((-16))+r10*1+rcx] | |
1267 | |
1268 call $L$enc_loop6 | |
1269 | |
1270 movdqu xmm8,XMMWORD[rdi] | |
1271 movdqu xmm9,XMMWORD[16+rdi] | |
1272 movdqu xmm10,XMMWORD[32+rdi] | |
1273 movdqu xmm11,XMMWORD[48+rdi] | |
1274 movdqu xmm12,XMMWORD[64+rdi] | |
1275 movdqu xmm13,XMMWORD[80+rdi] | |
1276 lea rdi,[96+rdi] | |
1277 movups xmm1,XMMWORD[((-64))+r10*1+rcx] | |
1278 pxor xmm8,xmm2 | |
1279 movaps xmm2,XMMWORD[rsp] | |
1280 pxor xmm9,xmm3 | |
1281 movaps xmm3,XMMWORD[16+rsp] | |
1282 pxor xmm10,xmm4 | |
1283 movaps xmm4,XMMWORD[32+rsp] | |
1284 pxor xmm11,xmm5 | |
1285 movaps xmm5,XMMWORD[48+rsp] | |
1286 pxor xmm12,xmm6 | |
1287 movaps xmm6,XMMWORD[64+rsp] | |
1288 pxor xmm13,xmm7 | |
1289 movaps xmm7,XMMWORD[80+rsp] | |
1290 movdqu XMMWORD[rsi],xmm8 | |
1291 movdqu XMMWORD[16+rsi],xmm9 | |
1292 movdqu XMMWORD[32+rsi],xmm10 | |
1293 movdqu XMMWORD[48+rsi],xmm11 | |
1294 movdqu XMMWORD[64+rsi],xmm12 | |
1295 movdqu XMMWORD[80+rsi],xmm13 | |
1296 lea rsi,[96+rsi] | |
1297 | |
1298 sub rdx,6 | |
1299 jnc NEAR $L$ctr32_loop6 | |
1300 | |
1301 add rdx,6 | |
1302 jz NEAR $L$ctr32_done | |
1303 | |
1304 lea eax,[((-48))+r10] | |
1305 lea rcx,[((-80))+r10*1+rcx] | |
1306 neg eax | |
1307 shr eax,4 | |
1308 jmp NEAR $L$ctr32_tail | |
1309 | |
1310 ALIGN 32 | |
1311 $L$ctr32_loop8: | |
1312 add r8d,8 | |
1313 movdqa xmm8,XMMWORD[96+rsp] | |
1314 DB 102,15,56,220,209 | |
1315 mov r9d,r8d | |
1316 movdqa xmm9,XMMWORD[112+rsp] | |
1317 DB 102,15,56,220,217 | |
1318 bswap r9d | |
1319 movups xmm0,XMMWORD[((32-128))+rcx] | |
1320 DB 102,15,56,220,225 | |
1321 xor r9d,r11d | |
1322 nop | |
1323 DB 102,15,56,220,233 | |
1324 mov DWORD[((0+12))+rsp],r9d | |
1325 lea r9,[1+r8] | |
1326 DB 102,15,56,220,241 | |
1327 DB 102,15,56,220,249 | |
1328 DB 102,68,15,56,220,193 | |
1329 DB 102,68,15,56,220,201 | |
1330 movups xmm1,XMMWORD[((48-128))+rcx] | |
1331 bswap r9d | |
1332 DB 102,15,56,220,208 | |
1333 DB 102,15,56,220,216 | |
1334 xor r9d,r11d | |
1335 DB 0x66,0x90 | |
1336 DB 102,15,56,220,224 | |
1337 DB 102,15,56,220,232 | |
1338 mov DWORD[((16+12))+rsp],r9d | |
1339 lea r9,[2+r8] | |
1340 DB 102,15,56,220,240 | |
1341 DB 102,15,56,220,248 | |
1342 DB 102,68,15,56,220,192 | |
1343 DB 102,68,15,56,220,200 | |
1344 movups xmm0,XMMWORD[((64-128))+rcx] | |
1345 bswap r9d | |
1346 DB 102,15,56,220,209 | |
1347 DB 102,15,56,220,217 | |
1348 xor r9d,r11d | |
1349 DB 0x66,0x90 | |
1350 DB 102,15,56,220,225 | |
1351 DB 102,15,56,220,233 | |
1352 mov DWORD[((32+12))+rsp],r9d | |
1353 lea r9,[3+r8] | |
1354 DB 102,15,56,220,241 | |
1355 DB 102,15,56,220,249 | |
1356 DB 102,68,15,56,220,193 | |
1357 DB 102,68,15,56,220,201 | |
1358 movups xmm1,XMMWORD[((80-128))+rcx] | |
1359 bswap r9d | |
1360 DB 102,15,56,220,208 | |
1361 DB 102,15,56,220,216 | |
1362 xor r9d,r11d | |
1363 DB 0x66,0x90 | |
1364 DB 102,15,56,220,224 | |
1365 DB 102,15,56,220,232 | |
1366 mov DWORD[((48+12))+rsp],r9d | |
1367 lea r9,[4+r8] | |
1368 DB 102,15,56,220,240 | |
1369 DB 102,15,56,220,248 | |
1370 DB 102,68,15,56,220,192 | |
1371 DB 102,68,15,56,220,200 | |
1372 movups xmm0,XMMWORD[((96-128))+rcx] | |
1373 bswap r9d | |
1374 DB 102,15,56,220,209 | |
1375 DB 102,15,56,220,217 | |
1376 xor r9d,r11d | |
1377 DB 0x66,0x90 | |
1378 DB 102,15,56,220,225 | |
1379 DB 102,15,56,220,233 | |
1380 mov DWORD[((64+12))+rsp],r9d | |
1381 lea r9,[5+r8] | |
1382 DB 102,15,56,220,241 | |
1383 DB 102,15,56,220,249 | |
1384 DB 102,68,15,56,220,193 | |
1385 DB 102,68,15,56,220,201 | |
1386 movups xmm1,XMMWORD[((112-128))+rcx] | |
1387 bswap r9d | |
1388 DB 102,15,56,220,208 | |
1389 DB 102,15,56,220,216 | |
1390 xor r9d,r11d | |
1391 DB 0x66,0x90 | |
1392 DB 102,15,56,220,224 | |
1393 DB 102,15,56,220,232 | |
1394 mov DWORD[((80+12))+rsp],r9d | |
1395 lea r9,[6+r8] | |
1396 DB 102,15,56,220,240 | |
1397 DB 102,15,56,220,248 | |
1398 DB 102,68,15,56,220,192 | |
1399 DB 102,68,15,56,220,200 | |
1400 movups xmm0,XMMWORD[((128-128))+rcx] | |
1401 bswap r9d | |
1402 DB 102,15,56,220,209 | |
1403 DB 102,15,56,220,217 | |
1404 xor r9d,r11d | |
1405 DB 0x66,0x90 | |
1406 DB 102,15,56,220,225 | |
1407 DB 102,15,56,220,233 | |
1408 mov DWORD[((96+12))+rsp],r9d | |
1409 lea r9,[7+r8] | |
1410 DB 102,15,56,220,241 | |
1411 DB 102,15,56,220,249 | |
1412 DB 102,68,15,56,220,193 | |
1413 DB 102,68,15,56,220,201 | |
1414 movups xmm1,XMMWORD[((144-128))+rcx] | |
1415 bswap r9d | |
1416 DB 102,15,56,220,208 | |
1417 DB 102,15,56,220,216 | |
1418 DB 102,15,56,220,224 | |
1419 xor r9d,r11d | |
1420 movdqu xmm10,XMMWORD[rdi] | |
1421 DB 102,15,56,220,232 | |
1422 mov DWORD[((112+12))+rsp],r9d | |
1423 cmp eax,11 | |
1424 DB 102,15,56,220,240 | |
1425 DB 102,15,56,220,248 | |
1426 DB 102,68,15,56,220,192 | |
1427 DB 102,68,15,56,220,200 | |
1428 movups xmm0,XMMWORD[((160-128))+rcx] | |
1429 | |
1430 jb NEAR $L$ctr32_enc_done | |
1431 | |
1432 DB 102,15,56,220,209 | |
1433 DB 102,15,56,220,217 | |
1434 DB 102,15,56,220,225 | |
1435 DB 102,15,56,220,233 | |
1436 DB 102,15,56,220,241 | |
1437 DB 102,15,56,220,249 | |
1438 DB 102,68,15,56,220,193 | |
1439 DB 102,68,15,56,220,201 | |
1440 movups xmm1,XMMWORD[((176-128))+rcx] | |
1441 | |
1442 DB 102,15,56,220,208 | |
1443 DB 102,15,56,220,216 | |
1444 DB 102,15,56,220,224 | |
1445 DB 102,15,56,220,232 | |
1446 DB 102,15,56,220,240 | |
1447 DB 102,15,56,220,248 | |
1448 DB 102,68,15,56,220,192 | |
1449 DB 102,68,15,56,220,200 | |
1450 movups xmm0,XMMWORD[((192-128))+rcx] | |
1451 je NEAR $L$ctr32_enc_done | |
1452 | |
1453 DB 102,15,56,220,209 | |
1454 DB 102,15,56,220,217 | |
1455 DB 102,15,56,220,225 | |
1456 DB 102,15,56,220,233 | |
1457 DB 102,15,56,220,241 | |
1458 DB 102,15,56,220,249 | |
1459 DB 102,68,15,56,220,193 | |
1460 DB 102,68,15,56,220,201 | |
1461 movups xmm1,XMMWORD[((208-128))+rcx] | |
1462 | |
1463 DB 102,15,56,220,208 | |
1464 DB 102,15,56,220,216 | |
1465 DB 102,15,56,220,224 | |
1466 DB 102,15,56,220,232 | |
1467 DB 102,15,56,220,240 | |
1468 DB 102,15,56,220,248 | |
1469 DB 102,68,15,56,220,192 | |
1470 DB 102,68,15,56,220,200 | |
1471 movups xmm0,XMMWORD[((224-128))+rcx] | |
1472 jmp NEAR $L$ctr32_enc_done | |
1473 | |
1474 ALIGN 16 | |
1475 $L$ctr32_enc_done: | |
1476 movdqu xmm11,XMMWORD[16+rdi] | |
1477 pxor xmm10,xmm0 | |
1478 movdqu xmm12,XMMWORD[32+rdi] | |
1479 pxor xmm11,xmm0 | |
1480 movdqu xmm13,XMMWORD[48+rdi] | |
1481 pxor xmm12,xmm0 | |
1482 movdqu xmm14,XMMWORD[64+rdi] | |
1483 pxor xmm13,xmm0 | |
1484 movdqu xmm15,XMMWORD[80+rdi] | |
1485 pxor xmm14,xmm0 | |
1486 pxor xmm15,xmm0 | |
1487 DB 102,15,56,220,209 | |
1488 DB 102,15,56,220,217 | |
1489 DB 102,15,56,220,225 | |
1490 DB 102,15,56,220,233 | |
1491 DB 102,15,56,220,241 | |
1492 DB 102,15,56,220,249 | |
1493 DB 102,68,15,56,220,193 | |
1494 DB 102,68,15,56,220,201 | |
1495 movdqu xmm1,XMMWORD[96+rdi] | |
1496 lea rdi,[128+rdi] | |
1497 | |
1498 DB 102,65,15,56,221,210 | |
1499 pxor xmm1,xmm0 | |
1500 movdqu xmm10,XMMWORD[((112-128))+rdi] | |
1501 DB 102,65,15,56,221,219 | |
1502 pxor xmm10,xmm0 | |
1503 movdqa xmm11,XMMWORD[rsp] | |
1504 DB 102,65,15,56,221,228 | |
1505 DB 102,65,15,56,221,237 | |
1506 movdqa xmm12,XMMWORD[16+rsp] | |
1507 movdqa xmm13,XMMWORD[32+rsp] | |
1508 DB 102,65,15,56,221,246 | |
1509 DB 102,65,15,56,221,255 | |
1510 movdqa xmm14,XMMWORD[48+rsp] | |
1511 movdqa xmm15,XMMWORD[64+rsp] | |
1512 DB 102,68,15,56,221,193 | |
1513 movdqa xmm0,XMMWORD[80+rsp] | |
1514 movups xmm1,XMMWORD[((16-128))+rcx] | |
1515 DB 102,69,15,56,221,202 | |
1516 | |
1517 movups XMMWORD[rsi],xmm2 | |
1518 movdqa xmm2,xmm11 | |
1519 movups XMMWORD[16+rsi],xmm3 | |
1520 movdqa xmm3,xmm12 | |
1521 movups XMMWORD[32+rsi],xmm4 | |
1522 movdqa xmm4,xmm13 | |
1523 movups XMMWORD[48+rsi],xmm5 | |
1524 movdqa xmm5,xmm14 | |
1525 movups XMMWORD[64+rsi],xmm6 | |
1526 movdqa xmm6,xmm15 | |
1527 movups XMMWORD[80+rsi],xmm7 | |
1528 movdqa xmm7,xmm0 | |
1529 movups XMMWORD[96+rsi],xmm8 | |
1530 movups XMMWORD[112+rsi],xmm9 | |
1531 lea rsi,[128+rsi] | |
1532 | |
1533 sub rdx,8 | |
1534 jnc NEAR $L$ctr32_loop8 | |
1535 | |
1536 add rdx,8 | |
1537 jz NEAR $L$ctr32_done | |
1538 lea rcx,[((-128))+rcx] | |
1539 | |
1540 $L$ctr32_tail: | |
1541 | |
1542 | |
1543 lea rcx,[16+rcx] | |
1544 cmp rdx,4 | |
1545 jb NEAR $L$ctr32_loop3 | |
1546 je NEAR $L$ctr32_loop4 | |
1547 | |
1548 | |
1549 shl eax,4 | |
1550 movdqa xmm8,XMMWORD[96+rsp] | |
1551 pxor xmm9,xmm9 | |
1552 | |
1553 movups xmm0,XMMWORD[16+rcx] | |
1554 DB 102,15,56,220,209 | |
1555 DB 102,15,56,220,217 | |
1556 lea rcx,[((32-16))+rax*1+rcx] | |
1557 neg rax | |
1558 DB 102,15,56,220,225 | |
1559 add rax,16 | |
1560 movups xmm10,XMMWORD[rdi] | |
1561 DB 102,15,56,220,233 | |
1562 DB 102,15,56,220,241 | |
1563 movups xmm11,XMMWORD[16+rdi] | |
1564 movups xmm12,XMMWORD[32+rdi] | |
1565 DB 102,15,56,220,249 | |
1566 DB 102,68,15,56,220,193 | |
1567 | |
1568 call $L$enc_loop8_enter | |
1569 | |
1570 movdqu xmm13,XMMWORD[48+rdi] | |
1571 pxor xmm2,xmm10 | |
1572 movdqu xmm10,XMMWORD[64+rdi] | |
1573 pxor xmm3,xmm11 | |
1574 movdqu XMMWORD[rsi],xmm2 | |
1575 pxor xmm4,xmm12 | |
1576 movdqu XMMWORD[16+rsi],xmm3 | |
1577 pxor xmm5,xmm13 | |
1578 movdqu XMMWORD[32+rsi],xmm4 | |
1579 pxor xmm6,xmm10 | |
1580 movdqu XMMWORD[48+rsi],xmm5 | |
1581 movdqu XMMWORD[64+rsi],xmm6 | |
1582 cmp rdx,6 | |
1583 jb NEAR $L$ctr32_done | |
1584 | |
1585 movups xmm11,XMMWORD[80+rdi] | |
1586 xorps xmm7,xmm11 | |
1587 movups XMMWORD[80+rsi],xmm7 | |
1588 je NEAR $L$ctr32_done | |
1589 | |
1590 movups xmm12,XMMWORD[96+rdi] | |
1591 xorps xmm8,xmm12 | |
1592 movups XMMWORD[96+rsi],xmm8 | |
1593 jmp NEAR $L$ctr32_done | |
1594 | |
1595 ALIGN 32 | |
1596 $L$ctr32_loop4: | |
1597 DB 102,15,56,220,209 | |
1598 lea rcx,[16+rcx] | |
1599 dec eax | |
1600 DB 102,15,56,220,217 | |
1601 DB 102,15,56,220,225 | |
1602 DB 102,15,56,220,233 | |
1603 movups xmm1,XMMWORD[rcx] | |
1604 jnz NEAR $L$ctr32_loop4 | |
1605 DB 102,15,56,221,209 | |
1606 DB 102,15,56,221,217 | |
1607 movups xmm10,XMMWORD[rdi] | |
1608 movups xmm11,XMMWORD[16+rdi] | |
1609 DB 102,15,56,221,225 | |
1610 DB 102,15,56,221,233 | |
1611 movups xmm12,XMMWORD[32+rdi] | |
1612 movups xmm13,XMMWORD[48+rdi] | |
1613 | |
1614 xorps xmm2,xmm10 | |
1615 movups XMMWORD[rsi],xmm2 | |
1616 xorps xmm3,xmm11 | |
1617 movups XMMWORD[16+rsi],xmm3 | |
1618 pxor xmm4,xmm12 | |
1619 movdqu XMMWORD[32+rsi],xmm4 | |
1620 pxor xmm5,xmm13 | |
1621 movdqu XMMWORD[48+rsi],xmm5 | |
1622 jmp NEAR $L$ctr32_done | |
1623 | |
1624 ALIGN 32 | |
1625 $L$ctr32_loop3: | |
1626 DB 102,15,56,220,209 | |
1627 lea rcx,[16+rcx] | |
1628 dec eax | |
1629 DB 102,15,56,220,217 | |
1630 DB 102,15,56,220,225 | |
1631 movups xmm1,XMMWORD[rcx] | |
1632 jnz NEAR $L$ctr32_loop3 | |
1633 DB 102,15,56,221,209 | |
1634 DB 102,15,56,221,217 | |
1635 DB 102,15,56,221,225 | |
1636 | |
1637 movups xmm10,XMMWORD[rdi] | |
1638 xorps xmm2,xmm10 | |
1639 movups XMMWORD[rsi],xmm2 | |
1640 cmp rdx,2 | |
1641 jb NEAR $L$ctr32_done | |
1642 | |
1643 movups xmm11,XMMWORD[16+rdi] | |
1644 xorps xmm3,xmm11 | |
1645 movups XMMWORD[16+rsi],xmm3 | |
1646 je NEAR $L$ctr32_done | |
1647 | |
1648 movups xmm12,XMMWORD[32+rdi] | |
1649 xorps xmm4,xmm12 | |
1650 movups XMMWORD[32+rsi],xmm4 | |
1651 | |
1652 $L$ctr32_done: | |
1653 xorps xmm0,xmm0 | |
1654 xor r11d,r11d | |
1655 pxor xmm1,xmm1 | |
1656 pxor xmm2,xmm2 | |
1657 pxor xmm3,xmm3 | |
1658 pxor xmm4,xmm4 | |
1659 pxor xmm5,xmm5 | |
1660 movaps xmm6,XMMWORD[((-160))+rbp] | |
1661 movaps XMMWORD[(-160)+rbp],xmm0 | |
1662 movaps xmm7,XMMWORD[((-144))+rbp] | |
1663 movaps XMMWORD[(-144)+rbp],xmm0 | |
1664 movaps xmm8,XMMWORD[((-128))+rbp] | |
1665 movaps XMMWORD[(-128)+rbp],xmm0 | |
1666 movaps xmm9,XMMWORD[((-112))+rbp] | |
1667 movaps XMMWORD[(-112)+rbp],xmm0 | |
1668 movaps xmm10,XMMWORD[((-96))+rbp] | |
1669 movaps XMMWORD[(-96)+rbp],xmm0 | |
1670 movaps xmm11,XMMWORD[((-80))+rbp] | |
1671 movaps XMMWORD[(-80)+rbp],xmm0 | |
1672 movaps xmm12,XMMWORD[((-64))+rbp] | |
1673 movaps XMMWORD[(-64)+rbp],xmm0 | |
1674 movaps xmm13,XMMWORD[((-48))+rbp] | |
1675 movaps XMMWORD[(-48)+rbp],xmm0 | |
1676 movaps xmm14,XMMWORD[((-32))+rbp] | |
1677 movaps XMMWORD[(-32)+rbp],xmm0 | |
1678 movaps xmm15,XMMWORD[((-16))+rbp] | |
1679 movaps XMMWORD[(-16)+rbp],xmm0 | |
1680 movaps XMMWORD[rsp],xmm0 | |
1681 movaps XMMWORD[16+rsp],xmm0 | |
1682 movaps XMMWORD[32+rsp],xmm0 | |
1683 movaps XMMWORD[48+rsp],xmm0 | |
1684 movaps XMMWORD[64+rsp],xmm0 | |
1685 movaps XMMWORD[80+rsp],xmm0 | |
1686 movaps XMMWORD[96+rsp],xmm0 | |
1687 movaps XMMWORD[112+rsp],xmm0 | |
1688 lea rsp,[rbp] | |
1689 pop rbp | |
1690 $L$ctr32_epilogue: | |
1691 mov rdi,QWORD[8+rsp] ;WIN64 epilogue | |
1692 mov rsi,QWORD[16+rsp] | |
1693 DB 0F3h,0C3h ;repret | |
1694 $L$SEH_end_aesni_ctr32_encrypt_blocks: | |
1695 global aesni_xts_encrypt | |
1696 | |
1697 ALIGN 16 | |
1698 aesni_xts_encrypt: | |
1699 mov QWORD[8+rsp],rdi ;WIN64 prologue | |
1700 mov QWORD[16+rsp],rsi | |
1701 mov rax,rsp | |
1702 $L$SEH_begin_aesni_xts_encrypt: | |
1703 mov rdi,rcx | |
1704 mov rsi,rdx | |
1705 mov rdx,r8 | |
1706 mov rcx,r9 | |
1707 mov r8,QWORD[40+rsp] | |
1708 mov r9,QWORD[48+rsp] | |
1709 | |
1710 | |
1711 lea rax,[rsp] | |
1712 push rbp | |
1713 sub rsp,272 | |
1714 and rsp,-16 | |
1715 movaps XMMWORD[(-168)+rax],xmm6 | |
1716 movaps XMMWORD[(-152)+rax],xmm7 | |
1717 movaps XMMWORD[(-136)+rax],xmm8 | |
1718 movaps XMMWORD[(-120)+rax],xmm9 | |
1719 movaps XMMWORD[(-104)+rax],xmm10 | |
1720 movaps XMMWORD[(-88)+rax],xmm11 | |
1721 movaps XMMWORD[(-72)+rax],xmm12 | |
1722 movaps XMMWORD[(-56)+rax],xmm13 | |
1723 movaps XMMWORD[(-40)+rax],xmm14 | |
1724 movaps XMMWORD[(-24)+rax],xmm15 | |
1725 $L$xts_enc_body: | |
1726 lea rbp,[((-8))+rax] | |
1727 movups xmm2,XMMWORD[r9] | |
1728 mov eax,DWORD[240+r8] | |
1729 mov r10d,DWORD[240+rcx] | |
1730 movups xmm0,XMMWORD[r8] | |
1731 movups xmm1,XMMWORD[16+r8] | |
1732 lea r8,[32+r8] | |
1733 xorps xmm2,xmm0 | |
1734 $L$oop_enc1_8: | |
1735 DB 102,15,56,220,209 | |
1736 dec eax | |
1737 movups xmm1,XMMWORD[r8] | |
1738 lea r8,[16+r8] | |
1739 jnz NEAR $L$oop_enc1_8 | |
1740 DB 102,15,56,221,209 | |
1741 movups xmm0,XMMWORD[rcx] | |
1742 mov r11,rcx | |
1743 mov eax,r10d | |
1744 shl r10d,4 | |
1745 mov r9,rdx | |
1746 and rdx,-16 | |
1747 | |
1748 movups xmm1,XMMWORD[16+r10*1+rcx] | |
1749 | |
1750 movdqa xmm8,XMMWORD[$L$xts_magic] | |
1751 movdqa xmm15,xmm2 | |
1752 pshufd xmm9,xmm2,0x5f | |
1753 pxor xmm1,xmm0 | |
1754 movdqa xmm14,xmm9 | |
1755 paddd xmm9,xmm9 | |
1756 movdqa xmm10,xmm15 | |
1757 psrad xmm14,31 | |
1758 paddq xmm15,xmm15 | |
1759 pand xmm14,xmm8 | |
1760 pxor xmm10,xmm0 | |
1761 pxor xmm15,xmm14 | |
1762 movdqa xmm14,xmm9 | |
1763 paddd xmm9,xmm9 | |
1764 movdqa xmm11,xmm15 | |
1765 psrad xmm14,31 | |
1766 paddq xmm15,xmm15 | |
1767 pand xmm14,xmm8 | |
1768 pxor xmm11,xmm0 | |
1769 pxor xmm15,xmm14 | |
1770 movdqa xmm14,xmm9 | |
1771 paddd xmm9,xmm9 | |
1772 movdqa xmm12,xmm15 | |
1773 psrad xmm14,31 | |
1774 paddq xmm15,xmm15 | |
1775 pand xmm14,xmm8 | |
1776 pxor xmm12,xmm0 | |
1777 pxor xmm15,xmm14 | |
1778 movdqa xmm14,xmm9 | |
1779 paddd xmm9,xmm9 | |
1780 movdqa xmm13,xmm15 | |
1781 psrad xmm14,31 | |
1782 paddq xmm15,xmm15 | |
1783 pand xmm14,xmm8 | |
1784 pxor xmm13,xmm0 | |
1785 pxor xmm15,xmm14 | |
1786 movdqa xmm14,xmm15 | |
1787 psrad xmm9,31 | |
1788 paddq xmm15,xmm15 | |
1789 pand xmm9,xmm8 | |
1790 pxor xmm14,xmm0 | |
1791 pxor xmm15,xmm9 | |
1792 movaps XMMWORD[96+rsp],xmm1 | |
1793 | |
1794 sub rdx,16*6 | |
1795 jc NEAR $L$xts_enc_short | |
1796 | |
1797 mov eax,16+96 | |
1798 lea rcx,[32+r10*1+r11] | |
1799 sub rax,r10 | |
1800 movups xmm1,XMMWORD[16+r11] | |
1801 mov r10,rax | |
1802 lea r8,[$L$xts_magic] | |
1803 jmp NEAR $L$xts_enc_grandloop | |
1804 | |
1805 ALIGN 32 | |
1806 $L$xts_enc_grandloop: | |
1807 movdqu xmm2,XMMWORD[rdi] | |
1808 movdqa xmm8,xmm0 | |
1809 movdqu xmm3,XMMWORD[16+rdi] | |
1810 pxor xmm2,xmm10 | |
1811 movdqu xmm4,XMMWORD[32+rdi] | |
1812 pxor xmm3,xmm11 | |
1813 DB 102,15,56,220,209 | |
1814 movdqu xmm5,XMMWORD[48+rdi] | |
1815 pxor xmm4,xmm12 | |
1816 DB 102,15,56,220,217 | |
1817 movdqu xmm6,XMMWORD[64+rdi] | |
1818 pxor xmm5,xmm13 | |
1819 DB 102,15,56,220,225 | |
1820 movdqu xmm7,XMMWORD[80+rdi] | |
1821 pxor xmm8,xmm15 | |
1822 movdqa xmm9,XMMWORD[96+rsp] | |
1823 pxor xmm6,xmm14 | |
1824 DB 102,15,56,220,233 | |
1825 movups xmm0,XMMWORD[32+r11] | |
1826 lea rdi,[96+rdi] | |
1827 pxor xmm7,xmm8 | |
1828 | |
1829 pxor xmm10,xmm9 | |
1830 DB 102,15,56,220,241 | |
1831 pxor xmm11,xmm9 | |
1832 movdqa XMMWORD[rsp],xmm10 | |
1833 DB 102,15,56,220,249 | |
1834 movups xmm1,XMMWORD[48+r11] | |
1835 pxor xmm12,xmm9 | |
1836 | |
1837 DB 102,15,56,220,208 | |
1838 pxor xmm13,xmm9 | |
1839 movdqa XMMWORD[16+rsp],xmm11 | |
1840 DB 102,15,56,220,216 | |
1841 pxor xmm14,xmm9 | |
1842 movdqa XMMWORD[32+rsp],xmm12 | |
1843 DB 102,15,56,220,224 | |
1844 DB 102,15,56,220,232 | |
1845 pxor xmm8,xmm9 | |
1846 movdqa XMMWORD[64+rsp],xmm14 | |
1847 DB 102,15,56,220,240 | |
1848 DB 102,15,56,220,248 | |
1849 movups xmm0,XMMWORD[64+r11] | |
1850 movdqa XMMWORD[80+rsp],xmm8 | |
1851 pshufd xmm9,xmm15,0x5f | |
1852 jmp NEAR $L$xts_enc_loop6 | |
1853 ALIGN 32 | |
1854 $L$xts_enc_loop6: | |
1855 DB 102,15,56,220,209 | |
1856 DB 102,15,56,220,217 | |
1857 DB 102,15,56,220,225 | |
1858 DB 102,15,56,220,233 | |
1859 DB 102,15,56,220,241 | |
1860 DB 102,15,56,220,249 | |
1861 movups xmm1,XMMWORD[((-64))+rax*1+rcx] | |
1862 add rax,32 | |
1863 | |
1864 DB 102,15,56,220,208 | |
1865 DB 102,15,56,220,216 | |
1866 DB 102,15,56,220,224 | |
1867 DB 102,15,56,220,232 | |
1868 DB 102,15,56,220,240 | |
1869 DB 102,15,56,220,248 | |
1870 movups xmm0,XMMWORD[((-80))+rax*1+rcx] | |
1871 jnz NEAR $L$xts_enc_loop6 | |
1872 | |
1873 movdqa xmm8,XMMWORD[r8] | |
1874 movdqa xmm14,xmm9 | |
1875 paddd xmm9,xmm9 | |
1876 DB 102,15,56,220,209 | |
1877 paddq xmm15,xmm15 | |
1878 psrad xmm14,31 | |
1879 DB 102,15,56,220,217 | |
1880 pand xmm14,xmm8 | |
1881 movups xmm10,XMMWORD[r11] | |
1882 DB 102,15,56,220,225 | |
1883 DB 102,15,56,220,233 | |
1884 DB 102,15,56,220,241 | |
1885 pxor xmm15,xmm14 | |
1886 movaps xmm11,xmm10 | |
1887 DB 102,15,56,220,249 | |
1888 movups xmm1,XMMWORD[((-64))+rcx] | |
1889 | |
1890 movdqa xmm14,xmm9 | |
1891 DB 102,15,56,220,208 | |
1892 paddd xmm9,xmm9 | |
1893 pxor xmm10,xmm15 | |
1894 DB 102,15,56,220,216 | |
1895 psrad xmm14,31 | |
1896 paddq xmm15,xmm15 | |
1897 DB 102,15,56,220,224 | |
1898 DB 102,15,56,220,232 | |
1899 pand xmm14,xmm8 | |
1900 movaps xmm12,xmm11 | |
1901 DB 102,15,56,220,240 | |
1902 pxor xmm15,xmm14 | |
1903 movdqa xmm14,xmm9 | |
1904 DB 102,15,56,220,248 | |
1905 movups xmm0,XMMWORD[((-48))+rcx] | |
1906 | |
1907 paddd xmm9,xmm9 | |
1908 DB 102,15,56,220,209 | |
1909 pxor xmm11,xmm15 | |
1910 psrad xmm14,31 | |
1911 DB 102,15,56,220,217 | |
1912 paddq xmm15,xmm15 | |
1913 pand xmm14,xmm8 | |
1914 DB 102,15,56,220,225 | |
1915 DB 102,15,56,220,233 | |
1916 movdqa XMMWORD[48+rsp],xmm13 | |
1917 pxor xmm15,xmm14 | |
1918 DB 102,15,56,220,241 | |
1919 movaps xmm13,xmm12 | |
1920 movdqa xmm14,xmm9 | |
1921 DB 102,15,56,220,249 | |
1922 movups xmm1,XMMWORD[((-32))+rcx] | |
1923 | |
1924 paddd xmm9,xmm9 | |
1925 DB 102,15,56,220,208 | |
1926 pxor xmm12,xmm15 | |
1927 psrad xmm14,31 | |
1928 DB 102,15,56,220,216 | |
1929 paddq xmm15,xmm15 | |
1930 pand xmm14,xmm8 | |
1931 DB 102,15,56,220,224 | |
1932 DB 102,15,56,220,232 | |
1933 DB 102,15,56,220,240 | |
1934 pxor xmm15,xmm14 | |
1935 movaps xmm14,xmm13 | |
1936 DB 102,15,56,220,248 | |
1937 | |
1938 movdqa xmm0,xmm9 | |
1939 paddd xmm9,xmm9 | |
1940 DB 102,15,56,220,209 | |
1941 pxor xmm13,xmm15 | |
1942 psrad xmm0,31 | |
1943 DB 102,15,56,220,217 | |
1944 paddq xmm15,xmm15 | |
1945 pand xmm0,xmm8 | |
1946 DB 102,15,56,220,225 | |
1947 DB 102,15,56,220,233 | |
1948 pxor xmm15,xmm0 | |
1949 movups xmm0,XMMWORD[r11] | |
1950 DB 102,15,56,220,241 | |
1951 DB 102,15,56,220,249 | |
1952 movups xmm1,XMMWORD[16+r11] | |
1953 | |
1954 pxor xmm14,xmm15 | |
1955 DB 102,15,56,221,84,36,0 | |
1956 psrad xmm9,31 | |
1957 paddq xmm15,xmm15 | |
1958 DB 102,15,56,221,92,36,16 | |
1959 DB 102,15,56,221,100,36,32 | |
1960 pand xmm9,xmm8 | |
1961 mov rax,r10 | |
1962 DB 102,15,56,221,108,36,48 | |
1963 DB 102,15,56,221,116,36,64 | |
1964 DB 102,15,56,221,124,36,80 | |
1965 pxor xmm15,xmm9 | |
1966 | |
1967 lea rsi,[96+rsi] | |
1968 movups XMMWORD[(-96)+rsi],xmm2 | |
1969 movups XMMWORD[(-80)+rsi],xmm3 | |
1970 movups XMMWORD[(-64)+rsi],xmm4 | |
1971 movups XMMWORD[(-48)+rsi],xmm5 | |
1972 movups XMMWORD[(-32)+rsi],xmm6 | |
1973 movups XMMWORD[(-16)+rsi],xmm7 | |
1974 sub rdx,16*6 | |
1975 jnc NEAR $L$xts_enc_grandloop | |
1976 | |
1977 mov eax,16+96 | |
1978 sub eax,r10d | |
1979 mov rcx,r11 | |
1980 shr eax,4 | |
1981 | |
1982 $L$xts_enc_short: | |
1983 | |
1984 mov r10d,eax | |
1985 pxor xmm10,xmm0 | |
1986 add rdx,16*6 | |
1987 jz NEAR $L$xts_enc_done | |
1988 | |
1989 pxor xmm11,xmm0 | |
1990 cmp rdx,0x20 | |
1991 jb NEAR $L$xts_enc_one | |
1992 pxor xmm12,xmm0 | |
1993 je NEAR $L$xts_enc_two | |
1994 | |
1995 pxor xmm13,xmm0 | |
1996 cmp rdx,0x40 | |
1997 jb NEAR $L$xts_enc_three | |
1998 pxor xmm14,xmm0 | |
1999 je NEAR $L$xts_enc_four | |
2000 | |
2001 movdqu xmm2,XMMWORD[rdi] | |
2002 movdqu xmm3,XMMWORD[16+rdi] | |
2003 movdqu xmm4,XMMWORD[32+rdi] | |
2004 pxor xmm2,xmm10 | |
2005 movdqu xmm5,XMMWORD[48+rdi] | |
2006 pxor xmm3,xmm11 | |
2007 movdqu xmm6,XMMWORD[64+rdi] | |
2008 lea rdi,[80+rdi] | |
2009 pxor xmm4,xmm12 | |
2010 pxor xmm5,xmm13 | |
2011 pxor xmm6,xmm14 | |
2012 pxor xmm7,xmm7 | |
2013 | |
2014 call _aesni_encrypt6 | |
2015 | |
2016 xorps xmm2,xmm10 | |
2017 movdqa xmm10,xmm15 | |
2018 xorps xmm3,xmm11 | |
2019 xorps xmm4,xmm12 | |
2020 movdqu XMMWORD[rsi],xmm2 | |
2021 xorps xmm5,xmm13 | |
2022 movdqu XMMWORD[16+rsi],xmm3 | |
2023 xorps xmm6,xmm14 | |
2024 movdqu XMMWORD[32+rsi],xmm4 | |
2025 movdqu XMMWORD[48+rsi],xmm5 | |
2026 movdqu XMMWORD[64+rsi],xmm6 | |
2027 lea rsi,[80+rsi] | |
2028 jmp NEAR $L$xts_enc_done | |
2029 | |
2030 ALIGN 16 | |
2031 $L$xts_enc_one: | |
2032 movups xmm2,XMMWORD[rdi] | |
2033 lea rdi,[16+rdi] | |
2034 xorps xmm2,xmm10 | |
2035 movups xmm0,XMMWORD[rcx] | |
2036 movups xmm1,XMMWORD[16+rcx] | |
2037 lea rcx,[32+rcx] | |
2038 xorps xmm2,xmm0 | |
2039 $L$oop_enc1_9: | |
2040 DB 102,15,56,220,209 | |
2041 dec eax | |
2042 movups xmm1,XMMWORD[rcx] | |
2043 lea rcx,[16+rcx] | |
2044 jnz NEAR $L$oop_enc1_9 | |
2045 DB 102,15,56,221,209 | |
2046 xorps xmm2,xmm10 | |
2047 movdqa xmm10,xmm11 | |
2048 movups XMMWORD[rsi],xmm2 | |
2049 lea rsi,[16+rsi] | |
2050 jmp NEAR $L$xts_enc_done | |
2051 | |
2052 ALIGN 16 | |
2053 $L$xts_enc_two: | |
2054 movups xmm2,XMMWORD[rdi] | |
2055 movups xmm3,XMMWORD[16+rdi] | |
2056 lea rdi,[32+rdi] | |
2057 xorps xmm2,xmm10 | |
2058 xorps xmm3,xmm11 | |
2059 | |
2060 call _aesni_encrypt2 | |
2061 | |
2062 xorps xmm2,xmm10 | |
2063 movdqa xmm10,xmm12 | |
2064 xorps xmm3,xmm11 | |
2065 movups XMMWORD[rsi],xmm2 | |
2066 movups XMMWORD[16+rsi],xmm3 | |
2067 lea rsi,[32+rsi] | |
2068 jmp NEAR $L$xts_enc_done | |
2069 | |
2070 ALIGN 16 | |
2071 $L$xts_enc_three: | |
2072 movups xmm2,XMMWORD[rdi] | |
2073 movups xmm3,XMMWORD[16+rdi] | |
2074 movups xmm4,XMMWORD[32+rdi] | |
2075 lea rdi,[48+rdi] | |
2076 xorps xmm2,xmm10 | |
2077 xorps xmm3,xmm11 | |
2078 xorps xmm4,xmm12 | |
2079 | |
2080 call _aesni_encrypt3 | |
2081 | |
2082 xorps xmm2,xmm10 | |
2083 movdqa xmm10,xmm13 | |
2084 xorps xmm3,xmm11 | |
2085 xorps xmm4,xmm12 | |
2086 movups XMMWORD[rsi],xmm2 | |
2087 movups XMMWORD[16+rsi],xmm3 | |
2088 movups XMMWORD[32+rsi],xmm4 | |
2089 lea rsi,[48+rsi] | |
2090 jmp NEAR $L$xts_enc_done | |
2091 | |
2092 ALIGN 16 | |
2093 $L$xts_enc_four: | |
2094 movups xmm2,XMMWORD[rdi] | |
2095 movups xmm3,XMMWORD[16+rdi] | |
2096 movups xmm4,XMMWORD[32+rdi] | |
2097 xorps xmm2,xmm10 | |
2098 movups xmm5,XMMWORD[48+rdi] | |
2099 lea rdi,[64+rdi] | |
2100 xorps xmm3,xmm11 | |
2101 xorps xmm4,xmm12 | |
2102 xorps xmm5,xmm13 | |
2103 | |
2104 call _aesni_encrypt4 | |
2105 | |
2106 pxor xmm2,xmm10 | |
2107 movdqa xmm10,xmm14 | |
2108 pxor xmm3,xmm11 | |
2109 pxor xmm4,xmm12 | |
2110 movdqu XMMWORD[rsi],xmm2 | |
2111 pxor xmm5,xmm13 | |
2112 movdqu XMMWORD[16+rsi],xmm3 | |
2113 movdqu XMMWORD[32+rsi],xmm4 | |
2114 movdqu XMMWORD[48+rsi],xmm5 | |
2115 lea rsi,[64+rsi] | |
2116 jmp NEAR $L$xts_enc_done | |
2117 | |
2118 ALIGN 16 | |
2119 $L$xts_enc_done: | |
2120 and r9,15 | |
2121 jz NEAR $L$xts_enc_ret | |
2122 mov rdx,r9 | |
2123 | |
2124 $L$xts_enc_steal: | |
2125 movzx eax,BYTE[rdi] | |
2126 movzx ecx,BYTE[((-16))+rsi] | |
2127 lea rdi,[1+rdi] | |
2128 mov BYTE[((-16))+rsi],al | |
2129 mov BYTE[rsi],cl | |
2130 lea rsi,[1+rsi] | |
2131 sub rdx,1 | |
2132 jnz NEAR $L$xts_enc_steal | |
2133 | |
2134 sub rsi,r9 | |
2135 mov rcx,r11 | |
2136 mov eax,r10d | |
2137 | |
2138 movups xmm2,XMMWORD[((-16))+rsi] | |
2139 xorps xmm2,xmm10 | |
2140 movups xmm0,XMMWORD[rcx] | |
2141 movups xmm1,XMMWORD[16+rcx] | |
2142 lea rcx,[32+rcx] | |
2143 xorps xmm2,xmm0 | |
2144 $L$oop_enc1_10: | |
2145 DB 102,15,56,220,209 | |
2146 dec eax | |
2147 movups xmm1,XMMWORD[rcx] | |
2148 lea rcx,[16+rcx] | |
2149 jnz NEAR $L$oop_enc1_10 | |
2150 DB 102,15,56,221,209 | |
2151 xorps xmm2,xmm10 | |
2152 movups XMMWORD[(-16)+rsi],xmm2 | |
2153 | |
2154 $L$xts_enc_ret: | |
2155 xorps xmm0,xmm0 | |
2156 pxor xmm1,xmm1 | |
2157 pxor xmm2,xmm2 | |
2158 pxor xmm3,xmm3 | |
2159 pxor xmm4,xmm4 | |
2160 pxor xmm5,xmm5 | |
2161 movaps xmm6,XMMWORD[((-160))+rbp] | |
2162 movaps XMMWORD[(-160)+rbp],xmm0 | |
2163 movaps xmm7,XMMWORD[((-144))+rbp] | |
2164 movaps XMMWORD[(-144)+rbp],xmm0 | |
2165 movaps xmm8,XMMWORD[((-128))+rbp] | |
2166 movaps XMMWORD[(-128)+rbp],xmm0 | |
2167 movaps xmm9,XMMWORD[((-112))+rbp] | |
2168 movaps XMMWORD[(-112)+rbp],xmm0 | |
2169 movaps xmm10,XMMWORD[((-96))+rbp] | |
2170 movaps XMMWORD[(-96)+rbp],xmm0 | |
2171 movaps xmm11,XMMWORD[((-80))+rbp] | |
2172 movaps XMMWORD[(-80)+rbp],xmm0 | |
2173 movaps xmm12,XMMWORD[((-64))+rbp] | |
2174 movaps XMMWORD[(-64)+rbp],xmm0 | |
2175 movaps xmm13,XMMWORD[((-48))+rbp] | |
2176 movaps XMMWORD[(-48)+rbp],xmm0 | |
2177 movaps xmm14,XMMWORD[((-32))+rbp] | |
2178 movaps XMMWORD[(-32)+rbp],xmm0 | |
2179 movaps xmm15,XMMWORD[((-16))+rbp] | |
2180 movaps XMMWORD[(-16)+rbp],xmm0 | |
2181 movaps XMMWORD[rsp],xmm0 | |
2182 movaps XMMWORD[16+rsp],xmm0 | |
2183 movaps XMMWORD[32+rsp],xmm0 | |
2184 movaps XMMWORD[48+rsp],xmm0 | |
2185 movaps XMMWORD[64+rsp],xmm0 | |
2186 movaps XMMWORD[80+rsp],xmm0 | |
2187 movaps XMMWORD[96+rsp],xmm0 | |
2188 lea rsp,[rbp] | |
2189 pop rbp | |
2190 $L$xts_enc_epilogue: | |
2191 mov rdi,QWORD[8+rsp] ;WIN64 epilogue | |
2192 mov rsi,QWORD[16+rsp] | |
2193 DB 0F3h,0C3h ;repret | |
2194 $L$SEH_end_aesni_xts_encrypt: | |
2195 global aesni_xts_decrypt | |
2196 | |
2197 ALIGN 16 | |
2198 aesni_xts_decrypt: | |
2199 mov QWORD[8+rsp],rdi ;WIN64 prologue | |
2200 mov QWORD[16+rsp],rsi | |
2201 mov rax,rsp | |
2202 $L$SEH_begin_aesni_xts_decrypt: | |
2203 mov rdi,rcx | |
2204 mov rsi,rdx | |
2205 mov rdx,r8 | |
2206 mov rcx,r9 | |
2207 mov r8,QWORD[40+rsp] | |
2208 mov r9,QWORD[48+rsp] | |
2209 | |
2210 | |
2211 lea rax,[rsp] | |
2212 push rbp | |
2213 sub rsp,272 | |
2214 and rsp,-16 | |
2215 movaps XMMWORD[(-168)+rax],xmm6 | |
2216 movaps XMMWORD[(-152)+rax],xmm7 | |
2217 movaps XMMWORD[(-136)+rax],xmm8 | |
2218 movaps XMMWORD[(-120)+rax],xmm9 | |
2219 movaps XMMWORD[(-104)+rax],xmm10 | |
2220 movaps XMMWORD[(-88)+rax],xmm11 | |
2221 movaps XMMWORD[(-72)+rax],xmm12 | |
2222 movaps XMMWORD[(-56)+rax],xmm13 | |
2223 movaps XMMWORD[(-40)+rax],xmm14 | |
2224 movaps XMMWORD[(-24)+rax],xmm15 | |
2225 $L$xts_dec_body: | |
2226 lea rbp,[((-8))+rax] | |
2227 movups xmm2,XMMWORD[r9] | |
2228 mov eax,DWORD[240+r8] | |
2229 mov r10d,DWORD[240+rcx] | |
2230 movups xmm0,XMMWORD[r8] | |
2231 movups xmm1,XMMWORD[16+r8] | |
2232 lea r8,[32+r8] | |
2233 xorps xmm2,xmm0 | |
2234 $L$oop_enc1_11: | |
2235 DB 102,15,56,220,209 | |
2236 dec eax | |
2237 movups xmm1,XMMWORD[r8] | |
2238 lea r8,[16+r8] | |
2239 jnz NEAR $L$oop_enc1_11 | |
2240 DB 102,15,56,221,209 | |
2241 xor eax,eax | |
2242 test rdx,15 | |
2243 setnz al | |
2244 shl rax,4 | |
2245 sub rdx,rax | |
2246 | |
2247 movups xmm0,XMMWORD[rcx] | |
2248 mov r11,rcx | |
2249 mov eax,r10d | |
2250 shl r10d,4 | |
2251 mov r9,rdx | |
2252 and rdx,-16 | |
2253 | |
2254 movups xmm1,XMMWORD[16+r10*1+rcx] | |
2255 | |
2256 movdqa xmm8,XMMWORD[$L$xts_magic] | |
2257 movdqa xmm15,xmm2 | |
2258 pshufd xmm9,xmm2,0x5f | |
2259 pxor xmm1,xmm0 | |
2260 movdqa xmm14,xmm9 | |
2261 paddd xmm9,xmm9 | |
2262 movdqa xmm10,xmm15 | |
2263 psrad xmm14,31 | |
2264 paddq xmm15,xmm15 | |
2265 pand xmm14,xmm8 | |
2266 pxor xmm10,xmm0 | |
2267 pxor xmm15,xmm14 | |
2268 movdqa xmm14,xmm9 | |
2269 paddd xmm9,xmm9 | |
2270 movdqa xmm11,xmm15 | |
2271 psrad xmm14,31 | |
2272 paddq xmm15,xmm15 | |
2273 pand xmm14,xmm8 | |
2274 pxor xmm11,xmm0 | |
2275 pxor xmm15,xmm14 | |
2276 movdqa xmm14,xmm9 | |
2277 paddd xmm9,xmm9 | |
2278 movdqa xmm12,xmm15 | |
2279 psrad xmm14,31 | |
2280 paddq xmm15,xmm15 | |
2281 pand xmm14,xmm8 | |
2282 pxor xmm12,xmm0 | |
2283 pxor xmm15,xmm14 | |
2284 movdqa xmm14,xmm9 | |
2285 paddd xmm9,xmm9 | |
2286 movdqa xmm13,xmm15 | |
2287 psrad xmm14,31 | |
2288 paddq xmm15,xmm15 | |
2289 pand xmm14,xmm8 | |
2290 pxor xmm13,xmm0 | |
2291 pxor xmm15,xmm14 | |
2292 movdqa xmm14,xmm15 | |
2293 psrad xmm9,31 | |
2294 paddq xmm15,xmm15 | |
2295 pand xmm9,xmm8 | |
2296 pxor xmm14,xmm0 | |
2297 pxor xmm15,xmm9 | |
2298 movaps XMMWORD[96+rsp],xmm1 | |
2299 | |
2300 sub rdx,16*6 | |
2301 jc NEAR $L$xts_dec_short | |
2302 | |
2303 mov eax,16+96 | |
2304 lea rcx,[32+r10*1+r11] | |
2305 sub rax,r10 | |
2306 movups xmm1,XMMWORD[16+r11] | |
2307 mov r10,rax | |
2308 lea r8,[$L$xts_magic] | |
2309 jmp NEAR $L$xts_dec_grandloop | |
2310 | |
2311 ALIGN 32 | |
2312 $L$xts_dec_grandloop: | |
2313 movdqu xmm2,XMMWORD[rdi] | |
2314 movdqa xmm8,xmm0 | |
2315 movdqu xmm3,XMMWORD[16+rdi] | |
2316 pxor xmm2,xmm10 | |
2317 movdqu xmm4,XMMWORD[32+rdi] | |
2318 pxor xmm3,xmm11 | |
2319 DB 102,15,56,222,209 | |
2320 movdqu xmm5,XMMWORD[48+rdi] | |
2321 pxor xmm4,xmm12 | |
2322 DB 102,15,56,222,217 | |
2323 movdqu xmm6,XMMWORD[64+rdi] | |
2324 pxor xmm5,xmm13 | |
2325 DB 102,15,56,222,225 | |
2326 movdqu xmm7,XMMWORD[80+rdi] | |
2327 pxor xmm8,xmm15 | |
2328 movdqa xmm9,XMMWORD[96+rsp] | |
2329 pxor xmm6,xmm14 | |
2330 DB 102,15,56,222,233 | |
2331 movups xmm0,XMMWORD[32+r11] | |
2332 lea rdi,[96+rdi] | |
2333 pxor xmm7,xmm8 | |
2334 | |
2335 pxor xmm10,xmm9 | |
2336 DB 102,15,56,222,241 | |
2337 pxor xmm11,xmm9 | |
2338 movdqa XMMWORD[rsp],xmm10 | |
2339 DB 102,15,56,222,249 | |
2340 movups xmm1,XMMWORD[48+r11] | |
2341 pxor xmm12,xmm9 | |
2342 | |
2343 DB 102,15,56,222,208 | |
2344 pxor xmm13,xmm9 | |
2345 movdqa XMMWORD[16+rsp],xmm11 | |
2346 DB 102,15,56,222,216 | |
2347 pxor xmm14,xmm9 | |
2348 movdqa XMMWORD[32+rsp],xmm12 | |
2349 DB 102,15,56,222,224 | |
2350 DB 102,15,56,222,232 | |
2351 pxor xmm8,xmm9 | |
2352 movdqa XMMWORD[64+rsp],xmm14 | |
2353 DB 102,15,56,222,240 | |
2354 DB 102,15,56,222,248 | |
2355 movups xmm0,XMMWORD[64+r11] | |
2356 movdqa XMMWORD[80+rsp],xmm8 | |
2357 pshufd xmm9,xmm15,0x5f | |
2358 jmp NEAR $L$xts_dec_loop6 | |
2359 ALIGN 32 | |
2360 $L$xts_dec_loop6: | |
2361 DB 102,15,56,222,209 | |
2362 DB 102,15,56,222,217 | |
2363 DB 102,15,56,222,225 | |
2364 DB 102,15,56,222,233 | |
2365 DB 102,15,56,222,241 | |
2366 DB 102,15,56,222,249 | |
2367 movups xmm1,XMMWORD[((-64))+rax*1+rcx] | |
2368 add rax,32 | |
2369 | |
2370 DB 102,15,56,222,208 | |
2371 DB 102,15,56,222,216 | |
2372 DB 102,15,56,222,224 | |
2373 DB 102,15,56,222,232 | |
2374 DB 102,15,56,222,240 | |
2375 DB 102,15,56,222,248 | |
2376 movups xmm0,XMMWORD[((-80))+rax*1+rcx] | |
2377 jnz NEAR $L$xts_dec_loop6 | |
2378 | |
2379 movdqa xmm8,XMMWORD[r8] | |
2380 movdqa xmm14,xmm9 | |
2381 paddd xmm9,xmm9 | |
2382 DB 102,15,56,222,209 | |
2383 paddq xmm15,xmm15 | |
2384 psrad xmm14,31 | |
2385 DB 102,15,56,222,217 | |
2386 pand xmm14,xmm8 | |
2387 movups xmm10,XMMWORD[r11] | |
2388 DB 102,15,56,222,225 | |
2389 DB 102,15,56,222,233 | |
2390 DB 102,15,56,222,241 | |
2391 pxor xmm15,xmm14 | |
2392 movaps xmm11,xmm10 | |
2393 DB 102,15,56,222,249 | |
2394 movups xmm1,XMMWORD[((-64))+rcx] | |
2395 | |
2396 movdqa xmm14,xmm9 | |
2397 DB 102,15,56,222,208 | |
2398 paddd xmm9,xmm9 | |
2399 pxor xmm10,xmm15 | |
2400 DB 102,15,56,222,216 | |
2401 psrad xmm14,31 | |
2402 paddq xmm15,xmm15 | |
2403 DB 102,15,56,222,224 | |
2404 DB 102,15,56,222,232 | |
2405 pand xmm14,xmm8 | |
2406 movaps xmm12,xmm11 | |
2407 DB 102,15,56,222,240 | |
2408 pxor xmm15,xmm14 | |
2409 movdqa xmm14,xmm9 | |
2410 DB 102,15,56,222,248 | |
2411 movups xmm0,XMMWORD[((-48))+rcx] | |
2412 | |
2413 paddd xmm9,xmm9 | |
2414 DB 102,15,56,222,209 | |
2415 pxor xmm11,xmm15 | |
2416 psrad xmm14,31 | |
2417 DB 102,15,56,222,217 | |
2418 paddq xmm15,xmm15 | |
2419 pand xmm14,xmm8 | |
2420 DB 102,15,56,222,225 | |
2421 DB 102,15,56,222,233 | |
2422 movdqa XMMWORD[48+rsp],xmm13 | |
2423 pxor xmm15,xmm14 | |
2424 DB 102,15,56,222,241 | |
2425 movaps xmm13,xmm12 | |
2426 movdqa xmm14,xmm9 | |
2427 DB 102,15,56,222,249 | |
2428 movups xmm1,XMMWORD[((-32))+rcx] | |
2429 | |
2430 paddd xmm9,xmm9 | |
2431 DB 102,15,56,222,208 | |
2432 pxor xmm12,xmm15 | |
2433 psrad xmm14,31 | |
2434 DB 102,15,56,222,216 | |
2435 paddq xmm15,xmm15 | |
2436 pand xmm14,xmm8 | |
2437 DB 102,15,56,222,224 | |
2438 DB 102,15,56,222,232 | |
2439 DB 102,15,56,222,240 | |
2440 pxor xmm15,xmm14 | |
2441 movaps xmm14,xmm13 | |
2442 DB 102,15,56,222,248 | |
2443 | |
2444 movdqa xmm0,xmm9 | |
2445 paddd xmm9,xmm9 | |
2446 DB 102,15,56,222,209 | |
2447 pxor xmm13,xmm15 | |
2448 psrad xmm0,31 | |
2449 DB 102,15,56,222,217 | |
2450 paddq xmm15,xmm15 | |
2451 pand xmm0,xmm8 | |
2452 DB 102,15,56,222,225 | |
2453 DB 102,15,56,222,233 | |
2454 pxor xmm15,xmm0 | |
2455 movups xmm0,XMMWORD[r11] | |
2456 DB 102,15,56,222,241 | |
2457 DB 102,15,56,222,249 | |
2458 movups xmm1,XMMWORD[16+r11] | |
2459 | |
2460 pxor xmm14,xmm15 | |
2461 DB 102,15,56,223,84,36,0 | |
2462 psrad xmm9,31 | |
2463 paddq xmm15,xmm15 | |
2464 DB 102,15,56,223,92,36,16 | |
2465 DB 102,15,56,223,100,36,32 | |
2466 pand xmm9,xmm8 | |
2467 mov rax,r10 | |
2468 DB 102,15,56,223,108,36,48 | |
2469 DB 102,15,56,223,116,36,64 | |
2470 DB 102,15,56,223,124,36,80 | |
2471 pxor xmm15,xmm9 | |
2472 | |
2473 lea rsi,[96+rsi] | |
2474 movups XMMWORD[(-96)+rsi],xmm2 | |
2475 movups XMMWORD[(-80)+rsi],xmm3 | |
2476 movups XMMWORD[(-64)+rsi],xmm4 | |
2477 movups XMMWORD[(-48)+rsi],xmm5 | |
2478 movups XMMWORD[(-32)+rsi],xmm6 | |
2479 movups XMMWORD[(-16)+rsi],xmm7 | |
2480 sub rdx,16*6 | |
2481 jnc NEAR $L$xts_dec_grandloop | |
2482 | |
2483 mov eax,16+96 | |
2484 sub eax,r10d | |
2485 mov rcx,r11 | |
2486 shr eax,4 | |
2487 | |
2488 $L$xts_dec_short: | |
2489 | |
2490 mov r10d,eax | |
2491 pxor xmm10,xmm0 | |
2492 pxor xmm11,xmm0 | |
2493 add rdx,16*6 | |
2494 jz NEAR $L$xts_dec_done | |
2495 | |
2496 pxor xmm12,xmm0 | |
2497 cmp rdx,0x20 | |
2498 jb NEAR $L$xts_dec_one | |
2499 pxor xmm13,xmm0 | |
2500 je NEAR $L$xts_dec_two | |
2501 | |
2502 pxor xmm14,xmm0 | |
2503 cmp rdx,0x40 | |
2504 jb NEAR $L$xts_dec_three | |
2505 je NEAR $L$xts_dec_four | |
2506 | |
2507 movdqu xmm2,XMMWORD[rdi] | |
2508 movdqu xmm3,XMMWORD[16+rdi] | |
2509 movdqu xmm4,XMMWORD[32+rdi] | |
2510 pxor xmm2,xmm10 | |
2511 movdqu xmm5,XMMWORD[48+rdi] | |
2512 pxor xmm3,xmm11 | |
2513 movdqu xmm6,XMMWORD[64+rdi] | |
2514 lea rdi,[80+rdi] | |
2515 pxor xmm4,xmm12 | |
2516 pxor xmm5,xmm13 | |
2517 pxor xmm6,xmm14 | |
2518 | |
2519 call _aesni_decrypt6 | |
2520 | |
2521 xorps xmm2,xmm10 | |
2522 xorps xmm3,xmm11 | |
2523 xorps xmm4,xmm12 | |
2524 movdqu XMMWORD[rsi],xmm2 | |
2525 xorps xmm5,xmm13 | |
2526 movdqu XMMWORD[16+rsi],xmm3 | |
2527 xorps xmm6,xmm14 | |
2528 movdqu XMMWORD[32+rsi],xmm4 | |
2529 pxor xmm14,xmm14 | |
2530 movdqu XMMWORD[48+rsi],xmm5 | |
2531 pcmpgtd xmm14,xmm15 | |
2532 movdqu XMMWORD[64+rsi],xmm6 | |
2533 lea rsi,[80+rsi] | |
2534 pshufd xmm11,xmm14,0x13 | |
2535 and r9,15 | |
2536 jz NEAR $L$xts_dec_ret | |
2537 | |
2538 movdqa xmm10,xmm15 | |
2539 paddq xmm15,xmm15 | |
2540 pand xmm11,xmm8 | |
2541 pxor xmm11,xmm15 | |
2542 jmp NEAR $L$xts_dec_done2 | |
2543 | |
2544 ALIGN 16 | |
2545 $L$xts_dec_one: | |
2546 movups xmm2,XMMWORD[rdi] | |
2547 lea rdi,[16+rdi] | |
2548 xorps xmm2,xmm10 | |
2549 movups xmm0,XMMWORD[rcx] | |
2550 movups xmm1,XMMWORD[16+rcx] | |
2551 lea rcx,[32+rcx] | |
2552 xorps xmm2,xmm0 | |
2553 $L$oop_dec1_12: | |
2554 DB 102,15,56,222,209 | |
2555 dec eax | |
2556 movups xmm1,XMMWORD[rcx] | |
2557 lea rcx,[16+rcx] | |
2558 jnz NEAR $L$oop_dec1_12 | |
2559 DB 102,15,56,223,209 | |
2560 xorps xmm2,xmm10 | |
2561 movdqa xmm10,xmm11 | |
2562 movups XMMWORD[rsi],xmm2 | |
2563 movdqa xmm11,xmm12 | |
2564 lea rsi,[16+rsi] | |
2565 jmp NEAR $L$xts_dec_done | |
2566 | |
2567 ALIGN 16 | |
2568 $L$xts_dec_two: | |
2569 movups xmm2,XMMWORD[rdi] | |
2570 movups xmm3,XMMWORD[16+rdi] | |
2571 lea rdi,[32+rdi] | |
2572 xorps xmm2,xmm10 | |
2573 xorps xmm3,xmm11 | |
2574 | |
2575 call _aesni_decrypt2 | |
2576 | |
2577 xorps xmm2,xmm10 | |
2578 movdqa xmm10,xmm12 | |
2579 xorps xmm3,xmm11 | |
2580 movdqa xmm11,xmm13 | |
2581 movups XMMWORD[rsi],xmm2 | |
2582 movups XMMWORD[16+rsi],xmm3 | |
2583 lea rsi,[32+rsi] | |
2584 jmp NEAR $L$xts_dec_done | |
2585 | |
2586 ALIGN 16 | |
2587 $L$xts_dec_three: | |
2588 movups xmm2,XMMWORD[rdi] | |
2589 movups xmm3,XMMWORD[16+rdi] | |
2590 movups xmm4,XMMWORD[32+rdi] | |
2591 lea rdi,[48+rdi] | |
2592 xorps xmm2,xmm10 | |
2593 xorps xmm3,xmm11 | |
2594 xorps xmm4,xmm12 | |
2595 | |
2596 call _aesni_decrypt3 | |
2597 | |
2598 xorps xmm2,xmm10 | |
2599 movdqa xmm10,xmm13 | |
2600 xorps xmm3,xmm11 | |
2601 movdqa xmm11,xmm14 | |
2602 xorps xmm4,xmm12 | |
2603 movups XMMWORD[rsi],xmm2 | |
2604 movups XMMWORD[16+rsi],xmm3 | |
2605 movups XMMWORD[32+rsi],xmm4 | |
2606 lea rsi,[48+rsi] | |
2607 jmp NEAR $L$xts_dec_done | |
2608 | |
2609 ALIGN 16 | |
2610 $L$xts_dec_four: | |
2611 movups xmm2,XMMWORD[rdi] | |
2612 movups xmm3,XMMWORD[16+rdi] | |
2613 movups xmm4,XMMWORD[32+rdi] | |
2614 xorps xmm2,xmm10 | |
2615 movups xmm5,XMMWORD[48+rdi] | |
2616 lea rdi,[64+rdi] | |
2617 xorps xmm3,xmm11 | |
2618 xorps xmm4,xmm12 | |
2619 xorps xmm5,xmm13 | |
2620 | |
2621 call _aesni_decrypt4 | |
2622 | |
2623 pxor xmm2,xmm10 | |
2624 movdqa xmm10,xmm14 | |
2625 pxor xmm3,xmm11 | |
2626 movdqa xmm11,xmm15 | |
2627 pxor xmm4,xmm12 | |
2628 movdqu XMMWORD[rsi],xmm2 | |
2629 pxor xmm5,xmm13 | |
2630 movdqu XMMWORD[16+rsi],xmm3 | |
2631 movdqu XMMWORD[32+rsi],xmm4 | |
2632 movdqu XMMWORD[48+rsi],xmm5 | |
2633 lea rsi,[64+rsi] | |
2634 jmp NEAR $L$xts_dec_done | |
2635 | |
2636 ALIGN 16 | |
2637 $L$xts_dec_done: | |
2638 and r9,15 | |
2639 jz NEAR $L$xts_dec_ret | |
2640 $L$xts_dec_done2: | |
2641 mov rdx,r9 | |
2642 mov rcx,r11 | |
2643 mov eax,r10d | |
2644 | |
2645 movups xmm2,XMMWORD[rdi] | |
2646 xorps xmm2,xmm11 | |
2647 movups xmm0,XMMWORD[rcx] | |
2648 movups xmm1,XMMWORD[16+rcx] | |
2649 lea rcx,[32+rcx] | |
2650 xorps xmm2,xmm0 | |
2651 $L$oop_dec1_13: | |
2652 DB 102,15,56,222,209 | |
2653 dec eax | |
2654 movups xmm1,XMMWORD[rcx] | |
2655 lea rcx,[16+rcx] | |
2656 jnz NEAR $L$oop_dec1_13 | |
2657 DB 102,15,56,223,209 | |
2658 xorps xmm2,xmm11 | |
2659 movups XMMWORD[rsi],xmm2 | |
2660 | |
2661 $L$xts_dec_steal: | |
2662 movzx eax,BYTE[16+rdi] | |
2663 movzx ecx,BYTE[rsi] | |
2664 lea rdi,[1+rdi] | |
2665 mov BYTE[rsi],al | |
2666 mov BYTE[16+rsi],cl | |
2667 lea rsi,[1+rsi] | |
2668 sub rdx,1 | |
2669 jnz NEAR $L$xts_dec_steal | |
2670 | |
2671 sub rsi,r9 | |
2672 mov rcx,r11 | |
2673 mov eax,r10d | |
2674 | |
2675 movups xmm2,XMMWORD[rsi] | |
2676 xorps xmm2,xmm10 | |
2677 movups xmm0,XMMWORD[rcx] | |
2678 movups xmm1,XMMWORD[16+rcx] | |
2679 lea rcx,[32+rcx] | |
2680 xorps xmm2,xmm0 | |
2681 $L$oop_dec1_14: | |
2682 DB 102,15,56,222,209 | |
2683 dec eax | |
2684 movups xmm1,XMMWORD[rcx] | |
2685 lea rcx,[16+rcx] | |
2686 jnz NEAR $L$oop_dec1_14 | |
2687 DB 102,15,56,223,209 | |
2688 xorps xmm2,xmm10 | |
2689 movups XMMWORD[rsi],xmm2 | |
2690 | |
2691 $L$xts_dec_ret: | |
2692 xorps xmm0,xmm0 | |
2693 pxor xmm1,xmm1 | |
2694 pxor xmm2,xmm2 | |
2695 pxor xmm3,xmm3 | |
2696 pxor xmm4,xmm4 | |
2697 pxor xmm5,xmm5 | |
2698 movaps xmm6,XMMWORD[((-160))+rbp] | |
2699 movaps XMMWORD[(-160)+rbp],xmm0 | |
2700 movaps xmm7,XMMWORD[((-144))+rbp] | |
2701 movaps XMMWORD[(-144)+rbp],xmm0 | |
2702 movaps xmm8,XMMWORD[((-128))+rbp] | |
2703 movaps XMMWORD[(-128)+rbp],xmm0 | |
2704 movaps xmm9,XMMWORD[((-112))+rbp] | |
2705 movaps XMMWORD[(-112)+rbp],xmm0 | |
2706 movaps xmm10,XMMWORD[((-96))+rbp] | |
2707 movaps XMMWORD[(-96)+rbp],xmm0 | |
2708 movaps xmm11,XMMWORD[((-80))+rbp] | |
2709 movaps XMMWORD[(-80)+rbp],xmm0 | |
2710 movaps xmm12,XMMWORD[((-64))+rbp] | |
2711 movaps XMMWORD[(-64)+rbp],xmm0 | |
2712 movaps xmm13,XMMWORD[((-48))+rbp] | |
2713 movaps XMMWORD[(-48)+rbp],xmm0 | |
2714 movaps xmm14,XMMWORD[((-32))+rbp] | |
2715 movaps XMMWORD[(-32)+rbp],xmm0 | |
2716 movaps xmm15,XMMWORD[((-16))+rbp] | |
2717 movaps XMMWORD[(-16)+rbp],xmm0 | |
2718 movaps XMMWORD[rsp],xmm0 | |
2719 movaps XMMWORD[16+rsp],xmm0 | |
2720 movaps XMMWORD[32+rsp],xmm0 | |
2721 movaps XMMWORD[48+rsp],xmm0 | |
2722 movaps XMMWORD[64+rsp],xmm0 | |
2723 movaps XMMWORD[80+rsp],xmm0 | |
2724 movaps XMMWORD[96+rsp],xmm0 | |
2725 lea rsp,[rbp] | |
2726 pop rbp | |
2727 $L$xts_dec_epilogue: | |
2728 mov rdi,QWORD[8+rsp] ;WIN64 epilogue | |
2729 mov rsi,QWORD[16+rsp] | |
2730 DB 0F3h,0C3h ;repret | |
2731 $L$SEH_end_aesni_xts_decrypt: | |
2732 global aesni_cbc_encrypt | |
2733 | |
2734 ALIGN 16 | |
2735 aesni_cbc_encrypt: | |
2736 mov QWORD[8+rsp],rdi ;WIN64 prologue | |
2737 mov QWORD[16+rsp],rsi | |
2738 mov rax,rsp | |
2739 $L$SEH_begin_aesni_cbc_encrypt: | |
2740 mov rdi,rcx | |
2741 mov rsi,rdx | |
2742 mov rdx,r8 | |
2743 mov rcx,r9 | |
2744 mov r8,QWORD[40+rsp] | |
2745 mov r9,QWORD[48+rsp] | |
2746 | |
2747 | |
2748 test rdx,rdx | |
2749 jz NEAR $L$cbc_ret | |
2750 | |
2751 mov r10d,DWORD[240+rcx] | |
2752 mov r11,rcx | |
2753 test r9d,r9d | |
2754 jz NEAR $L$cbc_decrypt | |
2755 | |
2756 movups xmm2,XMMWORD[r8] | |
2757 mov eax,r10d | |
2758 cmp rdx,16 | |
2759 jb NEAR $L$cbc_enc_tail | |
2760 sub rdx,16 | |
2761 jmp NEAR $L$cbc_enc_loop | |
2762 ALIGN 16 | |
2763 $L$cbc_enc_loop: | |
2764 movups xmm3,XMMWORD[rdi] | |
2765 lea rdi,[16+rdi] | |
2766 | |
2767 movups xmm0,XMMWORD[rcx] | |
2768 movups xmm1,XMMWORD[16+rcx] | |
2769 xorps xmm3,xmm0 | |
2770 lea rcx,[32+rcx] | |
2771 xorps xmm2,xmm3 | |
2772 $L$oop_enc1_15: | |
2773 DB 102,15,56,220,209 | |
2774 dec eax | |
2775 movups xmm1,XMMWORD[rcx] | |
2776 lea rcx,[16+rcx] | |
2777 jnz NEAR $L$oop_enc1_15 | |
2778 DB 102,15,56,221,209 | |
2779 mov eax,r10d | |
2780 mov rcx,r11 | |
2781 movups XMMWORD[rsi],xmm2 | |
2782 lea rsi,[16+rsi] | |
2783 sub rdx,16 | |
2784 jnc NEAR $L$cbc_enc_loop | |
2785 add rdx,16 | |
2786 jnz NEAR $L$cbc_enc_tail | |
2787 pxor xmm0,xmm0 | |
2788 pxor xmm1,xmm1 | |
2789 movups XMMWORD[r8],xmm2 | |
2790 pxor xmm2,xmm2 | |
2791 pxor xmm3,xmm3 | |
2792 jmp NEAR $L$cbc_ret | |
2793 | |
2794 $L$cbc_enc_tail: | |
2795 mov rcx,rdx | |
2796 xchg rsi,rdi | |
2797 DD 0x9066A4F3 | |
2798 mov ecx,16 | |
2799 sub rcx,rdx | |
2800 xor eax,eax | |
2801 DD 0x9066AAF3 | |
2802 lea rdi,[((-16))+rdi] | |
2803 mov eax,r10d | |
2804 mov rsi,rdi | |
2805 mov rcx,r11 | |
2806 xor rdx,rdx | |
2807 jmp NEAR $L$cbc_enc_loop | |
2808 | |
2809 ALIGN 16 | |
2810 $L$cbc_decrypt: | |
2811 cmp rdx,16 | |
2812 jne NEAR $L$cbc_decrypt_bulk | |
2813 | |
2814 | |
2815 | |
2816 movdqu xmm2,XMMWORD[rdi] | |
2817 movdqu xmm3,XMMWORD[r8] | |
2818 movdqa xmm4,xmm2 | |
2819 movups xmm0,XMMWORD[rcx] | |
2820 movups xmm1,XMMWORD[16+rcx] | |
2821 lea rcx,[32+rcx] | |
2822 xorps xmm2,xmm0 | |
2823 $L$oop_dec1_16: | |
2824 DB 102,15,56,222,209 | |
2825 dec r10d | |
2826 movups xmm1,XMMWORD[rcx] | |
2827 lea rcx,[16+rcx] | |
2828 jnz NEAR $L$oop_dec1_16 | |
2829 DB 102,15,56,223,209 | |
2830 pxor xmm0,xmm0 | |
2831 pxor xmm1,xmm1 | |
2832 movdqu XMMWORD[r8],xmm4 | |
2833 xorps xmm2,xmm3 | |
2834 pxor xmm3,xmm3 | |
2835 movups XMMWORD[rsi],xmm2 | |
2836 pxor xmm2,xmm2 | |
2837 jmp NEAR $L$cbc_ret | |
2838 ALIGN 16 | |
2839 $L$cbc_decrypt_bulk: | |
2840 lea rax,[rsp] | |
2841 push rbp | |
2842 sub rsp,176 | |
2843 and rsp,-16 | |
2844 movaps XMMWORD[16+rsp],xmm6 | |
2845 movaps XMMWORD[32+rsp],xmm7 | |
2846 movaps XMMWORD[48+rsp],xmm8 | |
2847 movaps XMMWORD[64+rsp],xmm9 | |
2848 movaps XMMWORD[80+rsp],xmm10 | |
2849 movaps XMMWORD[96+rsp],xmm11 | |
2850 movaps XMMWORD[112+rsp],xmm12 | |
2851 movaps XMMWORD[128+rsp],xmm13 | |
2852 movaps XMMWORD[144+rsp],xmm14 | |
2853 movaps XMMWORD[160+rsp],xmm15 | |
2854 $L$cbc_decrypt_body: | |
2855 lea rbp,[((-8))+rax] | |
2856 movups xmm10,XMMWORD[r8] | |
2857 mov eax,r10d | |
2858 cmp rdx,0x50 | |
2859 jbe NEAR $L$cbc_dec_tail | |
2860 | |
2861 movups xmm0,XMMWORD[rcx] | |
2862 movdqu xmm2,XMMWORD[rdi] | |
2863 movdqu xmm3,XMMWORD[16+rdi] | |
2864 movdqa xmm11,xmm2 | |
2865 movdqu xmm4,XMMWORD[32+rdi] | |
2866 movdqa xmm12,xmm3 | |
2867 movdqu xmm5,XMMWORD[48+rdi] | |
2868 movdqa xmm13,xmm4 | |
2869 movdqu xmm6,XMMWORD[64+rdi] | |
2870 movdqa xmm14,xmm5 | |
2871 movdqu xmm7,XMMWORD[80+rdi] | |
2872 movdqa xmm15,xmm6 | |
2873 mov r9d,DWORD[((OPENSSL_ia32cap_P+4))] | |
2874 cmp rdx,0x70 | |
2875 jbe NEAR $L$cbc_dec_six_or_seven | |
2876 | |
2877 and r9d,71303168 | |
2878 sub rdx,0x50 | |
2879 cmp r9d,4194304 | |
2880 je NEAR $L$cbc_dec_loop6_enter | |
2881 sub rdx,0x20 | |
2882 lea rcx,[112+rcx] | |
2883 jmp NEAR $L$cbc_dec_loop8_enter | |
2884 ALIGN 16 | |
2885 $L$cbc_dec_loop8: | |
2886 movups XMMWORD[rsi],xmm9 | |
2887 lea rsi,[16+rsi] | |
2888 $L$cbc_dec_loop8_enter: | |
2889 movdqu xmm8,XMMWORD[96+rdi] | |
2890 pxor xmm2,xmm0 | |
2891 movdqu xmm9,XMMWORD[112+rdi] | |
2892 pxor xmm3,xmm0 | |
2893 movups xmm1,XMMWORD[((16-112))+rcx] | |
2894 pxor xmm4,xmm0 | |
2895 xor r11,r11 | |
2896 cmp rdx,0x70 | |
2897 pxor xmm5,xmm0 | |
2898 pxor xmm6,xmm0 | |
2899 pxor xmm7,xmm0 | |
2900 pxor xmm8,xmm0 | |
2901 | |
2902 DB 102,15,56,222,209 | |
2903 pxor xmm9,xmm0 | |
2904 movups xmm0,XMMWORD[((32-112))+rcx] | |
2905 DB 102,15,56,222,217 | |
2906 DB 102,15,56,222,225 | |
2907 DB 102,15,56,222,233 | |
2908 DB 102,15,56,222,241 | |
2909 DB 102,15,56,222,249 | |
2910 DB 102,68,15,56,222,193 | |
2911 setnc r11b | |
2912 shl r11,7 | |
2913 DB 102,68,15,56,222,201 | |
2914 add r11,rdi | |
2915 movups xmm1,XMMWORD[((48-112))+rcx] | |
2916 DB 102,15,56,222,208 | |
2917 DB 102,15,56,222,216 | |
2918 DB 102,15,56,222,224 | |
2919 DB 102,15,56,222,232 | |
2920 DB 102,15,56,222,240 | |
2921 DB 102,15,56,222,248 | |
2922 DB 102,68,15,56,222,192 | |
2923 DB 102,68,15,56,222,200 | |
2924 movups xmm0,XMMWORD[((64-112))+rcx] | |
2925 nop | |
2926 DB 102,15,56,222,209 | |
2927 DB 102,15,56,222,217 | |
2928 DB 102,15,56,222,225 | |
2929 DB 102,15,56,222,233 | |
2930 DB 102,15,56,222,241 | |
2931 DB 102,15,56,222,249 | |
2932 DB 102,68,15,56,222,193 | |
2933 DB 102,68,15,56,222,201 | |
2934 movups xmm1,XMMWORD[((80-112))+rcx] | |
2935 nop | |
2936 DB 102,15,56,222,208 | |
2937 DB 102,15,56,222,216 | |
2938 DB 102,15,56,222,224 | |
2939 DB 102,15,56,222,232 | |
2940 DB 102,15,56,222,240 | |
2941 DB 102,15,56,222,248 | |
2942 DB 102,68,15,56,222,192 | |
2943 DB 102,68,15,56,222,200 | |
2944 movups xmm0,XMMWORD[((96-112))+rcx] | |
2945 nop | |
2946 DB 102,15,56,222,209 | |
2947 DB 102,15,56,222,217 | |
2948 DB 102,15,56,222,225 | |
2949 DB 102,15,56,222,233 | |
2950 DB 102,15,56,222,241 | |
2951 DB 102,15,56,222,249 | |
2952 DB 102,68,15,56,222,193 | |
2953 DB 102,68,15,56,222,201 | |
2954 movups xmm1,XMMWORD[((112-112))+rcx] | |
2955 nop | |
2956 DB 102,15,56,222,208 | |
2957 DB 102,15,56,222,216 | |
2958 DB 102,15,56,222,224 | |
2959 DB 102,15,56,222,232 | |
2960 DB 102,15,56,222,240 | |
2961 DB 102,15,56,222,248 | |
2962 DB 102,68,15,56,222,192 | |
2963 DB 102,68,15,56,222,200 | |
2964 movups xmm0,XMMWORD[((128-112))+rcx] | |
2965 nop | |
2966 DB 102,15,56,222,209 | |
2967 DB 102,15,56,222,217 | |
2968 DB 102,15,56,222,225 | |
2969 DB 102,15,56,222,233 | |
2970 DB 102,15,56,222,241 | |
2971 DB 102,15,56,222,249 | |
2972 DB 102,68,15,56,222,193 | |
2973 DB 102,68,15,56,222,201 | |
2974 movups xmm1,XMMWORD[((144-112))+rcx] | |
2975 cmp eax,11 | |
2976 DB 102,15,56,222,208 | |
2977 DB 102,15,56,222,216 | |
2978 DB 102,15,56,222,224 | |
2979 DB 102,15,56,222,232 | |
2980 DB 102,15,56,222,240 | |
2981 DB 102,15,56,222,248 | |
2982 DB 102,68,15,56,222,192 | |
2983 DB 102,68,15,56,222,200 | |
2984 movups xmm0,XMMWORD[((160-112))+rcx] | |
2985 jb NEAR $L$cbc_dec_done | |
2986 DB 102,15,56,222,209 | |
2987 DB 102,15,56,222,217 | |
2988 DB 102,15,56,222,225 | |
2989 DB 102,15,56,222,233 | |
2990 DB 102,15,56,222,241 | |
2991 DB 102,15,56,222,249 | |
2992 DB 102,68,15,56,222,193 | |
2993 DB 102,68,15,56,222,201 | |
2994 movups xmm1,XMMWORD[((176-112))+rcx] | |
2995 nop | |
2996 DB 102,15,56,222,208 | |
2997 DB 102,15,56,222,216 | |
2998 DB 102,15,56,222,224 | |
2999 DB 102,15,56,222,232 | |
3000 DB 102,15,56,222,240 | |
3001 DB 102,15,56,222,248 | |
3002 DB 102,68,15,56,222,192 | |
3003 DB 102,68,15,56,222,200 | |
3004 movups xmm0,XMMWORD[((192-112))+rcx] | |
3005 je NEAR $L$cbc_dec_done | |
3006 DB 102,15,56,222,209 | |
3007 DB 102,15,56,222,217 | |
3008 DB 102,15,56,222,225 | |
3009 DB 102,15,56,222,233 | |
3010 DB 102,15,56,222,241 | |
3011 DB 102,15,56,222,249 | |
3012 DB 102,68,15,56,222,193 | |
3013 DB 102,68,15,56,222,201 | |
3014 movups xmm1,XMMWORD[((208-112))+rcx] | |
3015 nop | |
3016 DB 102,15,56,222,208 | |
3017 DB 102,15,56,222,216 | |
3018 DB 102,15,56,222,224 | |
3019 DB 102,15,56,222,232 | |
3020 DB 102,15,56,222,240 | |
3021 DB 102,15,56,222,248 | |
3022 DB 102,68,15,56,222,192 | |
3023 DB 102,68,15,56,222,200 | |
3024 movups xmm0,XMMWORD[((224-112))+rcx] | |
3025 jmp NEAR $L$cbc_dec_done | |
3026 ALIGN 16 | |
3027 $L$cbc_dec_done: | |
3028 DB 102,15,56,222,209 | |
3029 DB 102,15,56,222,217 | |
3030 pxor xmm10,xmm0 | |
3031 pxor xmm11,xmm0 | |
3032 DB 102,15,56,222,225 | |
3033 DB 102,15,56,222,233 | |
3034 pxor xmm12,xmm0 | |
3035 pxor xmm13,xmm0 | |
3036 DB 102,15,56,222,241 | |
3037 DB 102,15,56,222,249 | |
3038 pxor xmm14,xmm0 | |
3039 pxor xmm15,xmm0 | |
3040 DB 102,68,15,56,222,193 | |
3041 DB 102,68,15,56,222,201 | |
3042 movdqu xmm1,XMMWORD[80+rdi] | |
3043 | |
3044 DB 102,65,15,56,223,210 | |
3045 movdqu xmm10,XMMWORD[96+rdi] | |
3046 pxor xmm1,xmm0 | |
3047 DB 102,65,15,56,223,219 | |
3048 pxor xmm10,xmm0 | |
3049 movdqu xmm0,XMMWORD[112+rdi] | |
3050 DB 102,65,15,56,223,228 | |
3051 lea rdi,[128+rdi] | |
3052 movdqu xmm11,XMMWORD[r11] | |
3053 DB 102,65,15,56,223,237 | |
3054 DB 102,65,15,56,223,246 | |
3055 movdqu xmm12,XMMWORD[16+r11] | |
3056 movdqu xmm13,XMMWORD[32+r11] | |
3057 DB 102,65,15,56,223,255 | |
3058 DB 102,68,15,56,223,193 | |
3059 movdqu xmm14,XMMWORD[48+r11] | |
3060 movdqu xmm15,XMMWORD[64+r11] | |
3061 DB 102,69,15,56,223,202 | |
3062 movdqa xmm10,xmm0 | |
3063 movdqu xmm1,XMMWORD[80+r11] | |
3064 movups xmm0,XMMWORD[((-112))+rcx] | |
3065 | |
3066 movups XMMWORD[rsi],xmm2 | |
3067 movdqa xmm2,xmm11 | |
3068 movups XMMWORD[16+rsi],xmm3 | |
3069 movdqa xmm3,xmm12 | |
3070 movups XMMWORD[32+rsi],xmm4 | |
3071 movdqa xmm4,xmm13 | |
3072 movups XMMWORD[48+rsi],xmm5 | |
3073 movdqa xmm5,xmm14 | |
3074 movups XMMWORD[64+rsi],xmm6 | |
3075 movdqa xmm6,xmm15 | |
3076 movups XMMWORD[80+rsi],xmm7 | |
3077 movdqa xmm7,xmm1 | |
3078 movups XMMWORD[96+rsi],xmm8 | |
3079 lea rsi,[112+rsi] | |
3080 | |
3081 sub rdx,0x80 | |
3082 ja NEAR $L$cbc_dec_loop8 | |
3083 | |
3084 movaps xmm2,xmm9 | |
3085 lea rcx,[((-112))+rcx] | |
3086 add rdx,0x70 | |
3087 jle NEAR $L$cbc_dec_clear_tail_collected | |
3088 movups XMMWORD[rsi],xmm9 | |
3089 lea rsi,[16+rsi] | |
3090 cmp rdx,0x50 | |
3091 jbe NEAR $L$cbc_dec_tail | |
3092 | |
3093 movaps xmm2,xmm11 | |
3094 $L$cbc_dec_six_or_seven: | |
3095 cmp rdx,0x60 | |
3096 ja NEAR $L$cbc_dec_seven | |
3097 | |
3098 movaps xmm8,xmm7 | |
3099 call _aesni_decrypt6 | |
3100 pxor xmm2,xmm10 | |
3101 movaps xmm10,xmm8 | |
3102 pxor xmm3,xmm11 | |
3103 movdqu XMMWORD[rsi],xmm2 | |
3104 pxor xmm4,xmm12 | |
3105 movdqu XMMWORD[16+rsi],xmm3 | |
3106 pxor xmm3,xmm3 | |
3107 pxor xmm5,xmm13 | |
3108 movdqu XMMWORD[32+rsi],xmm4 | |
3109 pxor xmm4,xmm4 | |
3110 pxor xmm6,xmm14 | |
3111 movdqu XMMWORD[48+rsi],xmm5 | |
3112 pxor xmm5,xmm5 | |
3113 pxor xmm7,xmm15 | |
3114 movdqu XMMWORD[64+rsi],xmm6 | |
3115 pxor xmm6,xmm6 | |
3116 lea rsi,[80+rsi] | |
3117 movdqa xmm2,xmm7 | |
3118 pxor xmm7,xmm7 | |
3119 jmp NEAR $L$cbc_dec_tail_collected | |
3120 | |
3121 ALIGN 16 | |
3122 $L$cbc_dec_seven: | |
3123 movups xmm8,XMMWORD[96+rdi] | |
3124 xorps xmm9,xmm9 | |
3125 call _aesni_decrypt8 | |
3126 movups xmm9,XMMWORD[80+rdi] | |
3127 pxor xmm2,xmm10 | |
3128 movups xmm10,XMMWORD[96+rdi] | |
3129 pxor xmm3,xmm11 | |
3130 movdqu XMMWORD[rsi],xmm2 | |
3131 pxor xmm4,xmm12 | |
3132 movdqu XMMWORD[16+rsi],xmm3 | |
3133 pxor xmm3,xmm3 | |
3134 pxor xmm5,xmm13 | |
3135 movdqu XMMWORD[32+rsi],xmm4 | |
3136 pxor xmm4,xmm4 | |
3137 pxor xmm6,xmm14 | |
3138 movdqu XMMWORD[48+rsi],xmm5 | |
3139 pxor xmm5,xmm5 | |
3140 pxor xmm7,xmm15 | |
3141 movdqu XMMWORD[64+rsi],xmm6 | |
3142 pxor xmm6,xmm6 | |
3143 pxor xmm8,xmm9 | |
3144 movdqu XMMWORD[80+rsi],xmm7 | |
3145 pxor xmm7,xmm7 | |
3146 lea rsi,[96+rsi] | |
3147 movdqa xmm2,xmm8 | |
3148 pxor xmm8,xmm8 | |
3149 pxor xmm9,xmm9 | |
3150 jmp NEAR $L$cbc_dec_tail_collected | |
3151 | |
3152 ALIGN 16 | |
3153 $L$cbc_dec_loop6: | |
3154 movups XMMWORD[rsi],xmm7 | |
3155 lea rsi,[16+rsi] | |
3156 movdqu xmm2,XMMWORD[rdi] | |
3157 movdqu xmm3,XMMWORD[16+rdi] | |
3158 movdqa xmm11,xmm2 | |
3159 movdqu xmm4,XMMWORD[32+rdi] | |
3160 movdqa xmm12,xmm3 | |
3161 movdqu xmm5,XMMWORD[48+rdi] | |
3162 movdqa xmm13,xmm4 | |
3163 movdqu xmm6,XMMWORD[64+rdi] | |
3164 movdqa xmm14,xmm5 | |
3165 movdqu xmm7,XMMWORD[80+rdi] | |
3166 movdqa xmm15,xmm6 | |
3167 $L$cbc_dec_loop6_enter: | |
3168 lea rdi,[96+rdi] | |
3169 movdqa xmm8,xmm7 | |
3170 | |
3171 call _aesni_decrypt6 | |
3172 | |
3173 pxor xmm2,xmm10 | |
3174 movdqa xmm10,xmm8 | |
3175 pxor xmm3,xmm11 | |
3176 movdqu XMMWORD[rsi],xmm2 | |
3177 pxor xmm4,xmm12 | |
3178 movdqu XMMWORD[16+rsi],xmm3 | |
3179 pxor xmm5,xmm13 | |
3180 movdqu XMMWORD[32+rsi],xmm4 | |
3181 pxor xmm6,xmm14 | |
3182 mov rcx,r11 | |
3183 movdqu XMMWORD[48+rsi],xmm5 | |
3184 pxor xmm7,xmm15 | |
3185 mov eax,r10d | |
3186 movdqu XMMWORD[64+rsi],xmm6 | |
3187 lea rsi,[80+rsi] | |
3188 sub rdx,0x60 | |
3189 ja NEAR $L$cbc_dec_loop6 | |
3190 | |
3191 movdqa xmm2,xmm7 | |
3192 add rdx,0x50 | |
3193 jle NEAR $L$cbc_dec_clear_tail_collected | |
3194 movups XMMWORD[rsi],xmm7 | |
3195 lea rsi,[16+rsi] | |
3196 | |
3197 $L$cbc_dec_tail: | |
3198 movups xmm2,XMMWORD[rdi] | |
3199 sub rdx,0x10 | |
3200 jbe NEAR $L$cbc_dec_one | |
3201 | |
3202 movups xmm3,XMMWORD[16+rdi] | |
3203 movaps xmm11,xmm2 | |
3204 sub rdx,0x10 | |
3205 jbe NEAR $L$cbc_dec_two | |
3206 | |
3207 movups xmm4,XMMWORD[32+rdi] | |
3208 movaps xmm12,xmm3 | |
3209 sub rdx,0x10 | |
3210 jbe NEAR $L$cbc_dec_three | |
3211 | |
3212 movups xmm5,XMMWORD[48+rdi] | |
3213 movaps xmm13,xmm4 | |
3214 sub rdx,0x10 | |
3215 jbe NEAR $L$cbc_dec_four | |
3216 | |
3217 movups xmm6,XMMWORD[64+rdi] | |
3218 movaps xmm14,xmm5 | |
3219 movaps xmm15,xmm6 | |
3220 xorps xmm7,xmm7 | |
3221 call _aesni_decrypt6 | |
3222 pxor xmm2,xmm10 | |
3223 movaps xmm10,xmm15 | |
3224 pxor xmm3,xmm11 | |
3225 movdqu XMMWORD[rsi],xmm2 | |
3226 pxor xmm4,xmm12 | |
3227 movdqu XMMWORD[16+rsi],xmm3 | |
3228 pxor xmm3,xmm3 | |
3229 pxor xmm5,xmm13 | |
3230 movdqu XMMWORD[32+rsi],xmm4 | |
3231 pxor xmm4,xmm4 | |
3232 pxor xmm6,xmm14 | |
3233 movdqu XMMWORD[48+rsi],xmm5 | |
3234 pxor xmm5,xmm5 | |
3235 lea rsi,[64+rsi] | |
3236 movdqa xmm2,xmm6 | |
3237 pxor xmm6,xmm6 | |
3238 pxor xmm7,xmm7 | |
3239 sub rdx,0x10 | |
3240 jmp NEAR $L$cbc_dec_tail_collected | |
3241 | |
3242 ALIGN 16 | |
3243 $L$cbc_dec_one: | |
3244 movaps xmm11,xmm2 | |
3245 movups xmm0,XMMWORD[rcx] | |
3246 movups xmm1,XMMWORD[16+rcx] | |
3247 lea rcx,[32+rcx] | |
3248 xorps xmm2,xmm0 | |
3249 $L$oop_dec1_17: | |
3250 DB 102,15,56,222,209 | |
3251 dec eax | |
3252 movups xmm1,XMMWORD[rcx] | |
3253 lea rcx,[16+rcx] | |
3254 jnz NEAR $L$oop_dec1_17 | |
3255 DB 102,15,56,223,209 | |
3256 xorps xmm2,xmm10 | |
3257 movaps xmm10,xmm11 | |
3258 jmp NEAR $L$cbc_dec_tail_collected | |
3259 ALIGN 16 | |
3260 $L$cbc_dec_two: | |
3261 movaps xmm12,xmm3 | |
3262 call _aesni_decrypt2 | |
3263 pxor xmm2,xmm10 | |
3264 movaps xmm10,xmm12 | |
3265 pxor xmm3,xmm11 | |
3266 movdqu XMMWORD[rsi],xmm2 | |
3267 movdqa xmm2,xmm3 | |
3268 pxor xmm3,xmm3 | |
3269 lea rsi,[16+rsi] | |
3270 jmp NEAR $L$cbc_dec_tail_collected | |
3271 ALIGN 16 | |
3272 $L$cbc_dec_three: | |
3273 movaps xmm13,xmm4 | |
3274 call _aesni_decrypt3 | |
3275 pxor xmm2,xmm10 | |
3276 movaps xmm10,xmm13 | |
3277 pxor xmm3,xmm11 | |
3278 movdqu XMMWORD[rsi],xmm2 | |
3279 pxor xmm4,xmm12 | |
3280 movdqu XMMWORD[16+rsi],xmm3 | |
3281 pxor xmm3,xmm3 | |
3282 movdqa xmm2,xmm4 | |
3283 pxor xmm4,xmm4 | |
3284 lea rsi,[32+rsi] | |
3285 jmp NEAR $L$cbc_dec_tail_collected | |
3286 ALIGN 16 | |
3287 $L$cbc_dec_four: | |
3288 movaps xmm14,xmm5 | |
3289 call _aesni_decrypt4 | |
3290 pxor xmm2,xmm10 | |
3291 movaps xmm10,xmm14 | |
3292 pxor xmm3,xmm11 | |
3293 movdqu XMMWORD[rsi],xmm2 | |
3294 pxor xmm4,xmm12 | |
3295 movdqu XMMWORD[16+rsi],xmm3 | |
3296 pxor xmm3,xmm3 | |
3297 pxor xmm5,xmm13 | |
3298 movdqu XMMWORD[32+rsi],xmm4 | |
3299 pxor xmm4,xmm4 | |
3300 movdqa xmm2,xmm5 | |
3301 pxor xmm5,xmm5 | |
3302 lea rsi,[48+rsi] | |
3303 jmp NEAR $L$cbc_dec_tail_collected | |
3304 | |
3305 ALIGN 16 | |
3306 $L$cbc_dec_clear_tail_collected: | |
3307 pxor xmm3,xmm3 | |
3308 pxor xmm4,xmm4 | |
3309 pxor xmm5,xmm5 | |
3310 $L$cbc_dec_tail_collected: | |
3311 movups XMMWORD[r8],xmm10 | |
3312 and rdx,15 | |
3313 jnz NEAR $L$cbc_dec_tail_partial | |
3314 movups XMMWORD[rsi],xmm2 | |
3315 pxor xmm2,xmm2 | |
3316 jmp NEAR $L$cbc_dec_ret | |
3317 ALIGN 16 | |
3318 $L$cbc_dec_tail_partial: | |
3319 movaps XMMWORD[rsp],xmm2 | |
3320 pxor xmm2,xmm2 | |
3321 mov rcx,16 | |
3322 mov rdi,rsi | |
3323 sub rcx,rdx | |
3324 lea rsi,[rsp] | |
3325 DD 0x9066A4F3 | |
3326 movdqa XMMWORD[rsp],xmm2 | |
3327 | |
3328 $L$cbc_dec_ret: | |
3329 xorps xmm0,xmm0 | |
3330 pxor xmm1,xmm1 | |
3331 movaps xmm6,XMMWORD[16+rsp] | |
3332 movaps XMMWORD[16+rsp],xmm0 | |
3333 movaps xmm7,XMMWORD[32+rsp] | |
3334 movaps XMMWORD[32+rsp],xmm0 | |
3335 movaps xmm8,XMMWORD[48+rsp] | |
3336 movaps XMMWORD[48+rsp],xmm0 | |
3337 movaps xmm9,XMMWORD[64+rsp] | |
3338 movaps XMMWORD[64+rsp],xmm0 | |
3339 movaps xmm10,XMMWORD[80+rsp] | |
3340 movaps XMMWORD[80+rsp],xmm0 | |
3341 movaps xmm11,XMMWORD[96+rsp] | |
3342 movaps XMMWORD[96+rsp],xmm0 | |
3343 movaps xmm12,XMMWORD[112+rsp] | |
3344 movaps XMMWORD[112+rsp],xmm0 | |
3345 movaps xmm13,XMMWORD[128+rsp] | |
3346 movaps XMMWORD[128+rsp],xmm0 | |
3347 movaps xmm14,XMMWORD[144+rsp] | |
3348 movaps XMMWORD[144+rsp],xmm0 | |
3349 movaps xmm15,XMMWORD[160+rsp] | |
3350 movaps XMMWORD[160+rsp],xmm0 | |
3351 lea rsp,[rbp] | |
3352 pop rbp | |
3353 $L$cbc_ret: | |
3354 mov rdi,QWORD[8+rsp] ;WIN64 epilogue | |
3355 mov rsi,QWORD[16+rsp] | |
3356 DB 0F3h,0C3h ;repret | |
3357 $L$SEH_end_aesni_cbc_encrypt: | |
3358 global aesni_set_decrypt_key | |
3359 | |
3360 ALIGN 16 | |
3361 aesni_set_decrypt_key: | |
3362 DB 0x48,0x83,0xEC,0x08 | |
3363 call __aesni_set_encrypt_key | |
3364 shl edx,4 | |
3365 test eax,eax | |
3366 jnz NEAR $L$dec_key_ret | |
3367 lea rcx,[16+rdx*1+r8] | |
3368 | |
3369 movups xmm0,XMMWORD[r8] | |
3370 movups xmm1,XMMWORD[rcx] | |
3371 movups XMMWORD[rcx],xmm0 | |
3372 movups XMMWORD[r8],xmm1 | |
3373 lea r8,[16+r8] | |
3374 lea rcx,[((-16))+rcx] | |
3375 | |
3376 $L$dec_key_inverse: | |
3377 movups xmm0,XMMWORD[r8] | |
3378 movups xmm1,XMMWORD[rcx] | |
3379 DB 102,15,56,219,192 | |
3380 DB 102,15,56,219,201 | |
3381 lea r8,[16+r8] | |
3382 lea rcx,[((-16))+rcx] | |
3383 movups XMMWORD[16+rcx],xmm0 | |
3384 movups XMMWORD[(-16)+r8],xmm1 | |
3385 cmp rcx,r8 | |
3386 ja NEAR $L$dec_key_inverse | |
3387 | |
3388 movups xmm0,XMMWORD[r8] | |
3389 DB 102,15,56,219,192 | |
3390 pxor xmm1,xmm1 | |
3391 movups XMMWORD[rcx],xmm0 | |
3392 pxor xmm0,xmm0 | |
3393 $L$dec_key_ret: | |
3394 add rsp,8 | |
3395 DB 0F3h,0C3h ;repret | |
3396 $L$SEH_end_set_decrypt_key: | |
3397 | |
3398 global aesni_set_encrypt_key | |
3399 | |
3400 ALIGN 16 | |
3401 aesni_set_encrypt_key: | |
3402 __aesni_set_encrypt_key: | |
3403 DB 0x48,0x83,0xEC,0x08 | |
3404 mov rax,-1 | |
3405 test rcx,rcx | |
3406 jz NEAR $L$enc_key_ret | |
3407 test r8,r8 | |
3408 jz NEAR $L$enc_key_ret | |
3409 | |
3410 mov r10d,268437504 | |
3411 movups xmm0,XMMWORD[rcx] | |
3412 xorps xmm4,xmm4 | |
3413 and r10d,DWORD[((OPENSSL_ia32cap_P+4))] | |
3414 lea rax,[16+r8] | |
3415 cmp edx,256 | |
3416 je NEAR $L$14rounds | |
3417 cmp edx,192 | |
3418 je NEAR $L$12rounds | |
3419 cmp edx,128 | |
3420 jne NEAR $L$bad_keybits | |
3421 | |
3422 $L$10rounds: | |
3423 mov edx,9 | |
3424 cmp r10d,268435456 | |
3425 je NEAR $L$10rounds_alt | |
3426 | |
3427 movups XMMWORD[r8],xmm0 | |
3428 DB 102,15,58,223,200,1 | |
3429 call $L$key_expansion_128_cold | |
3430 DB 102,15,58,223,200,2 | |
3431 call $L$key_expansion_128 | |
3432 DB 102,15,58,223,200,4 | |
3433 call $L$key_expansion_128 | |
3434 DB 102,15,58,223,200,8 | |
3435 call $L$key_expansion_128 | |
3436 DB 102,15,58,223,200,16 | |
3437 call $L$key_expansion_128 | |
3438 DB 102,15,58,223,200,32 | |
3439 call $L$key_expansion_128 | |
3440 DB 102,15,58,223,200,64 | |
3441 call $L$key_expansion_128 | |
3442 DB 102,15,58,223,200,128 | |
3443 call $L$key_expansion_128 | |
3444 DB 102,15,58,223,200,27 | |
3445 call $L$key_expansion_128 | |
3446 DB 102,15,58,223,200,54 | |
3447 call $L$key_expansion_128 | |
3448 movups XMMWORD[rax],xmm0 | |
3449 mov DWORD[80+rax],edx | |
3450 xor eax,eax | |
3451 jmp NEAR $L$enc_key_ret | |
3452 | |
3453 ALIGN 16 | |
3454 $L$10rounds_alt: | |
3455 movdqa xmm5,XMMWORD[$L$key_rotate] | |
3456 mov r10d,8 | |
3457 movdqa xmm4,XMMWORD[$L$key_rcon1] | |
3458 movdqa xmm2,xmm0 | |
3459 movdqu XMMWORD[r8],xmm0 | |
3460 jmp NEAR $L$oop_key128 | |
3461 | |
3462 ALIGN 16 | |
3463 $L$oop_key128: | |
3464 DB 102,15,56,0,197 | |
3465 DB 102,15,56,221,196 | |
3466 pslld xmm4,1 | |
3467 lea rax,[16+rax] | |
3468 | |
3469 movdqa xmm3,xmm2 | |
3470 pslldq xmm2,4 | |
3471 pxor xmm3,xmm2 | |
3472 pslldq xmm2,4 | |
3473 pxor xmm3,xmm2 | |
3474 pslldq xmm2,4 | |
3475 pxor xmm2,xmm3 | |
3476 | |
3477 pxor xmm0,xmm2 | |
3478 movdqu XMMWORD[(-16)+rax],xmm0 | |
3479 movdqa xmm2,xmm0 | |
3480 | |
3481 dec r10d | |
3482 jnz NEAR $L$oop_key128 | |
3483 | |
3484 movdqa xmm4,XMMWORD[$L$key_rcon1b] | |
3485 | |
3486 DB 102,15,56,0,197 | |
3487 DB 102,15,56,221,196 | |
3488 pslld xmm4,1 | |
3489 | |
3490 movdqa xmm3,xmm2 | |
3491 pslldq xmm2,4 | |
3492 pxor xmm3,xmm2 | |
3493 pslldq xmm2,4 | |
3494 pxor xmm3,xmm2 | |
3495 pslldq xmm2,4 | |
3496 pxor xmm2,xmm3 | |
3497 | |
3498 pxor xmm0,xmm2 | |
3499 movdqu XMMWORD[rax],xmm0 | |
3500 | |
3501 movdqa xmm2,xmm0 | |
3502 DB 102,15,56,0,197 | |
3503 DB 102,15,56,221,196 | |
3504 | |
3505 movdqa xmm3,xmm2 | |
3506 pslldq xmm2,4 | |
3507 pxor xmm3,xmm2 | |
3508 pslldq xmm2,4 | |
3509 pxor xmm3,xmm2 | |
3510 pslldq xmm2,4 | |
3511 pxor xmm2,xmm3 | |
3512 | |
3513 pxor xmm0,xmm2 | |
3514 movdqu XMMWORD[16+rax],xmm0 | |
3515 | |
3516 mov DWORD[96+rax],edx | |
3517 xor eax,eax | |
3518 jmp NEAR $L$enc_key_ret | |
3519 | |
3520 ALIGN 16 | |
3521 $L$12rounds: | |
3522 movq xmm2,QWORD[16+rcx] | |
3523 mov edx,11 | |
3524 cmp r10d,268435456 | |
3525 je NEAR $L$12rounds_alt | |
3526 | |
3527 movups XMMWORD[r8],xmm0 | |
3528 DB 102,15,58,223,202,1 | |
3529 call $L$key_expansion_192a_cold | |
3530 DB 102,15,58,223,202,2 | |
3531 call $L$key_expansion_192b | |
3532 DB 102,15,58,223,202,4 | |
3533 call $L$key_expansion_192a | |
3534 DB 102,15,58,223,202,8 | |
3535 call $L$key_expansion_192b | |
3536 DB 102,15,58,223,202,16 | |
3537 call $L$key_expansion_192a | |
3538 DB 102,15,58,223,202,32 | |
3539 call $L$key_expansion_192b | |
3540 DB 102,15,58,223,202,64 | |
3541 call $L$key_expansion_192a | |
3542 DB 102,15,58,223,202,128 | |
3543 call $L$key_expansion_192b | |
3544 movups XMMWORD[rax],xmm0 | |
3545 mov DWORD[48+rax],edx | |
3546 xor rax,rax | |
3547 jmp NEAR $L$enc_key_ret | |
3548 | |
3549 ALIGN 16 | |
3550 $L$12rounds_alt: | |
3551 movdqa xmm5,XMMWORD[$L$key_rotate192] | |
3552 movdqa xmm4,XMMWORD[$L$key_rcon1] | |
3553 mov r10d,8 | |
3554 movdqu XMMWORD[r8],xmm0 | |
3555 jmp NEAR $L$oop_key192 | |
3556 | |
3557 ALIGN 16 | |
3558 $L$oop_key192: | |
3559 movq QWORD[rax],xmm2 | |
3560 movdqa xmm1,xmm2 | |
3561 DB 102,15,56,0,213 | |
3562 DB 102,15,56,221,212 | |
3563 pslld xmm4,1 | |
3564 lea rax,[24+rax] | |
3565 | |
3566 movdqa xmm3,xmm0 | |
3567 pslldq xmm0,4 | |
3568 pxor xmm3,xmm0 | |
3569 pslldq xmm0,4 | |
3570 pxor xmm3,xmm0 | |
3571 pslldq xmm0,4 | |
3572 pxor xmm0,xmm3 | |
3573 | |
3574 pshufd xmm3,xmm0,0xff | |
3575 pxor xmm3,xmm1 | |
3576 pslldq xmm1,4 | |
3577 pxor xmm3,xmm1 | |
3578 | |
3579 pxor xmm0,xmm2 | |
3580 pxor xmm2,xmm3 | |
3581 movdqu XMMWORD[(-16)+rax],xmm0 | |
3582 | |
3583 dec r10d | |
3584 jnz NEAR $L$oop_key192 | |
3585 | |
3586 mov DWORD[32+rax],edx | |
3587 xor eax,eax | |
3588 jmp NEAR $L$enc_key_ret | |
3589 | |
3590 ALIGN 16 | |
3591 $L$14rounds: | |
3592 movups xmm2,XMMWORD[16+rcx] | |
3593 mov edx,13 | |
3594 lea rax,[16+rax] | |
3595 cmp r10d,268435456 | |
3596 je NEAR $L$14rounds_alt | |
3597 | |
3598 movups XMMWORD[r8],xmm0 | |
3599 movups XMMWORD[16+r8],xmm2 | |
3600 DB 102,15,58,223,202,1 | |
3601 call $L$key_expansion_256a_cold | |
3602 DB 102,15,58,223,200,1 | |
3603 call $L$key_expansion_256b | |
3604 DB 102,15,58,223,202,2 | |
3605 call $L$key_expansion_256a | |
3606 DB 102,15,58,223,200,2 | |
3607 call $L$key_expansion_256b | |
3608 DB 102,15,58,223,202,4 | |
3609 call $L$key_expansion_256a | |
3610 DB 102,15,58,223,200,4 | |
3611 call $L$key_expansion_256b | |
3612 DB 102,15,58,223,202,8 | |
3613 call $L$key_expansion_256a | |
3614 DB 102,15,58,223,200,8 | |
3615 call $L$key_expansion_256b | |
3616 DB 102,15,58,223,202,16 | |
3617 call $L$key_expansion_256a | |
3618 DB 102,15,58,223,200,16 | |
3619 call $L$key_expansion_256b | |
3620 DB 102,15,58,223,202,32 | |
3621 call $L$key_expansion_256a | |
3622 DB 102,15,58,223,200,32 | |
3623 call $L$key_expansion_256b | |
3624 DB 102,15,58,223,202,64 | |
3625 call $L$key_expansion_256a | |
3626 movups XMMWORD[rax],xmm0 | |
3627 mov DWORD[16+rax],edx | |
3628 xor rax,rax | |
3629 jmp NEAR $L$enc_key_ret | |
3630 | |
3631 ALIGN 16 | |
3632 $L$14rounds_alt: | |
3633 movdqa xmm5,XMMWORD[$L$key_rotate] | |
3634 movdqa xmm4,XMMWORD[$L$key_rcon1] | |
3635 mov r10d,7 | |
3636 movdqu XMMWORD[r8],xmm0 | |
3637 movdqa xmm1,xmm2 | |
3638 movdqu XMMWORD[16+r8],xmm2 | |
3639 jmp NEAR $L$oop_key256 | |
3640 | |
3641 ALIGN 16 | |
3642 $L$oop_key256: | |
3643 DB 102,15,56,0,213 | |
3644 DB 102,15,56,221,212 | |
3645 | |
3646 movdqa xmm3,xmm0 | |
3647 pslldq xmm0,4 | |
3648 pxor xmm3,xmm0 | |
3649 pslldq xmm0,4 | |
3650 pxor xmm3,xmm0 | |
3651 pslldq xmm0,4 | |
3652 pxor xmm0,xmm3 | |
3653 pslld xmm4,1 | |
3654 | |
3655 pxor xmm0,xmm2 | |
3656 movdqu XMMWORD[rax],xmm0 | |
3657 | |
3658 dec r10d | |
3659 jz NEAR $L$done_key256 | |
3660 | |
3661 pshufd xmm2,xmm0,0xff | |
3662 pxor xmm3,xmm3 | |
3663 DB 102,15,56,221,211 | |
3664 | |
3665 movdqa xmm3,xmm1 | |
3666 pslldq xmm1,4 | |
3667 pxor xmm3,xmm1 | |
3668 pslldq xmm1,4 | |
3669 pxor xmm3,xmm1 | |
3670 pslldq xmm1,4 | |
3671 pxor xmm1,xmm3 | |
3672 | |
3673 pxor xmm2,xmm1 | |
3674 movdqu XMMWORD[16+rax],xmm2 | |
3675 lea rax,[32+rax] | |
3676 movdqa xmm1,xmm2 | |
3677 | |
3678 jmp NEAR $L$oop_key256 | |
3679 | |
3680 $L$done_key256: | |
3681 mov DWORD[16+rax],edx | |
3682 xor eax,eax | |
3683 jmp NEAR $L$enc_key_ret | |
3684 | |
3685 ALIGN 16 | |
3686 $L$bad_keybits: | |
3687 mov rax,-2 | |
3688 $L$enc_key_ret: | |
3689 pxor xmm0,xmm0 | |
3690 pxor xmm1,xmm1 | |
3691 pxor xmm2,xmm2 | |
3692 pxor xmm3,xmm3 | |
3693 pxor xmm4,xmm4 | |
3694 pxor xmm5,xmm5 | |
3695 add rsp,8 | |
3696 DB 0F3h,0C3h ;repret | |
3697 $L$SEH_end_set_encrypt_key: | |
3698 | |
3699 ALIGN 16 | |
3700 $L$key_expansion_128: | |
3701 movups XMMWORD[rax],xmm0 | |
3702 lea rax,[16+rax] | |
3703 $L$key_expansion_128_cold: | |
3704 shufps xmm4,xmm0,16 | |
3705 xorps xmm0,xmm4 | |
3706 shufps xmm4,xmm0,140 | |
3707 xorps xmm0,xmm4 | |
3708 shufps xmm1,xmm1,255 | |
3709 xorps xmm0,xmm1 | |
3710 DB 0F3h,0C3h ;repret | |
3711 | |
3712 ALIGN 16 | |
3713 $L$key_expansion_192a: | |
3714 movups XMMWORD[rax],xmm0 | |
3715 lea rax,[16+rax] | |
3716 $L$key_expansion_192a_cold: | |
3717 movaps xmm5,xmm2 | |
3718 $L$key_expansion_192b_warm: | |
3719 shufps xmm4,xmm0,16 | |
3720 movdqa xmm3,xmm2 | |
3721 xorps xmm0,xmm4 | |
3722 shufps xmm4,xmm0,140 | |
3723 pslldq xmm3,4 | |
3724 xorps xmm0,xmm4 | |
3725 pshufd xmm1,xmm1,85 | |
3726 pxor xmm2,xmm3 | |
3727 pxor xmm0,xmm1 | |
3728 pshufd xmm3,xmm0,255 | |
3729 pxor xmm2,xmm3 | |
3730 DB 0F3h,0C3h ;repret | |
3731 | |
3732 ALIGN 16 | |
3733 $L$key_expansion_192b: | |
3734 movaps xmm3,xmm0 | |
3735 shufps xmm5,xmm0,68 | |
3736 movups XMMWORD[rax],xmm5 | |
3737 shufps xmm3,xmm2,78 | |
3738 movups XMMWORD[16+rax],xmm3 | |
3739 lea rax,[32+rax] | |
3740 jmp NEAR $L$key_expansion_192b_warm | |
3741 | |
3742 ALIGN 16 | |
3743 $L$key_expansion_256a: | |
3744 movups XMMWORD[rax],xmm2 | |
3745 lea rax,[16+rax] | |
3746 $L$key_expansion_256a_cold: | |
3747 shufps xmm4,xmm0,16 | |
3748 xorps xmm0,xmm4 | |
3749 shufps xmm4,xmm0,140 | |
3750 xorps xmm0,xmm4 | |
3751 shufps xmm1,xmm1,255 | |
3752 xorps xmm0,xmm1 | |
3753 DB 0F3h,0C3h ;repret | |
3754 | |
3755 ALIGN 16 | |
3756 $L$key_expansion_256b: | |
3757 movups XMMWORD[rax],xmm0 | |
3758 lea rax,[16+rax] | |
3759 | |
3760 shufps xmm4,xmm2,16 | |
3761 xorps xmm2,xmm4 | |
3762 shufps xmm4,xmm2,140 | |
3763 xorps xmm2,xmm4 | |
3764 shufps xmm1,xmm1,170 | |
3765 xorps xmm2,xmm1 | |
3766 DB 0F3h,0C3h ;repret | |
3767 | |
3768 | |
3769 ALIGN 64 | |
3770 $L$bswap_mask: | |
3771 DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 | |
3772 $L$increment32: | |
3773 DD 6,6,6,0 | |
3774 $L$increment64: | |
3775 DD 1,0,0,0 | |
3776 $L$xts_magic: | |
3777 DD 0x87,0,1,0 | |
3778 $L$increment1: | |
3779 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 | |
3780 $L$key_rotate: | |
3781 DD 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d | |
3782 $L$key_rotate192: | |
3783 DD 0x04070605,0x04070605,0x04070605,0x04070605 | |
3784 $L$key_rcon1: | |
3785 DD 1,1,1,1 | |
3786 $L$key_rcon1b: | |
3787 DD 0x1b,0x1b,0x1b,0x1b | |
3788 | |
3789 DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 | |
3790 DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 | |
3791 DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 | |
3792 DB 115,108,46,111,114,103,62,0 | |
3793 ALIGN 64 | |
3794 EXTERN __imp_RtlVirtualUnwind | |
3795 | |
3796 ALIGN 16 | |
3797 ecb_ccm64_se_handler: | |
3798 push rsi | |
3799 push rdi | |
3800 push rbx | |
3801 push rbp | |
3802 push r12 | |
3803 push r13 | |
3804 push r14 | |
3805 push r15 | |
3806 pushfq | |
3807 sub rsp,64 | |
3808 | |
3809 mov rax,QWORD[120+r8] | |
3810 mov rbx,QWORD[248+r8] | |
3811 | |
3812 mov rsi,QWORD[8+r9] | |
3813 mov r11,QWORD[56+r9] | |
3814 | |
3815 mov r10d,DWORD[r11] | |
3816 lea r10,[r10*1+rsi] | |
3817 cmp rbx,r10 | |
3818 jb NEAR $L$common_seh_tail | |
3819 | |
3820 mov rax,QWORD[152+r8] | |
3821 | |
3822 mov r10d,DWORD[4+r11] | |
3823 lea r10,[r10*1+rsi] | |
3824 cmp rbx,r10 | |
3825 jae NEAR $L$common_seh_tail | |
3826 | |
3827 lea rsi,[rax] | |
3828 lea rdi,[512+r8] | |
3829 mov ecx,8 | |
3830 DD 0xa548f3fc | |
3831 lea rax,[88+rax] | |
3832 | |
3833 jmp NEAR $L$common_seh_tail | |
3834 | |
3835 | |
3836 | |
3837 ALIGN 16 | |
3838 ctr_xts_se_handler: | |
3839 push rsi | |
3840 push rdi | |
3841 push rbx | |
3842 push rbp | |
3843 push r12 | |
3844 push r13 | |
3845 push r14 | |
3846 push r15 | |
3847 pushfq | |
3848 sub rsp,64 | |
3849 | |
3850 mov rax,QWORD[120+r8] | |
3851 mov rbx,QWORD[248+r8] | |
3852 | |
3853 mov rsi,QWORD[8+r9] | |
3854 mov r11,QWORD[56+r9] | |
3855 | |
3856 mov r10d,DWORD[r11] | |
3857 lea r10,[r10*1+rsi] | |
3858 cmp rbx,r10 | |
3859 jb NEAR $L$common_seh_tail | |
3860 | |
3861 mov rax,QWORD[152+r8] | |
3862 | |
3863 mov r10d,DWORD[4+r11] | |
3864 lea r10,[r10*1+rsi] | |
3865 cmp rbx,r10 | |
3866 jae NEAR $L$common_seh_tail | |
3867 | |
3868 mov rax,QWORD[160+r8] | |
3869 lea rsi,[((-160))+rax] | |
3870 lea rdi,[512+r8] | |
3871 mov ecx,20 | |
3872 DD 0xa548f3fc | |
3873 | |
3874 jmp NEAR $L$common_rbp_tail | |
3875 | |
3876 | |
3877 ALIGN 16 | |
3878 cbc_se_handler: | |
3879 push rsi | |
3880 push rdi | |
3881 push rbx | |
3882 push rbp | |
3883 push r12 | |
3884 push r13 | |
3885 push r14 | |
3886 push r15 | |
3887 pushfq | |
3888 sub rsp,64 | |
3889 | |
3890 mov rax,QWORD[152+r8] | |
3891 mov rbx,QWORD[248+r8] | |
3892 | |
3893 lea r10,[$L$cbc_decrypt_bulk] | |
3894 cmp rbx,r10 | |
3895 jb NEAR $L$common_seh_tail | |
3896 | |
3897 lea r10,[$L$cbc_decrypt_body] | |
3898 cmp rbx,r10 | |
3899 jb NEAR $L$restore_cbc_rax | |
3900 | |
3901 lea r10,[$L$cbc_ret] | |
3902 cmp rbx,r10 | |
3903 jae NEAR $L$common_seh_tail | |
3904 | |
3905 lea rsi,[16+rax] | |
3906 lea rdi,[512+r8] | |
3907 mov ecx,20 | |
3908 DD 0xa548f3fc | |
3909 | |
3910 $L$common_rbp_tail: | |
3911 mov rax,QWORD[160+r8] | |
3912 mov rbp,QWORD[rax] | |
3913 lea rax,[8+rax] | |
3914 mov QWORD[160+r8],rbp | |
3915 jmp NEAR $L$common_seh_tail | |
3916 | |
3917 $L$restore_cbc_rax: | |
3918 mov rax,QWORD[120+r8] | |
3919 | |
3920 $L$common_seh_tail: | |
3921 mov rdi,QWORD[8+rax] | |
3922 mov rsi,QWORD[16+rax] | |
3923 mov QWORD[152+r8],rax | |
3924 mov QWORD[168+r8],rsi | |
3925 mov QWORD[176+r8],rdi | |
3926 | |
3927 mov rdi,QWORD[40+r9] | |
3928 mov rsi,r8 | |
3929 mov ecx,154 | |
3930 DD 0xa548f3fc | |
3931 | |
3932 mov rsi,r9 | |
3933 xor rcx,rcx | |
3934 mov rdx,QWORD[8+rsi] | |
3935 mov r8,QWORD[rsi] | |
3936 mov r9,QWORD[16+rsi] | |
3937 mov r10,QWORD[40+rsi] | |
3938 lea r11,[56+rsi] | |
3939 lea r12,[24+rsi] | |
3940 mov QWORD[32+rsp],r10 | |
3941 mov QWORD[40+rsp],r11 | |
3942 mov QWORD[48+rsp],r12 | |
3943 mov QWORD[56+rsp],rcx | |
3944 call QWORD[__imp_RtlVirtualUnwind] | |
3945 | |
3946 mov eax,1 | |
3947 add rsp,64 | |
3948 popfq | |
3949 pop r15 | |
3950 pop r14 | |
3951 pop r13 | |
3952 pop r12 | |
3953 pop rbp | |
3954 pop rbx | |
3955 pop rdi | |
3956 pop rsi | |
3957 DB 0F3h,0C3h ;repret | |
3958 | |
3959 | |
3960 section .pdata rdata align=4 | |
3961 ALIGN 4 | |
3962 DD $L$SEH_begin_aesni_ecb_encrypt wrt ..imagebase | |
3963 DD $L$SEH_end_aesni_ecb_encrypt wrt ..imagebase | |
3964 DD $L$SEH_info_ecb wrt ..imagebase | |
3965 | |
3966 DD $L$SEH_begin_aesni_ccm64_encrypt_blocks wrt ..imagebase | |
3967 DD $L$SEH_end_aesni_ccm64_encrypt_blocks wrt ..imagebase | |
3968 DD $L$SEH_info_ccm64_enc wrt ..imagebase | |
3969 | |
3970 DD $L$SEH_begin_aesni_ccm64_decrypt_blocks wrt ..imagebase | |
3971 DD $L$SEH_end_aesni_ccm64_decrypt_blocks wrt ..imagebase | |
3972 DD $L$SEH_info_ccm64_dec wrt ..imagebase | |
3973 | |
3974 DD $L$SEH_begin_aesni_ctr32_encrypt_blocks wrt ..imagebase | |
3975 DD $L$SEH_end_aesni_ctr32_encrypt_blocks wrt ..imagebase | |
3976 DD $L$SEH_info_ctr32 wrt ..imagebase | |
3977 | |
3978 DD $L$SEH_begin_aesni_xts_encrypt wrt ..imagebase | |
3979 DD $L$SEH_end_aesni_xts_encrypt wrt ..imagebase | |
3980 DD $L$SEH_info_xts_enc wrt ..imagebase | |
3981 | |
3982 DD $L$SEH_begin_aesni_xts_decrypt wrt ..imagebase | |
3983 DD $L$SEH_end_aesni_xts_decrypt wrt ..imagebase | |
3984 DD $L$SEH_info_xts_dec wrt ..imagebase | |
3985 DD $L$SEH_begin_aesni_cbc_encrypt wrt ..imagebase | |
3986 DD $L$SEH_end_aesni_cbc_encrypt wrt ..imagebase | |
3987 DD $L$SEH_info_cbc wrt ..imagebase | |
3988 | |
3989 DD aesni_set_decrypt_key wrt ..imagebase | |
3990 DD $L$SEH_end_set_decrypt_key wrt ..imagebase | |
3991 DD $L$SEH_info_key wrt ..imagebase | |
3992 | |
3993 DD aesni_set_encrypt_key wrt ..imagebase | |
3994 DD $L$SEH_end_set_encrypt_key wrt ..imagebase | |
3995 DD $L$SEH_info_key wrt ..imagebase | |
3996 section .xdata rdata align=8 | |
3997 ALIGN 8 | |
3998 $L$SEH_info_ecb: | |
3999 DB 9,0,0,0 | |
4000 DD ecb_ccm64_se_handler wrt ..imagebase | |
4001 DD $L$ecb_enc_body wrt ..imagebase,$L$ecb_enc_ret wrt ..imagebase | |
4002 $L$SEH_info_ccm64_enc: | |
4003 DB 9,0,0,0 | |
4004 DD ecb_ccm64_se_handler wrt ..imagebase | |
4005 DD $L$ccm64_enc_body wrt ..imagebase,$L$ccm64_enc_ret wrt ..imageba
se | |
4006 $L$SEH_info_ccm64_dec: | |
4007 DB 9,0,0,0 | |
4008 DD ecb_ccm64_se_handler wrt ..imagebase | |
4009 DD $L$ccm64_dec_body wrt ..imagebase,$L$ccm64_dec_ret wrt ..imageba
se | |
4010 $L$SEH_info_ctr32: | |
4011 DB 9,0,0,0 | |
4012 DD ctr_xts_se_handler wrt ..imagebase | |
4013 DD $L$ctr32_body wrt ..imagebase,$L$ctr32_epilogue wrt ..imagebase | |
4014 $L$SEH_info_xts_enc: | |
4015 DB 9,0,0,0 | |
4016 DD ctr_xts_se_handler wrt ..imagebase | |
4017 DD $L$xts_enc_body wrt ..imagebase,$L$xts_enc_epilogue wrt ..imageb
ase | |
4018 $L$SEH_info_xts_dec: | |
4019 DB 9,0,0,0 | |
4020 DD ctr_xts_se_handler wrt ..imagebase | |
4021 DD $L$xts_dec_body wrt ..imagebase,$L$xts_dec_epilogue wrt ..imageb
ase | |
4022 $L$SEH_info_cbc: | |
4023 DB 9,0,0,0 | |
4024 DD cbc_se_handler wrt ..imagebase | |
4025 $L$SEH_info_key: | |
4026 DB 0x01,0x04,0x01,0x00 | |
4027 DB 0x04,0x02,0x00,0x00 | |
OLD | NEW |