blob: 9ea8253d7c70166655acfa819c7e3bf2b55ec9f5 [file] [log] [blame]
Adam Langleye9ada862015-05-11 17:20:37 -07001default rel
2%define XMMWORD
3%define YMMWORD
4%define ZMMWORD
5section .text code align=64
Adam Langleyd9e397b2015-01-22 14:27:53 -08006
Adam Langleye9ada862015-05-11 17:20:37 -07007
8EXTERN asm_AES_encrypt
9EXTERN asm_AES_decrypt
Adam Langleyd9e397b2015-01-22 14:27:53 -080010
11
12ALIGN 64
Adam Langleye9ada862015-05-11 17:20:37 -070013_bsaes_encrypt8:
14 lea r11,[$L$BS0]
Adam Langleyd9e397b2015-01-22 14:27:53 -080015
Adam Langleye9ada862015-05-11 17:20:37 -070016 movdqa xmm8,XMMWORD[rax]
17 lea rax,[16+rax]
18 movdqa xmm7,XMMWORD[80+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -080019 pxor xmm15,xmm8
20 pxor xmm0,xmm8
21 pxor xmm1,xmm8
22 pxor xmm2,xmm8
23DB 102,68,15,56,0,255
24DB 102,15,56,0,199
25 pxor xmm3,xmm8
26 pxor xmm4,xmm8
27DB 102,15,56,0,207
28DB 102,15,56,0,215
29 pxor xmm5,xmm8
30 pxor xmm6,xmm8
31DB 102,15,56,0,223
32DB 102,15,56,0,231
33DB 102,15,56,0,239
34DB 102,15,56,0,247
Adam Langleye9ada862015-05-11 17:20:37 -070035_bsaes_encrypt8_bitslice:
36 movdqa xmm7,XMMWORD[r11]
37 movdqa xmm8,XMMWORD[16+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -080038 movdqa xmm9,xmm5
39 psrlq xmm5,1
40 movdqa xmm10,xmm3
41 psrlq xmm3,1
42 pxor xmm5,xmm6
43 pxor xmm3,xmm4
44 pand xmm5,xmm7
45 pand xmm3,xmm7
46 pxor xmm6,xmm5
47 psllq xmm5,1
48 pxor xmm4,xmm3
49 psllq xmm3,1
50 pxor xmm5,xmm9
51 pxor xmm3,xmm10
52 movdqa xmm9,xmm1
53 psrlq xmm1,1
54 movdqa xmm10,xmm15
55 psrlq xmm15,1
56 pxor xmm1,xmm2
57 pxor xmm15,xmm0
58 pand xmm1,xmm7
59 pand xmm15,xmm7
60 pxor xmm2,xmm1
61 psllq xmm1,1
62 pxor xmm0,xmm15
63 psllq xmm15,1
64 pxor xmm1,xmm9
65 pxor xmm15,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -070066 movdqa xmm7,XMMWORD[32+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -080067 movdqa xmm9,xmm4
68 psrlq xmm4,2
69 movdqa xmm10,xmm3
70 psrlq xmm3,2
71 pxor xmm4,xmm6
72 pxor xmm3,xmm5
73 pand xmm4,xmm8
74 pand xmm3,xmm8
75 pxor xmm6,xmm4
76 psllq xmm4,2
77 pxor xmm5,xmm3
78 psllq xmm3,2
79 pxor xmm4,xmm9
80 pxor xmm3,xmm10
81 movdqa xmm9,xmm0
82 psrlq xmm0,2
83 movdqa xmm10,xmm15
84 psrlq xmm15,2
85 pxor xmm0,xmm2
86 pxor xmm15,xmm1
87 pand xmm0,xmm8
88 pand xmm15,xmm8
89 pxor xmm2,xmm0
90 psllq xmm0,2
91 pxor xmm1,xmm15
92 psllq xmm15,2
93 pxor xmm0,xmm9
94 pxor xmm15,xmm10
95 movdqa xmm9,xmm2
96 psrlq xmm2,4
97 movdqa xmm10,xmm1
98 psrlq xmm1,4
99 pxor xmm2,xmm6
100 pxor xmm1,xmm5
101 pand xmm2,xmm7
102 pand xmm1,xmm7
103 pxor xmm6,xmm2
104 psllq xmm2,4
105 pxor xmm5,xmm1
106 psllq xmm1,4
107 pxor xmm2,xmm9
108 pxor xmm1,xmm10
109 movdqa xmm9,xmm0
110 psrlq xmm0,4
111 movdqa xmm10,xmm15
112 psrlq xmm15,4
113 pxor xmm0,xmm4
114 pxor xmm15,xmm3
115 pand xmm0,xmm7
116 pand xmm15,xmm7
117 pxor xmm4,xmm0
118 psllq xmm0,4
119 pxor xmm3,xmm15
120 psllq xmm15,4
121 pxor xmm0,xmm9
122 pxor xmm15,xmm10
123 dec r10d
Adam Langleye9ada862015-05-11 17:20:37 -0700124 jmp NEAR $L$enc_sbox
Adam Langleyd9e397b2015-01-22 14:27:53 -0800125ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700126$L$enc_loop:
127 pxor xmm15,XMMWORD[rax]
128 pxor xmm0,XMMWORD[16+rax]
129 pxor xmm1,XMMWORD[32+rax]
130 pxor xmm2,XMMWORD[48+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800131DB 102,68,15,56,0,255
132DB 102,15,56,0,199
Adam Langleye9ada862015-05-11 17:20:37 -0700133 pxor xmm3,XMMWORD[64+rax]
134 pxor xmm4,XMMWORD[80+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800135DB 102,15,56,0,207
136DB 102,15,56,0,215
Adam Langleye9ada862015-05-11 17:20:37 -0700137 pxor xmm5,XMMWORD[96+rax]
138 pxor xmm6,XMMWORD[112+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800139DB 102,15,56,0,223
140DB 102,15,56,0,231
141DB 102,15,56,0,239
142DB 102,15,56,0,247
Adam Langleye9ada862015-05-11 17:20:37 -0700143 lea rax,[128+rax]
144$L$enc_sbox:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800145 pxor xmm4,xmm5
146 pxor xmm1,xmm0
147 pxor xmm2,xmm15
148 pxor xmm5,xmm1
149 pxor xmm4,xmm15
150
151 pxor xmm5,xmm2
152 pxor xmm2,xmm6
153 pxor xmm6,xmm4
154 pxor xmm2,xmm3
155 pxor xmm3,xmm4
156 pxor xmm2,xmm0
157
158 pxor xmm1,xmm6
159 pxor xmm0,xmm4
160 movdqa xmm10,xmm6
161 movdqa xmm9,xmm0
162 movdqa xmm8,xmm4
163 movdqa xmm12,xmm1
164 movdqa xmm11,xmm5
165
166 pxor xmm10,xmm3
167 pxor xmm9,xmm1
168 pxor xmm8,xmm2
169 movdqa xmm13,xmm10
170 pxor xmm12,xmm3
171 movdqa xmm7,xmm9
172 pxor xmm11,xmm15
173 movdqa xmm14,xmm10
174
175 por xmm9,xmm8
176 por xmm10,xmm11
177 pxor xmm14,xmm7
178 pand xmm13,xmm11
179 pxor xmm11,xmm8
180 pand xmm7,xmm8
181 pand xmm14,xmm11
182 movdqa xmm11,xmm2
183 pxor xmm11,xmm15
184 pand xmm12,xmm11
185 pxor xmm10,xmm12
186 pxor xmm9,xmm12
187 movdqa xmm12,xmm6
188 movdqa xmm11,xmm4
189 pxor xmm12,xmm0
190 pxor xmm11,xmm5
191 movdqa xmm8,xmm12
192 pand xmm12,xmm11
193 por xmm8,xmm11
194 pxor xmm7,xmm12
195 pxor xmm10,xmm14
196 pxor xmm9,xmm13
197 pxor xmm8,xmm14
198 movdqa xmm11,xmm1
199 pxor xmm7,xmm13
200 movdqa xmm12,xmm3
201 pxor xmm8,xmm13
202 movdqa xmm13,xmm0
203 pand xmm11,xmm2
204 movdqa xmm14,xmm6
205 pand xmm12,xmm15
206 pand xmm13,xmm4
207 por xmm14,xmm5
208 pxor xmm10,xmm11
209 pxor xmm9,xmm12
210 pxor xmm8,xmm13
211 pxor xmm7,xmm14
212
213
214
215
216
217 movdqa xmm11,xmm10
218 pand xmm10,xmm8
219 pxor xmm11,xmm9
220
221 movdqa xmm13,xmm7
222 movdqa xmm14,xmm11
223 pxor xmm13,xmm10
224 pand xmm14,xmm13
225
226 movdqa xmm12,xmm8
227 pxor xmm14,xmm9
228 pxor xmm12,xmm7
229
230 pxor xmm10,xmm9
231
232 pand xmm12,xmm10
233
234 movdqa xmm9,xmm13
235 pxor xmm12,xmm7
236
237 pxor xmm9,xmm12
238 pxor xmm8,xmm12
239
240 pand xmm9,xmm7
241
242 pxor xmm13,xmm9
243 pxor xmm8,xmm9
244
245 pand xmm13,xmm14
246
247 pxor xmm13,xmm11
248 movdqa xmm11,xmm5
249 movdqa xmm7,xmm4
250 movdqa xmm9,xmm14
251 pxor xmm9,xmm13
252 pand xmm9,xmm5
253 pxor xmm5,xmm4
254 pand xmm4,xmm14
255 pand xmm5,xmm13
256 pxor xmm5,xmm4
257 pxor xmm4,xmm9
258 pxor xmm11,xmm15
259 pxor xmm7,xmm2
260 pxor xmm14,xmm12
261 pxor xmm13,xmm8
262 movdqa xmm10,xmm14
263 movdqa xmm9,xmm12
264 pxor xmm10,xmm13
265 pxor xmm9,xmm8
266 pand xmm10,xmm11
267 pand xmm9,xmm15
268 pxor xmm11,xmm7
269 pxor xmm15,xmm2
270 pand xmm7,xmm14
271 pand xmm2,xmm12
272 pand xmm11,xmm13
273 pand xmm15,xmm8
274 pxor xmm7,xmm11
275 pxor xmm15,xmm2
276 pxor xmm11,xmm10
277 pxor xmm2,xmm9
278 pxor xmm5,xmm11
279 pxor xmm15,xmm11
280 pxor xmm4,xmm7
281 pxor xmm2,xmm7
282
283 movdqa xmm11,xmm6
284 movdqa xmm7,xmm0
285 pxor xmm11,xmm3
286 pxor xmm7,xmm1
287 movdqa xmm10,xmm14
288 movdqa xmm9,xmm12
289 pxor xmm10,xmm13
290 pxor xmm9,xmm8
291 pand xmm10,xmm11
292 pand xmm9,xmm3
293 pxor xmm11,xmm7
294 pxor xmm3,xmm1
295 pand xmm7,xmm14
296 pand xmm1,xmm12
297 pand xmm11,xmm13
298 pand xmm3,xmm8
299 pxor xmm7,xmm11
300 pxor xmm3,xmm1
301 pxor xmm11,xmm10
302 pxor xmm1,xmm9
303 pxor xmm14,xmm12
304 pxor xmm13,xmm8
305 movdqa xmm10,xmm14
306 pxor xmm10,xmm13
307 pand xmm10,xmm6
308 pxor xmm6,xmm0
309 pand xmm0,xmm14
310 pand xmm6,xmm13
311 pxor xmm6,xmm0
312 pxor xmm0,xmm10
313 pxor xmm6,xmm11
314 pxor xmm3,xmm11
315 pxor xmm0,xmm7
316 pxor xmm1,xmm7
317 pxor xmm6,xmm15
318 pxor xmm0,xmm5
319 pxor xmm3,xmm6
320 pxor xmm5,xmm15
321 pxor xmm15,xmm0
322
323 pxor xmm0,xmm4
324 pxor xmm4,xmm1
325 pxor xmm1,xmm2
326 pxor xmm2,xmm4
327 pxor xmm3,xmm4
328
329 pxor xmm5,xmm2
330 dec r10d
Adam Langleye9ada862015-05-11 17:20:37 -0700331 jl NEAR $L$enc_done
332 pshufd xmm7,xmm15,0x93
333 pshufd xmm8,xmm0,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800334 pxor xmm15,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -0700335 pshufd xmm9,xmm3,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800336 pxor xmm0,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -0700337 pshufd xmm10,xmm5,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800338 pxor xmm3,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -0700339 pshufd xmm11,xmm2,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800340 pxor xmm5,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -0700341 pshufd xmm12,xmm6,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800342 pxor xmm2,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -0700343 pshufd xmm13,xmm1,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800344 pxor xmm6,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -0700345 pshufd xmm14,xmm4,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800346 pxor xmm1,xmm13
347 pxor xmm4,xmm14
348
349 pxor xmm8,xmm15
350 pxor xmm7,xmm4
351 pxor xmm8,xmm4
Adam Langleye9ada862015-05-11 17:20:37 -0700352 pshufd xmm15,xmm15,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800353 pxor xmm9,xmm0
Adam Langleye9ada862015-05-11 17:20:37 -0700354 pshufd xmm0,xmm0,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800355 pxor xmm12,xmm2
356 pxor xmm15,xmm7
357 pxor xmm13,xmm6
358 pxor xmm0,xmm8
359 pxor xmm11,xmm5
Adam Langleye9ada862015-05-11 17:20:37 -0700360 pshufd xmm7,xmm2,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800361 pxor xmm14,xmm1
Adam Langleye9ada862015-05-11 17:20:37 -0700362 pshufd xmm8,xmm6,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800363 pxor xmm10,xmm3
Adam Langleye9ada862015-05-11 17:20:37 -0700364 pshufd xmm2,xmm5,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800365 pxor xmm10,xmm4
Adam Langleye9ada862015-05-11 17:20:37 -0700366 pshufd xmm6,xmm4,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800367 pxor xmm11,xmm4
Adam Langleye9ada862015-05-11 17:20:37 -0700368 pshufd xmm5,xmm1,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800369 pxor xmm7,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -0700370 pshufd xmm1,xmm3,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800371 pxor xmm8,xmm12
372 pxor xmm2,xmm10
373 pxor xmm6,xmm14
374 pxor xmm5,xmm13
375 movdqa xmm3,xmm7
376 pxor xmm1,xmm9
377 movdqa xmm4,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -0700378 movdqa xmm7,XMMWORD[48+r11]
379 jnz NEAR $L$enc_loop
380 movdqa xmm7,XMMWORD[64+r11]
381 jmp NEAR $L$enc_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -0800382ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700383$L$enc_done:
384 movdqa xmm7,XMMWORD[r11]
385 movdqa xmm8,XMMWORD[16+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800386 movdqa xmm9,xmm1
387 psrlq xmm1,1
388 movdqa xmm10,xmm2
389 psrlq xmm2,1
390 pxor xmm1,xmm4
391 pxor xmm2,xmm6
392 pand xmm1,xmm7
393 pand xmm2,xmm7
394 pxor xmm4,xmm1
395 psllq xmm1,1
396 pxor xmm6,xmm2
397 psllq xmm2,1
398 pxor xmm1,xmm9
399 pxor xmm2,xmm10
400 movdqa xmm9,xmm3
401 psrlq xmm3,1
402 movdqa xmm10,xmm15
403 psrlq xmm15,1
404 pxor xmm3,xmm5
405 pxor xmm15,xmm0
406 pand xmm3,xmm7
407 pand xmm15,xmm7
408 pxor xmm5,xmm3
409 psllq xmm3,1
410 pxor xmm0,xmm15
411 psllq xmm15,1
412 pxor xmm3,xmm9
413 pxor xmm15,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -0700414 movdqa xmm7,XMMWORD[32+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800415 movdqa xmm9,xmm6
416 psrlq xmm6,2
417 movdqa xmm10,xmm2
418 psrlq xmm2,2
419 pxor xmm6,xmm4
420 pxor xmm2,xmm1
421 pand xmm6,xmm8
422 pand xmm2,xmm8
423 pxor xmm4,xmm6
424 psllq xmm6,2
425 pxor xmm1,xmm2
426 psllq xmm2,2
427 pxor xmm6,xmm9
428 pxor xmm2,xmm10
429 movdqa xmm9,xmm0
430 psrlq xmm0,2
431 movdqa xmm10,xmm15
432 psrlq xmm15,2
433 pxor xmm0,xmm5
434 pxor xmm15,xmm3
435 pand xmm0,xmm8
436 pand xmm15,xmm8
437 pxor xmm5,xmm0
438 psllq xmm0,2
439 pxor xmm3,xmm15
440 psllq xmm15,2
441 pxor xmm0,xmm9
442 pxor xmm15,xmm10
443 movdqa xmm9,xmm5
444 psrlq xmm5,4
445 movdqa xmm10,xmm3
446 psrlq xmm3,4
447 pxor xmm5,xmm4
448 pxor xmm3,xmm1
449 pand xmm5,xmm7
450 pand xmm3,xmm7
451 pxor xmm4,xmm5
452 psllq xmm5,4
453 pxor xmm1,xmm3
454 psllq xmm3,4
455 pxor xmm5,xmm9
456 pxor xmm3,xmm10
457 movdqa xmm9,xmm0
458 psrlq xmm0,4
459 movdqa xmm10,xmm15
460 psrlq xmm15,4
461 pxor xmm0,xmm6
462 pxor xmm15,xmm2
463 pand xmm0,xmm7
464 pand xmm15,xmm7
465 pxor xmm6,xmm0
466 psllq xmm0,4
467 pxor xmm2,xmm15
468 psllq xmm15,4
469 pxor xmm0,xmm9
470 pxor xmm15,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -0700471 movdqa xmm7,XMMWORD[rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800472 pxor xmm3,xmm7
473 pxor xmm5,xmm7
474 pxor xmm2,xmm7
475 pxor xmm6,xmm7
476 pxor xmm1,xmm7
477 pxor xmm4,xmm7
478 pxor xmm15,xmm7
479 pxor xmm0,xmm7
480 DB 0F3h,0C3h ;repret
Adam Langleye9ada862015-05-11 17:20:37 -0700481
Adam Langleyd9e397b2015-01-22 14:27:53 -0800482
483
484ALIGN 64
Adam Langleye9ada862015-05-11 17:20:37 -0700485_bsaes_decrypt8:
486 lea r11,[$L$BS0]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800487
Adam Langleye9ada862015-05-11 17:20:37 -0700488 movdqa xmm8,XMMWORD[rax]
489 lea rax,[16+rax]
490 movdqa xmm7,XMMWORD[((-48))+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800491 pxor xmm15,xmm8
492 pxor xmm0,xmm8
493 pxor xmm1,xmm8
494 pxor xmm2,xmm8
495DB 102,68,15,56,0,255
496DB 102,15,56,0,199
497 pxor xmm3,xmm8
498 pxor xmm4,xmm8
499DB 102,15,56,0,207
500DB 102,15,56,0,215
501 pxor xmm5,xmm8
502 pxor xmm6,xmm8
503DB 102,15,56,0,223
504DB 102,15,56,0,231
505DB 102,15,56,0,239
506DB 102,15,56,0,247
Adam Langleye9ada862015-05-11 17:20:37 -0700507 movdqa xmm7,XMMWORD[r11]
508 movdqa xmm8,XMMWORD[16+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800509 movdqa xmm9,xmm5
510 psrlq xmm5,1
511 movdqa xmm10,xmm3
512 psrlq xmm3,1
513 pxor xmm5,xmm6
514 pxor xmm3,xmm4
515 pand xmm5,xmm7
516 pand xmm3,xmm7
517 pxor xmm6,xmm5
518 psllq xmm5,1
519 pxor xmm4,xmm3
520 psllq xmm3,1
521 pxor xmm5,xmm9
522 pxor xmm3,xmm10
523 movdqa xmm9,xmm1
524 psrlq xmm1,1
525 movdqa xmm10,xmm15
526 psrlq xmm15,1
527 pxor xmm1,xmm2
528 pxor xmm15,xmm0
529 pand xmm1,xmm7
530 pand xmm15,xmm7
531 pxor xmm2,xmm1
532 psllq xmm1,1
533 pxor xmm0,xmm15
534 psllq xmm15,1
535 pxor xmm1,xmm9
536 pxor xmm15,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -0700537 movdqa xmm7,XMMWORD[32+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800538 movdqa xmm9,xmm4
539 psrlq xmm4,2
540 movdqa xmm10,xmm3
541 psrlq xmm3,2
542 pxor xmm4,xmm6
543 pxor xmm3,xmm5
544 pand xmm4,xmm8
545 pand xmm3,xmm8
546 pxor xmm6,xmm4
547 psllq xmm4,2
548 pxor xmm5,xmm3
549 psllq xmm3,2
550 pxor xmm4,xmm9
551 pxor xmm3,xmm10
552 movdqa xmm9,xmm0
553 psrlq xmm0,2
554 movdqa xmm10,xmm15
555 psrlq xmm15,2
556 pxor xmm0,xmm2
557 pxor xmm15,xmm1
558 pand xmm0,xmm8
559 pand xmm15,xmm8
560 pxor xmm2,xmm0
561 psllq xmm0,2
562 pxor xmm1,xmm15
563 psllq xmm15,2
564 pxor xmm0,xmm9
565 pxor xmm15,xmm10
566 movdqa xmm9,xmm2
567 psrlq xmm2,4
568 movdqa xmm10,xmm1
569 psrlq xmm1,4
570 pxor xmm2,xmm6
571 pxor xmm1,xmm5
572 pand xmm2,xmm7
573 pand xmm1,xmm7
574 pxor xmm6,xmm2
575 psllq xmm2,4
576 pxor xmm5,xmm1
577 psllq xmm1,4
578 pxor xmm2,xmm9
579 pxor xmm1,xmm10
580 movdqa xmm9,xmm0
581 psrlq xmm0,4
582 movdqa xmm10,xmm15
583 psrlq xmm15,4
584 pxor xmm0,xmm4
585 pxor xmm15,xmm3
586 pand xmm0,xmm7
587 pand xmm15,xmm7
588 pxor xmm4,xmm0
589 psllq xmm0,4
590 pxor xmm3,xmm15
591 psllq xmm15,4
592 pxor xmm0,xmm9
593 pxor xmm15,xmm10
594 dec r10d
Adam Langleye9ada862015-05-11 17:20:37 -0700595 jmp NEAR $L$dec_sbox
Adam Langleyd9e397b2015-01-22 14:27:53 -0800596ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700597$L$dec_loop:
598 pxor xmm15,XMMWORD[rax]
599 pxor xmm0,XMMWORD[16+rax]
600 pxor xmm1,XMMWORD[32+rax]
601 pxor xmm2,XMMWORD[48+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800602DB 102,68,15,56,0,255
603DB 102,15,56,0,199
Adam Langleye9ada862015-05-11 17:20:37 -0700604 pxor xmm3,XMMWORD[64+rax]
605 pxor xmm4,XMMWORD[80+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800606DB 102,15,56,0,207
607DB 102,15,56,0,215
Adam Langleye9ada862015-05-11 17:20:37 -0700608 pxor xmm5,XMMWORD[96+rax]
609 pxor xmm6,XMMWORD[112+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800610DB 102,15,56,0,223
611DB 102,15,56,0,231
612DB 102,15,56,0,239
613DB 102,15,56,0,247
Adam Langleye9ada862015-05-11 17:20:37 -0700614 lea rax,[128+rax]
615$L$dec_sbox:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800616 pxor xmm2,xmm3
617
618 pxor xmm3,xmm6
619 pxor xmm1,xmm6
620 pxor xmm5,xmm3
621 pxor xmm6,xmm5
622 pxor xmm0,xmm6
623
624 pxor xmm15,xmm0
625 pxor xmm1,xmm4
626 pxor xmm2,xmm15
627 pxor xmm4,xmm15
628 pxor xmm0,xmm2
629 movdqa xmm10,xmm2
630 movdqa xmm9,xmm6
631 movdqa xmm8,xmm0
632 movdqa xmm12,xmm3
633 movdqa xmm11,xmm4
634
635 pxor xmm10,xmm15
636 pxor xmm9,xmm3
637 pxor xmm8,xmm5
638 movdqa xmm13,xmm10
639 pxor xmm12,xmm15
640 movdqa xmm7,xmm9
641 pxor xmm11,xmm1
642 movdqa xmm14,xmm10
643
644 por xmm9,xmm8
645 por xmm10,xmm11
646 pxor xmm14,xmm7
647 pand xmm13,xmm11
648 pxor xmm11,xmm8
649 pand xmm7,xmm8
650 pand xmm14,xmm11
651 movdqa xmm11,xmm5
652 pxor xmm11,xmm1
653 pand xmm12,xmm11
654 pxor xmm10,xmm12
655 pxor xmm9,xmm12
656 movdqa xmm12,xmm2
657 movdqa xmm11,xmm0
658 pxor xmm12,xmm6
659 pxor xmm11,xmm4
660 movdqa xmm8,xmm12
661 pand xmm12,xmm11
662 por xmm8,xmm11
663 pxor xmm7,xmm12
664 pxor xmm10,xmm14
665 pxor xmm9,xmm13
666 pxor xmm8,xmm14
667 movdqa xmm11,xmm3
668 pxor xmm7,xmm13
669 movdqa xmm12,xmm15
670 pxor xmm8,xmm13
671 movdqa xmm13,xmm6
672 pand xmm11,xmm5
673 movdqa xmm14,xmm2
674 pand xmm12,xmm1
675 pand xmm13,xmm0
676 por xmm14,xmm4
677 pxor xmm10,xmm11
678 pxor xmm9,xmm12
679 pxor xmm8,xmm13
680 pxor xmm7,xmm14
681
682
683
684
685
686 movdqa xmm11,xmm10
687 pand xmm10,xmm8
688 pxor xmm11,xmm9
689
690 movdqa xmm13,xmm7
691 movdqa xmm14,xmm11
692 pxor xmm13,xmm10
693 pand xmm14,xmm13
694
695 movdqa xmm12,xmm8
696 pxor xmm14,xmm9
697 pxor xmm12,xmm7
698
699 pxor xmm10,xmm9
700
701 pand xmm12,xmm10
702
703 movdqa xmm9,xmm13
704 pxor xmm12,xmm7
705
706 pxor xmm9,xmm12
707 pxor xmm8,xmm12
708
709 pand xmm9,xmm7
710
711 pxor xmm13,xmm9
712 pxor xmm8,xmm9
713
714 pand xmm13,xmm14
715
716 pxor xmm13,xmm11
717 movdqa xmm11,xmm4
718 movdqa xmm7,xmm0
719 movdqa xmm9,xmm14
720 pxor xmm9,xmm13
721 pand xmm9,xmm4
722 pxor xmm4,xmm0
723 pand xmm0,xmm14
724 pand xmm4,xmm13
725 pxor xmm4,xmm0
726 pxor xmm0,xmm9
727 pxor xmm11,xmm1
728 pxor xmm7,xmm5
729 pxor xmm14,xmm12
730 pxor xmm13,xmm8
731 movdqa xmm10,xmm14
732 movdqa xmm9,xmm12
733 pxor xmm10,xmm13
734 pxor xmm9,xmm8
735 pand xmm10,xmm11
736 pand xmm9,xmm1
737 pxor xmm11,xmm7
738 pxor xmm1,xmm5
739 pand xmm7,xmm14
740 pand xmm5,xmm12
741 pand xmm11,xmm13
742 pand xmm1,xmm8
743 pxor xmm7,xmm11
744 pxor xmm1,xmm5
745 pxor xmm11,xmm10
746 pxor xmm5,xmm9
747 pxor xmm4,xmm11
748 pxor xmm1,xmm11
749 pxor xmm0,xmm7
750 pxor xmm5,xmm7
751
752 movdqa xmm11,xmm2
753 movdqa xmm7,xmm6
754 pxor xmm11,xmm15
755 pxor xmm7,xmm3
756 movdqa xmm10,xmm14
757 movdqa xmm9,xmm12
758 pxor xmm10,xmm13
759 pxor xmm9,xmm8
760 pand xmm10,xmm11
761 pand xmm9,xmm15
762 pxor xmm11,xmm7
763 pxor xmm15,xmm3
764 pand xmm7,xmm14
765 pand xmm3,xmm12
766 pand xmm11,xmm13
767 pand xmm15,xmm8
768 pxor xmm7,xmm11
769 pxor xmm15,xmm3
770 pxor xmm11,xmm10
771 pxor xmm3,xmm9
772 pxor xmm14,xmm12
773 pxor xmm13,xmm8
774 movdqa xmm10,xmm14
775 pxor xmm10,xmm13
776 pand xmm10,xmm2
777 pxor xmm2,xmm6
778 pand xmm6,xmm14
779 pand xmm2,xmm13
780 pxor xmm2,xmm6
781 pxor xmm6,xmm10
782 pxor xmm2,xmm11
783 pxor xmm15,xmm11
784 pxor xmm6,xmm7
785 pxor xmm3,xmm7
786 pxor xmm0,xmm6
787 pxor xmm5,xmm4
788
789 pxor xmm3,xmm0
790 pxor xmm1,xmm6
791 pxor xmm4,xmm6
792 pxor xmm3,xmm1
793 pxor xmm6,xmm15
794 pxor xmm3,xmm4
795 pxor xmm2,xmm5
796 pxor xmm5,xmm0
797 pxor xmm2,xmm3
798
799 pxor xmm3,xmm15
800 pxor xmm6,xmm2
801 dec r10d
Adam Langleye9ada862015-05-11 17:20:37 -0700802 jl NEAR $L$dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -0800803
Adam Langleye9ada862015-05-11 17:20:37 -0700804 pshufd xmm7,xmm15,0x4E
805 pshufd xmm13,xmm2,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800806 pxor xmm7,xmm15
Adam Langleye9ada862015-05-11 17:20:37 -0700807 pshufd xmm14,xmm4,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800808 pxor xmm13,xmm2
Adam Langleye9ada862015-05-11 17:20:37 -0700809 pshufd xmm8,xmm0,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800810 pxor xmm14,xmm4
Adam Langleye9ada862015-05-11 17:20:37 -0700811 pshufd xmm9,xmm5,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800812 pxor xmm8,xmm0
Adam Langleye9ada862015-05-11 17:20:37 -0700813 pshufd xmm10,xmm3,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800814 pxor xmm9,xmm5
815 pxor xmm15,xmm13
816 pxor xmm0,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -0700817 pshufd xmm11,xmm1,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800818 pxor xmm10,xmm3
819 pxor xmm5,xmm7
820 pxor xmm3,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -0700821 pshufd xmm12,xmm6,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800822 pxor xmm11,xmm1
823 pxor xmm0,xmm14
824 pxor xmm1,xmm9
825 pxor xmm12,xmm6
826
827 pxor xmm5,xmm14
828 pxor xmm3,xmm13
829 pxor xmm1,xmm13
830 pxor xmm6,xmm10
831 pxor xmm2,xmm11
832 pxor xmm1,xmm14
833 pxor xmm6,xmm14
834 pxor xmm4,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -0700835 pshufd xmm7,xmm15,0x93
836 pshufd xmm8,xmm0,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800837 pxor xmm15,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -0700838 pshufd xmm9,xmm5,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800839 pxor xmm0,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -0700840 pshufd xmm10,xmm3,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800841 pxor xmm5,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -0700842 pshufd xmm11,xmm1,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800843 pxor xmm3,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -0700844 pshufd xmm12,xmm6,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800845 pxor xmm1,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -0700846 pshufd xmm13,xmm2,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800847 pxor xmm6,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -0700848 pshufd xmm14,xmm4,0x93
Adam Langleyd9e397b2015-01-22 14:27:53 -0800849 pxor xmm2,xmm13
850 pxor xmm4,xmm14
851
852 pxor xmm8,xmm15
853 pxor xmm7,xmm4
854 pxor xmm8,xmm4
Adam Langleye9ada862015-05-11 17:20:37 -0700855 pshufd xmm15,xmm15,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800856 pxor xmm9,xmm0
Adam Langleye9ada862015-05-11 17:20:37 -0700857 pshufd xmm0,xmm0,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800858 pxor xmm12,xmm1
859 pxor xmm15,xmm7
860 pxor xmm13,xmm6
861 pxor xmm0,xmm8
862 pxor xmm11,xmm3
Adam Langleye9ada862015-05-11 17:20:37 -0700863 pshufd xmm7,xmm1,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800864 pxor xmm14,xmm2
Adam Langleye9ada862015-05-11 17:20:37 -0700865 pshufd xmm8,xmm6,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800866 pxor xmm10,xmm5
Adam Langleye9ada862015-05-11 17:20:37 -0700867 pshufd xmm1,xmm3,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800868 pxor xmm10,xmm4
Adam Langleye9ada862015-05-11 17:20:37 -0700869 pshufd xmm6,xmm4,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800870 pxor xmm11,xmm4
Adam Langleye9ada862015-05-11 17:20:37 -0700871 pshufd xmm3,xmm2,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800872 pxor xmm7,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -0700873 pshufd xmm2,xmm5,0x4E
Adam Langleyd9e397b2015-01-22 14:27:53 -0800874 pxor xmm8,xmm12
875 pxor xmm10,xmm1
876 pxor xmm6,xmm14
877 pxor xmm13,xmm3
878 movdqa xmm3,xmm7
879 pxor xmm2,xmm9
880 movdqa xmm5,xmm13
881 movdqa xmm4,xmm8
882 movdqa xmm1,xmm2
883 movdqa xmm2,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -0700884 movdqa xmm7,XMMWORD[((-16))+r11]
885 jnz NEAR $L$dec_loop
886 movdqa xmm7,XMMWORD[((-32))+r11]
887 jmp NEAR $L$dec_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -0800888ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700889$L$dec_done:
890 movdqa xmm7,XMMWORD[r11]
891 movdqa xmm8,XMMWORD[16+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800892 movdqa xmm9,xmm2
893 psrlq xmm2,1
894 movdqa xmm10,xmm1
895 psrlq xmm1,1
896 pxor xmm2,xmm4
897 pxor xmm1,xmm6
898 pand xmm2,xmm7
899 pand xmm1,xmm7
900 pxor xmm4,xmm2
901 psllq xmm2,1
902 pxor xmm6,xmm1
903 psllq xmm1,1
904 pxor xmm2,xmm9
905 pxor xmm1,xmm10
906 movdqa xmm9,xmm5
907 psrlq xmm5,1
908 movdqa xmm10,xmm15
909 psrlq xmm15,1
910 pxor xmm5,xmm3
911 pxor xmm15,xmm0
912 pand xmm5,xmm7
913 pand xmm15,xmm7
914 pxor xmm3,xmm5
915 psllq xmm5,1
916 pxor xmm0,xmm15
917 psllq xmm15,1
918 pxor xmm5,xmm9
919 pxor xmm15,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -0700920 movdqa xmm7,XMMWORD[32+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800921 movdqa xmm9,xmm6
922 psrlq xmm6,2
923 movdqa xmm10,xmm1
924 psrlq xmm1,2
925 pxor xmm6,xmm4
926 pxor xmm1,xmm2
927 pand xmm6,xmm8
928 pand xmm1,xmm8
929 pxor xmm4,xmm6
930 psllq xmm6,2
931 pxor xmm2,xmm1
932 psllq xmm1,2
933 pxor xmm6,xmm9
934 pxor xmm1,xmm10
935 movdqa xmm9,xmm0
936 psrlq xmm0,2
937 movdqa xmm10,xmm15
938 psrlq xmm15,2
939 pxor xmm0,xmm3
940 pxor xmm15,xmm5
941 pand xmm0,xmm8
942 pand xmm15,xmm8
943 pxor xmm3,xmm0
944 psllq xmm0,2
945 pxor xmm5,xmm15
946 psllq xmm15,2
947 pxor xmm0,xmm9
948 pxor xmm15,xmm10
949 movdqa xmm9,xmm3
950 psrlq xmm3,4
951 movdqa xmm10,xmm5
952 psrlq xmm5,4
953 pxor xmm3,xmm4
954 pxor xmm5,xmm2
955 pand xmm3,xmm7
956 pand xmm5,xmm7
957 pxor xmm4,xmm3
958 psllq xmm3,4
959 pxor xmm2,xmm5
960 psllq xmm5,4
961 pxor xmm3,xmm9
962 pxor xmm5,xmm10
963 movdqa xmm9,xmm0
964 psrlq xmm0,4
965 movdqa xmm10,xmm15
966 psrlq xmm15,4
967 pxor xmm0,xmm6
968 pxor xmm15,xmm1
969 pand xmm0,xmm7
970 pand xmm15,xmm7
971 pxor xmm6,xmm0
972 psllq xmm0,4
973 pxor xmm1,xmm15
974 psllq xmm15,4
975 pxor xmm0,xmm9
976 pxor xmm15,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -0700977 movdqa xmm7,XMMWORD[rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800978 pxor xmm5,xmm7
979 pxor xmm3,xmm7
980 pxor xmm1,xmm7
981 pxor xmm6,xmm7
982 pxor xmm2,xmm7
983 pxor xmm4,xmm7
984 pxor xmm15,xmm7
985 pxor xmm0,xmm7
986 DB 0F3h,0C3h ;repret
Adam Langleye9ada862015-05-11 17:20:37 -0700987
Adam Langleyd9e397b2015-01-22 14:27:53 -0800988
989ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700990_bsaes_key_convert:
991 lea r11,[$L$masks]
992 movdqu xmm7,XMMWORD[rcx]
993 lea rcx,[16+rcx]
994 movdqa xmm0,XMMWORD[r11]
995 movdqa xmm1,XMMWORD[16+r11]
996 movdqa xmm2,XMMWORD[32+r11]
997 movdqa xmm3,XMMWORD[48+r11]
998 movdqa xmm4,XMMWORD[64+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800999 pcmpeqd xmm5,xmm5
1000
Adam Langleye9ada862015-05-11 17:20:37 -07001001 movdqu xmm6,XMMWORD[rcx]
1002 movdqa XMMWORD[rax],xmm7
1003 lea rax,[16+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001004 dec r10d
Adam Langleye9ada862015-05-11 17:20:37 -07001005 jmp NEAR $L$key_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08001006ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001007$L$key_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001008DB 102,15,56,0,244
1009
1010 movdqa xmm8,xmm0
1011 movdqa xmm9,xmm1
1012
1013 pand xmm8,xmm6
1014 pand xmm9,xmm6
1015 movdqa xmm10,xmm2
1016 pcmpeqb xmm8,xmm0
1017 psllq xmm0,4
1018 movdqa xmm11,xmm3
1019 pcmpeqb xmm9,xmm1
1020 psllq xmm1,4
1021
1022 pand xmm10,xmm6
1023 pand xmm11,xmm6
1024 movdqa xmm12,xmm0
1025 pcmpeqb xmm10,xmm2
1026 psllq xmm2,4
1027 movdqa xmm13,xmm1
1028 pcmpeqb xmm11,xmm3
1029 psllq xmm3,4
1030
1031 movdqa xmm14,xmm2
1032 movdqa xmm15,xmm3
1033 pxor xmm8,xmm5
1034 pxor xmm9,xmm5
1035
1036 pand xmm12,xmm6
1037 pand xmm13,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001038 movdqa XMMWORD[rax],xmm8
Adam Langleyd9e397b2015-01-22 14:27:53 -08001039 pcmpeqb xmm12,xmm0
1040 psrlq xmm0,4
Adam Langleye9ada862015-05-11 17:20:37 -07001041 movdqa XMMWORD[16+rax],xmm9
Adam Langleyd9e397b2015-01-22 14:27:53 -08001042 pcmpeqb xmm13,xmm1
1043 psrlq xmm1,4
Adam Langleye9ada862015-05-11 17:20:37 -07001044 lea rcx,[16+rcx]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001045
1046 pand xmm14,xmm6
1047 pand xmm15,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001048 movdqa XMMWORD[32+rax],xmm10
Adam Langleyd9e397b2015-01-22 14:27:53 -08001049 pcmpeqb xmm14,xmm2
1050 psrlq xmm2,4
Adam Langleye9ada862015-05-11 17:20:37 -07001051 movdqa XMMWORD[48+rax],xmm11
Adam Langleyd9e397b2015-01-22 14:27:53 -08001052 pcmpeqb xmm15,xmm3
1053 psrlq xmm3,4
Adam Langleye9ada862015-05-11 17:20:37 -07001054 movdqu xmm6,XMMWORD[rcx]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001055
1056 pxor xmm13,xmm5
1057 pxor xmm14,xmm5
Adam Langleye9ada862015-05-11 17:20:37 -07001058 movdqa XMMWORD[64+rax],xmm12
1059 movdqa XMMWORD[80+rax],xmm13
1060 movdqa XMMWORD[96+rax],xmm14
1061 movdqa XMMWORD[112+rax],xmm15
1062 lea rax,[128+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001063 dec r10d
Adam Langleye9ada862015-05-11 17:20:37 -07001064 jnz NEAR $L$key_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08001065
Adam Langleye9ada862015-05-11 17:20:37 -07001066 movdqa xmm7,XMMWORD[80+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001067
1068 DB 0F3h,0C3h ;repret
Adam Langleye9ada862015-05-11 17:20:37 -07001069
1070EXTERN asm_AES_cbc_encrypt
1071global bsaes_cbc_encrypt
Adam Langleyd9e397b2015-01-22 14:27:53 -08001072
1073ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001074bsaes_cbc_encrypt:
Robert Sloanab8b8882018-03-26 11:39:51 -07001075
Adam Langleye9ada862015-05-11 17:20:37 -07001076 mov r11d,DWORD[48+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001077 cmp r11d,0
Adam Langleye9ada862015-05-11 17:20:37 -07001078 jne NEAR asm_AES_cbc_encrypt
Adam Langleyd9e397b2015-01-22 14:27:53 -08001079 cmp r8,128
Adam Langleye9ada862015-05-11 17:20:37 -07001080 jb NEAR asm_AES_cbc_encrypt
Adam Langleyd9e397b2015-01-22 14:27:53 -08001081
1082 mov rax,rsp
Adam Langleye9ada862015-05-11 17:20:37 -07001083$L$cbc_dec_prologue:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001084 push rbp
Robert Sloanab8b8882018-03-26 11:39:51 -07001085
Adam Langleyd9e397b2015-01-22 14:27:53 -08001086 push rbx
Robert Sloanab8b8882018-03-26 11:39:51 -07001087
Adam Langleyd9e397b2015-01-22 14:27:53 -08001088 push r12
Robert Sloanab8b8882018-03-26 11:39:51 -07001089
Adam Langleyd9e397b2015-01-22 14:27:53 -08001090 push r13
Robert Sloanab8b8882018-03-26 11:39:51 -07001091
Adam Langleyd9e397b2015-01-22 14:27:53 -08001092 push r14
Robert Sloanab8b8882018-03-26 11:39:51 -07001093
Adam Langleyd9e397b2015-01-22 14:27:53 -08001094 push r15
Robert Sloanab8b8882018-03-26 11:39:51 -07001095
Adam Langleye9ada862015-05-11 17:20:37 -07001096 lea rsp,[((-72))+rsp]
Robert Sloanab8b8882018-03-26 11:39:51 -07001097
Adam Langleye9ada862015-05-11 17:20:37 -07001098 mov r10,QWORD[160+rsp]
1099 lea rsp,[((-160))+rsp]
1100 movaps XMMWORD[64+rsp],xmm6
1101 movaps XMMWORD[80+rsp],xmm7
1102 movaps XMMWORD[96+rsp],xmm8
1103 movaps XMMWORD[112+rsp],xmm9
1104 movaps XMMWORD[128+rsp],xmm10
1105 movaps XMMWORD[144+rsp],xmm11
1106 movaps XMMWORD[160+rsp],xmm12
1107 movaps XMMWORD[176+rsp],xmm13
1108 movaps XMMWORD[192+rsp],xmm14
1109 movaps XMMWORD[208+rsp],xmm15
1110$L$cbc_dec_body:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001111 mov rbp,rsp
Robert Sloanab8b8882018-03-26 11:39:51 -07001112
Adam Langleye9ada862015-05-11 17:20:37 -07001113 mov eax,DWORD[240+r9]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001114 mov r12,rcx
1115 mov r13,rdx
1116 mov r14,r8
1117 mov r15,r9
1118 mov rbx,r10
1119 shr r14,4
1120
1121 mov edx,eax
1122 shl rax,7
1123 sub rax,96
1124 sub rsp,rax
1125
1126 mov rax,rsp
1127 mov rcx,r15
1128 mov r10d,edx
1129 call _bsaes_key_convert
Adam Langleye9ada862015-05-11 17:20:37 -07001130 pxor xmm7,XMMWORD[rsp]
1131 movdqa XMMWORD[rax],xmm6
1132 movdqa XMMWORD[rsp],xmm7
Adam Langleyd9e397b2015-01-22 14:27:53 -08001133
Adam Langleye9ada862015-05-11 17:20:37 -07001134 movdqu xmm14,XMMWORD[rbx]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001135 sub r14,8
Adam Langleye9ada862015-05-11 17:20:37 -07001136$L$cbc_dec_loop:
1137 movdqu xmm15,XMMWORD[r12]
1138 movdqu xmm0,XMMWORD[16+r12]
1139 movdqu xmm1,XMMWORD[32+r12]
1140 movdqu xmm2,XMMWORD[48+r12]
1141 movdqu xmm3,XMMWORD[64+r12]
1142 movdqu xmm4,XMMWORD[80+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001143 mov rax,rsp
Adam Langleye9ada862015-05-11 17:20:37 -07001144 movdqu xmm5,XMMWORD[96+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001145 mov r10d,edx
Adam Langleye9ada862015-05-11 17:20:37 -07001146 movdqu xmm6,XMMWORD[112+r12]
1147 movdqa XMMWORD[32+rbp],xmm14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001148
1149 call _bsaes_decrypt8
1150
Adam Langleye9ada862015-05-11 17:20:37 -07001151 pxor xmm15,XMMWORD[32+rbp]
1152 movdqu xmm7,XMMWORD[r12]
1153 movdqu xmm8,XMMWORD[16+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001154 pxor xmm0,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07001155 movdqu xmm9,XMMWORD[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001156 pxor xmm5,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07001157 movdqu xmm10,XMMWORD[48+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001158 pxor xmm3,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07001159 movdqu xmm11,XMMWORD[64+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001160 pxor xmm1,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07001161 movdqu xmm12,XMMWORD[80+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001162 pxor xmm6,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -07001163 movdqu xmm13,XMMWORD[96+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001164 pxor xmm2,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -07001165 movdqu xmm14,XMMWORD[112+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001166 pxor xmm4,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001167 movdqu XMMWORD[r13],xmm15
1168 lea r12,[128+r12]
1169 movdqu XMMWORD[16+r13],xmm0
1170 movdqu XMMWORD[32+r13],xmm5
1171 movdqu XMMWORD[48+r13],xmm3
1172 movdqu XMMWORD[64+r13],xmm1
1173 movdqu XMMWORD[80+r13],xmm6
1174 movdqu XMMWORD[96+r13],xmm2
1175 movdqu XMMWORD[112+r13],xmm4
1176 lea r13,[128+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001177 sub r14,8
Adam Langleye9ada862015-05-11 17:20:37 -07001178 jnc NEAR $L$cbc_dec_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08001179
1180 add r14,8
Adam Langleye9ada862015-05-11 17:20:37 -07001181 jz NEAR $L$cbc_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001182
Adam Langleye9ada862015-05-11 17:20:37 -07001183 movdqu xmm15,XMMWORD[r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001184 mov rax,rsp
1185 mov r10d,edx
1186 cmp r14,2
Adam Langleye9ada862015-05-11 17:20:37 -07001187 jb NEAR $L$cbc_dec_one
1188 movdqu xmm0,XMMWORD[16+r12]
1189 je NEAR $L$cbc_dec_two
1190 movdqu xmm1,XMMWORD[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001191 cmp r14,4
Adam Langleye9ada862015-05-11 17:20:37 -07001192 jb NEAR $L$cbc_dec_three
1193 movdqu xmm2,XMMWORD[48+r12]
1194 je NEAR $L$cbc_dec_four
1195 movdqu xmm3,XMMWORD[64+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001196 cmp r14,6
Adam Langleye9ada862015-05-11 17:20:37 -07001197 jb NEAR $L$cbc_dec_five
1198 movdqu xmm4,XMMWORD[80+r12]
1199 je NEAR $L$cbc_dec_six
1200 movdqu xmm5,XMMWORD[96+r12]
1201 movdqa XMMWORD[32+rbp],xmm14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001202 call _bsaes_decrypt8
Adam Langleye9ada862015-05-11 17:20:37 -07001203 pxor xmm15,XMMWORD[32+rbp]
1204 movdqu xmm7,XMMWORD[r12]
1205 movdqu xmm8,XMMWORD[16+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001206 pxor xmm0,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07001207 movdqu xmm9,XMMWORD[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001208 pxor xmm5,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07001209 movdqu xmm10,XMMWORD[48+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001210 pxor xmm3,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07001211 movdqu xmm11,XMMWORD[64+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001212 pxor xmm1,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07001213 movdqu xmm12,XMMWORD[80+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001214 pxor xmm6,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -07001215 movdqu xmm14,XMMWORD[96+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001216 pxor xmm2,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -07001217 movdqu XMMWORD[r13],xmm15
1218 movdqu XMMWORD[16+r13],xmm0
1219 movdqu XMMWORD[32+r13],xmm5
1220 movdqu XMMWORD[48+r13],xmm3
1221 movdqu XMMWORD[64+r13],xmm1
1222 movdqu XMMWORD[80+r13],xmm6
1223 movdqu XMMWORD[96+r13],xmm2
1224 jmp NEAR $L$cbc_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001225ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001226$L$cbc_dec_six:
1227 movdqa XMMWORD[32+rbp],xmm14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001228 call _bsaes_decrypt8
Adam Langleye9ada862015-05-11 17:20:37 -07001229 pxor xmm15,XMMWORD[32+rbp]
1230 movdqu xmm7,XMMWORD[r12]
1231 movdqu xmm8,XMMWORD[16+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001232 pxor xmm0,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07001233 movdqu xmm9,XMMWORD[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001234 pxor xmm5,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07001235 movdqu xmm10,XMMWORD[48+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001236 pxor xmm3,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07001237 movdqu xmm11,XMMWORD[64+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001238 pxor xmm1,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07001239 movdqu xmm14,XMMWORD[80+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001240 pxor xmm6,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -07001241 movdqu XMMWORD[r13],xmm15
1242 movdqu XMMWORD[16+r13],xmm0
1243 movdqu XMMWORD[32+r13],xmm5
1244 movdqu XMMWORD[48+r13],xmm3
1245 movdqu XMMWORD[64+r13],xmm1
1246 movdqu XMMWORD[80+r13],xmm6
1247 jmp NEAR $L$cbc_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001248ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001249$L$cbc_dec_five:
1250 movdqa XMMWORD[32+rbp],xmm14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001251 call _bsaes_decrypt8
Adam Langleye9ada862015-05-11 17:20:37 -07001252 pxor xmm15,XMMWORD[32+rbp]
1253 movdqu xmm7,XMMWORD[r12]
1254 movdqu xmm8,XMMWORD[16+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001255 pxor xmm0,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07001256 movdqu xmm9,XMMWORD[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001257 pxor xmm5,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07001258 movdqu xmm10,XMMWORD[48+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001259 pxor xmm3,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07001260 movdqu xmm14,XMMWORD[64+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001261 pxor xmm1,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07001262 movdqu XMMWORD[r13],xmm15
1263 movdqu XMMWORD[16+r13],xmm0
1264 movdqu XMMWORD[32+r13],xmm5
1265 movdqu XMMWORD[48+r13],xmm3
1266 movdqu XMMWORD[64+r13],xmm1
1267 jmp NEAR $L$cbc_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001268ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001269$L$cbc_dec_four:
1270 movdqa XMMWORD[32+rbp],xmm14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001271 call _bsaes_decrypt8
Adam Langleye9ada862015-05-11 17:20:37 -07001272 pxor xmm15,XMMWORD[32+rbp]
1273 movdqu xmm7,XMMWORD[r12]
1274 movdqu xmm8,XMMWORD[16+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001275 pxor xmm0,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07001276 movdqu xmm9,XMMWORD[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001277 pxor xmm5,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07001278 movdqu xmm14,XMMWORD[48+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001279 pxor xmm3,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07001280 movdqu XMMWORD[r13],xmm15
1281 movdqu XMMWORD[16+r13],xmm0
1282 movdqu XMMWORD[32+r13],xmm5
1283 movdqu XMMWORD[48+r13],xmm3
1284 jmp NEAR $L$cbc_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001285ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001286$L$cbc_dec_three:
1287 movdqa XMMWORD[32+rbp],xmm14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001288 call _bsaes_decrypt8
Adam Langleye9ada862015-05-11 17:20:37 -07001289 pxor xmm15,XMMWORD[32+rbp]
1290 movdqu xmm7,XMMWORD[r12]
1291 movdqu xmm8,XMMWORD[16+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001292 pxor xmm0,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07001293 movdqu xmm14,XMMWORD[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001294 pxor xmm5,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07001295 movdqu XMMWORD[r13],xmm15
1296 movdqu XMMWORD[16+r13],xmm0
1297 movdqu XMMWORD[32+r13],xmm5
1298 jmp NEAR $L$cbc_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001299ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001300$L$cbc_dec_two:
1301 movdqa XMMWORD[32+rbp],xmm14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001302 call _bsaes_decrypt8
Adam Langleye9ada862015-05-11 17:20:37 -07001303 pxor xmm15,XMMWORD[32+rbp]
1304 movdqu xmm7,XMMWORD[r12]
1305 movdqu xmm14,XMMWORD[16+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001306 pxor xmm0,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07001307 movdqu XMMWORD[r13],xmm15
1308 movdqu XMMWORD[16+r13],xmm0
1309 jmp NEAR $L$cbc_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001310ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001311$L$cbc_dec_one:
1312 lea rcx,[r12]
1313 lea rdx,[32+rbp]
1314 lea r8,[r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001315 call asm_AES_decrypt
Adam Langleye9ada862015-05-11 17:20:37 -07001316 pxor xmm14,XMMWORD[32+rbp]
1317 movdqu XMMWORD[r13],xmm14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001318 movdqa xmm14,xmm15
1319
Adam Langleye9ada862015-05-11 17:20:37 -07001320$L$cbc_dec_done:
1321 movdqu XMMWORD[rbx],xmm14
1322 lea rax,[rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001323 pxor xmm0,xmm0
Adam Langleye9ada862015-05-11 17:20:37 -07001324$L$cbc_dec_bzero:
1325 movdqa XMMWORD[rax],xmm0
1326 movdqa XMMWORD[16+rax],xmm0
1327 lea rax,[32+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001328 cmp rbp,rax
Adam Langleye9ada862015-05-11 17:20:37 -07001329 ja NEAR $L$cbc_dec_bzero
Adam Langleyd9e397b2015-01-22 14:27:53 -08001330
Robert Sloana94fe052017-02-21 08:49:28 -08001331 lea rax,[120+rbp]
Robert Sloanab8b8882018-03-26 11:39:51 -07001332
Adam Langleye9ada862015-05-11 17:20:37 -07001333 movaps xmm6,XMMWORD[64+rbp]
1334 movaps xmm7,XMMWORD[80+rbp]
1335 movaps xmm8,XMMWORD[96+rbp]
1336 movaps xmm9,XMMWORD[112+rbp]
1337 movaps xmm10,XMMWORD[128+rbp]
1338 movaps xmm11,XMMWORD[144+rbp]
1339 movaps xmm12,XMMWORD[160+rbp]
1340 movaps xmm13,XMMWORD[176+rbp]
1341 movaps xmm14,XMMWORD[192+rbp]
1342 movaps xmm15,XMMWORD[208+rbp]
Robert Sloana94fe052017-02-21 08:49:28 -08001343 lea rax,[160+rax]
1344$L$cbc_dec_tail:
1345 mov r15,QWORD[((-48))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001346
Robert Sloana94fe052017-02-21 08:49:28 -08001347 mov r14,QWORD[((-40))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001348
Robert Sloana94fe052017-02-21 08:49:28 -08001349 mov r13,QWORD[((-32))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001350
Robert Sloana94fe052017-02-21 08:49:28 -08001351 mov r12,QWORD[((-24))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001352
Robert Sloana94fe052017-02-21 08:49:28 -08001353 mov rbx,QWORD[((-16))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001354
Robert Sloana94fe052017-02-21 08:49:28 -08001355 mov rbp,QWORD[((-8))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001356
Robert Sloana94fe052017-02-21 08:49:28 -08001357 lea rsp,[rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001358
Adam Langleye9ada862015-05-11 17:20:37 -07001359$L$cbc_dec_epilogue:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001360 DB 0F3h,0C3h ;repret
Adam Langleyd9e397b2015-01-22 14:27:53 -08001361
Adam Langleye9ada862015-05-11 17:20:37 -07001362
Robert Sloanab8b8882018-03-26 11:39:51 -07001363
Adam Langleye9ada862015-05-11 17:20:37 -07001364global bsaes_ctr32_encrypt_blocks
Adam Langleyd9e397b2015-01-22 14:27:53 -08001365
1366ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001367bsaes_ctr32_encrypt_blocks:
Robert Sloanab8b8882018-03-26 11:39:51 -07001368
Adam Langleyd9e397b2015-01-22 14:27:53 -08001369 mov rax,rsp
Adam Langleye9ada862015-05-11 17:20:37 -07001370$L$ctr_enc_prologue:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001371 push rbp
Robert Sloanab8b8882018-03-26 11:39:51 -07001372
Adam Langleyd9e397b2015-01-22 14:27:53 -08001373 push rbx
Robert Sloanab8b8882018-03-26 11:39:51 -07001374
Adam Langleyd9e397b2015-01-22 14:27:53 -08001375 push r12
Robert Sloanab8b8882018-03-26 11:39:51 -07001376
Adam Langleyd9e397b2015-01-22 14:27:53 -08001377 push r13
Robert Sloanab8b8882018-03-26 11:39:51 -07001378
Adam Langleyd9e397b2015-01-22 14:27:53 -08001379 push r14
Robert Sloanab8b8882018-03-26 11:39:51 -07001380
Adam Langleyd9e397b2015-01-22 14:27:53 -08001381 push r15
Robert Sloanab8b8882018-03-26 11:39:51 -07001382
Adam Langleye9ada862015-05-11 17:20:37 -07001383 lea rsp,[((-72))+rsp]
Robert Sloanab8b8882018-03-26 11:39:51 -07001384
Adam Langleye9ada862015-05-11 17:20:37 -07001385 mov r10,QWORD[160+rsp]
1386 lea rsp,[((-160))+rsp]
1387 movaps XMMWORD[64+rsp],xmm6
1388 movaps XMMWORD[80+rsp],xmm7
1389 movaps XMMWORD[96+rsp],xmm8
1390 movaps XMMWORD[112+rsp],xmm9
1391 movaps XMMWORD[128+rsp],xmm10
1392 movaps XMMWORD[144+rsp],xmm11
1393 movaps XMMWORD[160+rsp],xmm12
1394 movaps XMMWORD[176+rsp],xmm13
1395 movaps XMMWORD[192+rsp],xmm14
1396 movaps XMMWORD[208+rsp],xmm15
1397$L$ctr_enc_body:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001398 mov rbp,rsp
Robert Sloanab8b8882018-03-26 11:39:51 -07001399
Adam Langleye9ada862015-05-11 17:20:37 -07001400 movdqu xmm0,XMMWORD[r10]
1401 mov eax,DWORD[240+r9]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001402 mov r12,rcx
1403 mov r13,rdx
1404 mov r14,r8
1405 mov r15,r9
Adam Langleye9ada862015-05-11 17:20:37 -07001406 movdqa XMMWORD[32+rbp],xmm0
Adam Langleyd9e397b2015-01-22 14:27:53 -08001407 cmp r8,8
Adam Langleye9ada862015-05-11 17:20:37 -07001408 jb NEAR $L$ctr_enc_short
Adam Langleyd9e397b2015-01-22 14:27:53 -08001409
1410 mov ebx,eax
1411 shl rax,7
1412 sub rax,96
1413 sub rsp,rax
1414
1415 mov rax,rsp
1416 mov rcx,r15
1417 mov r10d,ebx
1418 call _bsaes_key_convert
1419 pxor xmm7,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001420 movdqa XMMWORD[rax],xmm7
Adam Langleyd9e397b2015-01-22 14:27:53 -08001421
Adam Langleye9ada862015-05-11 17:20:37 -07001422 movdqa xmm8,XMMWORD[rsp]
1423 lea r11,[$L$ADD1]
1424 movdqa xmm15,XMMWORD[32+rbp]
1425 movdqa xmm7,XMMWORD[((-32))+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001426DB 102,68,15,56,0,199
1427DB 102,68,15,56,0,255
Adam Langleye9ada862015-05-11 17:20:37 -07001428 movdqa XMMWORD[rsp],xmm8
1429 jmp NEAR $L$ctr_enc_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08001430ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001431$L$ctr_enc_loop:
1432 movdqa XMMWORD[32+rbp],xmm15
Adam Langleyd9e397b2015-01-22 14:27:53 -08001433 movdqa xmm0,xmm15
1434 movdqa xmm1,xmm15
Adam Langleye9ada862015-05-11 17:20:37 -07001435 paddd xmm0,XMMWORD[r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001436 movdqa xmm2,xmm15
Adam Langleye9ada862015-05-11 17:20:37 -07001437 paddd xmm1,XMMWORD[16+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001438 movdqa xmm3,xmm15
Adam Langleye9ada862015-05-11 17:20:37 -07001439 paddd xmm2,XMMWORD[32+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001440 movdqa xmm4,xmm15
Adam Langleye9ada862015-05-11 17:20:37 -07001441 paddd xmm3,XMMWORD[48+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001442 movdqa xmm5,xmm15
Adam Langleye9ada862015-05-11 17:20:37 -07001443 paddd xmm4,XMMWORD[64+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001444 movdqa xmm6,xmm15
Adam Langleye9ada862015-05-11 17:20:37 -07001445 paddd xmm5,XMMWORD[80+r11]
1446 paddd xmm6,XMMWORD[96+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001447
1448
1449
Adam Langleye9ada862015-05-11 17:20:37 -07001450 movdqa xmm8,XMMWORD[rsp]
1451 lea rax,[16+rsp]
1452 movdqa xmm7,XMMWORD[((-16))+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001453 pxor xmm15,xmm8
1454 pxor xmm0,xmm8
1455 pxor xmm1,xmm8
1456 pxor xmm2,xmm8
1457DB 102,68,15,56,0,255
1458DB 102,15,56,0,199
1459 pxor xmm3,xmm8
1460 pxor xmm4,xmm8
1461DB 102,15,56,0,207
1462DB 102,15,56,0,215
1463 pxor xmm5,xmm8
1464 pxor xmm6,xmm8
1465DB 102,15,56,0,223
1466DB 102,15,56,0,231
1467DB 102,15,56,0,239
1468DB 102,15,56,0,247
Adam Langleye9ada862015-05-11 17:20:37 -07001469 lea r11,[$L$BS0]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001470 mov r10d,ebx
1471
1472 call _bsaes_encrypt8_bitslice
1473
1474 sub r14,8
Adam Langleye9ada862015-05-11 17:20:37 -07001475 jc NEAR $L$ctr_enc_loop_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001476
Adam Langleye9ada862015-05-11 17:20:37 -07001477 movdqu xmm7,XMMWORD[r12]
1478 movdqu xmm8,XMMWORD[16+r12]
1479 movdqu xmm9,XMMWORD[32+r12]
1480 movdqu xmm10,XMMWORD[48+r12]
1481 movdqu xmm11,XMMWORD[64+r12]
1482 movdqu xmm12,XMMWORD[80+r12]
1483 movdqu xmm13,XMMWORD[96+r12]
1484 movdqu xmm14,XMMWORD[112+r12]
1485 lea r12,[128+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001486 pxor xmm7,xmm15
Adam Langleye9ada862015-05-11 17:20:37 -07001487 movdqa xmm15,XMMWORD[32+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001488 pxor xmm0,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07001489 movdqu XMMWORD[r13],xmm7
Adam Langleyd9e397b2015-01-22 14:27:53 -08001490 pxor xmm3,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07001491 movdqu XMMWORD[16+r13],xmm0
Adam Langleyd9e397b2015-01-22 14:27:53 -08001492 pxor xmm5,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07001493 movdqu XMMWORD[32+r13],xmm3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001494 pxor xmm2,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -07001495 movdqu XMMWORD[48+r13],xmm5
Adam Langleyd9e397b2015-01-22 14:27:53 -08001496 pxor xmm6,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -07001497 movdqu XMMWORD[64+r13],xmm2
Adam Langleyd9e397b2015-01-22 14:27:53 -08001498 pxor xmm1,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001499 movdqu XMMWORD[80+r13],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001500 pxor xmm4,xmm14
Adam Langleye9ada862015-05-11 17:20:37 -07001501 movdqu XMMWORD[96+r13],xmm1
1502 lea r11,[$L$ADD1]
1503 movdqu XMMWORD[112+r13],xmm4
1504 lea r13,[128+r13]
1505 paddd xmm15,XMMWORD[112+r11]
1506 jnz NEAR $L$ctr_enc_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08001507
Adam Langleye9ada862015-05-11 17:20:37 -07001508 jmp NEAR $L$ctr_enc_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001509ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001510$L$ctr_enc_loop_done:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001511 add r14,8
Adam Langleye9ada862015-05-11 17:20:37 -07001512 movdqu xmm7,XMMWORD[r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001513 pxor xmm15,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07001514 movdqu XMMWORD[r13],xmm15
Adam Langleyd9e397b2015-01-22 14:27:53 -08001515 cmp r14,2
Adam Langleye9ada862015-05-11 17:20:37 -07001516 jb NEAR $L$ctr_enc_done
1517 movdqu xmm8,XMMWORD[16+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001518 pxor xmm0,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07001519 movdqu XMMWORD[16+r13],xmm0
1520 je NEAR $L$ctr_enc_done
1521 movdqu xmm9,XMMWORD[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001522 pxor xmm3,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07001523 movdqu XMMWORD[32+r13],xmm3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001524 cmp r14,4
Adam Langleye9ada862015-05-11 17:20:37 -07001525 jb NEAR $L$ctr_enc_done
1526 movdqu xmm10,XMMWORD[48+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001527 pxor xmm5,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07001528 movdqu XMMWORD[48+r13],xmm5
1529 je NEAR $L$ctr_enc_done
1530 movdqu xmm11,XMMWORD[64+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001531 pxor xmm2,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -07001532 movdqu XMMWORD[64+r13],xmm2
Adam Langleyd9e397b2015-01-22 14:27:53 -08001533 cmp r14,6
Adam Langleye9ada862015-05-11 17:20:37 -07001534 jb NEAR $L$ctr_enc_done
1535 movdqu xmm12,XMMWORD[80+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001536 pxor xmm6,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -07001537 movdqu XMMWORD[80+r13],xmm6
1538 je NEAR $L$ctr_enc_done
1539 movdqu xmm13,XMMWORD[96+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001540 pxor xmm1,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001541 movdqu XMMWORD[96+r13],xmm1
1542 jmp NEAR $L$ctr_enc_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001543
1544ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001545$L$ctr_enc_short:
1546 lea rcx,[32+rbp]
1547 lea rdx,[48+rbp]
1548 lea r8,[r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001549 call asm_AES_encrypt
Adam Langleye9ada862015-05-11 17:20:37 -07001550 movdqu xmm0,XMMWORD[r12]
1551 lea r12,[16+r12]
1552 mov eax,DWORD[44+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001553 bswap eax
Adam Langleye9ada862015-05-11 17:20:37 -07001554 pxor xmm0,XMMWORD[48+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001555 inc eax
Adam Langleye9ada862015-05-11 17:20:37 -07001556 movdqu XMMWORD[r13],xmm0
Adam Langleyd9e397b2015-01-22 14:27:53 -08001557 bswap eax
Adam Langleye9ada862015-05-11 17:20:37 -07001558 lea r13,[16+r13]
1559 mov DWORD[44+rsp],eax
Adam Langleyd9e397b2015-01-22 14:27:53 -08001560 dec r14
Adam Langleye9ada862015-05-11 17:20:37 -07001561 jnz NEAR $L$ctr_enc_short
Adam Langleyd9e397b2015-01-22 14:27:53 -08001562
Adam Langleye9ada862015-05-11 17:20:37 -07001563$L$ctr_enc_done:
1564 lea rax,[rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001565 pxor xmm0,xmm0
Adam Langleye9ada862015-05-11 17:20:37 -07001566$L$ctr_enc_bzero:
1567 movdqa XMMWORD[rax],xmm0
1568 movdqa XMMWORD[16+rax],xmm0
1569 lea rax,[32+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001570 cmp rbp,rax
Adam Langleye9ada862015-05-11 17:20:37 -07001571 ja NEAR $L$ctr_enc_bzero
Adam Langleyd9e397b2015-01-22 14:27:53 -08001572
Robert Sloana94fe052017-02-21 08:49:28 -08001573 lea rax,[120+rbp]
Robert Sloanab8b8882018-03-26 11:39:51 -07001574
Adam Langleye9ada862015-05-11 17:20:37 -07001575 movaps xmm6,XMMWORD[64+rbp]
1576 movaps xmm7,XMMWORD[80+rbp]
1577 movaps xmm8,XMMWORD[96+rbp]
1578 movaps xmm9,XMMWORD[112+rbp]
1579 movaps xmm10,XMMWORD[128+rbp]
1580 movaps xmm11,XMMWORD[144+rbp]
1581 movaps xmm12,XMMWORD[160+rbp]
1582 movaps xmm13,XMMWORD[176+rbp]
1583 movaps xmm14,XMMWORD[192+rbp]
1584 movaps xmm15,XMMWORD[208+rbp]
Robert Sloana94fe052017-02-21 08:49:28 -08001585 lea rax,[160+rax]
1586$L$ctr_enc_tail:
1587 mov r15,QWORD[((-48))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001588
Robert Sloana94fe052017-02-21 08:49:28 -08001589 mov r14,QWORD[((-40))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001590
Robert Sloana94fe052017-02-21 08:49:28 -08001591 mov r13,QWORD[((-32))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001592
Robert Sloana94fe052017-02-21 08:49:28 -08001593 mov r12,QWORD[((-24))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001594
Robert Sloana94fe052017-02-21 08:49:28 -08001595 mov rbx,QWORD[((-16))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001596
Robert Sloana94fe052017-02-21 08:49:28 -08001597 mov rbp,QWORD[((-8))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001598
Robert Sloana94fe052017-02-21 08:49:28 -08001599 lea rsp,[rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07001600
Adam Langleye9ada862015-05-11 17:20:37 -07001601$L$ctr_enc_epilogue:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001602 DB 0F3h,0C3h ;repret
Adam Langleye9ada862015-05-11 17:20:37 -07001603
Robert Sloanab8b8882018-03-26 11:39:51 -07001604
Adam Langleye9ada862015-05-11 17:20:37 -07001605global bsaes_xts_encrypt
Adam Langleyd9e397b2015-01-22 14:27:53 -08001606
1607ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001608bsaes_xts_encrypt:
Robert Sloanab8b8882018-03-26 11:39:51 -07001609
Adam Langleyd9e397b2015-01-22 14:27:53 -08001610 mov rax,rsp
Adam Langleye9ada862015-05-11 17:20:37 -07001611$L$xts_enc_prologue:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001612 push rbp
Robert Sloanab8b8882018-03-26 11:39:51 -07001613
Adam Langleyd9e397b2015-01-22 14:27:53 -08001614 push rbx
Robert Sloanab8b8882018-03-26 11:39:51 -07001615
Adam Langleyd9e397b2015-01-22 14:27:53 -08001616 push r12
Robert Sloanab8b8882018-03-26 11:39:51 -07001617
Adam Langleyd9e397b2015-01-22 14:27:53 -08001618 push r13
Robert Sloanab8b8882018-03-26 11:39:51 -07001619
Adam Langleyd9e397b2015-01-22 14:27:53 -08001620 push r14
Robert Sloanab8b8882018-03-26 11:39:51 -07001621
Adam Langleyd9e397b2015-01-22 14:27:53 -08001622 push r15
Robert Sloanab8b8882018-03-26 11:39:51 -07001623
Adam Langleye9ada862015-05-11 17:20:37 -07001624 lea rsp,[((-72))+rsp]
Robert Sloanab8b8882018-03-26 11:39:51 -07001625
Adam Langleye9ada862015-05-11 17:20:37 -07001626 mov r10,QWORD[160+rsp]
1627 mov r11,QWORD[168+rsp]
1628 lea rsp,[((-160))+rsp]
1629 movaps XMMWORD[64+rsp],xmm6
1630 movaps XMMWORD[80+rsp],xmm7
1631 movaps XMMWORD[96+rsp],xmm8
1632 movaps XMMWORD[112+rsp],xmm9
1633 movaps XMMWORD[128+rsp],xmm10
1634 movaps XMMWORD[144+rsp],xmm11
1635 movaps XMMWORD[160+rsp],xmm12
1636 movaps XMMWORD[176+rsp],xmm13
1637 movaps XMMWORD[192+rsp],xmm14
1638 movaps XMMWORD[208+rsp],xmm15
1639$L$xts_enc_body:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001640 mov rbp,rsp
Robert Sloanab8b8882018-03-26 11:39:51 -07001641
Adam Langleyd9e397b2015-01-22 14:27:53 -08001642 mov r12,rcx
1643 mov r13,rdx
1644 mov r14,r8
1645 mov r15,r9
1646
Adam Langleye9ada862015-05-11 17:20:37 -07001647 lea rcx,[r11]
1648 lea rdx,[32+rbp]
1649 lea r8,[r10]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001650 call asm_AES_encrypt
1651
Adam Langleye9ada862015-05-11 17:20:37 -07001652 mov eax,DWORD[240+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001653 mov rbx,r14
1654
1655 mov edx,eax
1656 shl rax,7
1657 sub rax,96
1658 sub rsp,rax
1659
1660 mov rax,rsp
1661 mov rcx,r15
1662 mov r10d,edx
1663 call _bsaes_key_convert
1664 pxor xmm7,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001665 movdqa XMMWORD[rax],xmm7
Adam Langleyd9e397b2015-01-22 14:27:53 -08001666
1667 and r14,-16
Adam Langleye9ada862015-05-11 17:20:37 -07001668 sub rsp,0x80
1669 movdqa xmm6,XMMWORD[32+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001670
1671 pxor xmm14,xmm14
Adam Langleye9ada862015-05-11 17:20:37 -07001672 movdqa xmm12,XMMWORD[$L$xts_magic]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001673 pcmpgtd xmm14,xmm6
1674
Adam Langleye9ada862015-05-11 17:20:37 -07001675 sub r14,0x80
1676 jc NEAR $L$xts_enc_short
1677 jmp NEAR $L$xts_enc_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08001678
1679ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001680$L$xts_enc_loop:
1681 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001682 pxor xmm14,xmm14
1683 movdqa xmm15,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001684 movdqa XMMWORD[rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001685 paddq xmm6,xmm6
1686 pand xmm13,xmm12
1687 pcmpgtd xmm14,xmm6
1688 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001689 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001690 pxor xmm14,xmm14
1691 movdqa xmm0,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001692 movdqa XMMWORD[16+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001693 paddq xmm6,xmm6
1694 pand xmm13,xmm12
1695 pcmpgtd xmm14,xmm6
1696 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001697 movdqu xmm7,XMMWORD[r12]
1698 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001699 pxor xmm14,xmm14
1700 movdqa xmm1,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001701 movdqa XMMWORD[32+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001702 paddq xmm6,xmm6
1703 pand xmm13,xmm12
1704 pcmpgtd xmm14,xmm6
1705 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001706 movdqu xmm8,XMMWORD[16+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001707 pxor xmm15,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07001708 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001709 pxor xmm14,xmm14
1710 movdqa xmm2,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001711 movdqa XMMWORD[48+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001712 paddq xmm6,xmm6
1713 pand xmm13,xmm12
1714 pcmpgtd xmm14,xmm6
1715 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001716 movdqu xmm9,XMMWORD[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001717 pxor xmm0,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07001718 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001719 pxor xmm14,xmm14
1720 movdqa xmm3,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001721 movdqa XMMWORD[64+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001722 paddq xmm6,xmm6
1723 pand xmm13,xmm12
1724 pcmpgtd xmm14,xmm6
1725 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001726 movdqu xmm10,XMMWORD[48+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001727 pxor xmm1,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07001728 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001729 pxor xmm14,xmm14
1730 movdqa xmm4,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001731 movdqa XMMWORD[80+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001732 paddq xmm6,xmm6
1733 pand xmm13,xmm12
1734 pcmpgtd xmm14,xmm6
1735 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001736 movdqu xmm11,XMMWORD[64+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001737 pxor xmm2,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07001738 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001739 pxor xmm14,xmm14
1740 movdqa xmm5,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001741 movdqa XMMWORD[96+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001742 paddq xmm6,xmm6
1743 pand xmm13,xmm12
1744 pcmpgtd xmm14,xmm6
1745 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001746 movdqu xmm12,XMMWORD[80+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001747 pxor xmm3,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -07001748 movdqu xmm13,XMMWORD[96+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001749 pxor xmm4,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -07001750 movdqu xmm14,XMMWORD[112+r12]
1751 lea r12,[128+r12]
1752 movdqa XMMWORD[112+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001753 pxor xmm5,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001754 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001755 pxor xmm6,xmm14
1756 mov r10d,edx
1757
1758 call _bsaes_encrypt8
1759
Adam Langleye9ada862015-05-11 17:20:37 -07001760 pxor xmm15,XMMWORD[rsp]
1761 pxor xmm0,XMMWORD[16+rsp]
1762 movdqu XMMWORD[r13],xmm15
1763 pxor xmm3,XMMWORD[32+rsp]
1764 movdqu XMMWORD[16+r13],xmm0
1765 pxor xmm5,XMMWORD[48+rsp]
1766 movdqu XMMWORD[32+r13],xmm3
1767 pxor xmm2,XMMWORD[64+rsp]
1768 movdqu XMMWORD[48+r13],xmm5
1769 pxor xmm6,XMMWORD[80+rsp]
1770 movdqu XMMWORD[64+r13],xmm2
1771 pxor xmm1,XMMWORD[96+rsp]
1772 movdqu XMMWORD[80+r13],xmm6
1773 pxor xmm4,XMMWORD[112+rsp]
1774 movdqu XMMWORD[96+r13],xmm1
1775 movdqu XMMWORD[112+r13],xmm4
1776 lea r13,[128+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001777
Adam Langleye9ada862015-05-11 17:20:37 -07001778 movdqa xmm6,XMMWORD[112+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001779 pxor xmm14,xmm14
Adam Langleye9ada862015-05-11 17:20:37 -07001780 movdqa xmm12,XMMWORD[$L$xts_magic]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001781 pcmpgtd xmm14,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001782 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001783 pxor xmm14,xmm14
1784 paddq xmm6,xmm6
1785 pand xmm13,xmm12
1786 pcmpgtd xmm14,xmm6
1787 pxor xmm6,xmm13
1788
Adam Langleye9ada862015-05-11 17:20:37 -07001789 sub r14,0x80
1790 jnc NEAR $L$xts_enc_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08001791
Adam Langleye9ada862015-05-11 17:20:37 -07001792$L$xts_enc_short:
1793 add r14,0x80
1794 jz NEAR $L$xts_enc_done
1795 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001796 pxor xmm14,xmm14
1797 movdqa xmm15,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001798 movdqa XMMWORD[rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001799 paddq xmm6,xmm6
1800 pand xmm13,xmm12
1801 pcmpgtd xmm14,xmm6
1802 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001803 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001804 pxor xmm14,xmm14
1805 movdqa xmm0,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001806 movdqa XMMWORD[16+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001807 paddq xmm6,xmm6
1808 pand xmm13,xmm12
1809 pcmpgtd xmm14,xmm6
1810 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001811 movdqu xmm7,XMMWORD[r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001812 cmp r14,16
Adam Langleye9ada862015-05-11 17:20:37 -07001813 je NEAR $L$xts_enc_1
1814 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001815 pxor xmm14,xmm14
1816 movdqa xmm1,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001817 movdqa XMMWORD[32+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001818 paddq xmm6,xmm6
1819 pand xmm13,xmm12
1820 pcmpgtd xmm14,xmm6
1821 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001822 movdqu xmm8,XMMWORD[16+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001823 cmp r14,32
Adam Langleye9ada862015-05-11 17:20:37 -07001824 je NEAR $L$xts_enc_2
Adam Langleyd9e397b2015-01-22 14:27:53 -08001825 pxor xmm15,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07001826 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001827 pxor xmm14,xmm14
1828 movdqa xmm2,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001829 movdqa XMMWORD[48+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001830 paddq xmm6,xmm6
1831 pand xmm13,xmm12
1832 pcmpgtd xmm14,xmm6
1833 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001834 movdqu xmm9,XMMWORD[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001835 cmp r14,48
Adam Langleye9ada862015-05-11 17:20:37 -07001836 je NEAR $L$xts_enc_3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001837 pxor xmm0,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07001838 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001839 pxor xmm14,xmm14
1840 movdqa xmm3,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001841 movdqa XMMWORD[64+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001842 paddq xmm6,xmm6
1843 pand xmm13,xmm12
1844 pcmpgtd xmm14,xmm6
1845 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001846 movdqu xmm10,XMMWORD[48+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001847 cmp r14,64
Adam Langleye9ada862015-05-11 17:20:37 -07001848 je NEAR $L$xts_enc_4
Adam Langleyd9e397b2015-01-22 14:27:53 -08001849 pxor xmm1,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07001850 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001851 pxor xmm14,xmm14
1852 movdqa xmm4,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001853 movdqa XMMWORD[80+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001854 paddq xmm6,xmm6
1855 pand xmm13,xmm12
1856 pcmpgtd xmm14,xmm6
1857 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001858 movdqu xmm11,XMMWORD[64+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001859 cmp r14,80
Adam Langleye9ada862015-05-11 17:20:37 -07001860 je NEAR $L$xts_enc_5
Adam Langleyd9e397b2015-01-22 14:27:53 -08001861 pxor xmm2,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07001862 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001863 pxor xmm14,xmm14
1864 movdqa xmm5,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07001865 movdqa XMMWORD[96+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001866 paddq xmm6,xmm6
1867 pand xmm13,xmm12
1868 pcmpgtd xmm14,xmm6
1869 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001870 movdqu xmm12,XMMWORD[80+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001871 cmp r14,96
Adam Langleye9ada862015-05-11 17:20:37 -07001872 je NEAR $L$xts_enc_6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001873 pxor xmm3,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -07001874 movdqu xmm13,XMMWORD[96+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001875 pxor xmm4,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -07001876 movdqa XMMWORD[112+rsp],xmm6
1877 lea r12,[112+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001878 pxor xmm5,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07001879 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001880 mov r10d,edx
1881
1882 call _bsaes_encrypt8
1883
Adam Langleye9ada862015-05-11 17:20:37 -07001884 pxor xmm15,XMMWORD[rsp]
1885 pxor xmm0,XMMWORD[16+rsp]
1886 movdqu XMMWORD[r13],xmm15
1887 pxor xmm3,XMMWORD[32+rsp]
1888 movdqu XMMWORD[16+r13],xmm0
1889 pxor xmm5,XMMWORD[48+rsp]
1890 movdqu XMMWORD[32+r13],xmm3
1891 pxor xmm2,XMMWORD[64+rsp]
1892 movdqu XMMWORD[48+r13],xmm5
1893 pxor xmm6,XMMWORD[80+rsp]
1894 movdqu XMMWORD[64+r13],xmm2
1895 pxor xmm1,XMMWORD[96+rsp]
1896 movdqu XMMWORD[80+r13],xmm6
1897 movdqu XMMWORD[96+r13],xmm1
1898 lea r13,[112+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001899
Adam Langleye9ada862015-05-11 17:20:37 -07001900 movdqa xmm6,XMMWORD[112+rsp]
1901 jmp NEAR $L$xts_enc_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001902ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001903$L$xts_enc_6:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001904 pxor xmm3,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -07001905 lea r12,[96+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001906 pxor xmm4,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -07001907 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001908 mov r10d,edx
1909
1910 call _bsaes_encrypt8
1911
Adam Langleye9ada862015-05-11 17:20:37 -07001912 pxor xmm15,XMMWORD[rsp]
1913 pxor xmm0,XMMWORD[16+rsp]
1914 movdqu XMMWORD[r13],xmm15
1915 pxor xmm3,XMMWORD[32+rsp]
1916 movdqu XMMWORD[16+r13],xmm0
1917 pxor xmm5,XMMWORD[48+rsp]
1918 movdqu XMMWORD[32+r13],xmm3
1919 pxor xmm2,XMMWORD[64+rsp]
1920 movdqu XMMWORD[48+r13],xmm5
1921 pxor xmm6,XMMWORD[80+rsp]
1922 movdqu XMMWORD[64+r13],xmm2
1923 movdqu XMMWORD[80+r13],xmm6
1924 lea r13,[96+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001925
Adam Langleye9ada862015-05-11 17:20:37 -07001926 movdqa xmm6,XMMWORD[96+rsp]
1927 jmp NEAR $L$xts_enc_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001928ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001929$L$xts_enc_5:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001930 pxor xmm2,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07001931 lea r12,[80+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001932 pxor xmm3,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -07001933 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001934 mov r10d,edx
1935
1936 call _bsaes_encrypt8
1937
Adam Langleye9ada862015-05-11 17:20:37 -07001938 pxor xmm15,XMMWORD[rsp]
1939 pxor xmm0,XMMWORD[16+rsp]
1940 movdqu XMMWORD[r13],xmm15
1941 pxor xmm3,XMMWORD[32+rsp]
1942 movdqu XMMWORD[16+r13],xmm0
1943 pxor xmm5,XMMWORD[48+rsp]
1944 movdqu XMMWORD[32+r13],xmm3
1945 pxor xmm2,XMMWORD[64+rsp]
1946 movdqu XMMWORD[48+r13],xmm5
1947 movdqu XMMWORD[64+r13],xmm2
1948 lea r13,[80+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001949
Adam Langleye9ada862015-05-11 17:20:37 -07001950 movdqa xmm6,XMMWORD[80+rsp]
1951 jmp NEAR $L$xts_enc_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001952ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001953$L$xts_enc_4:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001954 pxor xmm1,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07001955 lea r12,[64+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001956 pxor xmm2,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07001957 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001958 mov r10d,edx
1959
1960 call _bsaes_encrypt8
1961
Adam Langleye9ada862015-05-11 17:20:37 -07001962 pxor xmm15,XMMWORD[rsp]
1963 pxor xmm0,XMMWORD[16+rsp]
1964 movdqu XMMWORD[r13],xmm15
1965 pxor xmm3,XMMWORD[32+rsp]
1966 movdqu XMMWORD[16+r13],xmm0
1967 pxor xmm5,XMMWORD[48+rsp]
1968 movdqu XMMWORD[32+r13],xmm3
1969 movdqu XMMWORD[48+r13],xmm5
1970 lea r13,[64+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001971
Adam Langleye9ada862015-05-11 17:20:37 -07001972 movdqa xmm6,XMMWORD[64+rsp]
1973 jmp NEAR $L$xts_enc_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001974ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001975$L$xts_enc_3:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001976 pxor xmm0,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07001977 lea r12,[48+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001978 pxor xmm1,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07001979 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001980 mov r10d,edx
1981
1982 call _bsaes_encrypt8
1983
Adam Langleye9ada862015-05-11 17:20:37 -07001984 pxor xmm15,XMMWORD[rsp]
1985 pxor xmm0,XMMWORD[16+rsp]
1986 movdqu XMMWORD[r13],xmm15
1987 pxor xmm3,XMMWORD[32+rsp]
1988 movdqu XMMWORD[16+r13],xmm0
1989 movdqu XMMWORD[32+r13],xmm3
1990 lea r13,[48+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001991
Adam Langleye9ada862015-05-11 17:20:37 -07001992 movdqa xmm6,XMMWORD[48+rsp]
1993 jmp NEAR $L$xts_enc_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001994ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001995$L$xts_enc_2:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001996 pxor xmm15,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07001997 lea r12,[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001998 pxor xmm0,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07001999 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002000 mov r10d,edx
2001
2002 call _bsaes_encrypt8
2003
Adam Langleye9ada862015-05-11 17:20:37 -07002004 pxor xmm15,XMMWORD[rsp]
2005 pxor xmm0,XMMWORD[16+rsp]
2006 movdqu XMMWORD[r13],xmm15
2007 movdqu XMMWORD[16+r13],xmm0
2008 lea r13,[32+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002009
Adam Langleye9ada862015-05-11 17:20:37 -07002010 movdqa xmm6,XMMWORD[32+rsp]
2011 jmp NEAR $L$xts_enc_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08002012ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07002013$L$xts_enc_1:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002014 pxor xmm7,xmm15
Adam Langleye9ada862015-05-11 17:20:37 -07002015 lea r12,[16+r12]
2016 movdqa XMMWORD[32+rbp],xmm7
2017 lea rcx,[32+rbp]
2018 lea rdx,[32+rbp]
2019 lea r8,[r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002020 call asm_AES_encrypt
Adam Langleye9ada862015-05-11 17:20:37 -07002021 pxor xmm15,XMMWORD[32+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002022
2023
2024
2025
2026
Adam Langleye9ada862015-05-11 17:20:37 -07002027 movdqu XMMWORD[r13],xmm15
2028 lea r13,[16+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002029
Adam Langleye9ada862015-05-11 17:20:37 -07002030 movdqa xmm6,XMMWORD[16+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002031
Adam Langleye9ada862015-05-11 17:20:37 -07002032$L$xts_enc_done:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002033 and ebx,15
Adam Langleye9ada862015-05-11 17:20:37 -07002034 jz NEAR $L$xts_enc_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -08002035 mov rdx,r13
2036
Adam Langleye9ada862015-05-11 17:20:37 -07002037$L$xts_enc_steal:
2038 movzx eax,BYTE[r12]
2039 movzx ecx,BYTE[((-16))+rdx]
2040 lea r12,[1+r12]
2041 mov BYTE[((-16))+rdx],al
2042 mov BYTE[rdx],cl
2043 lea rdx,[1+rdx]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002044 sub ebx,1
Adam Langleye9ada862015-05-11 17:20:37 -07002045 jnz NEAR $L$xts_enc_steal
Adam Langleyd9e397b2015-01-22 14:27:53 -08002046
Adam Langleye9ada862015-05-11 17:20:37 -07002047 movdqu xmm15,XMMWORD[((-16))+r13]
2048 lea rcx,[32+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002049 pxor xmm15,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002050 lea rdx,[32+rbp]
2051 movdqa XMMWORD[32+rbp],xmm15
2052 lea r8,[r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002053 call asm_AES_encrypt
Adam Langleye9ada862015-05-11 17:20:37 -07002054 pxor xmm6,XMMWORD[32+rbp]
2055 movdqu XMMWORD[(-16)+r13],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002056
Adam Langleye9ada862015-05-11 17:20:37 -07002057$L$xts_enc_ret:
2058 lea rax,[rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002059 pxor xmm0,xmm0
Adam Langleye9ada862015-05-11 17:20:37 -07002060$L$xts_enc_bzero:
2061 movdqa XMMWORD[rax],xmm0
2062 movdqa XMMWORD[16+rax],xmm0
2063 lea rax,[32+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002064 cmp rbp,rax
Adam Langleye9ada862015-05-11 17:20:37 -07002065 ja NEAR $L$xts_enc_bzero
Adam Langleyd9e397b2015-01-22 14:27:53 -08002066
Robert Sloana94fe052017-02-21 08:49:28 -08002067 lea rax,[120+rbp]
Robert Sloanab8b8882018-03-26 11:39:51 -07002068
Adam Langleye9ada862015-05-11 17:20:37 -07002069 movaps xmm6,XMMWORD[64+rbp]
2070 movaps xmm7,XMMWORD[80+rbp]
2071 movaps xmm8,XMMWORD[96+rbp]
2072 movaps xmm9,XMMWORD[112+rbp]
2073 movaps xmm10,XMMWORD[128+rbp]
2074 movaps xmm11,XMMWORD[144+rbp]
2075 movaps xmm12,XMMWORD[160+rbp]
2076 movaps xmm13,XMMWORD[176+rbp]
2077 movaps xmm14,XMMWORD[192+rbp]
2078 movaps xmm15,XMMWORD[208+rbp]
Robert Sloana94fe052017-02-21 08:49:28 -08002079 lea rax,[160+rax]
2080$L$xts_enc_tail:
2081 mov r15,QWORD[((-48))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002082
Robert Sloana94fe052017-02-21 08:49:28 -08002083 mov r14,QWORD[((-40))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002084
Robert Sloana94fe052017-02-21 08:49:28 -08002085 mov r13,QWORD[((-32))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002086
Robert Sloana94fe052017-02-21 08:49:28 -08002087 mov r12,QWORD[((-24))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002088
Robert Sloana94fe052017-02-21 08:49:28 -08002089 mov rbx,QWORD[((-16))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002090
Robert Sloana94fe052017-02-21 08:49:28 -08002091 mov rbp,QWORD[((-8))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002092
Robert Sloana94fe052017-02-21 08:49:28 -08002093 lea rsp,[rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002094
Adam Langleye9ada862015-05-11 17:20:37 -07002095$L$xts_enc_epilogue:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002096 DB 0F3h,0C3h ;repret
Adam Langleyd9e397b2015-01-22 14:27:53 -08002097
Adam Langleye9ada862015-05-11 17:20:37 -07002098
Robert Sloanab8b8882018-03-26 11:39:51 -07002099
Adam Langleye9ada862015-05-11 17:20:37 -07002100global bsaes_xts_decrypt
Adam Langleyd9e397b2015-01-22 14:27:53 -08002101
2102ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07002103bsaes_xts_decrypt:
Robert Sloanab8b8882018-03-26 11:39:51 -07002104
Adam Langleyd9e397b2015-01-22 14:27:53 -08002105 mov rax,rsp
Adam Langleye9ada862015-05-11 17:20:37 -07002106$L$xts_dec_prologue:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002107 push rbp
Robert Sloanab8b8882018-03-26 11:39:51 -07002108
Adam Langleyd9e397b2015-01-22 14:27:53 -08002109 push rbx
Robert Sloanab8b8882018-03-26 11:39:51 -07002110
Adam Langleyd9e397b2015-01-22 14:27:53 -08002111 push r12
Robert Sloanab8b8882018-03-26 11:39:51 -07002112
Adam Langleyd9e397b2015-01-22 14:27:53 -08002113 push r13
Robert Sloanab8b8882018-03-26 11:39:51 -07002114
Adam Langleyd9e397b2015-01-22 14:27:53 -08002115 push r14
Robert Sloanab8b8882018-03-26 11:39:51 -07002116
Adam Langleyd9e397b2015-01-22 14:27:53 -08002117 push r15
Robert Sloanab8b8882018-03-26 11:39:51 -07002118
Adam Langleye9ada862015-05-11 17:20:37 -07002119 lea rsp,[((-72))+rsp]
Robert Sloanab8b8882018-03-26 11:39:51 -07002120
Adam Langleye9ada862015-05-11 17:20:37 -07002121 mov r10,QWORD[160+rsp]
2122 mov r11,QWORD[168+rsp]
2123 lea rsp,[((-160))+rsp]
2124 movaps XMMWORD[64+rsp],xmm6
2125 movaps XMMWORD[80+rsp],xmm7
2126 movaps XMMWORD[96+rsp],xmm8
2127 movaps XMMWORD[112+rsp],xmm9
2128 movaps XMMWORD[128+rsp],xmm10
2129 movaps XMMWORD[144+rsp],xmm11
2130 movaps XMMWORD[160+rsp],xmm12
2131 movaps XMMWORD[176+rsp],xmm13
2132 movaps XMMWORD[192+rsp],xmm14
2133 movaps XMMWORD[208+rsp],xmm15
2134$L$xts_dec_body:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002135 mov rbp,rsp
2136 mov r12,rcx
2137 mov r13,rdx
2138 mov r14,r8
2139 mov r15,r9
2140
Adam Langleye9ada862015-05-11 17:20:37 -07002141 lea rcx,[r11]
2142 lea rdx,[32+rbp]
2143 lea r8,[r10]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002144 call asm_AES_encrypt
2145
Adam Langleye9ada862015-05-11 17:20:37 -07002146 mov eax,DWORD[240+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002147 mov rbx,r14
2148
2149 mov edx,eax
2150 shl rax,7
2151 sub rax,96
2152 sub rsp,rax
2153
2154 mov rax,rsp
2155 mov rcx,r15
2156 mov r10d,edx
2157 call _bsaes_key_convert
Adam Langleye9ada862015-05-11 17:20:37 -07002158 pxor xmm7,XMMWORD[rsp]
2159 movdqa XMMWORD[rax],xmm6
2160 movdqa XMMWORD[rsp],xmm7
Adam Langleyd9e397b2015-01-22 14:27:53 -08002161
2162 xor eax,eax
2163 and r14,-16
2164 test ebx,15
2165 setnz al
2166 shl rax,4
2167 sub r14,rax
2168
Adam Langleye9ada862015-05-11 17:20:37 -07002169 sub rsp,0x80
2170 movdqa xmm6,XMMWORD[32+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002171
2172 pxor xmm14,xmm14
Adam Langleye9ada862015-05-11 17:20:37 -07002173 movdqa xmm12,XMMWORD[$L$xts_magic]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002174 pcmpgtd xmm14,xmm6
2175
Adam Langleye9ada862015-05-11 17:20:37 -07002176 sub r14,0x80
2177 jc NEAR $L$xts_dec_short
2178 jmp NEAR $L$xts_dec_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08002179
2180ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07002181$L$xts_dec_loop:
2182 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002183 pxor xmm14,xmm14
2184 movdqa xmm15,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002185 movdqa XMMWORD[rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002186 paddq xmm6,xmm6
2187 pand xmm13,xmm12
2188 pcmpgtd xmm14,xmm6
2189 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002190 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002191 pxor xmm14,xmm14
2192 movdqa xmm0,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002193 movdqa XMMWORD[16+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002194 paddq xmm6,xmm6
2195 pand xmm13,xmm12
2196 pcmpgtd xmm14,xmm6
2197 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002198 movdqu xmm7,XMMWORD[r12]
2199 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002200 pxor xmm14,xmm14
2201 movdqa xmm1,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002202 movdqa XMMWORD[32+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002203 paddq xmm6,xmm6
2204 pand xmm13,xmm12
2205 pcmpgtd xmm14,xmm6
2206 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002207 movdqu xmm8,XMMWORD[16+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002208 pxor xmm15,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07002209 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002210 pxor xmm14,xmm14
2211 movdqa xmm2,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002212 movdqa XMMWORD[48+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002213 paddq xmm6,xmm6
2214 pand xmm13,xmm12
2215 pcmpgtd xmm14,xmm6
2216 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002217 movdqu xmm9,XMMWORD[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002218 pxor xmm0,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07002219 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002220 pxor xmm14,xmm14
2221 movdqa xmm3,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002222 movdqa XMMWORD[64+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002223 paddq xmm6,xmm6
2224 pand xmm13,xmm12
2225 pcmpgtd xmm14,xmm6
2226 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002227 movdqu xmm10,XMMWORD[48+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002228 pxor xmm1,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07002229 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002230 pxor xmm14,xmm14
2231 movdqa xmm4,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002232 movdqa XMMWORD[80+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002233 paddq xmm6,xmm6
2234 pand xmm13,xmm12
2235 pcmpgtd xmm14,xmm6
2236 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002237 movdqu xmm11,XMMWORD[64+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002238 pxor xmm2,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07002239 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002240 pxor xmm14,xmm14
2241 movdqa xmm5,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002242 movdqa XMMWORD[96+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002243 paddq xmm6,xmm6
2244 pand xmm13,xmm12
2245 pcmpgtd xmm14,xmm6
2246 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002247 movdqu xmm12,XMMWORD[80+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002248 pxor xmm3,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -07002249 movdqu xmm13,XMMWORD[96+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002250 pxor xmm4,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -07002251 movdqu xmm14,XMMWORD[112+r12]
2252 lea r12,[128+r12]
2253 movdqa XMMWORD[112+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002254 pxor xmm5,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002255 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002256 pxor xmm6,xmm14
2257 mov r10d,edx
2258
2259 call _bsaes_decrypt8
2260
Adam Langleye9ada862015-05-11 17:20:37 -07002261 pxor xmm15,XMMWORD[rsp]
2262 pxor xmm0,XMMWORD[16+rsp]
2263 movdqu XMMWORD[r13],xmm15
2264 pxor xmm5,XMMWORD[32+rsp]
2265 movdqu XMMWORD[16+r13],xmm0
2266 pxor xmm3,XMMWORD[48+rsp]
2267 movdqu XMMWORD[32+r13],xmm5
2268 pxor xmm1,XMMWORD[64+rsp]
2269 movdqu XMMWORD[48+r13],xmm3
2270 pxor xmm6,XMMWORD[80+rsp]
2271 movdqu XMMWORD[64+r13],xmm1
2272 pxor xmm2,XMMWORD[96+rsp]
2273 movdqu XMMWORD[80+r13],xmm6
2274 pxor xmm4,XMMWORD[112+rsp]
2275 movdqu XMMWORD[96+r13],xmm2
2276 movdqu XMMWORD[112+r13],xmm4
2277 lea r13,[128+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002278
Adam Langleye9ada862015-05-11 17:20:37 -07002279 movdqa xmm6,XMMWORD[112+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002280 pxor xmm14,xmm14
Adam Langleye9ada862015-05-11 17:20:37 -07002281 movdqa xmm12,XMMWORD[$L$xts_magic]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002282 pcmpgtd xmm14,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002283 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002284 pxor xmm14,xmm14
2285 paddq xmm6,xmm6
2286 pand xmm13,xmm12
2287 pcmpgtd xmm14,xmm6
2288 pxor xmm6,xmm13
2289
Adam Langleye9ada862015-05-11 17:20:37 -07002290 sub r14,0x80
2291 jnc NEAR $L$xts_dec_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08002292
Adam Langleye9ada862015-05-11 17:20:37 -07002293$L$xts_dec_short:
2294 add r14,0x80
2295 jz NEAR $L$xts_dec_done
2296 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002297 pxor xmm14,xmm14
2298 movdqa xmm15,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002299 movdqa XMMWORD[rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002300 paddq xmm6,xmm6
2301 pand xmm13,xmm12
2302 pcmpgtd xmm14,xmm6
2303 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002304 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002305 pxor xmm14,xmm14
2306 movdqa xmm0,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002307 movdqa XMMWORD[16+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002308 paddq xmm6,xmm6
2309 pand xmm13,xmm12
2310 pcmpgtd xmm14,xmm6
2311 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002312 movdqu xmm7,XMMWORD[r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002313 cmp r14,16
Adam Langleye9ada862015-05-11 17:20:37 -07002314 je NEAR $L$xts_dec_1
2315 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002316 pxor xmm14,xmm14
2317 movdqa xmm1,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002318 movdqa XMMWORD[32+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002319 paddq xmm6,xmm6
2320 pand xmm13,xmm12
2321 pcmpgtd xmm14,xmm6
2322 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002323 movdqu xmm8,XMMWORD[16+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002324 cmp r14,32
Adam Langleye9ada862015-05-11 17:20:37 -07002325 je NEAR $L$xts_dec_2
Adam Langleyd9e397b2015-01-22 14:27:53 -08002326 pxor xmm15,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07002327 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002328 pxor xmm14,xmm14
2329 movdqa xmm2,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002330 movdqa XMMWORD[48+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002331 paddq xmm6,xmm6
2332 pand xmm13,xmm12
2333 pcmpgtd xmm14,xmm6
2334 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002335 movdqu xmm9,XMMWORD[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002336 cmp r14,48
Adam Langleye9ada862015-05-11 17:20:37 -07002337 je NEAR $L$xts_dec_3
Adam Langleyd9e397b2015-01-22 14:27:53 -08002338 pxor xmm0,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07002339 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002340 pxor xmm14,xmm14
2341 movdqa xmm3,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002342 movdqa XMMWORD[64+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002343 paddq xmm6,xmm6
2344 pand xmm13,xmm12
2345 pcmpgtd xmm14,xmm6
2346 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002347 movdqu xmm10,XMMWORD[48+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002348 cmp r14,64
Adam Langleye9ada862015-05-11 17:20:37 -07002349 je NEAR $L$xts_dec_4
Adam Langleyd9e397b2015-01-22 14:27:53 -08002350 pxor xmm1,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07002351 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002352 pxor xmm14,xmm14
2353 movdqa xmm4,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002354 movdqa XMMWORD[80+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002355 paddq xmm6,xmm6
2356 pand xmm13,xmm12
2357 pcmpgtd xmm14,xmm6
2358 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002359 movdqu xmm11,XMMWORD[64+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002360 cmp r14,80
Adam Langleye9ada862015-05-11 17:20:37 -07002361 je NEAR $L$xts_dec_5
Adam Langleyd9e397b2015-01-22 14:27:53 -08002362 pxor xmm2,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07002363 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002364 pxor xmm14,xmm14
2365 movdqa xmm5,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002366 movdqa XMMWORD[96+rsp],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002367 paddq xmm6,xmm6
2368 pand xmm13,xmm12
2369 pcmpgtd xmm14,xmm6
2370 pxor xmm6,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002371 movdqu xmm12,XMMWORD[80+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002372 cmp r14,96
Adam Langleye9ada862015-05-11 17:20:37 -07002373 je NEAR $L$xts_dec_6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002374 pxor xmm3,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -07002375 movdqu xmm13,XMMWORD[96+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002376 pxor xmm4,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -07002377 movdqa XMMWORD[112+rsp],xmm6
2378 lea r12,[112+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002379 pxor xmm5,xmm13
Adam Langleye9ada862015-05-11 17:20:37 -07002380 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002381 mov r10d,edx
2382
2383 call _bsaes_decrypt8
2384
Adam Langleye9ada862015-05-11 17:20:37 -07002385 pxor xmm15,XMMWORD[rsp]
2386 pxor xmm0,XMMWORD[16+rsp]
2387 movdqu XMMWORD[r13],xmm15
2388 pxor xmm5,XMMWORD[32+rsp]
2389 movdqu XMMWORD[16+r13],xmm0
2390 pxor xmm3,XMMWORD[48+rsp]
2391 movdqu XMMWORD[32+r13],xmm5
2392 pxor xmm1,XMMWORD[64+rsp]
2393 movdqu XMMWORD[48+r13],xmm3
2394 pxor xmm6,XMMWORD[80+rsp]
2395 movdqu XMMWORD[64+r13],xmm1
2396 pxor xmm2,XMMWORD[96+rsp]
2397 movdqu XMMWORD[80+r13],xmm6
2398 movdqu XMMWORD[96+r13],xmm2
2399 lea r13,[112+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002400
Adam Langleye9ada862015-05-11 17:20:37 -07002401 movdqa xmm6,XMMWORD[112+rsp]
2402 jmp NEAR $L$xts_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08002403ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07002404$L$xts_dec_6:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002405 pxor xmm3,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -07002406 lea r12,[96+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002407 pxor xmm4,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -07002408 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002409 mov r10d,edx
2410
2411 call _bsaes_decrypt8
2412
Adam Langleye9ada862015-05-11 17:20:37 -07002413 pxor xmm15,XMMWORD[rsp]
2414 pxor xmm0,XMMWORD[16+rsp]
2415 movdqu XMMWORD[r13],xmm15
2416 pxor xmm5,XMMWORD[32+rsp]
2417 movdqu XMMWORD[16+r13],xmm0
2418 pxor xmm3,XMMWORD[48+rsp]
2419 movdqu XMMWORD[32+r13],xmm5
2420 pxor xmm1,XMMWORD[64+rsp]
2421 movdqu XMMWORD[48+r13],xmm3
2422 pxor xmm6,XMMWORD[80+rsp]
2423 movdqu XMMWORD[64+r13],xmm1
2424 movdqu XMMWORD[80+r13],xmm6
2425 lea r13,[96+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002426
Adam Langleye9ada862015-05-11 17:20:37 -07002427 movdqa xmm6,XMMWORD[96+rsp]
2428 jmp NEAR $L$xts_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08002429ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07002430$L$xts_dec_5:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002431 pxor xmm2,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07002432 lea r12,[80+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002433 pxor xmm3,xmm11
Adam Langleye9ada862015-05-11 17:20:37 -07002434 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002435 mov r10d,edx
2436
2437 call _bsaes_decrypt8
2438
Adam Langleye9ada862015-05-11 17:20:37 -07002439 pxor xmm15,XMMWORD[rsp]
2440 pxor xmm0,XMMWORD[16+rsp]
2441 movdqu XMMWORD[r13],xmm15
2442 pxor xmm5,XMMWORD[32+rsp]
2443 movdqu XMMWORD[16+r13],xmm0
2444 pxor xmm3,XMMWORD[48+rsp]
2445 movdqu XMMWORD[32+r13],xmm5
2446 pxor xmm1,XMMWORD[64+rsp]
2447 movdqu XMMWORD[48+r13],xmm3
2448 movdqu XMMWORD[64+r13],xmm1
2449 lea r13,[80+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002450
Adam Langleye9ada862015-05-11 17:20:37 -07002451 movdqa xmm6,XMMWORD[80+rsp]
2452 jmp NEAR $L$xts_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08002453ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07002454$L$xts_dec_4:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002455 pxor xmm1,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07002456 lea r12,[64+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002457 pxor xmm2,xmm10
Adam Langleye9ada862015-05-11 17:20:37 -07002458 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002459 mov r10d,edx
2460
2461 call _bsaes_decrypt8
2462
Adam Langleye9ada862015-05-11 17:20:37 -07002463 pxor xmm15,XMMWORD[rsp]
2464 pxor xmm0,XMMWORD[16+rsp]
2465 movdqu XMMWORD[r13],xmm15
2466 pxor xmm5,XMMWORD[32+rsp]
2467 movdqu XMMWORD[16+r13],xmm0
2468 pxor xmm3,XMMWORD[48+rsp]
2469 movdqu XMMWORD[32+r13],xmm5
2470 movdqu XMMWORD[48+r13],xmm3
2471 lea r13,[64+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002472
Adam Langleye9ada862015-05-11 17:20:37 -07002473 movdqa xmm6,XMMWORD[64+rsp]
2474 jmp NEAR $L$xts_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08002475ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07002476$L$xts_dec_3:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002477 pxor xmm0,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07002478 lea r12,[48+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002479 pxor xmm1,xmm9
Adam Langleye9ada862015-05-11 17:20:37 -07002480 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002481 mov r10d,edx
2482
2483 call _bsaes_decrypt8
2484
Adam Langleye9ada862015-05-11 17:20:37 -07002485 pxor xmm15,XMMWORD[rsp]
2486 pxor xmm0,XMMWORD[16+rsp]
2487 movdqu XMMWORD[r13],xmm15
2488 pxor xmm5,XMMWORD[32+rsp]
2489 movdqu XMMWORD[16+r13],xmm0
2490 movdqu XMMWORD[32+r13],xmm5
2491 lea r13,[48+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002492
Adam Langleye9ada862015-05-11 17:20:37 -07002493 movdqa xmm6,XMMWORD[48+rsp]
2494 jmp NEAR $L$xts_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08002495ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07002496$L$xts_dec_2:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002497 pxor xmm15,xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07002498 lea r12,[32+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002499 pxor xmm0,xmm8
Adam Langleye9ada862015-05-11 17:20:37 -07002500 lea rax,[128+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002501 mov r10d,edx
2502
2503 call _bsaes_decrypt8
2504
Adam Langleye9ada862015-05-11 17:20:37 -07002505 pxor xmm15,XMMWORD[rsp]
2506 pxor xmm0,XMMWORD[16+rsp]
2507 movdqu XMMWORD[r13],xmm15
2508 movdqu XMMWORD[16+r13],xmm0
2509 lea r13,[32+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002510
Adam Langleye9ada862015-05-11 17:20:37 -07002511 movdqa xmm6,XMMWORD[32+rsp]
2512 jmp NEAR $L$xts_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08002513ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07002514$L$xts_dec_1:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002515 pxor xmm7,xmm15
Adam Langleye9ada862015-05-11 17:20:37 -07002516 lea r12,[16+r12]
2517 movdqa XMMWORD[32+rbp],xmm7
2518 lea rcx,[32+rbp]
2519 lea rdx,[32+rbp]
2520 lea r8,[r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002521 call asm_AES_decrypt
Adam Langleye9ada862015-05-11 17:20:37 -07002522 pxor xmm15,XMMWORD[32+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002523
2524
2525
2526
2527
Adam Langleye9ada862015-05-11 17:20:37 -07002528 movdqu XMMWORD[r13],xmm15
2529 lea r13,[16+r13]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002530
Adam Langleye9ada862015-05-11 17:20:37 -07002531 movdqa xmm6,XMMWORD[16+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002532
Adam Langleye9ada862015-05-11 17:20:37 -07002533$L$xts_dec_done:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002534 and ebx,15
Adam Langleye9ada862015-05-11 17:20:37 -07002535 jz NEAR $L$xts_dec_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -08002536
2537 pxor xmm14,xmm14
Adam Langleye9ada862015-05-11 17:20:37 -07002538 movdqa xmm12,XMMWORD[$L$xts_magic]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002539 pcmpgtd xmm14,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002540 pshufd xmm13,xmm14,0x13
Adam Langleyd9e397b2015-01-22 14:27:53 -08002541 movdqa xmm5,xmm6
2542 paddq xmm6,xmm6
2543 pand xmm13,xmm12
Adam Langleye9ada862015-05-11 17:20:37 -07002544 movdqu xmm15,XMMWORD[r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002545 pxor xmm6,xmm13
2546
Adam Langleye9ada862015-05-11 17:20:37 -07002547 lea rcx,[32+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002548 pxor xmm15,xmm6
Adam Langleye9ada862015-05-11 17:20:37 -07002549 lea rdx,[32+rbp]
2550 movdqa XMMWORD[32+rbp],xmm15
2551 lea r8,[r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002552 call asm_AES_decrypt
Adam Langleye9ada862015-05-11 17:20:37 -07002553 pxor xmm6,XMMWORD[32+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002554 mov rdx,r13
Adam Langleye9ada862015-05-11 17:20:37 -07002555 movdqu XMMWORD[r13],xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08002556
Adam Langleye9ada862015-05-11 17:20:37 -07002557$L$xts_dec_steal:
2558 movzx eax,BYTE[16+r12]
2559 movzx ecx,BYTE[rdx]
2560 lea r12,[1+r12]
2561 mov BYTE[rdx],al
2562 mov BYTE[16+rdx],cl
2563 lea rdx,[1+rdx]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002564 sub ebx,1
Adam Langleye9ada862015-05-11 17:20:37 -07002565 jnz NEAR $L$xts_dec_steal
Adam Langleyd9e397b2015-01-22 14:27:53 -08002566
Adam Langleye9ada862015-05-11 17:20:37 -07002567 movdqu xmm15,XMMWORD[r13]
2568 lea rcx,[32+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002569 pxor xmm15,xmm5
Adam Langleye9ada862015-05-11 17:20:37 -07002570 lea rdx,[32+rbp]
2571 movdqa XMMWORD[32+rbp],xmm15
2572 lea r8,[r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002573 call asm_AES_decrypt
Adam Langleye9ada862015-05-11 17:20:37 -07002574 pxor xmm5,XMMWORD[32+rbp]
2575 movdqu XMMWORD[r13],xmm5
Adam Langleyd9e397b2015-01-22 14:27:53 -08002576
Adam Langleye9ada862015-05-11 17:20:37 -07002577$L$xts_dec_ret:
2578 lea rax,[rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002579 pxor xmm0,xmm0
Adam Langleye9ada862015-05-11 17:20:37 -07002580$L$xts_dec_bzero:
2581 movdqa XMMWORD[rax],xmm0
2582 movdqa XMMWORD[16+rax],xmm0
2583 lea rax,[32+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002584 cmp rbp,rax
Adam Langleye9ada862015-05-11 17:20:37 -07002585 ja NEAR $L$xts_dec_bzero
Adam Langleyd9e397b2015-01-22 14:27:53 -08002586
Robert Sloana94fe052017-02-21 08:49:28 -08002587 lea rax,[120+rbp]
Robert Sloanab8b8882018-03-26 11:39:51 -07002588
Adam Langleye9ada862015-05-11 17:20:37 -07002589 movaps xmm6,XMMWORD[64+rbp]
2590 movaps xmm7,XMMWORD[80+rbp]
2591 movaps xmm8,XMMWORD[96+rbp]
2592 movaps xmm9,XMMWORD[112+rbp]
2593 movaps xmm10,XMMWORD[128+rbp]
2594 movaps xmm11,XMMWORD[144+rbp]
2595 movaps xmm12,XMMWORD[160+rbp]
2596 movaps xmm13,XMMWORD[176+rbp]
2597 movaps xmm14,XMMWORD[192+rbp]
2598 movaps xmm15,XMMWORD[208+rbp]
Robert Sloana94fe052017-02-21 08:49:28 -08002599 lea rax,[160+rax]
2600$L$xts_dec_tail:
2601 mov r15,QWORD[((-48))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002602
Robert Sloana94fe052017-02-21 08:49:28 -08002603 mov r14,QWORD[((-40))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002604
Robert Sloana94fe052017-02-21 08:49:28 -08002605 mov r13,QWORD[((-32))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002606
Robert Sloana94fe052017-02-21 08:49:28 -08002607 mov r12,QWORD[((-24))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002608
Robert Sloana94fe052017-02-21 08:49:28 -08002609 mov rbx,QWORD[((-16))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002610
Robert Sloana94fe052017-02-21 08:49:28 -08002611 mov rbp,QWORD[((-8))+rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002612
Robert Sloana94fe052017-02-21 08:49:28 -08002613 lea rsp,[rax]
Robert Sloanab8b8882018-03-26 11:39:51 -07002614
Adam Langleye9ada862015-05-11 17:20:37 -07002615$L$xts_dec_epilogue:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002616 DB 0F3h,0C3h ;repret
Adam Langleye9ada862015-05-11 17:20:37 -07002617
Adam Langleyd9e397b2015-01-22 14:27:53 -08002618
Robert Sloanab8b8882018-03-26 11:39:51 -07002619
Adam Langleyd9e397b2015-01-22 14:27:53 -08002620ALIGN 64
Adam Langleye9ada862015-05-11 17:20:37 -07002621_bsaes_const:
2622$L$M0ISR:
2623 DQ 0x0a0e0206070b0f03,0x0004080c0d010509
2624$L$ISRM0:
2625 DQ 0x01040b0e0205080f,0x0306090c00070a0d
2626$L$ISR:
2627 DQ 0x0504070602010003,0x0f0e0d0c080b0a09
2628$L$BS0:
2629 DQ 0x5555555555555555,0x5555555555555555
2630$L$BS1:
2631 DQ 0x3333333333333333,0x3333333333333333
2632$L$BS2:
2633 DQ 0x0f0f0f0f0f0f0f0f,0x0f0f0f0f0f0f0f0f
2634$L$SR:
2635 DQ 0x0504070600030201,0x0f0e0d0c0a09080b
2636$L$SRM0:
2637 DQ 0x0304090e00050a0f,0x01060b0c0207080d
2638$L$M0SR:
2639 DQ 0x0a0e02060f03070b,0x0004080c05090d01
2640$L$SWPUP:
2641 DQ 0x0706050403020100,0x0c0d0e0f0b0a0908
2642$L$SWPUPM0SR:
2643 DQ 0x0a0d02060c03070b,0x0004080f05090e01
2644$L$ADD1:
2645 DQ 0x0000000000000000,0x0000000100000000
2646$L$ADD2:
2647 DQ 0x0000000000000000,0x0000000200000000
2648$L$ADD3:
2649 DQ 0x0000000000000000,0x0000000300000000
2650$L$ADD4:
2651 DQ 0x0000000000000000,0x0000000400000000
2652$L$ADD5:
2653 DQ 0x0000000000000000,0x0000000500000000
2654$L$ADD6:
2655 DQ 0x0000000000000000,0x0000000600000000
2656$L$ADD7:
2657 DQ 0x0000000000000000,0x0000000700000000
2658$L$ADD8:
2659 DQ 0x0000000000000000,0x0000000800000000
2660$L$xts_magic:
2661 DD 0x87,0,1,0
2662$L$masks:
2663 DQ 0x0101010101010101,0x0101010101010101
2664 DQ 0x0202020202020202,0x0202020202020202
2665 DQ 0x0404040404040404,0x0404040404040404
2666 DQ 0x0808080808080808,0x0808080808080808
2667$L$M0:
2668 DQ 0x02060a0e03070b0f,0x0004080c0105090d
2669$L$63:
2670 DQ 0x6363636363636363,0x6363636363636363
Adam Langleyd9e397b2015-01-22 14:27:53 -08002671DB 66,105,116,45,115,108,105,99,101,100,32,65,69,83,32,102
2672DB 111,114,32,120,56,54,95,54,52,47,83,83,83,69,51,44
2673DB 32,69,109,105,108,105,97,32,75,195,164,115,112,101,114,44
2674DB 32,80,101,116,101,114,32,83,99,104,119,97,98,101,44,32
2675DB 65,110,100,121,32,80,111,108,121,97,107,111,118,0
2676ALIGN 64
2677
Adam Langleye9ada862015-05-11 17:20:37 -07002678EXTERN __imp_RtlVirtualUnwind
Adam Langleyd9e397b2015-01-22 14:27:53 -08002679
2680ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07002681se_handler:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002682 push rsi
2683 push rdi
2684 push rbx
2685 push rbp
2686 push r12
2687 push r13
2688 push r14
2689 push r15
2690 pushfq
2691 sub rsp,64
2692
Adam Langleye9ada862015-05-11 17:20:37 -07002693 mov rax,QWORD[120+r8]
2694 mov rbx,QWORD[248+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002695
Adam Langleye9ada862015-05-11 17:20:37 -07002696 mov rsi,QWORD[8+r9]
2697 mov r11,QWORD[56+r9]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002698
Adam Langleye9ada862015-05-11 17:20:37 -07002699 mov r10d,DWORD[r11]
2700 lea r10,[r10*1+rsi]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002701 cmp rbx,r10
Robert Sloana94fe052017-02-21 08:49:28 -08002702 jbe NEAR $L$in_prologue
Adam Langleyd9e397b2015-01-22 14:27:53 -08002703
Adam Langleye9ada862015-05-11 17:20:37 -07002704 mov r10d,DWORD[4+r11]
2705 lea r10,[r10*1+rsi]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002706 cmp rbx,r10
Adam Langleye9ada862015-05-11 17:20:37 -07002707 jae NEAR $L$in_prologue
Adam Langleyd9e397b2015-01-22 14:27:53 -08002708
Robert Sloana94fe052017-02-21 08:49:28 -08002709 mov r10d,DWORD[8+r11]
2710 lea r10,[r10*1+rsi]
2711 cmp rbx,r10
2712 jae NEAR $L$in_tail
2713
Adam Langleye9ada862015-05-11 17:20:37 -07002714 mov rax,QWORD[160+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002715
Adam Langleye9ada862015-05-11 17:20:37 -07002716 lea rsi,[64+rax]
2717 lea rdi,[512+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002718 mov ecx,20
Adam Langleye9ada862015-05-11 17:20:37 -07002719 DD 0xa548f3fc
Robert Sloana94fe052017-02-21 08:49:28 -08002720 lea rax,[((160+120))+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002721
Robert Sloana94fe052017-02-21 08:49:28 -08002722$L$in_tail:
2723 mov rbp,QWORD[((-48))+rax]
2724 mov rbx,QWORD[((-40))+rax]
2725 mov r12,QWORD[((-32))+rax]
2726 mov r13,QWORD[((-24))+rax]
2727 mov r14,QWORD[((-16))+rax]
2728 mov r15,QWORD[((-8))+rax]
Adam Langleye9ada862015-05-11 17:20:37 -07002729 mov QWORD[144+r8],rbx
2730 mov QWORD[160+r8],rbp
2731 mov QWORD[216+r8],r12
2732 mov QWORD[224+r8],r13
2733 mov QWORD[232+r8],r14
2734 mov QWORD[240+r8],r15
Adam Langleyd9e397b2015-01-22 14:27:53 -08002735
Adam Langleye9ada862015-05-11 17:20:37 -07002736$L$in_prologue:
2737 mov QWORD[152+r8],rax
Adam Langleyd9e397b2015-01-22 14:27:53 -08002738
Adam Langleye9ada862015-05-11 17:20:37 -07002739 mov rdi,QWORD[40+r9]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002740 mov rsi,r8
2741 mov ecx,154
Adam Langleye9ada862015-05-11 17:20:37 -07002742 DD 0xa548f3fc
Adam Langleyd9e397b2015-01-22 14:27:53 -08002743
2744 mov rsi,r9
2745 xor rcx,rcx
Adam Langleye9ada862015-05-11 17:20:37 -07002746 mov rdx,QWORD[8+rsi]
2747 mov r8,QWORD[rsi]
2748 mov r9,QWORD[16+rsi]
2749 mov r10,QWORD[40+rsi]
2750 lea r11,[56+rsi]
2751 lea r12,[24+rsi]
2752 mov QWORD[32+rsp],r10
2753 mov QWORD[40+rsp],r11
2754 mov QWORD[48+rsp],r12
2755 mov QWORD[56+rsp],rcx
2756 call QWORD[__imp_RtlVirtualUnwind]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002757
2758 mov eax,1
2759 add rsp,64
2760 popfq
2761 pop r15
2762 pop r14
2763 pop r13
2764 pop r12
2765 pop rbp
2766 pop rbx
2767 pop rdi
2768 pop rsi
2769 DB 0F3h,0C3h ;repret
Adam Langleyd9e397b2015-01-22 14:27:53 -08002770
Adam Langleye9ada862015-05-11 17:20:37 -07002771
2772section .pdata rdata align=4
Adam Langleyd9e397b2015-01-22 14:27:53 -08002773ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07002774 DD $L$cbc_dec_prologue wrt ..imagebase
2775 DD $L$cbc_dec_epilogue wrt ..imagebase
2776 DD $L$cbc_dec_info wrt ..imagebase
Adam Langleyd9e397b2015-01-22 14:27:53 -08002777
Adam Langleye9ada862015-05-11 17:20:37 -07002778 DD $L$ctr_enc_prologue wrt ..imagebase
2779 DD $L$ctr_enc_epilogue wrt ..imagebase
2780 DD $L$ctr_enc_info wrt ..imagebase
Adam Langleyd9e397b2015-01-22 14:27:53 -08002781
Adam Langleye9ada862015-05-11 17:20:37 -07002782 DD $L$xts_enc_prologue wrt ..imagebase
2783 DD $L$xts_enc_epilogue wrt ..imagebase
2784 DD $L$xts_enc_info wrt ..imagebase
Adam Langleyd9e397b2015-01-22 14:27:53 -08002785
Adam Langleye9ada862015-05-11 17:20:37 -07002786 DD $L$xts_dec_prologue wrt ..imagebase
2787 DD $L$xts_dec_epilogue wrt ..imagebase
2788 DD $L$xts_dec_info wrt ..imagebase
Adam Langleyd9e397b2015-01-22 14:27:53 -08002789
Adam Langleye9ada862015-05-11 17:20:37 -07002790section .xdata rdata align=8
Adam Langleyd9e397b2015-01-22 14:27:53 -08002791ALIGN 8
Adam Langleye9ada862015-05-11 17:20:37 -07002792$L$cbc_dec_info:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002793DB 9,0,0,0
Adam Langleye9ada862015-05-11 17:20:37 -07002794 DD se_handler wrt ..imagebase
2795 DD $L$cbc_dec_body wrt ..imagebase,$L$cbc_dec_epilogue wrt ..imagebase
Robert Sloana94fe052017-02-21 08:49:28 -08002796 DD $L$cbc_dec_tail wrt ..imagebase
2797 DD 0
Adam Langleye9ada862015-05-11 17:20:37 -07002798$L$ctr_enc_info:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002799DB 9,0,0,0
Adam Langleye9ada862015-05-11 17:20:37 -07002800 DD se_handler wrt ..imagebase
2801 DD $L$ctr_enc_body wrt ..imagebase,$L$ctr_enc_epilogue wrt ..imagebase
Robert Sloana94fe052017-02-21 08:49:28 -08002802 DD $L$ctr_enc_tail wrt ..imagebase
2803 DD 0
Adam Langleye9ada862015-05-11 17:20:37 -07002804$L$xts_enc_info:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002805DB 9,0,0,0
Adam Langleye9ada862015-05-11 17:20:37 -07002806 DD se_handler wrt ..imagebase
2807 DD $L$xts_enc_body wrt ..imagebase,$L$xts_enc_epilogue wrt ..imagebase
Robert Sloana94fe052017-02-21 08:49:28 -08002808 DD $L$xts_enc_tail wrt ..imagebase
2809 DD 0
Adam Langleye9ada862015-05-11 17:20:37 -07002810$L$xts_dec_info:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002811DB 9,0,0,0
Adam Langleye9ada862015-05-11 17:20:37 -07002812 DD se_handler wrt ..imagebase
2813 DD $L$xts_dec_body wrt ..imagebase,$L$xts_dec_epilogue wrt ..imagebase
Robert Sloana94fe052017-02-21 08:49:28 -08002814 DD $L$xts_dec_tail wrt ..imagebase
2815 DD 0