blob: f6a4edfa0f0acc7fe40242d3dae3b5be13e64c63 [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
6
Adam Langleyd9e397b2015-01-22 14:27:53 -08007
8ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07009_x86_64_AES_encrypt:
10 xor eax,DWORD[r15]
11 xor ebx,DWORD[4+r15]
12 xor ecx,DWORD[8+r15]
13 xor edx,DWORD[12+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -080014
Adam Langleye9ada862015-05-11 17:20:37 -070015 mov r13d,DWORD[240+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -080016 sub r13d,1
Adam Langleye9ada862015-05-11 17:20:37 -070017 jmp NEAR $L$enc_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -080018ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -070019$L$enc_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -080020
21 movzx esi,al
22 movzx edi,bl
23 movzx ebp,cl
Adam Langleye9ada862015-05-11 17:20:37 -070024 mov r10d,DWORD[rsi*8+r14]
25 mov r11d,DWORD[rdi*8+r14]
26 mov r12d,DWORD[rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -080027
28 movzx esi,bh
29 movzx edi,ch
30 movzx ebp,dl
Adam Langleye9ada862015-05-11 17:20:37 -070031 xor r10d,DWORD[3+rsi*8+r14]
32 xor r11d,DWORD[3+rdi*8+r14]
33 mov r8d,DWORD[rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -080034
35 movzx esi,dh
36 shr ecx,16
37 movzx ebp,ah
Adam Langleye9ada862015-05-11 17:20:37 -070038 xor r12d,DWORD[3+rsi*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -080039 shr edx,16
Adam Langleye9ada862015-05-11 17:20:37 -070040 xor r8d,DWORD[3+rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -080041
42 shr ebx,16
Adam Langleye9ada862015-05-11 17:20:37 -070043 lea r15,[16+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -080044 shr eax,16
45
46 movzx esi,cl
47 movzx edi,dl
48 movzx ebp,al
Adam Langleye9ada862015-05-11 17:20:37 -070049 xor r10d,DWORD[2+rsi*8+r14]
50 xor r11d,DWORD[2+rdi*8+r14]
51 xor r12d,DWORD[2+rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -080052
53 movzx esi,dh
54 movzx edi,ah
55 movzx ebp,bl
Adam Langleye9ada862015-05-11 17:20:37 -070056 xor r10d,DWORD[1+rsi*8+r14]
57 xor r11d,DWORD[1+rdi*8+r14]
58 xor r8d,DWORD[2+rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -080059
Adam Langleye9ada862015-05-11 17:20:37 -070060 mov edx,DWORD[12+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -080061 movzx edi,bh
62 movzx ebp,ch
Adam Langleye9ada862015-05-11 17:20:37 -070063 mov eax,DWORD[r15]
64 xor r12d,DWORD[1+rdi*8+r14]
65 xor r8d,DWORD[1+rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -080066
Adam Langleye9ada862015-05-11 17:20:37 -070067 mov ebx,DWORD[4+r15]
68 mov ecx,DWORD[8+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -080069 xor eax,r10d
70 xor ebx,r11d
71 xor ecx,r12d
72 xor edx,r8d
73 sub r13d,1
Adam Langleye9ada862015-05-11 17:20:37 -070074 jnz NEAR $L$enc_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -080075 movzx esi,al
76 movzx edi,bl
77 movzx ebp,cl
Adam Langleye9ada862015-05-11 17:20:37 -070078 movzx r10d,BYTE[2+rsi*8+r14]
79 movzx r11d,BYTE[2+rdi*8+r14]
80 movzx r12d,BYTE[2+rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -080081
82 movzx esi,dl
83 movzx edi,bh
84 movzx ebp,ch
Adam Langleye9ada862015-05-11 17:20:37 -070085 movzx r8d,BYTE[2+rsi*8+r14]
86 mov edi,DWORD[rdi*8+r14]
87 mov ebp,DWORD[rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -080088
Adam Langleye9ada862015-05-11 17:20:37 -070089 and edi,0x0000ff00
90 and ebp,0x0000ff00
Adam Langleyd9e397b2015-01-22 14:27:53 -080091
92 xor r10d,edi
93 xor r11d,ebp
94 shr ecx,16
95
96 movzx esi,dh
97 movzx edi,ah
98 shr edx,16
Adam Langleye9ada862015-05-11 17:20:37 -070099 mov esi,DWORD[rsi*8+r14]
100 mov edi,DWORD[rdi*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800101
Adam Langleye9ada862015-05-11 17:20:37 -0700102 and esi,0x0000ff00
103 and edi,0x0000ff00
Adam Langleyd9e397b2015-01-22 14:27:53 -0800104 shr ebx,16
105 xor r12d,esi
106 xor r8d,edi
107 shr eax,16
108
109 movzx esi,cl
110 movzx edi,dl
111 movzx ebp,al
Adam Langleye9ada862015-05-11 17:20:37 -0700112 mov esi,DWORD[rsi*8+r14]
113 mov edi,DWORD[rdi*8+r14]
114 mov ebp,DWORD[rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800115
Adam Langleye9ada862015-05-11 17:20:37 -0700116 and esi,0x00ff0000
117 and edi,0x00ff0000
118 and ebp,0x00ff0000
Adam Langleyd9e397b2015-01-22 14:27:53 -0800119
120 xor r10d,esi
121 xor r11d,edi
122 xor r12d,ebp
123
124 movzx esi,bl
125 movzx edi,dh
126 movzx ebp,ah
Adam Langleye9ada862015-05-11 17:20:37 -0700127 mov esi,DWORD[rsi*8+r14]
128 mov edi,DWORD[2+rdi*8+r14]
129 mov ebp,DWORD[2+rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800130
Adam Langleye9ada862015-05-11 17:20:37 -0700131 and esi,0x00ff0000
132 and edi,0xff000000
133 and ebp,0xff000000
Adam Langleyd9e397b2015-01-22 14:27:53 -0800134
135 xor r8d,esi
136 xor r10d,edi
137 xor r11d,ebp
138
139 movzx esi,bh
140 movzx edi,ch
Adam Langleye9ada862015-05-11 17:20:37 -0700141 mov edx,DWORD[((16+12))+r15]
142 mov esi,DWORD[2+rsi*8+r14]
143 mov edi,DWORD[2+rdi*8+r14]
144 mov eax,DWORD[((16+0))+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800145
Adam Langleye9ada862015-05-11 17:20:37 -0700146 and esi,0xff000000
147 and edi,0xff000000
Adam Langleyd9e397b2015-01-22 14:27:53 -0800148
149 xor r12d,esi
150 xor r8d,edi
151
Adam Langleye9ada862015-05-11 17:20:37 -0700152 mov ebx,DWORD[((16+4))+r15]
153 mov ecx,DWORD[((16+8))+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800154 xor eax,r10d
155 xor ebx,r11d
156 xor ecx,r12d
157 xor edx,r8d
Adam Langleye9ada862015-05-11 17:20:37 -0700158DB 0xf3,0xc3
159
Adam Langleyd9e397b2015-01-22 14:27:53 -0800160
161ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700162_x86_64_AES_encrypt_compact:
163 lea r8,[128+r14]
164 mov edi,DWORD[((0-128))+r8]
165 mov ebp,DWORD[((32-128))+r8]
166 mov r10d,DWORD[((64-128))+r8]
167 mov r11d,DWORD[((96-128))+r8]
168 mov edi,DWORD[((128-128))+r8]
169 mov ebp,DWORD[((160-128))+r8]
170 mov r10d,DWORD[((192-128))+r8]
171 mov r11d,DWORD[((224-128))+r8]
172 jmp NEAR $L$enc_loop_compact
Adam Langleyd9e397b2015-01-22 14:27:53 -0800173ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700174$L$enc_loop_compact:
175 xor eax,DWORD[r15]
176 xor ebx,DWORD[4+r15]
177 xor ecx,DWORD[8+r15]
178 xor edx,DWORD[12+r15]
179 lea r15,[16+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800180 movzx r10d,al
181 movzx r11d,bl
182 movzx r12d,cl
183 movzx r8d,dl
184 movzx esi,bh
185 movzx edi,ch
186 shr ecx,16
187 movzx ebp,dh
Adam Langleye9ada862015-05-11 17:20:37 -0700188 movzx r10d,BYTE[r10*1+r14]
189 movzx r11d,BYTE[r11*1+r14]
190 movzx r12d,BYTE[r12*1+r14]
191 movzx r8d,BYTE[r8*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800192
Adam Langleye9ada862015-05-11 17:20:37 -0700193 movzx r9d,BYTE[rsi*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800194 movzx esi,ah
Adam Langleye9ada862015-05-11 17:20:37 -0700195 movzx r13d,BYTE[rdi*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800196 movzx edi,cl
Adam Langleye9ada862015-05-11 17:20:37 -0700197 movzx ebp,BYTE[rbp*1+r14]
198 movzx esi,BYTE[rsi*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800199
200 shl r9d,8
201 shr edx,16
202 shl r13d,8
203 xor r10d,r9d
204 shr eax,16
205 movzx r9d,dl
206 shr ebx,16
207 xor r11d,r13d
208 shl ebp,8
209 movzx r13d,al
Adam Langleye9ada862015-05-11 17:20:37 -0700210 movzx edi,BYTE[rdi*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800211 xor r12d,ebp
212
213 shl esi,8
214 movzx ebp,bl
215 shl edi,16
216 xor r8d,esi
Adam Langleye9ada862015-05-11 17:20:37 -0700217 movzx r9d,BYTE[r9*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800218 movzx esi,dh
Adam Langleye9ada862015-05-11 17:20:37 -0700219 movzx r13d,BYTE[r13*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800220 xor r10d,edi
221
222 shr ecx,8
223 movzx edi,ah
224 shl r9d,16
225 shr ebx,8
226 shl r13d,16
227 xor r11d,r9d
Adam Langleye9ada862015-05-11 17:20:37 -0700228 movzx ebp,BYTE[rbp*1+r14]
229 movzx esi,BYTE[rsi*1+r14]
230 movzx edi,BYTE[rdi*1+r14]
231 movzx edx,BYTE[rcx*1+r14]
232 movzx ecx,BYTE[rbx*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800233
234 shl ebp,16
235 xor r12d,r13d
236 shl esi,24
237 xor r8d,ebp
238 shl edi,24
239 xor r10d,esi
240 shl edx,24
241 xor r11d,edi
242 shl ecx,24
243 mov eax,r10d
244 mov ebx,r11d
245 xor ecx,r12d
246 xor edx,r8d
Adam Langleye9ada862015-05-11 17:20:37 -0700247 cmp r15,QWORD[16+rsp]
248 je NEAR $L$enc_compact_done
249 mov r10d,0x80808080
250 mov r11d,0x80808080
Adam Langleyd9e397b2015-01-22 14:27:53 -0800251 and r10d,eax
252 and r11d,ebx
253 mov esi,r10d
254 mov edi,r11d
255 shr r10d,7
Adam Langleye9ada862015-05-11 17:20:37 -0700256 lea r8d,[rax*1+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800257 shr r11d,7
Adam Langleye9ada862015-05-11 17:20:37 -0700258 lea r9d,[rbx*1+rbx]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800259 sub esi,r10d
260 sub edi,r11d
Adam Langleye9ada862015-05-11 17:20:37 -0700261 and r8d,0xfefefefe
262 and r9d,0xfefefefe
263 and esi,0x1b1b1b1b
264 and edi,0x1b1b1b1b
Adam Langleyd9e397b2015-01-22 14:27:53 -0800265 mov r10d,eax
266 mov r11d,ebx
267 xor r8d,esi
268 xor r9d,edi
269
270 xor eax,r8d
271 xor ebx,r9d
Adam Langleye9ada862015-05-11 17:20:37 -0700272 mov r12d,0x80808080
Adam Langleyd9e397b2015-01-22 14:27:53 -0800273 rol eax,24
Adam Langleye9ada862015-05-11 17:20:37 -0700274 mov ebp,0x80808080
Adam Langleyd9e397b2015-01-22 14:27:53 -0800275 rol ebx,24
276 and r12d,ecx
277 and ebp,edx
278 xor eax,r8d
279 xor ebx,r9d
280 mov esi,r12d
281 ror r10d,16
282 mov edi,ebp
283 ror r11d,16
Adam Langleye9ada862015-05-11 17:20:37 -0700284 lea r8d,[rcx*1+rcx]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800285 shr r12d,7
286 xor eax,r10d
287 shr ebp,7
288 xor ebx,r11d
289 ror r10d,8
Adam Langleye9ada862015-05-11 17:20:37 -0700290 lea r9d,[rdx*1+rdx]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800291 ror r11d,8
292 sub esi,r12d
293 sub edi,ebp
294 xor eax,r10d
295 xor ebx,r11d
296
Adam Langleye9ada862015-05-11 17:20:37 -0700297 and r8d,0xfefefefe
298 and r9d,0xfefefefe
299 and esi,0x1b1b1b1b
300 and edi,0x1b1b1b1b
Adam Langleyd9e397b2015-01-22 14:27:53 -0800301 mov r12d,ecx
302 mov ebp,edx
303 xor r8d,esi
304 xor r9d,edi
305
306 ror r12d,16
307 xor ecx,r8d
308 ror ebp,16
309 xor edx,r9d
310 rol ecx,24
Adam Langleye9ada862015-05-11 17:20:37 -0700311 mov esi,DWORD[r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800312 rol edx,24
313 xor ecx,r8d
Adam Langleye9ada862015-05-11 17:20:37 -0700314 mov edi,DWORD[64+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800315 xor edx,r9d
Adam Langleye9ada862015-05-11 17:20:37 -0700316 mov r8d,DWORD[128+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800317 xor ecx,r12d
318 ror r12d,8
319 xor edx,ebp
320 ror ebp,8
321 xor ecx,r12d
Adam Langleye9ada862015-05-11 17:20:37 -0700322 mov r9d,DWORD[192+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800323 xor edx,ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700324 jmp NEAR $L$enc_loop_compact
Adam Langleyd9e397b2015-01-22 14:27:53 -0800325ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700326$L$enc_compact_done:
327 xor eax,DWORD[r15]
328 xor ebx,DWORD[4+r15]
329 xor ecx,DWORD[8+r15]
330 xor edx,DWORD[12+r15]
331DB 0xf3,0xc3
332
Adam Langleyd9e397b2015-01-22 14:27:53 -0800333ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700334global asm_AES_encrypt
Adam Langleyd9e397b2015-01-22 14:27:53 -0800335
336
Adam Langleye9ada862015-05-11 17:20:37 -0700337asm_AES_encrypt:
338 mov QWORD[8+rsp],rdi ;WIN64 prologue
339 mov QWORD[16+rsp],rsi
Adam Langleyd9e397b2015-01-22 14:27:53 -0800340 mov rax,rsp
Adam Langleye9ada862015-05-11 17:20:37 -0700341$L$SEH_begin_asm_AES_encrypt:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800342 mov rdi,rcx
343 mov rsi,rdx
344 mov rdx,r8
345
346
Robert Sloana94fe052017-02-21 08:49:28 -0800347 mov rax,rsp
Adam Langleyd9e397b2015-01-22 14:27:53 -0800348 push rbx
349 push rbp
350 push r12
351 push r13
352 push r14
353 push r15
354
355
Adam Langleye9ada862015-05-11 17:20:37 -0700356 lea rcx,[((-63))+rdx]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800357 and rsp,-64
358 sub rcx,rsp
359 neg rcx
Adam Langleye9ada862015-05-11 17:20:37 -0700360 and rcx,0x3c0
Adam Langleyd9e397b2015-01-22 14:27:53 -0800361 sub rsp,rcx
362 sub rsp,32
363
Adam Langleye9ada862015-05-11 17:20:37 -0700364 mov QWORD[16+rsp],rsi
Robert Sloana94fe052017-02-21 08:49:28 -0800365 mov QWORD[24+rsp],rax
Adam Langleye9ada862015-05-11 17:20:37 -0700366$L$enc_prologue:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800367
368 mov r15,rdx
Adam Langleye9ada862015-05-11 17:20:37 -0700369 mov r13d,DWORD[240+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800370
Adam Langleye9ada862015-05-11 17:20:37 -0700371 mov eax,DWORD[rdi]
372 mov ebx,DWORD[4+rdi]
373 mov ecx,DWORD[8+rdi]
374 mov edx,DWORD[12+rdi]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800375
376 shl r13d,4
Adam Langleye9ada862015-05-11 17:20:37 -0700377 lea rbp,[r13*1+r15]
378 mov QWORD[rsp],r15
379 mov QWORD[8+rsp],rbp
Adam Langleyd9e397b2015-01-22 14:27:53 -0800380
381
Adam Langleye9ada862015-05-11 17:20:37 -0700382 lea r14,[(($L$AES_Te+2048))]
383 lea rbp,[768+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800384 sub rbp,r14
Adam Langleye9ada862015-05-11 17:20:37 -0700385 and rbp,0x300
386 lea r14,[rbp*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800387
388 call _x86_64_AES_encrypt_compact
389
Adam Langleye9ada862015-05-11 17:20:37 -0700390 mov r9,QWORD[16+rsp]
391 mov rsi,QWORD[24+rsp]
392 mov DWORD[r9],eax
393 mov DWORD[4+r9],ebx
394 mov DWORD[8+r9],ecx
395 mov DWORD[12+r9],edx
Adam Langleyd9e397b2015-01-22 14:27:53 -0800396
Robert Sloana94fe052017-02-21 08:49:28 -0800397 mov r15,QWORD[((-48))+rsi]
398 mov r14,QWORD[((-40))+rsi]
399 mov r13,QWORD[((-32))+rsi]
400 mov r12,QWORD[((-24))+rsi]
401 mov rbp,QWORD[((-16))+rsi]
402 mov rbx,QWORD[((-8))+rsi]
403 lea rsp,[rsi]
Adam Langleye9ada862015-05-11 17:20:37 -0700404$L$enc_epilogue:
405 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
406 mov rsi,QWORD[16+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800407 DB 0F3h,0C3h ;repret
Adam Langleye9ada862015-05-11 17:20:37 -0700408$L$SEH_end_asm_AES_encrypt:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800409
410ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700411_x86_64_AES_decrypt:
412 xor eax,DWORD[r15]
413 xor ebx,DWORD[4+r15]
414 xor ecx,DWORD[8+r15]
415 xor edx,DWORD[12+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800416
Adam Langleye9ada862015-05-11 17:20:37 -0700417 mov r13d,DWORD[240+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800418 sub r13d,1
Adam Langleye9ada862015-05-11 17:20:37 -0700419 jmp NEAR $L$dec_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -0800420ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700421$L$dec_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800422
423 movzx esi,al
424 movzx edi,bl
425 movzx ebp,cl
Adam Langleye9ada862015-05-11 17:20:37 -0700426 mov r10d,DWORD[rsi*8+r14]
427 mov r11d,DWORD[rdi*8+r14]
428 mov r12d,DWORD[rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800429
430 movzx esi,dh
431 movzx edi,ah
432 movzx ebp,dl
Adam Langleye9ada862015-05-11 17:20:37 -0700433 xor r10d,DWORD[3+rsi*8+r14]
434 xor r11d,DWORD[3+rdi*8+r14]
435 mov r8d,DWORD[rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800436
437 movzx esi,bh
438 shr eax,16
439 movzx ebp,ch
Adam Langleye9ada862015-05-11 17:20:37 -0700440 xor r12d,DWORD[3+rsi*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800441 shr edx,16
Adam Langleye9ada862015-05-11 17:20:37 -0700442 xor r8d,DWORD[3+rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800443
444 shr ebx,16
Adam Langleye9ada862015-05-11 17:20:37 -0700445 lea r15,[16+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800446 shr ecx,16
447
448 movzx esi,cl
449 movzx edi,dl
450 movzx ebp,al
Adam Langleye9ada862015-05-11 17:20:37 -0700451 xor r10d,DWORD[2+rsi*8+r14]
452 xor r11d,DWORD[2+rdi*8+r14]
453 xor r12d,DWORD[2+rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800454
455 movzx esi,bh
456 movzx edi,ch
457 movzx ebp,bl
Adam Langleye9ada862015-05-11 17:20:37 -0700458 xor r10d,DWORD[1+rsi*8+r14]
459 xor r11d,DWORD[1+rdi*8+r14]
460 xor r8d,DWORD[2+rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800461
462 movzx esi,dh
Adam Langleye9ada862015-05-11 17:20:37 -0700463 mov edx,DWORD[12+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800464 movzx ebp,ah
Adam Langleye9ada862015-05-11 17:20:37 -0700465 xor r12d,DWORD[1+rsi*8+r14]
466 mov eax,DWORD[r15]
467 xor r8d,DWORD[1+rbp*8+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800468
469 xor eax,r10d
Adam Langleye9ada862015-05-11 17:20:37 -0700470 mov ebx,DWORD[4+r15]
471 mov ecx,DWORD[8+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800472 xor ecx,r12d
473 xor ebx,r11d
474 xor edx,r8d
475 sub r13d,1
Adam Langleye9ada862015-05-11 17:20:37 -0700476 jnz NEAR $L$dec_loop
477 lea r14,[2048+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800478 movzx esi,al
479 movzx edi,bl
480 movzx ebp,cl
Adam Langleye9ada862015-05-11 17:20:37 -0700481 movzx r10d,BYTE[rsi*1+r14]
482 movzx r11d,BYTE[rdi*1+r14]
483 movzx r12d,BYTE[rbp*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800484
485 movzx esi,dl
486 movzx edi,dh
487 movzx ebp,ah
Adam Langleye9ada862015-05-11 17:20:37 -0700488 movzx r8d,BYTE[rsi*1+r14]
489 movzx edi,BYTE[rdi*1+r14]
490 movzx ebp,BYTE[rbp*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800491
492 shl edi,8
493 shl ebp,8
494
495 xor r10d,edi
496 xor r11d,ebp
497 shr edx,16
498
499 movzx esi,bh
500 movzx edi,ch
501 shr eax,16
Adam Langleye9ada862015-05-11 17:20:37 -0700502 movzx esi,BYTE[rsi*1+r14]
503 movzx edi,BYTE[rdi*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800504
505 shl esi,8
506 shl edi,8
507 shr ebx,16
508 xor r12d,esi
509 xor r8d,edi
510 shr ecx,16
511
512 movzx esi,cl
513 movzx edi,dl
514 movzx ebp,al
Adam Langleye9ada862015-05-11 17:20:37 -0700515 movzx esi,BYTE[rsi*1+r14]
516 movzx edi,BYTE[rdi*1+r14]
517 movzx ebp,BYTE[rbp*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800518
519 shl esi,16
520 shl edi,16
521 shl ebp,16
522
523 xor r10d,esi
524 xor r11d,edi
525 xor r12d,ebp
526
527 movzx esi,bl
528 movzx edi,bh
529 movzx ebp,ch
Adam Langleye9ada862015-05-11 17:20:37 -0700530 movzx esi,BYTE[rsi*1+r14]
531 movzx edi,BYTE[rdi*1+r14]
532 movzx ebp,BYTE[rbp*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800533
534 shl esi,16
535 shl edi,24
536 shl ebp,24
537
538 xor r8d,esi
539 xor r10d,edi
540 xor r11d,ebp
541
542 movzx esi,dh
543 movzx edi,ah
Adam Langleye9ada862015-05-11 17:20:37 -0700544 mov edx,DWORD[((16+12))+r15]
545 movzx esi,BYTE[rsi*1+r14]
546 movzx edi,BYTE[rdi*1+r14]
547 mov eax,DWORD[((16+0))+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800548
549 shl esi,24
550 shl edi,24
551
552 xor r12d,esi
553 xor r8d,edi
554
Adam Langleye9ada862015-05-11 17:20:37 -0700555 mov ebx,DWORD[((16+4))+r15]
556 mov ecx,DWORD[((16+8))+r15]
557 lea r14,[((-2048))+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800558 xor eax,r10d
559 xor ebx,r11d
560 xor ecx,r12d
561 xor edx,r8d
Adam Langleye9ada862015-05-11 17:20:37 -0700562DB 0xf3,0xc3
563
Adam Langleyd9e397b2015-01-22 14:27:53 -0800564
565ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700566_x86_64_AES_decrypt_compact:
567 lea r8,[128+r14]
568 mov edi,DWORD[((0-128))+r8]
569 mov ebp,DWORD[((32-128))+r8]
570 mov r10d,DWORD[((64-128))+r8]
571 mov r11d,DWORD[((96-128))+r8]
572 mov edi,DWORD[((128-128))+r8]
573 mov ebp,DWORD[((160-128))+r8]
574 mov r10d,DWORD[((192-128))+r8]
575 mov r11d,DWORD[((224-128))+r8]
576 jmp NEAR $L$dec_loop_compact
Adam Langleyd9e397b2015-01-22 14:27:53 -0800577
578ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700579$L$dec_loop_compact:
580 xor eax,DWORD[r15]
581 xor ebx,DWORD[4+r15]
582 xor ecx,DWORD[8+r15]
583 xor edx,DWORD[12+r15]
584 lea r15,[16+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800585 movzx r10d,al
586 movzx r11d,bl
587 movzx r12d,cl
588 movzx r8d,dl
589 movzx esi,dh
590 movzx edi,ah
591 shr edx,16
592 movzx ebp,bh
Adam Langleye9ada862015-05-11 17:20:37 -0700593 movzx r10d,BYTE[r10*1+r14]
594 movzx r11d,BYTE[r11*1+r14]
595 movzx r12d,BYTE[r12*1+r14]
596 movzx r8d,BYTE[r8*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800597
Adam Langleye9ada862015-05-11 17:20:37 -0700598 movzx r9d,BYTE[rsi*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800599 movzx esi,ch
Adam Langleye9ada862015-05-11 17:20:37 -0700600 movzx r13d,BYTE[rdi*1+r14]
601 movzx ebp,BYTE[rbp*1+r14]
602 movzx esi,BYTE[rsi*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800603
604 shr ecx,16
605 shl r13d,8
606 shl r9d,8
607 movzx edi,cl
608 shr eax,16
609 xor r10d,r9d
610 shr ebx,16
611 movzx r9d,dl
612
613 shl ebp,8
614 xor r11d,r13d
615 shl esi,8
616 movzx r13d,al
Adam Langleye9ada862015-05-11 17:20:37 -0700617 movzx edi,BYTE[rdi*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800618 xor r12d,ebp
619 movzx ebp,bl
620
621 shl edi,16
622 xor r8d,esi
Adam Langleye9ada862015-05-11 17:20:37 -0700623 movzx r9d,BYTE[r9*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800624 movzx esi,bh
Adam Langleye9ada862015-05-11 17:20:37 -0700625 movzx ebp,BYTE[rbp*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800626 xor r10d,edi
Adam Langleye9ada862015-05-11 17:20:37 -0700627 movzx r13d,BYTE[r13*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800628 movzx edi,ch
629
630 shl ebp,16
631 shl r9d,16
632 shl r13d,16
633 xor r8d,ebp
634 movzx ebp,dh
635 xor r11d,r9d
636 shr eax,8
637 xor r12d,r13d
638
Adam Langleye9ada862015-05-11 17:20:37 -0700639 movzx esi,BYTE[rsi*1+r14]
640 movzx ebx,BYTE[rdi*1+r14]
641 movzx ecx,BYTE[rbp*1+r14]
642 movzx edx,BYTE[rax*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800643
644 mov eax,r10d
645 shl esi,24
646 shl ebx,24
647 shl ecx,24
648 xor eax,esi
649 shl edx,24
650 xor ebx,r11d
651 xor ecx,r12d
652 xor edx,r8d
Adam Langleye9ada862015-05-11 17:20:37 -0700653 cmp r15,QWORD[16+rsp]
654 je NEAR $L$dec_compact_done
Adam Langleyd9e397b2015-01-22 14:27:53 -0800655
Adam Langleye9ada862015-05-11 17:20:37 -0700656 mov rsi,QWORD[((256+0))+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800657 shl rbx,32
658 shl rdx,32
Adam Langleye9ada862015-05-11 17:20:37 -0700659 mov rdi,QWORD[((256+8))+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800660 or rax,rbx
661 or rcx,rdx
Adam Langleye9ada862015-05-11 17:20:37 -0700662 mov rbp,QWORD[((256+16))+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800663 mov r9,rsi
664 mov r12,rsi
665 and r9,rax
666 and r12,rcx
667 mov rbx,r9
668 mov rdx,r12
669 shr r9,7
Adam Langleye9ada862015-05-11 17:20:37 -0700670 lea r8,[rax*1+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800671 shr r12,7
Adam Langleye9ada862015-05-11 17:20:37 -0700672 lea r11,[rcx*1+rcx]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800673 sub rbx,r9
674 sub rdx,r12
675 and r8,rdi
676 and r11,rdi
677 and rbx,rbp
678 and rdx,rbp
679 xor r8,rbx
680 xor r11,rdx
681 mov r10,rsi
682 mov r13,rsi
683
684 and r10,r8
685 and r13,r11
686 mov rbx,r10
687 mov rdx,r13
688 shr r10,7
Adam Langleye9ada862015-05-11 17:20:37 -0700689 lea r9,[r8*1+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800690 shr r13,7
Adam Langleye9ada862015-05-11 17:20:37 -0700691 lea r12,[r11*1+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800692 sub rbx,r10
693 sub rdx,r13
694 and r9,rdi
695 and r12,rdi
696 and rbx,rbp
697 and rdx,rbp
698 xor r9,rbx
699 xor r12,rdx
700 mov r10,rsi
701 mov r13,rsi
702
703 and r10,r9
704 and r13,r12
705 mov rbx,r10
706 mov rdx,r13
707 shr r10,7
708 xor r8,rax
709 shr r13,7
710 xor r11,rcx
711 sub rbx,r10
712 sub rdx,r13
Adam Langleye9ada862015-05-11 17:20:37 -0700713 lea r10,[r9*1+r9]
714 lea r13,[r12*1+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800715 xor r9,rax
716 xor r12,rcx
717 and r10,rdi
718 and r13,rdi
719 and rbx,rbp
720 and rdx,rbp
721 xor r10,rbx
722 xor r13,rdx
723
724 xor rax,r10
725 xor rcx,r13
726 xor r8,r10
727 xor r11,r13
728 mov rbx,rax
729 mov rdx,rcx
730 xor r9,r10
731 shr rbx,32
732 xor r12,r13
733 shr rdx,32
734 xor r10,r8
735 rol eax,8
736 xor r13,r11
737 rol ecx,8
738 xor r10,r9
739 rol ebx,8
740 xor r13,r12
741
742 rol edx,8
743 xor eax,r10d
744 shr r10,32
745 xor ecx,r13d
746 shr r13,32
747 xor ebx,r10d
748 xor edx,r13d
749
750 mov r10,r8
751 rol r8d,24
752 mov r13,r11
753 rol r11d,24
754 shr r10,32
755 xor eax,r8d
756 shr r13,32
757 xor ecx,r11d
758 rol r10d,24
759 mov r8,r9
760 rol r13d,24
761 mov r11,r12
762 shr r8,32
763 xor ebx,r10d
764 shr r11,32
765 xor edx,r13d
766
Adam Langleye9ada862015-05-11 17:20:37 -0700767 mov rsi,QWORD[r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800768 rol r9d,16
Adam Langleye9ada862015-05-11 17:20:37 -0700769 mov rdi,QWORD[64+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800770 rol r12d,16
Adam Langleye9ada862015-05-11 17:20:37 -0700771 mov rbp,QWORD[128+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800772 rol r8d,16
Adam Langleye9ada862015-05-11 17:20:37 -0700773 mov r10,QWORD[192+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800774 xor eax,r9d
775 rol r11d,16
776 xor ecx,r12d
Adam Langleye9ada862015-05-11 17:20:37 -0700777 mov r13,QWORD[256+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800778 xor ebx,r8d
779 xor edx,r11d
Adam Langleye9ada862015-05-11 17:20:37 -0700780 jmp NEAR $L$dec_loop_compact
Adam Langleyd9e397b2015-01-22 14:27:53 -0800781ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700782$L$dec_compact_done:
783 xor eax,DWORD[r15]
784 xor ebx,DWORD[4+r15]
785 xor ecx,DWORD[8+r15]
786 xor edx,DWORD[12+r15]
787DB 0xf3,0xc3
788
Adam Langleyd9e397b2015-01-22 14:27:53 -0800789ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700790global asm_AES_decrypt
Adam Langleyd9e397b2015-01-22 14:27:53 -0800791
792
Adam Langleye9ada862015-05-11 17:20:37 -0700793asm_AES_decrypt:
794 mov QWORD[8+rsp],rdi ;WIN64 prologue
795 mov QWORD[16+rsp],rsi
Adam Langleyd9e397b2015-01-22 14:27:53 -0800796 mov rax,rsp
Adam Langleye9ada862015-05-11 17:20:37 -0700797$L$SEH_begin_asm_AES_decrypt:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800798 mov rdi,rcx
799 mov rsi,rdx
800 mov rdx,r8
801
802
Robert Sloana94fe052017-02-21 08:49:28 -0800803 mov rax,rsp
Adam Langleyd9e397b2015-01-22 14:27:53 -0800804 push rbx
805 push rbp
806 push r12
807 push r13
808 push r14
809 push r15
810
811
Adam Langleye9ada862015-05-11 17:20:37 -0700812 lea rcx,[((-63))+rdx]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800813 and rsp,-64
814 sub rcx,rsp
815 neg rcx
Adam Langleye9ada862015-05-11 17:20:37 -0700816 and rcx,0x3c0
Adam Langleyd9e397b2015-01-22 14:27:53 -0800817 sub rsp,rcx
818 sub rsp,32
819
Adam Langleye9ada862015-05-11 17:20:37 -0700820 mov QWORD[16+rsp],rsi
Robert Sloana94fe052017-02-21 08:49:28 -0800821 mov QWORD[24+rsp],rax
Adam Langleye9ada862015-05-11 17:20:37 -0700822$L$dec_prologue:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800823
824 mov r15,rdx
Adam Langleye9ada862015-05-11 17:20:37 -0700825 mov r13d,DWORD[240+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800826
Adam Langleye9ada862015-05-11 17:20:37 -0700827 mov eax,DWORD[rdi]
828 mov ebx,DWORD[4+rdi]
829 mov ecx,DWORD[8+rdi]
830 mov edx,DWORD[12+rdi]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800831
832 shl r13d,4
Adam Langleye9ada862015-05-11 17:20:37 -0700833 lea rbp,[r13*1+r15]
834 mov QWORD[rsp],r15
835 mov QWORD[8+rsp],rbp
Adam Langleyd9e397b2015-01-22 14:27:53 -0800836
837
Adam Langleye9ada862015-05-11 17:20:37 -0700838 lea r14,[(($L$AES_Td+2048))]
839 lea rbp,[768+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800840 sub rbp,r14
Adam Langleye9ada862015-05-11 17:20:37 -0700841 and rbp,0x300
842 lea r14,[rbp*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800843 shr rbp,3
844 add r14,rbp
845
846 call _x86_64_AES_decrypt_compact
847
Adam Langleye9ada862015-05-11 17:20:37 -0700848 mov r9,QWORD[16+rsp]
849 mov rsi,QWORD[24+rsp]
850 mov DWORD[r9],eax
851 mov DWORD[4+r9],ebx
852 mov DWORD[8+r9],ecx
853 mov DWORD[12+r9],edx
Adam Langleyd9e397b2015-01-22 14:27:53 -0800854
Robert Sloana94fe052017-02-21 08:49:28 -0800855 mov r15,QWORD[((-48))+rsi]
856 mov r14,QWORD[((-40))+rsi]
857 mov r13,QWORD[((-32))+rsi]
858 mov r12,QWORD[((-24))+rsi]
859 mov rbp,QWORD[((-16))+rsi]
860 mov rbx,QWORD[((-8))+rsi]
861 lea rsp,[rsi]
Adam Langleye9ada862015-05-11 17:20:37 -0700862$L$dec_epilogue:
863 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
864 mov rsi,QWORD[16+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800865 DB 0F3h,0C3h ;repret
Adam Langleye9ada862015-05-11 17:20:37 -0700866$L$SEH_end_asm_AES_decrypt:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800867ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700868global asm_AES_set_encrypt_key
Adam Langleyd9e397b2015-01-22 14:27:53 -0800869
Adam Langleye9ada862015-05-11 17:20:37 -0700870asm_AES_set_encrypt_key:
871 mov QWORD[8+rsp],rdi ;WIN64 prologue
872 mov QWORD[16+rsp],rsi
Adam Langleyd9e397b2015-01-22 14:27:53 -0800873 mov rax,rsp
Adam Langleye9ada862015-05-11 17:20:37 -0700874$L$SEH_begin_asm_AES_set_encrypt_key:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800875 mov rdi,rcx
876 mov rsi,rdx
877 mov rdx,r8
878
879
880 push rbx
881 push rbp
882 push r12
883 push r13
884 push r14
885 push r15
886 sub rsp,8
Adam Langleye9ada862015-05-11 17:20:37 -0700887$L$enc_key_prologue:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800888
889 call _x86_64_AES_set_encrypt_key
890
Adam Langleye9ada862015-05-11 17:20:37 -0700891 mov rbp,QWORD[40+rsp]
892 mov rbx,QWORD[48+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800893 add rsp,56
Adam Langleye9ada862015-05-11 17:20:37 -0700894$L$enc_key_epilogue:
895 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
896 mov rsi,QWORD[16+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800897 DB 0F3h,0C3h ;repret
Adam Langleye9ada862015-05-11 17:20:37 -0700898$L$SEH_end_asm_AES_set_encrypt_key:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800899
900
901ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -0700902_x86_64_AES_set_encrypt_key:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800903 mov ecx,esi
904 mov rsi,rdi
905 mov rdi,rdx
906
907 test rsi,-1
Adam Langleye9ada862015-05-11 17:20:37 -0700908 jz NEAR $L$badpointer
Adam Langleyd9e397b2015-01-22 14:27:53 -0800909 test rdi,-1
Adam Langleye9ada862015-05-11 17:20:37 -0700910 jz NEAR $L$badpointer
Adam Langleyd9e397b2015-01-22 14:27:53 -0800911
Adam Langleye9ada862015-05-11 17:20:37 -0700912 lea rbp,[$L$AES_Te]
913 lea rbp,[((2048+128))+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800914
915
Adam Langleye9ada862015-05-11 17:20:37 -0700916 mov eax,DWORD[((0-128))+rbp]
917 mov ebx,DWORD[((32-128))+rbp]
918 mov r8d,DWORD[((64-128))+rbp]
919 mov edx,DWORD[((96-128))+rbp]
920 mov eax,DWORD[((128-128))+rbp]
921 mov ebx,DWORD[((160-128))+rbp]
922 mov r8d,DWORD[((192-128))+rbp]
923 mov edx,DWORD[((224-128))+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800924
925 cmp ecx,128
Adam Langleye9ada862015-05-11 17:20:37 -0700926 je NEAR $L$10rounds
Adam Langleyd9e397b2015-01-22 14:27:53 -0800927 cmp ecx,192
Adam Langleye9ada862015-05-11 17:20:37 -0700928 je NEAR $L$12rounds
Adam Langleyd9e397b2015-01-22 14:27:53 -0800929 cmp ecx,256
Adam Langleye9ada862015-05-11 17:20:37 -0700930 je NEAR $L$14rounds
Adam Langleyd9e397b2015-01-22 14:27:53 -0800931 mov rax,-2
Adam Langleye9ada862015-05-11 17:20:37 -0700932 jmp NEAR $L$exit
Adam Langleyd9e397b2015-01-22 14:27:53 -0800933
Adam Langleye9ada862015-05-11 17:20:37 -0700934$L$10rounds:
935 mov rax,QWORD[rsi]
936 mov rdx,QWORD[8+rsi]
937 mov QWORD[rdi],rax
938 mov QWORD[8+rdi],rdx
Adam Langleyd9e397b2015-01-22 14:27:53 -0800939
940 shr rdx,32
941 xor ecx,ecx
Adam Langleye9ada862015-05-11 17:20:37 -0700942 jmp NEAR $L$10shortcut
Adam Langleyd9e397b2015-01-22 14:27:53 -0800943ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -0700944$L$10loop:
945 mov eax,DWORD[rdi]
946 mov edx,DWORD[12+rdi]
947$L$10shortcut:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800948 movzx esi,dl
Adam Langleye9ada862015-05-11 17:20:37 -0700949 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800950 movzx esi,dh
951 shl ebx,24
952 xor eax,ebx
953
Adam Langleye9ada862015-05-11 17:20:37 -0700954 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800955 shr edx,16
956 movzx esi,dl
957 xor eax,ebx
958
Adam Langleye9ada862015-05-11 17:20:37 -0700959 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800960 movzx esi,dh
961 shl ebx,8
962 xor eax,ebx
963
Adam Langleye9ada862015-05-11 17:20:37 -0700964 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800965 shl ebx,16
966 xor eax,ebx
967
Adam Langleye9ada862015-05-11 17:20:37 -0700968 xor eax,DWORD[((1024-128))+rcx*4+rbp]
969 mov DWORD[16+rdi],eax
970 xor eax,DWORD[4+rdi]
971 mov DWORD[20+rdi],eax
972 xor eax,DWORD[8+rdi]
973 mov DWORD[24+rdi],eax
974 xor eax,DWORD[12+rdi]
975 mov DWORD[28+rdi],eax
Adam Langleyd9e397b2015-01-22 14:27:53 -0800976 add ecx,1
Adam Langleye9ada862015-05-11 17:20:37 -0700977 lea rdi,[16+rdi]
Adam Langleyd9e397b2015-01-22 14:27:53 -0800978 cmp ecx,10
Adam Langleye9ada862015-05-11 17:20:37 -0700979 jl NEAR $L$10loop
Adam Langleyd9e397b2015-01-22 14:27:53 -0800980
Adam Langleye9ada862015-05-11 17:20:37 -0700981 mov DWORD[80+rdi],10
Adam Langleyd9e397b2015-01-22 14:27:53 -0800982 xor rax,rax
Adam Langleye9ada862015-05-11 17:20:37 -0700983 jmp NEAR $L$exit
Adam Langleyd9e397b2015-01-22 14:27:53 -0800984
Adam Langleye9ada862015-05-11 17:20:37 -0700985$L$12rounds:
986 mov rax,QWORD[rsi]
987 mov rbx,QWORD[8+rsi]
988 mov rdx,QWORD[16+rsi]
989 mov QWORD[rdi],rax
990 mov QWORD[8+rdi],rbx
991 mov QWORD[16+rdi],rdx
Adam Langleyd9e397b2015-01-22 14:27:53 -0800992
993 shr rdx,32
994 xor ecx,ecx
Adam Langleye9ada862015-05-11 17:20:37 -0700995 jmp NEAR $L$12shortcut
Adam Langleyd9e397b2015-01-22 14:27:53 -0800996ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -0700997$L$12loop:
998 mov eax,DWORD[rdi]
999 mov edx,DWORD[20+rdi]
1000$L$12shortcut:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001001 movzx esi,dl
Adam Langleye9ada862015-05-11 17:20:37 -07001002 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001003 movzx esi,dh
1004 shl ebx,24
1005 xor eax,ebx
1006
Adam Langleye9ada862015-05-11 17:20:37 -07001007 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001008 shr edx,16
1009 movzx esi,dl
1010 xor eax,ebx
1011
Adam Langleye9ada862015-05-11 17:20:37 -07001012 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001013 movzx esi,dh
1014 shl ebx,8
1015 xor eax,ebx
1016
Adam Langleye9ada862015-05-11 17:20:37 -07001017 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001018 shl ebx,16
1019 xor eax,ebx
1020
Adam Langleye9ada862015-05-11 17:20:37 -07001021 xor eax,DWORD[((1024-128))+rcx*4+rbp]
1022 mov DWORD[24+rdi],eax
1023 xor eax,DWORD[4+rdi]
1024 mov DWORD[28+rdi],eax
1025 xor eax,DWORD[8+rdi]
1026 mov DWORD[32+rdi],eax
1027 xor eax,DWORD[12+rdi]
1028 mov DWORD[36+rdi],eax
Adam Langleyd9e397b2015-01-22 14:27:53 -08001029
1030 cmp ecx,7
Adam Langleye9ada862015-05-11 17:20:37 -07001031 je NEAR $L$12break
Adam Langleyd9e397b2015-01-22 14:27:53 -08001032 add ecx,1
1033
Adam Langleye9ada862015-05-11 17:20:37 -07001034 xor eax,DWORD[16+rdi]
1035 mov DWORD[40+rdi],eax
1036 xor eax,DWORD[20+rdi]
1037 mov DWORD[44+rdi],eax
Adam Langleyd9e397b2015-01-22 14:27:53 -08001038
Adam Langleye9ada862015-05-11 17:20:37 -07001039 lea rdi,[24+rdi]
1040 jmp NEAR $L$12loop
1041$L$12break:
1042 mov DWORD[72+rdi],12
Adam Langleyd9e397b2015-01-22 14:27:53 -08001043 xor rax,rax
Adam Langleye9ada862015-05-11 17:20:37 -07001044 jmp NEAR $L$exit
Adam Langleyd9e397b2015-01-22 14:27:53 -08001045
Adam Langleye9ada862015-05-11 17:20:37 -07001046$L$14rounds:
1047 mov rax,QWORD[rsi]
1048 mov rbx,QWORD[8+rsi]
1049 mov rcx,QWORD[16+rsi]
1050 mov rdx,QWORD[24+rsi]
1051 mov QWORD[rdi],rax
1052 mov QWORD[8+rdi],rbx
1053 mov QWORD[16+rdi],rcx
1054 mov QWORD[24+rdi],rdx
Adam Langleyd9e397b2015-01-22 14:27:53 -08001055
1056 shr rdx,32
1057 xor ecx,ecx
Adam Langleye9ada862015-05-11 17:20:37 -07001058 jmp NEAR $L$14shortcut
Adam Langleyd9e397b2015-01-22 14:27:53 -08001059ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001060$L$14loop:
1061 mov eax,DWORD[rdi]
1062 mov edx,DWORD[28+rdi]
1063$L$14shortcut:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001064 movzx esi,dl
Adam Langleye9ada862015-05-11 17:20:37 -07001065 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001066 movzx esi,dh
1067 shl ebx,24
1068 xor eax,ebx
1069
Adam Langleye9ada862015-05-11 17:20:37 -07001070 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001071 shr edx,16
1072 movzx esi,dl
1073 xor eax,ebx
1074
Adam Langleye9ada862015-05-11 17:20:37 -07001075 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001076 movzx esi,dh
1077 shl ebx,8
1078 xor eax,ebx
1079
Adam Langleye9ada862015-05-11 17:20:37 -07001080 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001081 shl ebx,16
1082 xor eax,ebx
1083
Adam Langleye9ada862015-05-11 17:20:37 -07001084 xor eax,DWORD[((1024-128))+rcx*4+rbp]
1085 mov DWORD[32+rdi],eax
1086 xor eax,DWORD[4+rdi]
1087 mov DWORD[36+rdi],eax
1088 xor eax,DWORD[8+rdi]
1089 mov DWORD[40+rdi],eax
1090 xor eax,DWORD[12+rdi]
1091 mov DWORD[44+rdi],eax
Adam Langleyd9e397b2015-01-22 14:27:53 -08001092
1093 cmp ecx,6
Adam Langleye9ada862015-05-11 17:20:37 -07001094 je NEAR $L$14break
Adam Langleyd9e397b2015-01-22 14:27:53 -08001095 add ecx,1
1096
1097 mov edx,eax
Adam Langleye9ada862015-05-11 17:20:37 -07001098 mov eax,DWORD[16+rdi]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001099 movzx esi,dl
Adam Langleye9ada862015-05-11 17:20:37 -07001100 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001101 movzx esi,dh
1102 xor eax,ebx
1103
Adam Langleye9ada862015-05-11 17:20:37 -07001104 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001105 shr edx,16
1106 shl ebx,8
1107 movzx esi,dl
1108 xor eax,ebx
1109
Adam Langleye9ada862015-05-11 17:20:37 -07001110 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001111 movzx esi,dh
1112 shl ebx,16
1113 xor eax,ebx
1114
Adam Langleye9ada862015-05-11 17:20:37 -07001115 movzx ebx,BYTE[((-128))+rsi*1+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001116 shl ebx,24
1117 xor eax,ebx
1118
Adam Langleye9ada862015-05-11 17:20:37 -07001119 mov DWORD[48+rdi],eax
1120 xor eax,DWORD[20+rdi]
1121 mov DWORD[52+rdi],eax
1122 xor eax,DWORD[24+rdi]
1123 mov DWORD[56+rdi],eax
1124 xor eax,DWORD[28+rdi]
1125 mov DWORD[60+rdi],eax
Adam Langleyd9e397b2015-01-22 14:27:53 -08001126
Adam Langleye9ada862015-05-11 17:20:37 -07001127 lea rdi,[32+rdi]
1128 jmp NEAR $L$14loop
1129$L$14break:
1130 mov DWORD[48+rdi],14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001131 xor rax,rax
Adam Langleye9ada862015-05-11 17:20:37 -07001132 jmp NEAR $L$exit
Adam Langleyd9e397b2015-01-22 14:27:53 -08001133
Adam Langleye9ada862015-05-11 17:20:37 -07001134$L$badpointer:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001135 mov rax,-1
Adam Langleye9ada862015-05-11 17:20:37 -07001136$L$exit:
1137DB 0xf3,0xc3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001138
Adam Langleye9ada862015-05-11 17:20:37 -07001139ALIGN 16
1140global asm_AES_set_decrypt_key
1141
1142asm_AES_set_decrypt_key:
1143 mov QWORD[8+rsp],rdi ;WIN64 prologue
1144 mov QWORD[16+rsp],rsi
Adam Langleyd9e397b2015-01-22 14:27:53 -08001145 mov rax,rsp
Adam Langleye9ada862015-05-11 17:20:37 -07001146$L$SEH_begin_asm_AES_set_decrypt_key:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001147 mov rdi,rcx
1148 mov rsi,rdx
1149 mov rdx,r8
1150
1151
1152 push rbx
1153 push rbp
1154 push r12
1155 push r13
1156 push r14
1157 push r15
1158 push rdx
Adam Langleye9ada862015-05-11 17:20:37 -07001159$L$dec_key_prologue:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001160
1161 call _x86_64_AES_set_encrypt_key
Adam Langleye9ada862015-05-11 17:20:37 -07001162 mov r8,QWORD[rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001163 cmp eax,0
Adam Langleye9ada862015-05-11 17:20:37 -07001164 jne NEAR $L$abort
Adam Langleyd9e397b2015-01-22 14:27:53 -08001165
Adam Langleye9ada862015-05-11 17:20:37 -07001166 mov r14d,DWORD[240+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001167 xor rdi,rdi
Adam Langleye9ada862015-05-11 17:20:37 -07001168 lea rcx,[r14*4+rdi]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001169 mov rsi,r8
Adam Langleye9ada862015-05-11 17:20:37 -07001170 lea rdi,[rcx*4+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001171ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001172$L$invert:
1173 mov rax,QWORD[rsi]
1174 mov rbx,QWORD[8+rsi]
1175 mov rcx,QWORD[rdi]
1176 mov rdx,QWORD[8+rdi]
1177 mov QWORD[rdi],rax
1178 mov QWORD[8+rdi],rbx
1179 mov QWORD[rsi],rcx
1180 mov QWORD[8+rsi],rdx
1181 lea rsi,[16+rsi]
1182 lea rdi,[((-16))+rdi]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001183 cmp rdi,rsi
Adam Langleye9ada862015-05-11 17:20:37 -07001184 jne NEAR $L$invert
Adam Langleyd9e397b2015-01-22 14:27:53 -08001185
Adam Langleye9ada862015-05-11 17:20:37 -07001186 lea rax,[(($L$AES_Te+2048+1024))]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001187
Adam Langleye9ada862015-05-11 17:20:37 -07001188 mov rsi,QWORD[40+rax]
1189 mov rdi,QWORD[48+rax]
1190 mov rbp,QWORD[56+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001191
1192 mov r15,r8
1193 sub r14d,1
1194ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001195$L$permute:
1196 lea r15,[16+r15]
1197 mov rax,QWORD[r15]
1198 mov rcx,QWORD[8+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001199 mov r9,rsi
1200 mov r12,rsi
1201 and r9,rax
1202 and r12,rcx
1203 mov rbx,r9
1204 mov rdx,r12
1205 shr r9,7
Adam Langleye9ada862015-05-11 17:20:37 -07001206 lea r8,[rax*1+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001207 shr r12,7
Adam Langleye9ada862015-05-11 17:20:37 -07001208 lea r11,[rcx*1+rcx]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001209 sub rbx,r9
1210 sub rdx,r12
1211 and r8,rdi
1212 and r11,rdi
1213 and rbx,rbp
1214 and rdx,rbp
1215 xor r8,rbx
1216 xor r11,rdx
1217 mov r10,rsi
1218 mov r13,rsi
1219
1220 and r10,r8
1221 and r13,r11
1222 mov rbx,r10
1223 mov rdx,r13
1224 shr r10,7
Adam Langleye9ada862015-05-11 17:20:37 -07001225 lea r9,[r8*1+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001226 shr r13,7
Adam Langleye9ada862015-05-11 17:20:37 -07001227 lea r12,[r11*1+r11]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001228 sub rbx,r10
1229 sub rdx,r13
1230 and r9,rdi
1231 and r12,rdi
1232 and rbx,rbp
1233 and rdx,rbp
1234 xor r9,rbx
1235 xor r12,rdx
1236 mov r10,rsi
1237 mov r13,rsi
1238
1239 and r10,r9
1240 and r13,r12
1241 mov rbx,r10
1242 mov rdx,r13
1243 shr r10,7
1244 xor r8,rax
1245 shr r13,7
1246 xor r11,rcx
1247 sub rbx,r10
1248 sub rdx,r13
Adam Langleye9ada862015-05-11 17:20:37 -07001249 lea r10,[r9*1+r9]
1250 lea r13,[r12*1+r12]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001251 xor r9,rax
1252 xor r12,rcx
1253 and r10,rdi
1254 and r13,rdi
1255 and rbx,rbp
1256 and rdx,rbp
1257 xor r10,rbx
1258 xor r13,rdx
1259
1260 xor rax,r10
1261 xor rcx,r13
1262 xor r8,r10
1263 xor r11,r13
1264 mov rbx,rax
1265 mov rdx,rcx
1266 xor r9,r10
1267 shr rbx,32
1268 xor r12,r13
1269 shr rdx,32
1270 xor r10,r8
1271 rol eax,8
1272 xor r13,r11
1273 rol ecx,8
1274 xor r10,r9
1275 rol ebx,8
1276 xor r13,r12
1277
1278 rol edx,8
1279 xor eax,r10d
1280 shr r10,32
1281 xor ecx,r13d
1282 shr r13,32
1283 xor ebx,r10d
1284 xor edx,r13d
1285
1286 mov r10,r8
1287 rol r8d,24
1288 mov r13,r11
1289 rol r11d,24
1290 shr r10,32
1291 xor eax,r8d
1292 shr r13,32
1293 xor ecx,r11d
1294 rol r10d,24
1295 mov r8,r9
1296 rol r13d,24
1297 mov r11,r12
1298 shr r8,32
1299 xor ebx,r10d
1300 shr r11,32
1301 xor edx,r13d
1302
1303
1304 rol r9d,16
1305
1306 rol r12d,16
1307
1308 rol r8d,16
1309
1310 xor eax,r9d
1311 rol r11d,16
1312 xor ecx,r12d
1313
1314 xor ebx,r8d
1315 xor edx,r11d
Adam Langleye9ada862015-05-11 17:20:37 -07001316 mov DWORD[r15],eax
1317 mov DWORD[4+r15],ebx
1318 mov DWORD[8+r15],ecx
1319 mov DWORD[12+r15],edx
Adam Langleyd9e397b2015-01-22 14:27:53 -08001320 sub r14d,1
Adam Langleye9ada862015-05-11 17:20:37 -07001321 jnz NEAR $L$permute
Adam Langleyd9e397b2015-01-22 14:27:53 -08001322
1323 xor rax,rax
Adam Langleye9ada862015-05-11 17:20:37 -07001324$L$abort:
1325 mov r15,QWORD[8+rsp]
1326 mov r14,QWORD[16+rsp]
1327 mov r13,QWORD[24+rsp]
1328 mov r12,QWORD[32+rsp]
1329 mov rbp,QWORD[40+rsp]
1330 mov rbx,QWORD[48+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001331 add rsp,56
Adam Langleye9ada862015-05-11 17:20:37 -07001332$L$dec_key_epilogue:
1333 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
1334 mov rsi,QWORD[16+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001335 DB 0F3h,0C3h ;repret
Adam Langleye9ada862015-05-11 17:20:37 -07001336$L$SEH_end_asm_AES_set_decrypt_key:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001337ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001338global asm_AES_cbc_encrypt
Adam Langleyd9e397b2015-01-22 14:27:53 -08001339
Robert Sloan2424d842017-05-01 07:46:28 -07001340EXTERN OPENSSL_ia32cap_P
Adam Langleyd9e397b2015-01-22 14:27:53 -08001341
Adam Langleye9ada862015-05-11 17:20:37 -07001342asm_AES_cbc_encrypt:
1343 mov QWORD[8+rsp],rdi ;WIN64 prologue
1344 mov QWORD[16+rsp],rsi
Adam Langleyd9e397b2015-01-22 14:27:53 -08001345 mov rax,rsp
Adam Langleye9ada862015-05-11 17:20:37 -07001346$L$SEH_begin_asm_AES_cbc_encrypt:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001347 mov rdi,rcx
1348 mov rsi,rdx
1349 mov rdx,r8
1350 mov rcx,r9
Adam Langleye9ada862015-05-11 17:20:37 -07001351 mov r8,QWORD[40+rsp]
1352 mov r9,QWORD[48+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001353
1354
1355 cmp rdx,0
Adam Langleye9ada862015-05-11 17:20:37 -07001356 je NEAR $L$cbc_epilogue
Adam Langleyd9e397b2015-01-22 14:27:53 -08001357 pushfq
1358 push rbx
1359 push rbp
1360 push r12
1361 push r13
1362 push r14
1363 push r15
Adam Langleye9ada862015-05-11 17:20:37 -07001364$L$cbc_prologue:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001365
1366 cld
1367 mov r9d,r9d
1368
Adam Langleye9ada862015-05-11 17:20:37 -07001369 lea r14,[$L$AES_Te]
Robert Sloana94fe052017-02-21 08:49:28 -08001370 lea r10,[$L$AES_Td]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001371 cmp r9,0
Robert Sloana94fe052017-02-21 08:49:28 -08001372 cmove r14,r10
Adam Langleyd9e397b2015-01-22 14:27:53 -08001373
Robert Sloan2424d842017-05-01 07:46:28 -07001374 lea r10,[OPENSSL_ia32cap_P]
Robert Sloan572a4e22017-04-17 10:52:19 -07001375 mov r10d,DWORD[r10]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001376 cmp rdx,512
Adam Langleye9ada862015-05-11 17:20:37 -07001377 jb NEAR $L$cbc_slow_prologue
Adam Langleyd9e397b2015-01-22 14:27:53 -08001378 test rdx,15
Adam Langleye9ada862015-05-11 17:20:37 -07001379 jnz NEAR $L$cbc_slow_prologue
Adam Langleyd9e397b2015-01-22 14:27:53 -08001380 bt r10d,28
Adam Langleye9ada862015-05-11 17:20:37 -07001381 jc NEAR $L$cbc_slow_prologue
Adam Langleyd9e397b2015-01-22 14:27:53 -08001382
1383
Adam Langleye9ada862015-05-11 17:20:37 -07001384 lea r15,[((-88-248))+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001385 and r15,-64
1386
1387
1388 mov r10,r14
Adam Langleye9ada862015-05-11 17:20:37 -07001389 lea r11,[2304+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001390 mov r12,r15
Adam Langleye9ada862015-05-11 17:20:37 -07001391 and r10,0xFFF
1392 and r11,0xFFF
1393 and r12,0xFFF
Adam Langleyd9e397b2015-01-22 14:27:53 -08001394
1395 cmp r12,r11
Adam Langleye9ada862015-05-11 17:20:37 -07001396 jb NEAR $L$cbc_te_break_out
Adam Langleyd9e397b2015-01-22 14:27:53 -08001397 sub r12,r11
1398 sub r15,r12
Adam Langleye9ada862015-05-11 17:20:37 -07001399 jmp NEAR $L$cbc_te_ok
1400$L$cbc_te_break_out:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001401 sub r12,r10
Adam Langleye9ada862015-05-11 17:20:37 -07001402 and r12,0xFFF
Adam Langleyd9e397b2015-01-22 14:27:53 -08001403 add r12,320
1404 sub r15,r12
1405ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001406$L$cbc_te_ok:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001407
1408 xchg r15,rsp
1409
Adam Langleye9ada862015-05-11 17:20:37 -07001410 mov QWORD[16+rsp],r15
1411$L$cbc_fast_body:
1412 mov QWORD[24+rsp],rdi
1413 mov QWORD[32+rsp],rsi
1414 mov QWORD[40+rsp],rdx
1415 mov QWORD[48+rsp],rcx
1416 mov QWORD[56+rsp],r8
1417 mov DWORD[((80+240))+rsp],0
Adam Langleyd9e397b2015-01-22 14:27:53 -08001418 mov rbp,r8
1419 mov rbx,r9
1420 mov r9,rsi
1421 mov r8,rdi
1422 mov r15,rcx
1423
Adam Langleye9ada862015-05-11 17:20:37 -07001424 mov eax,DWORD[240+r15]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001425
1426 mov r10,r15
1427 sub r10,r14
Adam Langleye9ada862015-05-11 17:20:37 -07001428 and r10,0xfff
Adam Langleyd9e397b2015-01-22 14:27:53 -08001429 cmp r10,2304
Adam Langleye9ada862015-05-11 17:20:37 -07001430 jb NEAR $L$cbc_do_ecopy
Adam Langleyd9e397b2015-01-22 14:27:53 -08001431 cmp r10,4096-248
Adam Langleye9ada862015-05-11 17:20:37 -07001432 jb NEAR $L$cbc_skip_ecopy
Adam Langleyd9e397b2015-01-22 14:27:53 -08001433ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001434$L$cbc_do_ecopy:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001435 mov rsi,r15
Adam Langleye9ada862015-05-11 17:20:37 -07001436 lea rdi,[80+rsp]
1437 lea r15,[80+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001438 mov ecx,240/8
Adam Langleye9ada862015-05-11 17:20:37 -07001439 DD 0x90A548F3
1440 mov DWORD[rdi],eax
1441$L$cbc_skip_ecopy:
1442 mov QWORD[rsp],r15
Adam Langleyd9e397b2015-01-22 14:27:53 -08001443
1444 mov ecx,18
1445ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001446$L$cbc_prefetch_te:
1447 mov r10,QWORD[r14]
1448 mov r11,QWORD[32+r14]
1449 mov r12,QWORD[64+r14]
1450 mov r13,QWORD[96+r14]
1451 lea r14,[128+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001452 sub ecx,1
Adam Langleye9ada862015-05-11 17:20:37 -07001453 jnz NEAR $L$cbc_prefetch_te
1454 lea r14,[((-2304))+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001455
1456 cmp rbx,0
Adam Langleye9ada862015-05-11 17:20:37 -07001457 je NEAR $L$FAST_DECRYPT
Adam Langleyd9e397b2015-01-22 14:27:53 -08001458
1459
Adam Langleye9ada862015-05-11 17:20:37 -07001460 mov eax,DWORD[rbp]
1461 mov ebx,DWORD[4+rbp]
1462 mov ecx,DWORD[8+rbp]
1463 mov edx,DWORD[12+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001464
1465ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001466$L$cbc_fast_enc_loop:
1467 xor eax,DWORD[r8]
1468 xor ebx,DWORD[4+r8]
1469 xor ecx,DWORD[8+r8]
1470 xor edx,DWORD[12+r8]
1471 mov r15,QWORD[rsp]
1472 mov QWORD[24+rsp],r8
Adam Langleyd9e397b2015-01-22 14:27:53 -08001473
1474 call _x86_64_AES_encrypt
1475
Adam Langleye9ada862015-05-11 17:20:37 -07001476 mov r8,QWORD[24+rsp]
1477 mov r10,QWORD[40+rsp]
1478 mov DWORD[r9],eax
1479 mov DWORD[4+r9],ebx
1480 mov DWORD[8+r9],ecx
1481 mov DWORD[12+r9],edx
Adam Langleyd9e397b2015-01-22 14:27:53 -08001482
Adam Langleye9ada862015-05-11 17:20:37 -07001483 lea r8,[16+r8]
1484 lea r9,[16+r9]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001485 sub r10,16
1486 test r10,-16
Adam Langleye9ada862015-05-11 17:20:37 -07001487 mov QWORD[40+rsp],r10
1488 jnz NEAR $L$cbc_fast_enc_loop
1489 mov rbp,QWORD[56+rsp]
1490 mov DWORD[rbp],eax
1491 mov DWORD[4+rbp],ebx
1492 mov DWORD[8+rbp],ecx
1493 mov DWORD[12+rbp],edx
Adam Langleyd9e397b2015-01-22 14:27:53 -08001494
Adam Langleye9ada862015-05-11 17:20:37 -07001495 jmp NEAR $L$cbc_fast_cleanup
Adam Langleyd9e397b2015-01-22 14:27:53 -08001496
1497
1498ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001499$L$FAST_DECRYPT:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001500 cmp r9,r8
Adam Langleye9ada862015-05-11 17:20:37 -07001501 je NEAR $L$cbc_fast_dec_in_place
Adam Langleyd9e397b2015-01-22 14:27:53 -08001502
Adam Langleye9ada862015-05-11 17:20:37 -07001503 mov QWORD[64+rsp],rbp
Adam Langleyd9e397b2015-01-22 14:27:53 -08001504ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001505$L$cbc_fast_dec_loop:
1506 mov eax,DWORD[r8]
1507 mov ebx,DWORD[4+r8]
1508 mov ecx,DWORD[8+r8]
1509 mov edx,DWORD[12+r8]
1510 mov r15,QWORD[rsp]
1511 mov QWORD[24+rsp],r8
Adam Langleyd9e397b2015-01-22 14:27:53 -08001512
1513 call _x86_64_AES_decrypt
1514
Adam Langleye9ada862015-05-11 17:20:37 -07001515 mov rbp,QWORD[64+rsp]
1516 mov r8,QWORD[24+rsp]
1517 mov r10,QWORD[40+rsp]
1518 xor eax,DWORD[rbp]
1519 xor ebx,DWORD[4+rbp]
1520 xor ecx,DWORD[8+rbp]
1521 xor edx,DWORD[12+rbp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001522 mov rbp,r8
1523
1524 sub r10,16
Adam Langleye9ada862015-05-11 17:20:37 -07001525 mov QWORD[40+rsp],r10
1526 mov QWORD[64+rsp],rbp
Adam Langleyd9e397b2015-01-22 14:27:53 -08001527
Adam Langleye9ada862015-05-11 17:20:37 -07001528 mov DWORD[r9],eax
1529 mov DWORD[4+r9],ebx
1530 mov DWORD[8+r9],ecx
1531 mov DWORD[12+r9],edx
Adam Langleyd9e397b2015-01-22 14:27:53 -08001532
Adam Langleye9ada862015-05-11 17:20:37 -07001533 lea r8,[16+r8]
1534 lea r9,[16+r9]
1535 jnz NEAR $L$cbc_fast_dec_loop
1536 mov r12,QWORD[56+rsp]
1537 mov r10,QWORD[rbp]
1538 mov r11,QWORD[8+rbp]
1539 mov QWORD[r12],r10
1540 mov QWORD[8+r12],r11
1541 jmp NEAR $L$cbc_fast_cleanup
Adam Langleyd9e397b2015-01-22 14:27:53 -08001542
1543ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001544$L$cbc_fast_dec_in_place:
1545 mov r10,QWORD[rbp]
1546 mov r11,QWORD[8+rbp]
1547 mov QWORD[((0+64))+rsp],r10
1548 mov QWORD[((8+64))+rsp],r11
Adam Langleyd9e397b2015-01-22 14:27:53 -08001549ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001550$L$cbc_fast_dec_in_place_loop:
1551 mov eax,DWORD[r8]
1552 mov ebx,DWORD[4+r8]
1553 mov ecx,DWORD[8+r8]
1554 mov edx,DWORD[12+r8]
1555 mov r15,QWORD[rsp]
1556 mov QWORD[24+rsp],r8
Adam Langleyd9e397b2015-01-22 14:27:53 -08001557
1558 call _x86_64_AES_decrypt
1559
Adam Langleye9ada862015-05-11 17:20:37 -07001560 mov r8,QWORD[24+rsp]
1561 mov r10,QWORD[40+rsp]
1562 xor eax,DWORD[((0+64))+rsp]
1563 xor ebx,DWORD[((4+64))+rsp]
1564 xor ecx,DWORD[((8+64))+rsp]
1565 xor edx,DWORD[((12+64))+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001566
Adam Langleye9ada862015-05-11 17:20:37 -07001567 mov r11,QWORD[r8]
1568 mov r12,QWORD[8+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001569 sub r10,16
Adam Langleye9ada862015-05-11 17:20:37 -07001570 jz NEAR $L$cbc_fast_dec_in_place_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001571
Adam Langleye9ada862015-05-11 17:20:37 -07001572 mov QWORD[((0+64))+rsp],r11
1573 mov QWORD[((8+64))+rsp],r12
Adam Langleyd9e397b2015-01-22 14:27:53 -08001574
Adam Langleye9ada862015-05-11 17:20:37 -07001575 mov DWORD[r9],eax
1576 mov DWORD[4+r9],ebx
1577 mov DWORD[8+r9],ecx
1578 mov DWORD[12+r9],edx
Adam Langleyd9e397b2015-01-22 14:27:53 -08001579
Adam Langleye9ada862015-05-11 17:20:37 -07001580 lea r8,[16+r8]
1581 lea r9,[16+r9]
1582 mov QWORD[40+rsp],r10
1583 jmp NEAR $L$cbc_fast_dec_in_place_loop
1584$L$cbc_fast_dec_in_place_done:
1585 mov rdi,QWORD[56+rsp]
1586 mov QWORD[rdi],r11
1587 mov QWORD[8+rdi],r12
Adam Langleyd9e397b2015-01-22 14:27:53 -08001588
Adam Langleye9ada862015-05-11 17:20:37 -07001589 mov DWORD[r9],eax
1590 mov DWORD[4+r9],ebx
1591 mov DWORD[8+r9],ecx
1592 mov DWORD[12+r9],edx
Adam Langleyd9e397b2015-01-22 14:27:53 -08001593
1594ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001595$L$cbc_fast_cleanup:
1596 cmp DWORD[((80+240))+rsp],0
1597 lea rdi,[80+rsp]
1598 je NEAR $L$cbc_exit
Adam Langleyd9e397b2015-01-22 14:27:53 -08001599 mov ecx,240/8
1600 xor rax,rax
Adam Langleye9ada862015-05-11 17:20:37 -07001601 DD 0x90AB48F3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001602
Adam Langleye9ada862015-05-11 17:20:37 -07001603 jmp NEAR $L$cbc_exit
Adam Langleyd9e397b2015-01-22 14:27:53 -08001604
1605
1606ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001607$L$cbc_slow_prologue:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001608
Adam Langleye9ada862015-05-11 17:20:37 -07001609 lea rbp,[((-88))+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001610 and rbp,-64
1611
Adam Langleye9ada862015-05-11 17:20:37 -07001612 lea r10,[((-88-63))+rcx]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001613 sub r10,rbp
1614 neg r10
Adam Langleye9ada862015-05-11 17:20:37 -07001615 and r10,0x3c0
Adam Langleyd9e397b2015-01-22 14:27:53 -08001616 sub rbp,r10
1617
1618 xchg rbp,rsp
1619
Adam Langleye9ada862015-05-11 17:20:37 -07001620 mov QWORD[16+rsp],rbp
1621$L$cbc_slow_body:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001622
1623
1624
1625
Adam Langleye9ada862015-05-11 17:20:37 -07001626 mov QWORD[56+rsp],r8
Adam Langleyd9e397b2015-01-22 14:27:53 -08001627 mov rbp,r8
1628 mov rbx,r9
1629 mov r9,rsi
1630 mov r8,rdi
1631 mov r15,rcx
1632 mov r10,rdx
1633
Adam Langleye9ada862015-05-11 17:20:37 -07001634 mov eax,DWORD[240+r15]
1635 mov QWORD[rsp],r15
Adam Langleyd9e397b2015-01-22 14:27:53 -08001636 shl eax,4
Adam Langleye9ada862015-05-11 17:20:37 -07001637 lea rax,[rax*1+r15]
1638 mov QWORD[8+rsp],rax
Adam Langleyd9e397b2015-01-22 14:27:53 -08001639
1640
Adam Langleye9ada862015-05-11 17:20:37 -07001641 lea r14,[2048+r14]
1642 lea rax,[((768-8))+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001643 sub rax,r14
Adam Langleye9ada862015-05-11 17:20:37 -07001644 and rax,0x300
1645 lea r14,[rax*1+r14]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001646
1647 cmp rbx,0
Adam Langleye9ada862015-05-11 17:20:37 -07001648 je NEAR $L$SLOW_DECRYPT
Adam Langleyd9e397b2015-01-22 14:27:53 -08001649
1650
1651 test r10,-16
Adam Langleye9ada862015-05-11 17:20:37 -07001652 mov eax,DWORD[rbp]
1653 mov ebx,DWORD[4+rbp]
1654 mov ecx,DWORD[8+rbp]
1655 mov edx,DWORD[12+rbp]
1656 jz NEAR $L$cbc_slow_enc_tail
Adam Langleyd9e397b2015-01-22 14:27:53 -08001657
1658ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001659$L$cbc_slow_enc_loop:
1660 xor eax,DWORD[r8]
1661 xor ebx,DWORD[4+r8]
1662 xor ecx,DWORD[8+r8]
1663 xor edx,DWORD[12+r8]
1664 mov r15,QWORD[rsp]
1665 mov QWORD[24+rsp],r8
1666 mov QWORD[32+rsp],r9
1667 mov QWORD[40+rsp],r10
Adam Langleyd9e397b2015-01-22 14:27:53 -08001668
1669 call _x86_64_AES_encrypt_compact
1670
Adam Langleye9ada862015-05-11 17:20:37 -07001671 mov r8,QWORD[24+rsp]
1672 mov r9,QWORD[32+rsp]
1673 mov r10,QWORD[40+rsp]
1674 mov DWORD[r9],eax
1675 mov DWORD[4+r9],ebx
1676 mov DWORD[8+r9],ecx
1677 mov DWORD[12+r9],edx
Adam Langleyd9e397b2015-01-22 14:27:53 -08001678
Adam Langleye9ada862015-05-11 17:20:37 -07001679 lea r8,[16+r8]
1680 lea r9,[16+r9]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001681 sub r10,16
1682 test r10,-16
Adam Langleye9ada862015-05-11 17:20:37 -07001683 jnz NEAR $L$cbc_slow_enc_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08001684 test r10,15
Adam Langleye9ada862015-05-11 17:20:37 -07001685 jnz NEAR $L$cbc_slow_enc_tail
1686 mov rbp,QWORD[56+rsp]
1687 mov DWORD[rbp],eax
1688 mov DWORD[4+rbp],ebx
1689 mov DWORD[8+rbp],ecx
1690 mov DWORD[12+rbp],edx
Adam Langleyd9e397b2015-01-22 14:27:53 -08001691
Adam Langleye9ada862015-05-11 17:20:37 -07001692 jmp NEAR $L$cbc_exit
Adam Langleyd9e397b2015-01-22 14:27:53 -08001693
1694ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001695$L$cbc_slow_enc_tail:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001696 mov r11,rax
1697 mov r12,rcx
1698 mov rcx,r10
1699 mov rsi,r8
1700 mov rdi,r9
Adam Langleye9ada862015-05-11 17:20:37 -07001701 DD 0x9066A4F3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001702 mov rcx,16
1703 sub rcx,r10
1704 xor rax,rax
Adam Langleye9ada862015-05-11 17:20:37 -07001705 DD 0x9066AAF3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001706 mov r8,r9
1707 mov r10,16
1708 mov rax,r11
1709 mov rcx,r12
Adam Langleye9ada862015-05-11 17:20:37 -07001710 jmp NEAR $L$cbc_slow_enc_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08001711
1712ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001713$L$SLOW_DECRYPT:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001714 shr rax,3
1715 add r14,rax
1716
Adam Langleye9ada862015-05-11 17:20:37 -07001717 mov r11,QWORD[rbp]
1718 mov r12,QWORD[8+rbp]
1719 mov QWORD[((0+64))+rsp],r11
1720 mov QWORD[((8+64))+rsp],r12
Adam Langleyd9e397b2015-01-22 14:27:53 -08001721
1722ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001723$L$cbc_slow_dec_loop:
1724 mov eax,DWORD[r8]
1725 mov ebx,DWORD[4+r8]
1726 mov ecx,DWORD[8+r8]
1727 mov edx,DWORD[12+r8]
1728 mov r15,QWORD[rsp]
1729 mov QWORD[24+rsp],r8
1730 mov QWORD[32+rsp],r9
1731 mov QWORD[40+rsp],r10
Adam Langleyd9e397b2015-01-22 14:27:53 -08001732
1733 call _x86_64_AES_decrypt_compact
1734
Adam Langleye9ada862015-05-11 17:20:37 -07001735 mov r8,QWORD[24+rsp]
1736 mov r9,QWORD[32+rsp]
1737 mov r10,QWORD[40+rsp]
1738 xor eax,DWORD[((0+64))+rsp]
1739 xor ebx,DWORD[((4+64))+rsp]
1740 xor ecx,DWORD[((8+64))+rsp]
1741 xor edx,DWORD[((12+64))+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001742
Adam Langleye9ada862015-05-11 17:20:37 -07001743 mov r11,QWORD[r8]
1744 mov r12,QWORD[8+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001745 sub r10,16
Adam Langleye9ada862015-05-11 17:20:37 -07001746 jc NEAR $L$cbc_slow_dec_partial
1747 jz NEAR $L$cbc_slow_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001748
Adam Langleye9ada862015-05-11 17:20:37 -07001749 mov QWORD[((0+64))+rsp],r11
1750 mov QWORD[((8+64))+rsp],r12
Adam Langleyd9e397b2015-01-22 14:27:53 -08001751
Adam Langleye9ada862015-05-11 17:20:37 -07001752 mov DWORD[r9],eax
1753 mov DWORD[4+r9],ebx
1754 mov DWORD[8+r9],ecx
1755 mov DWORD[12+r9],edx
Adam Langleyd9e397b2015-01-22 14:27:53 -08001756
Adam Langleye9ada862015-05-11 17:20:37 -07001757 lea r8,[16+r8]
1758 lea r9,[16+r9]
1759 jmp NEAR $L$cbc_slow_dec_loop
1760$L$cbc_slow_dec_done:
1761 mov rdi,QWORD[56+rsp]
1762 mov QWORD[rdi],r11
1763 mov QWORD[8+rdi],r12
Adam Langleyd9e397b2015-01-22 14:27:53 -08001764
Adam Langleye9ada862015-05-11 17:20:37 -07001765 mov DWORD[r9],eax
1766 mov DWORD[4+r9],ebx
1767 mov DWORD[8+r9],ecx
1768 mov DWORD[12+r9],edx
Adam Langleyd9e397b2015-01-22 14:27:53 -08001769
Adam Langleye9ada862015-05-11 17:20:37 -07001770 jmp NEAR $L$cbc_exit
Adam Langleyd9e397b2015-01-22 14:27:53 -08001771
1772ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07001773$L$cbc_slow_dec_partial:
1774 mov rdi,QWORD[56+rsp]
1775 mov QWORD[rdi],r11
1776 mov QWORD[8+rdi],r12
Adam Langleyd9e397b2015-01-22 14:27:53 -08001777
Adam Langleye9ada862015-05-11 17:20:37 -07001778 mov DWORD[((0+64))+rsp],eax
1779 mov DWORD[((4+64))+rsp],ebx
1780 mov DWORD[((8+64))+rsp],ecx
1781 mov DWORD[((12+64))+rsp],edx
Adam Langleyd9e397b2015-01-22 14:27:53 -08001782
1783 mov rdi,r9
Adam Langleye9ada862015-05-11 17:20:37 -07001784 lea rsi,[64+rsp]
1785 lea rcx,[16+r10]
1786 DD 0x9066A4F3
1787 jmp NEAR $L$cbc_exit
Adam Langleyd9e397b2015-01-22 14:27:53 -08001788
1789ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07001790$L$cbc_exit:
1791 mov rsi,QWORD[16+rsp]
1792 mov r15,QWORD[rsi]
1793 mov r14,QWORD[8+rsi]
1794 mov r13,QWORD[16+rsi]
1795 mov r12,QWORD[24+rsi]
1796 mov rbp,QWORD[32+rsi]
1797 mov rbx,QWORD[40+rsi]
1798 lea rsp,[48+rsi]
1799$L$cbc_popfq:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001800 popfq
Adam Langleye9ada862015-05-11 17:20:37 -07001801$L$cbc_epilogue:
1802 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
1803 mov rsi,QWORD[16+rsp]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001804 DB 0F3h,0C3h ;repret
Adam Langleye9ada862015-05-11 17:20:37 -07001805$L$SEH_end_asm_AES_cbc_encrypt:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001806ALIGN 64
Adam Langleye9ada862015-05-11 17:20:37 -07001807$L$AES_Te:
1808 DD 0xa56363c6,0xa56363c6
1809 DD 0x847c7cf8,0x847c7cf8
1810 DD 0x997777ee,0x997777ee
1811 DD 0x8d7b7bf6,0x8d7b7bf6
1812 DD 0x0df2f2ff,0x0df2f2ff
1813 DD 0xbd6b6bd6,0xbd6b6bd6
1814 DD 0xb16f6fde,0xb16f6fde
1815 DD 0x54c5c591,0x54c5c591
1816 DD 0x50303060,0x50303060
1817 DD 0x03010102,0x03010102
1818 DD 0xa96767ce,0xa96767ce
1819 DD 0x7d2b2b56,0x7d2b2b56
1820 DD 0x19fefee7,0x19fefee7
1821 DD 0x62d7d7b5,0x62d7d7b5
1822 DD 0xe6abab4d,0xe6abab4d
1823 DD 0x9a7676ec,0x9a7676ec
1824 DD 0x45caca8f,0x45caca8f
1825 DD 0x9d82821f,0x9d82821f
1826 DD 0x40c9c989,0x40c9c989
1827 DD 0x877d7dfa,0x877d7dfa
1828 DD 0x15fafaef,0x15fafaef
1829 DD 0xeb5959b2,0xeb5959b2
1830 DD 0xc947478e,0xc947478e
1831 DD 0x0bf0f0fb,0x0bf0f0fb
1832 DD 0xecadad41,0xecadad41
1833 DD 0x67d4d4b3,0x67d4d4b3
1834 DD 0xfda2a25f,0xfda2a25f
1835 DD 0xeaafaf45,0xeaafaf45
1836 DD 0xbf9c9c23,0xbf9c9c23
1837 DD 0xf7a4a453,0xf7a4a453
1838 DD 0x967272e4,0x967272e4
1839 DD 0x5bc0c09b,0x5bc0c09b
1840 DD 0xc2b7b775,0xc2b7b775
1841 DD 0x1cfdfde1,0x1cfdfde1
1842 DD 0xae93933d,0xae93933d
1843 DD 0x6a26264c,0x6a26264c
1844 DD 0x5a36366c,0x5a36366c
1845 DD 0x413f3f7e,0x413f3f7e
1846 DD 0x02f7f7f5,0x02f7f7f5
1847 DD 0x4fcccc83,0x4fcccc83
1848 DD 0x5c343468,0x5c343468
1849 DD 0xf4a5a551,0xf4a5a551
1850 DD 0x34e5e5d1,0x34e5e5d1
1851 DD 0x08f1f1f9,0x08f1f1f9
1852 DD 0x937171e2,0x937171e2
1853 DD 0x73d8d8ab,0x73d8d8ab
1854 DD 0x53313162,0x53313162
1855 DD 0x3f15152a,0x3f15152a
1856 DD 0x0c040408,0x0c040408
1857 DD 0x52c7c795,0x52c7c795
1858 DD 0x65232346,0x65232346
1859 DD 0x5ec3c39d,0x5ec3c39d
1860 DD 0x28181830,0x28181830
1861 DD 0xa1969637,0xa1969637
1862 DD 0x0f05050a,0x0f05050a
1863 DD 0xb59a9a2f,0xb59a9a2f
1864 DD 0x0907070e,0x0907070e
1865 DD 0x36121224,0x36121224
1866 DD 0x9b80801b,0x9b80801b
1867 DD 0x3de2e2df,0x3de2e2df
1868 DD 0x26ebebcd,0x26ebebcd
1869 DD 0x6927274e,0x6927274e
1870 DD 0xcdb2b27f,0xcdb2b27f
1871 DD 0x9f7575ea,0x9f7575ea
1872 DD 0x1b090912,0x1b090912
1873 DD 0x9e83831d,0x9e83831d
1874 DD 0x742c2c58,0x742c2c58
1875 DD 0x2e1a1a34,0x2e1a1a34
1876 DD 0x2d1b1b36,0x2d1b1b36
1877 DD 0xb26e6edc,0xb26e6edc
1878 DD 0xee5a5ab4,0xee5a5ab4
1879 DD 0xfba0a05b,0xfba0a05b
1880 DD 0xf65252a4,0xf65252a4
1881 DD 0x4d3b3b76,0x4d3b3b76
1882 DD 0x61d6d6b7,0x61d6d6b7
1883 DD 0xceb3b37d,0xceb3b37d
1884 DD 0x7b292952,0x7b292952
1885 DD 0x3ee3e3dd,0x3ee3e3dd
1886 DD 0x712f2f5e,0x712f2f5e
1887 DD 0x97848413,0x97848413
1888 DD 0xf55353a6,0xf55353a6
1889 DD 0x68d1d1b9,0x68d1d1b9
1890 DD 0x00000000,0x00000000
1891 DD 0x2cededc1,0x2cededc1
1892 DD 0x60202040,0x60202040
1893 DD 0x1ffcfce3,0x1ffcfce3
1894 DD 0xc8b1b179,0xc8b1b179
1895 DD 0xed5b5bb6,0xed5b5bb6
1896 DD 0xbe6a6ad4,0xbe6a6ad4
1897 DD 0x46cbcb8d,0x46cbcb8d
1898 DD 0xd9bebe67,0xd9bebe67
1899 DD 0x4b393972,0x4b393972
1900 DD 0xde4a4a94,0xde4a4a94
1901 DD 0xd44c4c98,0xd44c4c98
1902 DD 0xe85858b0,0xe85858b0
1903 DD 0x4acfcf85,0x4acfcf85
1904 DD 0x6bd0d0bb,0x6bd0d0bb
1905 DD 0x2aefefc5,0x2aefefc5
1906 DD 0xe5aaaa4f,0xe5aaaa4f
1907 DD 0x16fbfbed,0x16fbfbed
1908 DD 0xc5434386,0xc5434386
1909 DD 0xd74d4d9a,0xd74d4d9a
1910 DD 0x55333366,0x55333366
1911 DD 0x94858511,0x94858511
1912 DD 0xcf45458a,0xcf45458a
1913 DD 0x10f9f9e9,0x10f9f9e9
1914 DD 0x06020204,0x06020204
1915 DD 0x817f7ffe,0x817f7ffe
1916 DD 0xf05050a0,0xf05050a0
1917 DD 0x443c3c78,0x443c3c78
1918 DD 0xba9f9f25,0xba9f9f25
1919 DD 0xe3a8a84b,0xe3a8a84b
1920 DD 0xf35151a2,0xf35151a2
1921 DD 0xfea3a35d,0xfea3a35d
1922 DD 0xc0404080,0xc0404080
1923 DD 0x8a8f8f05,0x8a8f8f05
1924 DD 0xad92923f,0xad92923f
1925 DD 0xbc9d9d21,0xbc9d9d21
1926 DD 0x48383870,0x48383870
1927 DD 0x04f5f5f1,0x04f5f5f1
1928 DD 0xdfbcbc63,0xdfbcbc63
1929 DD 0xc1b6b677,0xc1b6b677
1930 DD 0x75dadaaf,0x75dadaaf
1931 DD 0x63212142,0x63212142
1932 DD 0x30101020,0x30101020
1933 DD 0x1affffe5,0x1affffe5
1934 DD 0x0ef3f3fd,0x0ef3f3fd
1935 DD 0x6dd2d2bf,0x6dd2d2bf
1936 DD 0x4ccdcd81,0x4ccdcd81
1937 DD 0x140c0c18,0x140c0c18
1938 DD 0x35131326,0x35131326
1939 DD 0x2fececc3,0x2fececc3
1940 DD 0xe15f5fbe,0xe15f5fbe
1941 DD 0xa2979735,0xa2979735
1942 DD 0xcc444488,0xcc444488
1943 DD 0x3917172e,0x3917172e
1944 DD 0x57c4c493,0x57c4c493
1945 DD 0xf2a7a755,0xf2a7a755
1946 DD 0x827e7efc,0x827e7efc
1947 DD 0x473d3d7a,0x473d3d7a
1948 DD 0xac6464c8,0xac6464c8
1949 DD 0xe75d5dba,0xe75d5dba
1950 DD 0x2b191932,0x2b191932
1951 DD 0x957373e6,0x957373e6
1952 DD 0xa06060c0,0xa06060c0
1953 DD 0x98818119,0x98818119
1954 DD 0xd14f4f9e,0xd14f4f9e
1955 DD 0x7fdcdca3,0x7fdcdca3
1956 DD 0x66222244,0x66222244
1957 DD 0x7e2a2a54,0x7e2a2a54
1958 DD 0xab90903b,0xab90903b
1959 DD 0x8388880b,0x8388880b
1960 DD 0xca46468c,0xca46468c
1961 DD 0x29eeeec7,0x29eeeec7
1962 DD 0xd3b8b86b,0xd3b8b86b
1963 DD 0x3c141428,0x3c141428
1964 DD 0x79dedea7,0x79dedea7
1965 DD 0xe25e5ebc,0xe25e5ebc
1966 DD 0x1d0b0b16,0x1d0b0b16
1967 DD 0x76dbdbad,0x76dbdbad
1968 DD 0x3be0e0db,0x3be0e0db
1969 DD 0x56323264,0x56323264
1970 DD 0x4e3a3a74,0x4e3a3a74
1971 DD 0x1e0a0a14,0x1e0a0a14
1972 DD 0xdb494992,0xdb494992
1973 DD 0x0a06060c,0x0a06060c
1974 DD 0x6c242448,0x6c242448
1975 DD 0xe45c5cb8,0xe45c5cb8
1976 DD 0x5dc2c29f,0x5dc2c29f
1977 DD 0x6ed3d3bd,0x6ed3d3bd
1978 DD 0xefacac43,0xefacac43
1979 DD 0xa66262c4,0xa66262c4
1980 DD 0xa8919139,0xa8919139
1981 DD 0xa4959531,0xa4959531
1982 DD 0x37e4e4d3,0x37e4e4d3
1983 DD 0x8b7979f2,0x8b7979f2
1984 DD 0x32e7e7d5,0x32e7e7d5
1985 DD 0x43c8c88b,0x43c8c88b
1986 DD 0x5937376e,0x5937376e
1987 DD 0xb76d6dda,0xb76d6dda
1988 DD 0x8c8d8d01,0x8c8d8d01
1989 DD 0x64d5d5b1,0x64d5d5b1
1990 DD 0xd24e4e9c,0xd24e4e9c
1991 DD 0xe0a9a949,0xe0a9a949
1992 DD 0xb46c6cd8,0xb46c6cd8
1993 DD 0xfa5656ac,0xfa5656ac
1994 DD 0x07f4f4f3,0x07f4f4f3
1995 DD 0x25eaeacf,0x25eaeacf
1996 DD 0xaf6565ca,0xaf6565ca
1997 DD 0x8e7a7af4,0x8e7a7af4
1998 DD 0xe9aeae47,0xe9aeae47
1999 DD 0x18080810,0x18080810
2000 DD 0xd5baba6f,0xd5baba6f
2001 DD 0x887878f0,0x887878f0
2002 DD 0x6f25254a,0x6f25254a
2003 DD 0x722e2e5c,0x722e2e5c
2004 DD 0x241c1c38,0x241c1c38
2005 DD 0xf1a6a657,0xf1a6a657
2006 DD 0xc7b4b473,0xc7b4b473
2007 DD 0x51c6c697,0x51c6c697
2008 DD 0x23e8e8cb,0x23e8e8cb
2009 DD 0x7cdddda1,0x7cdddda1
2010 DD 0x9c7474e8,0x9c7474e8
2011 DD 0x211f1f3e,0x211f1f3e
2012 DD 0xdd4b4b96,0xdd4b4b96
2013 DD 0xdcbdbd61,0xdcbdbd61
2014 DD 0x868b8b0d,0x868b8b0d
2015 DD 0x858a8a0f,0x858a8a0f
2016 DD 0x907070e0,0x907070e0
2017 DD 0x423e3e7c,0x423e3e7c
2018 DD 0xc4b5b571,0xc4b5b571
2019 DD 0xaa6666cc,0xaa6666cc
2020 DD 0xd8484890,0xd8484890
2021 DD 0x05030306,0x05030306
2022 DD 0x01f6f6f7,0x01f6f6f7
2023 DD 0x120e0e1c,0x120e0e1c
2024 DD 0xa36161c2,0xa36161c2
2025 DD 0x5f35356a,0x5f35356a
2026 DD 0xf95757ae,0xf95757ae
2027 DD 0xd0b9b969,0xd0b9b969
2028 DD 0x91868617,0x91868617
2029 DD 0x58c1c199,0x58c1c199
2030 DD 0x271d1d3a,0x271d1d3a
2031 DD 0xb99e9e27,0xb99e9e27
2032 DD 0x38e1e1d9,0x38e1e1d9
2033 DD 0x13f8f8eb,0x13f8f8eb
2034 DD 0xb398982b,0xb398982b
2035 DD 0x33111122,0x33111122
2036 DD 0xbb6969d2,0xbb6969d2
2037 DD 0x70d9d9a9,0x70d9d9a9
2038 DD 0x898e8e07,0x898e8e07
2039 DD 0xa7949433,0xa7949433
2040 DD 0xb69b9b2d,0xb69b9b2d
2041 DD 0x221e1e3c,0x221e1e3c
2042 DD 0x92878715,0x92878715
2043 DD 0x20e9e9c9,0x20e9e9c9
2044 DD 0x49cece87,0x49cece87
2045 DD 0xff5555aa,0xff5555aa
2046 DD 0x78282850,0x78282850
2047 DD 0x7adfdfa5,0x7adfdfa5
2048 DD 0x8f8c8c03,0x8f8c8c03
2049 DD 0xf8a1a159,0xf8a1a159
2050 DD 0x80898909,0x80898909
2051 DD 0x170d0d1a,0x170d0d1a
2052 DD 0xdabfbf65,0xdabfbf65
2053 DD 0x31e6e6d7,0x31e6e6d7
2054 DD 0xc6424284,0xc6424284
2055 DD 0xb86868d0,0xb86868d0
2056 DD 0xc3414182,0xc3414182
2057 DD 0xb0999929,0xb0999929
2058 DD 0x772d2d5a,0x772d2d5a
2059 DD 0x110f0f1e,0x110f0f1e
2060 DD 0xcbb0b07b,0xcbb0b07b
2061 DD 0xfc5454a8,0xfc5454a8
2062 DD 0xd6bbbb6d,0xd6bbbb6d
2063 DD 0x3a16162c,0x3a16162c
2064DB 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2065DB 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2066DB 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2067DB 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2068DB 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2069DB 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2070DB 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2071DB 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2072DB 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2073DB 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2074DB 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2075DB 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2076DB 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2077DB 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2078DB 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2079DB 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2080DB 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2081DB 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2082DB 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2083DB 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2084DB 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2085DB 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2086DB 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2087DB 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2088DB 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2089DB 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2090DB 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2091DB 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2092DB 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2093DB 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2094DB 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2095DB 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2096DB 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2097DB 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2098DB 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2099DB 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2100DB 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2101DB 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2102DB 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2103DB 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2104DB 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2105DB 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2106DB 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2107DB 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2108DB 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2109DB 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2110DB 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2111DB 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2112DB 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2113DB 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2114DB 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2115DB 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2116DB 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2117DB 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2118DB 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2119DB 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2120DB 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2121DB 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2122DB 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2123DB 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2124DB 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2125DB 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2126DB 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2127DB 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2128DB 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2129DB 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2130DB 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2131DB 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2132DB 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2133DB 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2134DB 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2135DB 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2136DB 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2137DB 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2138DB 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2139DB 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2140DB 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2141DB 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2142DB 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2143DB 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2144DB 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2145DB 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2146DB 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2147DB 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2148DB 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2149DB 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2150DB 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2151DB 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2152DB 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2153DB 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2154DB 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2155DB 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2156DB 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2157DB 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2158DB 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2159DB 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2160DB 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
2161DB 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
2162DB 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
2163DB 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
2164DB 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
2165DB 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
2166DB 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
2167DB 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
2168DB 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
2169DB 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
2170DB 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
2171DB 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
2172DB 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
2173DB 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
2174DB 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
2175DB 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
2176DB 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
2177DB 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
2178DB 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
2179DB 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
2180DB 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
2181DB 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
2182DB 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
2183DB 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
2184DB 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
2185DB 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
2186DB 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
2187DB 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
2188DB 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
2189DB 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
2190DB 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
2191DB 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
2192 DD 0x00000001,0x00000002,0x00000004,0x00000008
2193 DD 0x00000010,0x00000020,0x00000040,0x00000080
2194 DD 0x0000001b,0x00000036,0x80808080,0x80808080
2195 DD 0xfefefefe,0xfefefefe,0x1b1b1b1b,0x1b1b1b1b
Adam Langleyd9e397b2015-01-22 14:27:53 -08002196ALIGN 64
Adam Langleye9ada862015-05-11 17:20:37 -07002197$L$AES_Td:
2198 DD 0x50a7f451,0x50a7f451
2199 DD 0x5365417e,0x5365417e
2200 DD 0xc3a4171a,0xc3a4171a
2201 DD 0x965e273a,0x965e273a
2202 DD 0xcb6bab3b,0xcb6bab3b
2203 DD 0xf1459d1f,0xf1459d1f
2204 DD 0xab58faac,0xab58faac
2205 DD 0x9303e34b,0x9303e34b
2206 DD 0x55fa3020,0x55fa3020
2207 DD 0xf66d76ad,0xf66d76ad
2208 DD 0x9176cc88,0x9176cc88
2209 DD 0x254c02f5,0x254c02f5
2210 DD 0xfcd7e54f,0xfcd7e54f
2211 DD 0xd7cb2ac5,0xd7cb2ac5
2212 DD 0x80443526,0x80443526
2213 DD 0x8fa362b5,0x8fa362b5
2214 DD 0x495ab1de,0x495ab1de
2215 DD 0x671bba25,0x671bba25
2216 DD 0x980eea45,0x980eea45
2217 DD 0xe1c0fe5d,0xe1c0fe5d
2218 DD 0x02752fc3,0x02752fc3
2219 DD 0x12f04c81,0x12f04c81
2220 DD 0xa397468d,0xa397468d
2221 DD 0xc6f9d36b,0xc6f9d36b
2222 DD 0xe75f8f03,0xe75f8f03
2223 DD 0x959c9215,0x959c9215
2224 DD 0xeb7a6dbf,0xeb7a6dbf
2225 DD 0xda595295,0xda595295
2226 DD 0x2d83bed4,0x2d83bed4
2227 DD 0xd3217458,0xd3217458
2228 DD 0x2969e049,0x2969e049
2229 DD 0x44c8c98e,0x44c8c98e
2230 DD 0x6a89c275,0x6a89c275
2231 DD 0x78798ef4,0x78798ef4
2232 DD 0x6b3e5899,0x6b3e5899
2233 DD 0xdd71b927,0xdd71b927
2234 DD 0xb64fe1be,0xb64fe1be
2235 DD 0x17ad88f0,0x17ad88f0
2236 DD 0x66ac20c9,0x66ac20c9
2237 DD 0xb43ace7d,0xb43ace7d
2238 DD 0x184adf63,0x184adf63
2239 DD 0x82311ae5,0x82311ae5
2240 DD 0x60335197,0x60335197
2241 DD 0x457f5362,0x457f5362
2242 DD 0xe07764b1,0xe07764b1
2243 DD 0x84ae6bbb,0x84ae6bbb
2244 DD 0x1ca081fe,0x1ca081fe
2245 DD 0x942b08f9,0x942b08f9
2246 DD 0x58684870,0x58684870
2247 DD 0x19fd458f,0x19fd458f
2248 DD 0x876cde94,0x876cde94
2249 DD 0xb7f87b52,0xb7f87b52
2250 DD 0x23d373ab,0x23d373ab
2251 DD 0xe2024b72,0xe2024b72
2252 DD 0x578f1fe3,0x578f1fe3
2253 DD 0x2aab5566,0x2aab5566
2254 DD 0x0728ebb2,0x0728ebb2
2255 DD 0x03c2b52f,0x03c2b52f
2256 DD 0x9a7bc586,0x9a7bc586
2257 DD 0xa50837d3,0xa50837d3
2258 DD 0xf2872830,0xf2872830
2259 DD 0xb2a5bf23,0xb2a5bf23
2260 DD 0xba6a0302,0xba6a0302
2261 DD 0x5c8216ed,0x5c8216ed
2262 DD 0x2b1ccf8a,0x2b1ccf8a
2263 DD 0x92b479a7,0x92b479a7
2264 DD 0xf0f207f3,0xf0f207f3
2265 DD 0xa1e2694e,0xa1e2694e
2266 DD 0xcdf4da65,0xcdf4da65
2267 DD 0xd5be0506,0xd5be0506
2268 DD 0x1f6234d1,0x1f6234d1
2269 DD 0x8afea6c4,0x8afea6c4
2270 DD 0x9d532e34,0x9d532e34
2271 DD 0xa055f3a2,0xa055f3a2
2272 DD 0x32e18a05,0x32e18a05
2273 DD 0x75ebf6a4,0x75ebf6a4
2274 DD 0x39ec830b,0x39ec830b
2275 DD 0xaaef6040,0xaaef6040
2276 DD 0x069f715e,0x069f715e
2277 DD 0x51106ebd,0x51106ebd
2278 DD 0xf98a213e,0xf98a213e
2279 DD 0x3d06dd96,0x3d06dd96
2280 DD 0xae053edd,0xae053edd
2281 DD 0x46bde64d,0x46bde64d
2282 DD 0xb58d5491,0xb58d5491
2283 DD 0x055dc471,0x055dc471
2284 DD 0x6fd40604,0x6fd40604
2285 DD 0xff155060,0xff155060
2286 DD 0x24fb9819,0x24fb9819
2287 DD 0x97e9bdd6,0x97e9bdd6
2288 DD 0xcc434089,0xcc434089
2289 DD 0x779ed967,0x779ed967
2290 DD 0xbd42e8b0,0xbd42e8b0
2291 DD 0x888b8907,0x888b8907
2292 DD 0x385b19e7,0x385b19e7
2293 DD 0xdbeec879,0xdbeec879
2294 DD 0x470a7ca1,0x470a7ca1
2295 DD 0xe90f427c,0xe90f427c
2296 DD 0xc91e84f8,0xc91e84f8
2297 DD 0x00000000,0x00000000
2298 DD 0x83868009,0x83868009
2299 DD 0x48ed2b32,0x48ed2b32
2300 DD 0xac70111e,0xac70111e
2301 DD 0x4e725a6c,0x4e725a6c
2302 DD 0xfbff0efd,0xfbff0efd
2303 DD 0x5638850f,0x5638850f
2304 DD 0x1ed5ae3d,0x1ed5ae3d
2305 DD 0x27392d36,0x27392d36
2306 DD 0x64d90f0a,0x64d90f0a
2307 DD 0x21a65c68,0x21a65c68
2308 DD 0xd1545b9b,0xd1545b9b
2309 DD 0x3a2e3624,0x3a2e3624
2310 DD 0xb1670a0c,0xb1670a0c
2311 DD 0x0fe75793,0x0fe75793
2312 DD 0xd296eeb4,0xd296eeb4
2313 DD 0x9e919b1b,0x9e919b1b
2314 DD 0x4fc5c080,0x4fc5c080
2315 DD 0xa220dc61,0xa220dc61
2316 DD 0x694b775a,0x694b775a
2317 DD 0x161a121c,0x161a121c
2318 DD 0x0aba93e2,0x0aba93e2
2319 DD 0xe52aa0c0,0xe52aa0c0
2320 DD 0x43e0223c,0x43e0223c
2321 DD 0x1d171b12,0x1d171b12
2322 DD 0x0b0d090e,0x0b0d090e
2323 DD 0xadc78bf2,0xadc78bf2
2324 DD 0xb9a8b62d,0xb9a8b62d
2325 DD 0xc8a91e14,0xc8a91e14
2326 DD 0x8519f157,0x8519f157
2327 DD 0x4c0775af,0x4c0775af
2328 DD 0xbbdd99ee,0xbbdd99ee
2329 DD 0xfd607fa3,0xfd607fa3
2330 DD 0x9f2601f7,0x9f2601f7
2331 DD 0xbcf5725c,0xbcf5725c
2332 DD 0xc53b6644,0xc53b6644
2333 DD 0x347efb5b,0x347efb5b
2334 DD 0x7629438b,0x7629438b
2335 DD 0xdcc623cb,0xdcc623cb
2336 DD 0x68fcedb6,0x68fcedb6
2337 DD 0x63f1e4b8,0x63f1e4b8
2338 DD 0xcadc31d7,0xcadc31d7
2339 DD 0x10856342,0x10856342
2340 DD 0x40229713,0x40229713
2341 DD 0x2011c684,0x2011c684
2342 DD 0x7d244a85,0x7d244a85
2343 DD 0xf83dbbd2,0xf83dbbd2
2344 DD 0x1132f9ae,0x1132f9ae
2345 DD 0x6da129c7,0x6da129c7
2346 DD 0x4b2f9e1d,0x4b2f9e1d
2347 DD 0xf330b2dc,0xf330b2dc
2348 DD 0xec52860d,0xec52860d
2349 DD 0xd0e3c177,0xd0e3c177
2350 DD 0x6c16b32b,0x6c16b32b
2351 DD 0x99b970a9,0x99b970a9
2352 DD 0xfa489411,0xfa489411
2353 DD 0x2264e947,0x2264e947
2354 DD 0xc48cfca8,0xc48cfca8
2355 DD 0x1a3ff0a0,0x1a3ff0a0
2356 DD 0xd82c7d56,0xd82c7d56
2357 DD 0xef903322,0xef903322
2358 DD 0xc74e4987,0xc74e4987
2359 DD 0xc1d138d9,0xc1d138d9
2360 DD 0xfea2ca8c,0xfea2ca8c
2361 DD 0x360bd498,0x360bd498
2362 DD 0xcf81f5a6,0xcf81f5a6
2363 DD 0x28de7aa5,0x28de7aa5
2364 DD 0x268eb7da,0x268eb7da
2365 DD 0xa4bfad3f,0xa4bfad3f
2366 DD 0xe49d3a2c,0xe49d3a2c
2367 DD 0x0d927850,0x0d927850
2368 DD 0x9bcc5f6a,0x9bcc5f6a
2369 DD 0x62467e54,0x62467e54
2370 DD 0xc2138df6,0xc2138df6
2371 DD 0xe8b8d890,0xe8b8d890
2372 DD 0x5ef7392e,0x5ef7392e
2373 DD 0xf5afc382,0xf5afc382
2374 DD 0xbe805d9f,0xbe805d9f
2375 DD 0x7c93d069,0x7c93d069
2376 DD 0xa92dd56f,0xa92dd56f
2377 DD 0xb31225cf,0xb31225cf
2378 DD 0x3b99acc8,0x3b99acc8
2379 DD 0xa77d1810,0xa77d1810
2380 DD 0x6e639ce8,0x6e639ce8
2381 DD 0x7bbb3bdb,0x7bbb3bdb
2382 DD 0x097826cd,0x097826cd
2383 DD 0xf418596e,0xf418596e
2384 DD 0x01b79aec,0x01b79aec
2385 DD 0xa89a4f83,0xa89a4f83
2386 DD 0x656e95e6,0x656e95e6
2387 DD 0x7ee6ffaa,0x7ee6ffaa
2388 DD 0x08cfbc21,0x08cfbc21
2389 DD 0xe6e815ef,0xe6e815ef
2390 DD 0xd99be7ba,0xd99be7ba
2391 DD 0xce366f4a,0xce366f4a
2392 DD 0xd4099fea,0xd4099fea
2393 DD 0xd67cb029,0xd67cb029
2394 DD 0xafb2a431,0xafb2a431
2395 DD 0x31233f2a,0x31233f2a
2396 DD 0x3094a5c6,0x3094a5c6
2397 DD 0xc066a235,0xc066a235
2398 DD 0x37bc4e74,0x37bc4e74
2399 DD 0xa6ca82fc,0xa6ca82fc
2400 DD 0xb0d090e0,0xb0d090e0
2401 DD 0x15d8a733,0x15d8a733
2402 DD 0x4a9804f1,0x4a9804f1
2403 DD 0xf7daec41,0xf7daec41
2404 DD 0x0e50cd7f,0x0e50cd7f
2405 DD 0x2ff69117,0x2ff69117
2406 DD 0x8dd64d76,0x8dd64d76
2407 DD 0x4db0ef43,0x4db0ef43
2408 DD 0x544daacc,0x544daacc
2409 DD 0xdf0496e4,0xdf0496e4
2410 DD 0xe3b5d19e,0xe3b5d19e
2411 DD 0x1b886a4c,0x1b886a4c
2412 DD 0xb81f2cc1,0xb81f2cc1
2413 DD 0x7f516546,0x7f516546
2414 DD 0x04ea5e9d,0x04ea5e9d
2415 DD 0x5d358c01,0x5d358c01
2416 DD 0x737487fa,0x737487fa
2417 DD 0x2e410bfb,0x2e410bfb
2418 DD 0x5a1d67b3,0x5a1d67b3
2419 DD 0x52d2db92,0x52d2db92
2420 DD 0x335610e9,0x335610e9
2421 DD 0x1347d66d,0x1347d66d
2422 DD 0x8c61d79a,0x8c61d79a
2423 DD 0x7a0ca137,0x7a0ca137
2424 DD 0x8e14f859,0x8e14f859
2425 DD 0x893c13eb,0x893c13eb
2426 DD 0xee27a9ce,0xee27a9ce
2427 DD 0x35c961b7,0x35c961b7
2428 DD 0xede51ce1,0xede51ce1
2429 DD 0x3cb1477a,0x3cb1477a
2430 DD 0x59dfd29c,0x59dfd29c
2431 DD 0x3f73f255,0x3f73f255
2432 DD 0x79ce1418,0x79ce1418
2433 DD 0xbf37c773,0xbf37c773
2434 DD 0xeacdf753,0xeacdf753
2435 DD 0x5baafd5f,0x5baafd5f
2436 DD 0x146f3ddf,0x146f3ddf
2437 DD 0x86db4478,0x86db4478
2438 DD 0x81f3afca,0x81f3afca
2439 DD 0x3ec468b9,0x3ec468b9
2440 DD 0x2c342438,0x2c342438
2441 DD 0x5f40a3c2,0x5f40a3c2
2442 DD 0x72c31d16,0x72c31d16
2443 DD 0x0c25e2bc,0x0c25e2bc
2444 DD 0x8b493c28,0x8b493c28
2445 DD 0x41950dff,0x41950dff
2446 DD 0x7101a839,0x7101a839
2447 DD 0xdeb30c08,0xdeb30c08
2448 DD 0x9ce4b4d8,0x9ce4b4d8
2449 DD 0x90c15664,0x90c15664
2450 DD 0x6184cb7b,0x6184cb7b
2451 DD 0x70b632d5,0x70b632d5
2452 DD 0x745c6c48,0x745c6c48
2453 DD 0x4257b8d0,0x4257b8d0
2454DB 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2455DB 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2456DB 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2457DB 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2458DB 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2459DB 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2460DB 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2461DB 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2462DB 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2463DB 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2464DB 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2465DB 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2466DB 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2467DB 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2468DB 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2469DB 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2470DB 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2471DB 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2472DB 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2473DB 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2474DB 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2475DB 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2476DB 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2477DB 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2478DB 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2479DB 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2480DB 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2481DB 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2482DB 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2483DB 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2484DB 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2485DB 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2486 DD 0x80808080,0x80808080,0xfefefefe,0xfefefefe
2487 DD 0x1b1b1b1b,0x1b1b1b1b,0,0
2488DB 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2489DB 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2490DB 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2491DB 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2492DB 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2493DB 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2494DB 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2495DB 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2496DB 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2497DB 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2498DB 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2499DB 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2500DB 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2501DB 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2502DB 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2503DB 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2504DB 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2505DB 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2506DB 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2507DB 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2508DB 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2509DB 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2510DB 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2511DB 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2512DB 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2513DB 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2514DB 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2515DB 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2516DB 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2517DB 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2518DB 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2519DB 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2520 DD 0x80808080,0x80808080,0xfefefefe,0xfefefefe
2521 DD 0x1b1b1b1b,0x1b1b1b1b,0,0
2522DB 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2523DB 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2524DB 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2525DB 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2526DB 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2527DB 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2528DB 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2529DB 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2530DB 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2531DB 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2532DB 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2533DB 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2534DB 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2535DB 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2536DB 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2537DB 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2538DB 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2539DB 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2540DB 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2541DB 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2542DB 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2543DB 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2544DB 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2545DB 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2546DB 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2547DB 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2548DB 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2549DB 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2550DB 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2551DB 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2552DB 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2553DB 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2554 DD 0x80808080,0x80808080,0xfefefefe,0xfefefefe
2555 DD 0x1b1b1b1b,0x1b1b1b1b,0,0
2556DB 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
2557DB 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
2558DB 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
2559DB 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
2560DB 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
2561DB 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
2562DB 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
2563DB 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
2564DB 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
2565DB 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
2566DB 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
2567DB 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
2568DB 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
2569DB 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
2570DB 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
2571DB 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
2572DB 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
2573DB 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
2574DB 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
2575DB 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
2576DB 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
2577DB 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
2578DB 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
2579DB 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
2580DB 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
2581DB 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
2582DB 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
2583DB 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
2584DB 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
2585DB 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
2586DB 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
2587DB 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
2588 DD 0x80808080,0x80808080,0xfefefefe,0xfefefefe
2589 DD 0x1b1b1b1b,0x1b1b1b1b,0,0
Adam Langleyd9e397b2015-01-22 14:27:53 -08002590DB 65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32
2591DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
2592DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
2593DB 62,0
2594ALIGN 64
Adam Langleye9ada862015-05-11 17:20:37 -07002595EXTERN __imp_RtlVirtualUnwind
Adam Langleyd9e397b2015-01-22 14:27:53 -08002596
2597ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07002598block_se_handler:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002599 push rsi
2600 push rdi
2601 push rbx
2602 push rbp
2603 push r12
2604 push r13
2605 push r14
2606 push r15
2607 pushfq
2608 sub rsp,64
2609
Adam Langleye9ada862015-05-11 17:20:37 -07002610 mov rax,QWORD[120+r8]
2611 mov rbx,QWORD[248+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002612
Adam Langleye9ada862015-05-11 17:20:37 -07002613 mov rsi,QWORD[8+r9]
2614 mov r11,QWORD[56+r9]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002615
Adam Langleye9ada862015-05-11 17:20:37 -07002616 mov r10d,DWORD[r11]
2617 lea r10,[r10*1+rsi]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002618 cmp rbx,r10
Adam Langleye9ada862015-05-11 17:20:37 -07002619 jb NEAR $L$in_block_prologue
Adam Langleyd9e397b2015-01-22 14:27:53 -08002620
Adam Langleye9ada862015-05-11 17:20:37 -07002621 mov rax,QWORD[152+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002622
Adam Langleye9ada862015-05-11 17:20:37 -07002623 mov r10d,DWORD[4+r11]
2624 lea r10,[r10*1+rsi]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002625 cmp rbx,r10
Adam Langleye9ada862015-05-11 17:20:37 -07002626 jae NEAR $L$in_block_prologue
Adam Langleyd9e397b2015-01-22 14:27:53 -08002627
Adam Langleye9ada862015-05-11 17:20:37 -07002628 mov rax,QWORD[24+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002629
Adam Langleye9ada862015-05-11 17:20:37 -07002630 mov rbx,QWORD[((-8))+rax]
2631 mov rbp,QWORD[((-16))+rax]
2632 mov r12,QWORD[((-24))+rax]
2633 mov r13,QWORD[((-32))+rax]
2634 mov r14,QWORD[((-40))+rax]
2635 mov r15,QWORD[((-48))+rax]
2636 mov QWORD[144+r8],rbx
2637 mov QWORD[160+r8],rbp
2638 mov QWORD[216+r8],r12
2639 mov QWORD[224+r8],r13
2640 mov QWORD[232+r8],r14
2641 mov QWORD[240+r8],r15
Adam Langleyd9e397b2015-01-22 14:27:53 -08002642
Adam Langleye9ada862015-05-11 17:20:37 -07002643$L$in_block_prologue:
2644 mov rdi,QWORD[8+rax]
2645 mov rsi,QWORD[16+rax]
2646 mov QWORD[152+r8],rax
2647 mov QWORD[168+r8],rsi
2648 mov QWORD[176+r8],rdi
Adam Langleyd9e397b2015-01-22 14:27:53 -08002649
Adam Langleye9ada862015-05-11 17:20:37 -07002650 jmp NEAR $L$common_seh_exit
2651
Adam Langleyd9e397b2015-01-22 14:27:53 -08002652
2653
2654ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07002655key_se_handler:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002656 push rsi
2657 push rdi
2658 push rbx
2659 push rbp
2660 push r12
2661 push r13
2662 push r14
2663 push r15
2664 pushfq
2665 sub rsp,64
2666
Adam Langleye9ada862015-05-11 17:20:37 -07002667 mov rax,QWORD[120+r8]
2668 mov rbx,QWORD[248+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002669
Adam Langleye9ada862015-05-11 17:20:37 -07002670 mov rsi,QWORD[8+r9]
2671 mov r11,QWORD[56+r9]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002672
Adam Langleye9ada862015-05-11 17:20:37 -07002673 mov r10d,DWORD[r11]
2674 lea r10,[r10*1+rsi]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002675 cmp rbx,r10
Adam Langleye9ada862015-05-11 17:20:37 -07002676 jb NEAR $L$in_key_prologue
Adam Langleyd9e397b2015-01-22 14:27:53 -08002677
Adam Langleye9ada862015-05-11 17:20:37 -07002678 mov rax,QWORD[152+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002679
Adam Langleye9ada862015-05-11 17:20:37 -07002680 mov r10d,DWORD[4+r11]
2681 lea r10,[r10*1+rsi]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002682 cmp rbx,r10
Adam Langleye9ada862015-05-11 17:20:37 -07002683 jae NEAR $L$in_key_prologue
Adam Langleyd9e397b2015-01-22 14:27:53 -08002684
Adam Langleye9ada862015-05-11 17:20:37 -07002685 lea rax,[56+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002686
Adam Langleye9ada862015-05-11 17:20:37 -07002687 mov rbx,QWORD[((-8))+rax]
2688 mov rbp,QWORD[((-16))+rax]
2689 mov r12,QWORD[((-24))+rax]
2690 mov r13,QWORD[((-32))+rax]
2691 mov r14,QWORD[((-40))+rax]
2692 mov r15,QWORD[((-48))+rax]
2693 mov QWORD[144+r8],rbx
2694 mov QWORD[160+r8],rbp
2695 mov QWORD[216+r8],r12
2696 mov QWORD[224+r8],r13
2697 mov QWORD[232+r8],r14
2698 mov QWORD[240+r8],r15
Adam Langleyd9e397b2015-01-22 14:27:53 -08002699
Adam Langleye9ada862015-05-11 17:20:37 -07002700$L$in_key_prologue:
2701 mov rdi,QWORD[8+rax]
2702 mov rsi,QWORD[16+rax]
2703 mov QWORD[152+r8],rax
2704 mov QWORD[168+r8],rsi
2705 mov QWORD[176+r8],rdi
Adam Langleyd9e397b2015-01-22 14:27:53 -08002706
Adam Langleye9ada862015-05-11 17:20:37 -07002707 jmp NEAR $L$common_seh_exit
2708
Adam Langleyd9e397b2015-01-22 14:27:53 -08002709
2710
2711ALIGN 16
Adam Langleye9ada862015-05-11 17:20:37 -07002712cbc_se_handler:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002713 push rsi
2714 push rdi
2715 push rbx
2716 push rbp
2717 push r12
2718 push r13
2719 push r14
2720 push r15
2721 pushfq
2722 sub rsp,64
2723
Adam Langleye9ada862015-05-11 17:20:37 -07002724 mov rax,QWORD[120+r8]
2725 mov rbx,QWORD[248+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002726
Adam Langleye9ada862015-05-11 17:20:37 -07002727 lea r10,[$L$cbc_prologue]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002728 cmp rbx,r10
Adam Langleye9ada862015-05-11 17:20:37 -07002729 jb NEAR $L$in_cbc_prologue
Adam Langleyd9e397b2015-01-22 14:27:53 -08002730
Adam Langleye9ada862015-05-11 17:20:37 -07002731 lea r10,[$L$cbc_fast_body]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002732 cmp rbx,r10
Adam Langleye9ada862015-05-11 17:20:37 -07002733 jb NEAR $L$in_cbc_frame_setup
Adam Langleyd9e397b2015-01-22 14:27:53 -08002734
Adam Langleye9ada862015-05-11 17:20:37 -07002735 lea r10,[$L$cbc_slow_prologue]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002736 cmp rbx,r10
Adam Langleye9ada862015-05-11 17:20:37 -07002737 jb NEAR $L$in_cbc_body
Adam Langleyd9e397b2015-01-22 14:27:53 -08002738
Adam Langleye9ada862015-05-11 17:20:37 -07002739 lea r10,[$L$cbc_slow_body]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002740 cmp rbx,r10
Adam Langleye9ada862015-05-11 17:20:37 -07002741 jb NEAR $L$in_cbc_frame_setup
Adam Langleyd9e397b2015-01-22 14:27:53 -08002742
Adam Langleye9ada862015-05-11 17:20:37 -07002743$L$in_cbc_body:
2744 mov rax,QWORD[152+r8]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002745
Adam Langleye9ada862015-05-11 17:20:37 -07002746 lea r10,[$L$cbc_epilogue]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002747 cmp rbx,r10
Adam Langleye9ada862015-05-11 17:20:37 -07002748 jae NEAR $L$in_cbc_prologue
Adam Langleyd9e397b2015-01-22 14:27:53 -08002749
Adam Langleye9ada862015-05-11 17:20:37 -07002750 lea rax,[8+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002751
Adam Langleye9ada862015-05-11 17:20:37 -07002752 lea r10,[$L$cbc_popfq]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002753 cmp rbx,r10
Adam Langleye9ada862015-05-11 17:20:37 -07002754 jae NEAR $L$in_cbc_prologue
Adam Langleyd9e397b2015-01-22 14:27:53 -08002755
Adam Langleye9ada862015-05-11 17:20:37 -07002756 mov rax,QWORD[8+rax]
2757 lea rax,[56+rax]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002758
Adam Langleye9ada862015-05-11 17:20:37 -07002759$L$in_cbc_frame_setup:
2760 mov rbx,QWORD[((-16))+rax]
2761 mov rbp,QWORD[((-24))+rax]
2762 mov r12,QWORD[((-32))+rax]
2763 mov r13,QWORD[((-40))+rax]
2764 mov r14,QWORD[((-48))+rax]
2765 mov r15,QWORD[((-56))+rax]
2766 mov QWORD[144+r8],rbx
2767 mov QWORD[160+r8],rbp
2768 mov QWORD[216+r8],r12
2769 mov QWORD[224+r8],r13
2770 mov QWORD[232+r8],r14
2771 mov QWORD[240+r8],r15
Adam Langleyd9e397b2015-01-22 14:27:53 -08002772
Adam Langleye9ada862015-05-11 17:20:37 -07002773$L$in_cbc_prologue:
2774 mov rdi,QWORD[8+rax]
2775 mov rsi,QWORD[16+rax]
2776 mov QWORD[152+r8],rax
2777 mov QWORD[168+r8],rsi
2778 mov QWORD[176+r8],rdi
Adam Langleyd9e397b2015-01-22 14:27:53 -08002779
Adam Langleye9ada862015-05-11 17:20:37 -07002780$L$common_seh_exit:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002781
Adam Langleye9ada862015-05-11 17:20:37 -07002782 mov rdi,QWORD[40+r9]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002783 mov rsi,r8
2784 mov ecx,154
Adam Langleye9ada862015-05-11 17:20:37 -07002785 DD 0xa548f3fc
Adam Langleyd9e397b2015-01-22 14:27:53 -08002786
2787 mov rsi,r9
2788 xor rcx,rcx
Adam Langleye9ada862015-05-11 17:20:37 -07002789 mov rdx,QWORD[8+rsi]
2790 mov r8,QWORD[rsi]
2791 mov r9,QWORD[16+rsi]
2792 mov r10,QWORD[40+rsi]
2793 lea r11,[56+rsi]
2794 lea r12,[24+rsi]
2795 mov QWORD[32+rsp],r10
2796 mov QWORD[40+rsp],r11
2797 mov QWORD[48+rsp],r12
2798 mov QWORD[56+rsp],rcx
2799 call QWORD[__imp_RtlVirtualUnwind]
Adam Langleyd9e397b2015-01-22 14:27:53 -08002800
2801 mov eax,1
2802 add rsp,64
2803 popfq
2804 pop r15
2805 pop r14
2806 pop r13
2807 pop r12
2808 pop rbp
2809 pop rbx
2810 pop rdi
2811 pop rsi
2812 DB 0F3h,0C3h ;repret
Adam Langleyd9e397b2015-01-22 14:27:53 -08002813
Adam Langleye9ada862015-05-11 17:20:37 -07002814
2815section .pdata rdata align=4
Adam Langleyd9e397b2015-01-22 14:27:53 -08002816ALIGN 4
Adam Langleye9ada862015-05-11 17:20:37 -07002817 DD $L$SEH_begin_asm_AES_encrypt wrt ..imagebase
2818 DD $L$SEH_end_asm_AES_encrypt wrt ..imagebase
2819 DD $L$SEH_info_asm_AES_encrypt wrt ..imagebase
Adam Langleyd9e397b2015-01-22 14:27:53 -08002820
Adam Langleye9ada862015-05-11 17:20:37 -07002821 DD $L$SEH_begin_asm_AES_decrypt wrt ..imagebase
2822 DD $L$SEH_end_asm_AES_decrypt wrt ..imagebase
2823 DD $L$SEH_info_asm_AES_decrypt wrt ..imagebase
Adam Langleyd9e397b2015-01-22 14:27:53 -08002824
Adam Langleye9ada862015-05-11 17:20:37 -07002825 DD $L$SEH_begin_asm_AES_set_encrypt_key wrt ..imagebase
2826 DD $L$SEH_end_asm_AES_set_encrypt_key wrt ..imagebase
2827 DD $L$SEH_info_asm_AES_set_encrypt_key wrt ..imagebase
Adam Langleyd9e397b2015-01-22 14:27:53 -08002828
Adam Langleye9ada862015-05-11 17:20:37 -07002829 DD $L$SEH_begin_asm_AES_set_decrypt_key wrt ..imagebase
2830 DD $L$SEH_end_asm_AES_set_decrypt_key wrt ..imagebase
2831 DD $L$SEH_info_asm_AES_set_decrypt_key wrt ..imagebase
Adam Langleyd9e397b2015-01-22 14:27:53 -08002832
Adam Langleye9ada862015-05-11 17:20:37 -07002833 DD $L$SEH_begin_asm_AES_cbc_encrypt wrt ..imagebase
2834 DD $L$SEH_end_asm_AES_cbc_encrypt wrt ..imagebase
2835 DD $L$SEH_info_asm_AES_cbc_encrypt wrt ..imagebase
Adam Langleyd9e397b2015-01-22 14:27:53 -08002836
Adam Langleye9ada862015-05-11 17:20:37 -07002837section .xdata rdata align=8
Adam Langleyd9e397b2015-01-22 14:27:53 -08002838ALIGN 8
Adam Langleye9ada862015-05-11 17:20:37 -07002839$L$SEH_info_asm_AES_encrypt:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002840DB 9,0,0,0
Adam Langleye9ada862015-05-11 17:20:37 -07002841 DD block_se_handler wrt ..imagebase
2842 DD $L$enc_prologue wrt ..imagebase,$L$enc_epilogue wrt ..imagebase
2843$L$SEH_info_asm_AES_decrypt:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002844DB 9,0,0,0
Adam Langleye9ada862015-05-11 17:20:37 -07002845 DD block_se_handler wrt ..imagebase
2846 DD $L$dec_prologue wrt ..imagebase,$L$dec_epilogue wrt ..imagebase
2847$L$SEH_info_asm_AES_set_encrypt_key:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002848DB 9,0,0,0
Adam Langleye9ada862015-05-11 17:20:37 -07002849 DD key_se_handler wrt ..imagebase
2850 DD $L$enc_key_prologue wrt ..imagebase,$L$enc_key_epilogue wrt ..imagebase
2851$L$SEH_info_asm_AES_set_decrypt_key:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002852DB 9,0,0,0
Adam Langleye9ada862015-05-11 17:20:37 -07002853 DD key_se_handler wrt ..imagebase
2854 DD $L$dec_key_prologue wrt ..imagebase,$L$dec_key_epilogue wrt ..imagebase
2855$L$SEH_info_asm_AES_cbc_encrypt:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002856DB 9,0,0,0
Adam Langleye9ada862015-05-11 17:20:37 -07002857 DD cbc_se_handler wrt ..imagebase