aesni-x86_64-nasm.asm 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311
  1. ; This file is generated from a similarly-named Perl script in the BoringSSL
  2. ; source tree. Do not edit by hand.
  3. default rel
  4. %define XMMWORD
  5. %define YMMWORD
  6. %define ZMMWORD
  7. section .text code align=64
  8. EXTERN GFp_ia32cap_P
  9. global GFp_aes_hw_encrypt
  10. ALIGN 16
  11. GFp_aes_hw_encrypt:
  12. movups xmm2,XMMWORD[rcx]
  13. mov eax,DWORD[240+r8]
  14. movups xmm0,XMMWORD[r8]
  15. movups xmm1,XMMWORD[16+r8]
  16. lea r8,[32+r8]
  17. xorps xmm2,xmm0
  18. $L$oop_enc1_1:
  19. DB 102,15,56,220,209
  20. dec eax
  21. movups xmm1,XMMWORD[r8]
  22. lea r8,[16+r8]
  23. jnz NEAR $L$oop_enc1_1
  24. DB 102,15,56,221,209
  25. pxor xmm0,xmm0
  26. pxor xmm1,xmm1
  27. movups XMMWORD[rdx],xmm2
  28. pxor xmm2,xmm2
  29. DB 0F3h,0C3h ;repret
  30. ALIGN 16
  31. _aesni_encrypt2:
  32. movups xmm0,XMMWORD[rcx]
  33. shl eax,4
  34. movups xmm1,XMMWORD[16+rcx]
  35. xorps xmm2,xmm0
  36. xorps xmm3,xmm0
  37. movups xmm0,XMMWORD[32+rcx]
  38. lea rcx,[32+rax*1+rcx]
  39. neg rax
  40. add rax,16
  41. $L$enc_loop2:
  42. DB 102,15,56,220,209
  43. DB 102,15,56,220,217
  44. movups xmm1,XMMWORD[rax*1+rcx]
  45. add rax,32
  46. DB 102,15,56,220,208
  47. DB 102,15,56,220,216
  48. movups xmm0,XMMWORD[((-16))+rax*1+rcx]
  49. jnz NEAR $L$enc_loop2
  50. DB 102,15,56,220,209
  51. DB 102,15,56,220,217
  52. DB 102,15,56,221,208
  53. DB 102,15,56,221,216
  54. DB 0F3h,0C3h ;repret
  55. ALIGN 16
  56. _aesni_encrypt3:
  57. movups xmm0,XMMWORD[rcx]
  58. shl eax,4
  59. movups xmm1,XMMWORD[16+rcx]
  60. xorps xmm2,xmm0
  61. xorps xmm3,xmm0
  62. xorps xmm4,xmm0
  63. movups xmm0,XMMWORD[32+rcx]
  64. lea rcx,[32+rax*1+rcx]
  65. neg rax
  66. add rax,16
  67. $L$enc_loop3:
  68. DB 102,15,56,220,209
  69. DB 102,15,56,220,217
  70. DB 102,15,56,220,225
  71. movups xmm1,XMMWORD[rax*1+rcx]
  72. add rax,32
  73. DB 102,15,56,220,208
  74. DB 102,15,56,220,216
  75. DB 102,15,56,220,224
  76. movups xmm0,XMMWORD[((-16))+rax*1+rcx]
  77. jnz NEAR $L$enc_loop3
  78. DB 102,15,56,220,209
  79. DB 102,15,56,220,217
  80. DB 102,15,56,220,225
  81. DB 102,15,56,221,208
  82. DB 102,15,56,221,216
  83. DB 102,15,56,221,224
  84. DB 0F3h,0C3h ;repret
  85. ALIGN 16
  86. _aesni_encrypt4:
  87. movups xmm0,XMMWORD[rcx]
  88. shl eax,4
  89. movups xmm1,XMMWORD[16+rcx]
  90. xorps xmm2,xmm0
  91. xorps xmm3,xmm0
  92. xorps xmm4,xmm0
  93. xorps xmm5,xmm0
  94. movups xmm0,XMMWORD[32+rcx]
  95. lea rcx,[32+rax*1+rcx]
  96. neg rax
  97. DB 0x0f,0x1f,0x00
  98. add rax,16
  99. $L$enc_loop4:
  100. DB 102,15,56,220,209
  101. DB 102,15,56,220,217
  102. DB 102,15,56,220,225
  103. DB 102,15,56,220,233
  104. movups xmm1,XMMWORD[rax*1+rcx]
  105. add rax,32
  106. DB 102,15,56,220,208
  107. DB 102,15,56,220,216
  108. DB 102,15,56,220,224
  109. DB 102,15,56,220,232
  110. movups xmm0,XMMWORD[((-16))+rax*1+rcx]
  111. jnz NEAR $L$enc_loop4
  112. DB 102,15,56,220,209
  113. DB 102,15,56,220,217
  114. DB 102,15,56,220,225
  115. DB 102,15,56,220,233
  116. DB 102,15,56,221,208
  117. DB 102,15,56,221,216
  118. DB 102,15,56,221,224
  119. DB 102,15,56,221,232
  120. DB 0F3h,0C3h ;repret
  121. ALIGN 16
  122. _aesni_encrypt6:
  123. movups xmm0,XMMWORD[rcx]
  124. shl eax,4
  125. movups xmm1,XMMWORD[16+rcx]
  126. xorps xmm2,xmm0
  127. pxor xmm3,xmm0
  128. pxor xmm4,xmm0
  129. DB 102,15,56,220,209
  130. lea rcx,[32+rax*1+rcx]
  131. neg rax
  132. DB 102,15,56,220,217
  133. pxor xmm5,xmm0
  134. pxor xmm6,xmm0
  135. DB 102,15,56,220,225
  136. pxor xmm7,xmm0
  137. movups xmm0,XMMWORD[rax*1+rcx]
  138. add rax,16
  139. jmp NEAR $L$enc_loop6_enter
  140. ALIGN 16
  141. $L$enc_loop6:
  142. DB 102,15,56,220,209
  143. DB 102,15,56,220,217
  144. DB 102,15,56,220,225
  145. $L$enc_loop6_enter:
  146. DB 102,15,56,220,233
  147. DB 102,15,56,220,241
  148. DB 102,15,56,220,249
  149. movups xmm1,XMMWORD[rax*1+rcx]
  150. add rax,32
  151. DB 102,15,56,220,208
  152. DB 102,15,56,220,216
  153. DB 102,15,56,220,224
  154. DB 102,15,56,220,232
  155. DB 102,15,56,220,240
  156. DB 102,15,56,220,248
  157. movups xmm0,XMMWORD[((-16))+rax*1+rcx]
  158. jnz NEAR $L$enc_loop6
  159. DB 102,15,56,220,209
  160. DB 102,15,56,220,217
  161. DB 102,15,56,220,225
  162. DB 102,15,56,220,233
  163. DB 102,15,56,220,241
  164. DB 102,15,56,220,249
  165. DB 102,15,56,221,208
  166. DB 102,15,56,221,216
  167. DB 102,15,56,221,224
  168. DB 102,15,56,221,232
  169. DB 102,15,56,221,240
  170. DB 102,15,56,221,248
  171. DB 0F3h,0C3h ;repret
  172. ALIGN 16
  173. _aesni_encrypt8:
  174. movups xmm0,XMMWORD[rcx]
  175. shl eax,4
  176. movups xmm1,XMMWORD[16+rcx]
  177. xorps xmm2,xmm0
  178. xorps xmm3,xmm0
  179. pxor xmm4,xmm0
  180. pxor xmm5,xmm0
  181. pxor xmm6,xmm0
  182. lea rcx,[32+rax*1+rcx]
  183. neg rax
  184. DB 102,15,56,220,209
  185. pxor xmm7,xmm0
  186. pxor xmm8,xmm0
  187. DB 102,15,56,220,217
  188. pxor xmm9,xmm0
  189. movups xmm0,XMMWORD[rax*1+rcx]
  190. add rax,16
  191. jmp NEAR $L$enc_loop8_inner
  192. ALIGN 16
  193. $L$enc_loop8:
  194. DB 102,15,56,220,209
  195. DB 102,15,56,220,217
  196. $L$enc_loop8_inner:
  197. DB 102,15,56,220,225
  198. DB 102,15,56,220,233
  199. DB 102,15,56,220,241
  200. DB 102,15,56,220,249
  201. DB 102,68,15,56,220,193
  202. DB 102,68,15,56,220,201
  203. $L$enc_loop8_enter:
  204. movups xmm1,XMMWORD[rax*1+rcx]
  205. add rax,32
  206. DB 102,15,56,220,208
  207. DB 102,15,56,220,216
  208. DB 102,15,56,220,224
  209. DB 102,15,56,220,232
  210. DB 102,15,56,220,240
  211. DB 102,15,56,220,248
  212. DB 102,68,15,56,220,192
  213. DB 102,68,15,56,220,200
  214. movups xmm0,XMMWORD[((-16))+rax*1+rcx]
  215. jnz NEAR $L$enc_loop8
  216. DB 102,15,56,220,209
  217. DB 102,15,56,220,217
  218. DB 102,15,56,220,225
  219. DB 102,15,56,220,233
  220. DB 102,15,56,220,241
  221. DB 102,15,56,220,249
  222. DB 102,68,15,56,220,193
  223. DB 102,68,15,56,220,201
  224. DB 102,15,56,221,208
  225. DB 102,15,56,221,216
  226. DB 102,15,56,221,224
  227. DB 102,15,56,221,232
  228. DB 102,15,56,221,240
  229. DB 102,15,56,221,248
  230. DB 102,68,15,56,221,192
  231. DB 102,68,15,56,221,200
  232. DB 0F3h,0C3h ;repret
  233. global GFp_aes_hw_ctr32_encrypt_blocks
  234. ALIGN 16
  235. GFp_aes_hw_ctr32_encrypt_blocks:
  236. mov QWORD[8+rsp],rdi ;WIN64 prologue
  237. mov QWORD[16+rsp],rsi
  238. mov rax,rsp
  239. $L$SEH_begin_GFp_aes_hw_ctr32_encrypt_blocks:
  240. mov rdi,rcx
  241. mov rsi,rdx
  242. mov rdx,r8
  243. mov rcx,r9
  244. mov r8,QWORD[40+rsp]
  245. cmp rdx,1
  246. jne NEAR $L$ctr32_bulk
  247. movups xmm2,XMMWORD[r8]
  248. movups xmm3,XMMWORD[rdi]
  249. mov edx,DWORD[240+rcx]
  250. movups xmm0,XMMWORD[rcx]
  251. movups xmm1,XMMWORD[16+rcx]
  252. lea rcx,[32+rcx]
  253. xorps xmm2,xmm0
  254. $L$oop_enc1_2:
  255. DB 102,15,56,220,209
  256. dec edx
  257. movups xmm1,XMMWORD[rcx]
  258. lea rcx,[16+rcx]
  259. jnz NEAR $L$oop_enc1_2
  260. DB 102,15,56,221,209
  261. pxor xmm0,xmm0
  262. pxor xmm1,xmm1
  263. xorps xmm2,xmm3
  264. pxor xmm3,xmm3
  265. movups XMMWORD[rsi],xmm2
  266. xorps xmm2,xmm2
  267. jmp NEAR $L$ctr32_epilogue
  268. ALIGN 16
  269. $L$ctr32_bulk:
  270. lea r11,[rsp]
  271. push rbp
  272. sub rsp,288
  273. and rsp,-16
  274. movaps XMMWORD[(-168)+r11],xmm6
  275. movaps XMMWORD[(-152)+r11],xmm7
  276. movaps XMMWORD[(-136)+r11],xmm8
  277. movaps XMMWORD[(-120)+r11],xmm9
  278. movaps XMMWORD[(-104)+r11],xmm10
  279. movaps XMMWORD[(-88)+r11],xmm11
  280. movaps XMMWORD[(-72)+r11],xmm12
  281. movaps XMMWORD[(-56)+r11],xmm13
  282. movaps XMMWORD[(-40)+r11],xmm14
  283. movaps XMMWORD[(-24)+r11],xmm15
  284. $L$ctr32_body:
  285. movdqu xmm2,XMMWORD[r8]
  286. movdqu xmm0,XMMWORD[rcx]
  287. mov r8d,DWORD[12+r8]
  288. pxor xmm2,xmm0
  289. mov ebp,DWORD[12+rcx]
  290. movdqa XMMWORD[rsp],xmm2
  291. bswap r8d
  292. movdqa xmm3,xmm2
  293. movdqa xmm4,xmm2
  294. movdqa xmm5,xmm2
  295. movdqa XMMWORD[64+rsp],xmm2
  296. movdqa XMMWORD[80+rsp],xmm2
  297. movdqa XMMWORD[96+rsp],xmm2
  298. mov r10,rdx
  299. movdqa XMMWORD[112+rsp],xmm2
  300. lea rax,[1+r8]
  301. lea rdx,[2+r8]
  302. bswap eax
  303. bswap edx
  304. xor eax,ebp
  305. xor edx,ebp
  306. DB 102,15,58,34,216,3
  307. lea rax,[3+r8]
  308. movdqa XMMWORD[16+rsp],xmm3
  309. DB 102,15,58,34,226,3
  310. bswap eax
  311. mov rdx,r10
  312. lea r10,[4+r8]
  313. movdqa XMMWORD[32+rsp],xmm4
  314. xor eax,ebp
  315. bswap r10d
  316. DB 102,15,58,34,232,3
  317. xor r10d,ebp
  318. movdqa XMMWORD[48+rsp],xmm5
  319. lea r9,[5+r8]
  320. mov DWORD[((64+12))+rsp],r10d
  321. bswap r9d
  322. lea r10,[6+r8]
  323. mov eax,DWORD[240+rcx]
  324. xor r9d,ebp
  325. bswap r10d
  326. mov DWORD[((80+12))+rsp],r9d
  327. xor r10d,ebp
  328. lea r9,[7+r8]
  329. mov DWORD[((96+12))+rsp],r10d
  330. bswap r9d
  331. lea r10,[GFp_ia32cap_P]
  332. mov r10d,DWORD[4+r10]
  333. xor r9d,ebp
  334. and r10d,71303168
  335. mov DWORD[((112+12))+rsp],r9d
  336. movups xmm1,XMMWORD[16+rcx]
  337. movdqa xmm6,XMMWORD[64+rsp]
  338. movdqa xmm7,XMMWORD[80+rsp]
  339. cmp rdx,8
  340. jb NEAR $L$ctr32_tail
  341. sub rdx,6
  342. cmp r10d,4194304
  343. je NEAR $L$ctr32_6x
  344. lea rcx,[128+rcx]
  345. sub rdx,2
  346. jmp NEAR $L$ctr32_loop8
  347. ALIGN 16
  348. $L$ctr32_6x:
  349. shl eax,4
  350. mov r10d,48
  351. bswap ebp
  352. lea rcx,[32+rax*1+rcx]
  353. sub r10,rax
  354. jmp NEAR $L$ctr32_loop6
  355. ALIGN 16
  356. $L$ctr32_loop6:
  357. add r8d,6
  358. movups xmm0,XMMWORD[((-48))+r10*1+rcx]
  359. DB 102,15,56,220,209
  360. mov eax,r8d
  361. xor eax,ebp
  362. DB 102,15,56,220,217
  363. DB 0x0f,0x38,0xf1,0x44,0x24,12
  364. lea eax,[1+r8]
  365. DB 102,15,56,220,225
  366. xor eax,ebp
  367. DB 0x0f,0x38,0xf1,0x44,0x24,28
  368. DB 102,15,56,220,233
  369. lea eax,[2+r8]
  370. xor eax,ebp
  371. DB 102,15,56,220,241
  372. DB 0x0f,0x38,0xf1,0x44,0x24,44
  373. lea eax,[3+r8]
  374. DB 102,15,56,220,249
  375. movups xmm1,XMMWORD[((-32))+r10*1+rcx]
  376. xor eax,ebp
  377. DB 102,15,56,220,208
  378. DB 0x0f,0x38,0xf1,0x44,0x24,60
  379. lea eax,[4+r8]
  380. DB 102,15,56,220,216
  381. xor eax,ebp
  382. DB 0x0f,0x38,0xf1,0x44,0x24,76
  383. DB 102,15,56,220,224
  384. lea eax,[5+r8]
  385. xor eax,ebp
  386. DB 102,15,56,220,232
  387. DB 0x0f,0x38,0xf1,0x44,0x24,92
  388. mov rax,r10
  389. DB 102,15,56,220,240
  390. DB 102,15,56,220,248
  391. movups xmm0,XMMWORD[((-16))+r10*1+rcx]
  392. call $L$enc_loop6
  393. movdqu xmm8,XMMWORD[rdi]
  394. movdqu xmm9,XMMWORD[16+rdi]
  395. movdqu xmm10,XMMWORD[32+rdi]
  396. movdqu xmm11,XMMWORD[48+rdi]
  397. movdqu xmm12,XMMWORD[64+rdi]
  398. movdqu xmm13,XMMWORD[80+rdi]
  399. lea rdi,[96+rdi]
  400. movups xmm1,XMMWORD[((-64))+r10*1+rcx]
  401. pxor xmm8,xmm2
  402. movaps xmm2,XMMWORD[rsp]
  403. pxor xmm9,xmm3
  404. movaps xmm3,XMMWORD[16+rsp]
  405. pxor xmm10,xmm4
  406. movaps xmm4,XMMWORD[32+rsp]
  407. pxor xmm11,xmm5
  408. movaps xmm5,XMMWORD[48+rsp]
  409. pxor xmm12,xmm6
  410. movaps xmm6,XMMWORD[64+rsp]
  411. pxor xmm13,xmm7
  412. movaps xmm7,XMMWORD[80+rsp]
  413. movdqu XMMWORD[rsi],xmm8
  414. movdqu XMMWORD[16+rsi],xmm9
  415. movdqu XMMWORD[32+rsi],xmm10
  416. movdqu XMMWORD[48+rsi],xmm11
  417. movdqu XMMWORD[64+rsi],xmm12
  418. movdqu XMMWORD[80+rsi],xmm13
  419. lea rsi,[96+rsi]
  420. sub rdx,6
  421. jnc NEAR $L$ctr32_loop6
  422. add rdx,6
  423. jz NEAR $L$ctr32_done
  424. lea eax,[((-48))+r10]
  425. lea rcx,[((-80))+r10*1+rcx]
  426. neg eax
  427. shr eax,4
  428. jmp NEAR $L$ctr32_tail
  429. ALIGN 32
  430. $L$ctr32_loop8:
  431. add r8d,8
  432. movdqa xmm8,XMMWORD[96+rsp]
  433. DB 102,15,56,220,209
  434. mov r9d,r8d
  435. movdqa xmm9,XMMWORD[112+rsp]
  436. DB 102,15,56,220,217
  437. bswap r9d
  438. movups xmm0,XMMWORD[((32-128))+rcx]
  439. DB 102,15,56,220,225
  440. xor r9d,ebp
  441. nop
  442. DB 102,15,56,220,233
  443. mov DWORD[((0+12))+rsp],r9d
  444. lea r9,[1+r8]
  445. DB 102,15,56,220,241
  446. DB 102,15,56,220,249
  447. DB 102,68,15,56,220,193
  448. DB 102,68,15,56,220,201
  449. movups xmm1,XMMWORD[((48-128))+rcx]
  450. bswap r9d
  451. DB 102,15,56,220,208
  452. DB 102,15,56,220,216
  453. xor r9d,ebp
  454. DB 0x66,0x90
  455. DB 102,15,56,220,224
  456. DB 102,15,56,220,232
  457. mov DWORD[((16+12))+rsp],r9d
  458. lea r9,[2+r8]
  459. DB 102,15,56,220,240
  460. DB 102,15,56,220,248
  461. DB 102,68,15,56,220,192
  462. DB 102,68,15,56,220,200
  463. movups xmm0,XMMWORD[((64-128))+rcx]
  464. bswap r9d
  465. DB 102,15,56,220,209
  466. DB 102,15,56,220,217
  467. xor r9d,ebp
  468. DB 0x66,0x90
  469. DB 102,15,56,220,225
  470. DB 102,15,56,220,233
  471. mov DWORD[((32+12))+rsp],r9d
  472. lea r9,[3+r8]
  473. DB 102,15,56,220,241
  474. DB 102,15,56,220,249
  475. DB 102,68,15,56,220,193
  476. DB 102,68,15,56,220,201
  477. movups xmm1,XMMWORD[((80-128))+rcx]
  478. bswap r9d
  479. DB 102,15,56,220,208
  480. DB 102,15,56,220,216
  481. xor r9d,ebp
  482. DB 0x66,0x90
  483. DB 102,15,56,220,224
  484. DB 102,15,56,220,232
  485. mov DWORD[((48+12))+rsp],r9d
  486. lea r9,[4+r8]
  487. DB 102,15,56,220,240
  488. DB 102,15,56,220,248
  489. DB 102,68,15,56,220,192
  490. DB 102,68,15,56,220,200
  491. movups xmm0,XMMWORD[((96-128))+rcx]
  492. bswap r9d
  493. DB 102,15,56,220,209
  494. DB 102,15,56,220,217
  495. xor r9d,ebp
  496. DB 0x66,0x90
  497. DB 102,15,56,220,225
  498. DB 102,15,56,220,233
  499. mov DWORD[((64+12))+rsp],r9d
  500. lea r9,[5+r8]
  501. DB 102,15,56,220,241
  502. DB 102,15,56,220,249
  503. DB 102,68,15,56,220,193
  504. DB 102,68,15,56,220,201
  505. movups xmm1,XMMWORD[((112-128))+rcx]
  506. bswap r9d
  507. DB 102,15,56,220,208
  508. DB 102,15,56,220,216
  509. xor r9d,ebp
  510. DB 0x66,0x90
  511. DB 102,15,56,220,224
  512. DB 102,15,56,220,232
  513. mov DWORD[((80+12))+rsp],r9d
  514. lea r9,[6+r8]
  515. DB 102,15,56,220,240
  516. DB 102,15,56,220,248
  517. DB 102,68,15,56,220,192
  518. DB 102,68,15,56,220,200
  519. movups xmm0,XMMWORD[((128-128))+rcx]
  520. bswap r9d
  521. DB 102,15,56,220,209
  522. DB 102,15,56,220,217
  523. xor r9d,ebp
  524. DB 0x66,0x90
  525. DB 102,15,56,220,225
  526. DB 102,15,56,220,233
  527. mov DWORD[((96+12))+rsp],r9d
  528. lea r9,[7+r8]
  529. DB 102,15,56,220,241
  530. DB 102,15,56,220,249
  531. DB 102,68,15,56,220,193
  532. DB 102,68,15,56,220,201
  533. movups xmm1,XMMWORD[((144-128))+rcx]
  534. bswap r9d
  535. DB 102,15,56,220,208
  536. DB 102,15,56,220,216
  537. DB 102,15,56,220,224
  538. xor r9d,ebp
  539. movdqu xmm10,XMMWORD[rdi]
  540. DB 102,15,56,220,232
  541. mov DWORD[((112+12))+rsp],r9d
  542. cmp eax,11
  543. DB 102,15,56,220,240
  544. DB 102,15,56,220,248
  545. DB 102,68,15,56,220,192
  546. DB 102,68,15,56,220,200
  547. movups xmm0,XMMWORD[((160-128))+rcx]
  548. jb NEAR $L$ctr32_enc_done
  549. DB 102,15,56,220,209
  550. DB 102,15,56,220,217
  551. DB 102,15,56,220,225
  552. DB 102,15,56,220,233
  553. DB 102,15,56,220,241
  554. DB 102,15,56,220,249
  555. DB 102,68,15,56,220,193
  556. DB 102,68,15,56,220,201
  557. movups xmm1,XMMWORD[((176-128))+rcx]
  558. DB 102,15,56,220,208
  559. DB 102,15,56,220,216
  560. DB 102,15,56,220,224
  561. DB 102,15,56,220,232
  562. DB 102,15,56,220,240
  563. DB 102,15,56,220,248
  564. DB 102,68,15,56,220,192
  565. DB 102,68,15,56,220,200
  566. movups xmm0,XMMWORD[((192-128))+rcx]
  567. DB 102,15,56,220,209
  568. DB 102,15,56,220,217
  569. DB 102,15,56,220,225
  570. DB 102,15,56,220,233
  571. DB 102,15,56,220,241
  572. DB 102,15,56,220,249
  573. DB 102,68,15,56,220,193
  574. DB 102,68,15,56,220,201
  575. movups xmm1,XMMWORD[((208-128))+rcx]
  576. DB 102,15,56,220,208
  577. DB 102,15,56,220,216
  578. DB 102,15,56,220,224
  579. DB 102,15,56,220,232
  580. DB 102,15,56,220,240
  581. DB 102,15,56,220,248
  582. DB 102,68,15,56,220,192
  583. DB 102,68,15,56,220,200
  584. movups xmm0,XMMWORD[((224-128))+rcx]
  585. jmp NEAR $L$ctr32_enc_done
  586. ALIGN 16
  587. $L$ctr32_enc_done:
  588. movdqu xmm11,XMMWORD[16+rdi]
  589. pxor xmm10,xmm0
  590. movdqu xmm12,XMMWORD[32+rdi]
  591. pxor xmm11,xmm0
  592. movdqu xmm13,XMMWORD[48+rdi]
  593. pxor xmm12,xmm0
  594. movdqu xmm14,XMMWORD[64+rdi]
  595. pxor xmm13,xmm0
  596. movdqu xmm15,XMMWORD[80+rdi]
  597. pxor xmm14,xmm0
  598. pxor xmm15,xmm0
  599. DB 102,15,56,220,209
  600. DB 102,15,56,220,217
  601. DB 102,15,56,220,225
  602. DB 102,15,56,220,233
  603. DB 102,15,56,220,241
  604. DB 102,15,56,220,249
  605. DB 102,68,15,56,220,193
  606. DB 102,68,15,56,220,201
  607. movdqu xmm1,XMMWORD[96+rdi]
  608. lea rdi,[128+rdi]
  609. DB 102,65,15,56,221,210
  610. pxor xmm1,xmm0
  611. movdqu xmm10,XMMWORD[((112-128))+rdi]
  612. DB 102,65,15,56,221,219
  613. pxor xmm10,xmm0
  614. movdqa xmm11,XMMWORD[rsp]
  615. DB 102,65,15,56,221,228
  616. DB 102,65,15,56,221,237
  617. movdqa xmm12,XMMWORD[16+rsp]
  618. movdqa xmm13,XMMWORD[32+rsp]
  619. DB 102,65,15,56,221,246
  620. DB 102,65,15,56,221,255
  621. movdqa xmm14,XMMWORD[48+rsp]
  622. movdqa xmm15,XMMWORD[64+rsp]
  623. DB 102,68,15,56,221,193
  624. movdqa xmm0,XMMWORD[80+rsp]
  625. movups xmm1,XMMWORD[((16-128))+rcx]
  626. DB 102,69,15,56,221,202
  627. movups XMMWORD[rsi],xmm2
  628. movdqa xmm2,xmm11
  629. movups XMMWORD[16+rsi],xmm3
  630. movdqa xmm3,xmm12
  631. movups XMMWORD[32+rsi],xmm4
  632. movdqa xmm4,xmm13
  633. movups XMMWORD[48+rsi],xmm5
  634. movdqa xmm5,xmm14
  635. movups XMMWORD[64+rsi],xmm6
  636. movdqa xmm6,xmm15
  637. movups XMMWORD[80+rsi],xmm7
  638. movdqa xmm7,xmm0
  639. movups XMMWORD[96+rsi],xmm8
  640. movups XMMWORD[112+rsi],xmm9
  641. lea rsi,[128+rsi]
  642. sub rdx,8
  643. jnc NEAR $L$ctr32_loop8
  644. add rdx,8
  645. jz NEAR $L$ctr32_done
  646. lea rcx,[((-128))+rcx]
  647. $L$ctr32_tail:
  648. lea rcx,[16+rcx]
  649. cmp rdx,4
  650. jb NEAR $L$ctr32_loop3
  651. je NEAR $L$ctr32_loop4
  652. shl eax,4
  653. movdqa xmm8,XMMWORD[96+rsp]
  654. pxor xmm9,xmm9
  655. movups xmm0,XMMWORD[16+rcx]
  656. DB 102,15,56,220,209
  657. DB 102,15,56,220,217
  658. lea rcx,[((32-16))+rax*1+rcx]
  659. neg rax
  660. DB 102,15,56,220,225
  661. add rax,16
  662. movups xmm10,XMMWORD[rdi]
  663. DB 102,15,56,220,233
  664. DB 102,15,56,220,241
  665. movups xmm11,XMMWORD[16+rdi]
  666. movups xmm12,XMMWORD[32+rdi]
  667. DB 102,15,56,220,249
  668. DB 102,68,15,56,220,193
  669. call $L$enc_loop8_enter
  670. movdqu xmm13,XMMWORD[48+rdi]
  671. pxor xmm2,xmm10
  672. movdqu xmm10,XMMWORD[64+rdi]
  673. pxor xmm3,xmm11
  674. movdqu XMMWORD[rsi],xmm2
  675. pxor xmm4,xmm12
  676. movdqu XMMWORD[16+rsi],xmm3
  677. pxor xmm5,xmm13
  678. movdqu XMMWORD[32+rsi],xmm4
  679. pxor xmm6,xmm10
  680. movdqu XMMWORD[48+rsi],xmm5
  681. movdqu XMMWORD[64+rsi],xmm6
  682. cmp rdx,6
  683. jb NEAR $L$ctr32_done
  684. movups xmm11,XMMWORD[80+rdi]
  685. xorps xmm7,xmm11
  686. movups XMMWORD[80+rsi],xmm7
  687. je NEAR $L$ctr32_done
  688. movups xmm12,XMMWORD[96+rdi]
  689. xorps xmm8,xmm12
  690. movups XMMWORD[96+rsi],xmm8
  691. jmp NEAR $L$ctr32_done
  692. ALIGN 32
  693. $L$ctr32_loop4:
  694. DB 102,15,56,220,209
  695. lea rcx,[16+rcx]
  696. dec eax
  697. DB 102,15,56,220,217
  698. DB 102,15,56,220,225
  699. DB 102,15,56,220,233
  700. movups xmm1,XMMWORD[rcx]
  701. jnz NEAR $L$ctr32_loop4
  702. DB 102,15,56,221,209
  703. DB 102,15,56,221,217
  704. movups xmm10,XMMWORD[rdi]
  705. movups xmm11,XMMWORD[16+rdi]
  706. DB 102,15,56,221,225
  707. DB 102,15,56,221,233
  708. movups xmm12,XMMWORD[32+rdi]
  709. movups xmm13,XMMWORD[48+rdi]
  710. xorps xmm2,xmm10
  711. movups XMMWORD[rsi],xmm2
  712. xorps xmm3,xmm11
  713. movups XMMWORD[16+rsi],xmm3
  714. pxor xmm4,xmm12
  715. movdqu XMMWORD[32+rsi],xmm4
  716. pxor xmm5,xmm13
  717. movdqu XMMWORD[48+rsi],xmm5
  718. jmp NEAR $L$ctr32_done
  719. ALIGN 32
  720. $L$ctr32_loop3:
  721. DB 102,15,56,220,209
  722. lea rcx,[16+rcx]
  723. dec eax
  724. DB 102,15,56,220,217
  725. DB 102,15,56,220,225
  726. movups xmm1,XMMWORD[rcx]
  727. jnz NEAR $L$ctr32_loop3
  728. DB 102,15,56,221,209
  729. DB 102,15,56,221,217
  730. DB 102,15,56,221,225
  731. movups xmm10,XMMWORD[rdi]
  732. xorps xmm2,xmm10
  733. movups XMMWORD[rsi],xmm2
  734. cmp rdx,2
  735. jb NEAR $L$ctr32_done
  736. movups xmm11,XMMWORD[16+rdi]
  737. xorps xmm3,xmm11
  738. movups XMMWORD[16+rsi],xmm3
  739. je NEAR $L$ctr32_done
  740. movups xmm12,XMMWORD[32+rdi]
  741. xorps xmm4,xmm12
  742. movups XMMWORD[32+rsi],xmm4
  743. $L$ctr32_done:
  744. xorps xmm0,xmm0
  745. xor ebp,ebp
  746. pxor xmm1,xmm1
  747. pxor xmm2,xmm2
  748. pxor xmm3,xmm3
  749. pxor xmm4,xmm4
  750. pxor xmm5,xmm5
  751. movaps xmm6,XMMWORD[((-168))+r11]
  752. movaps XMMWORD[(-168)+r11],xmm0
  753. movaps xmm7,XMMWORD[((-152))+r11]
  754. movaps XMMWORD[(-152)+r11],xmm0
  755. movaps xmm8,XMMWORD[((-136))+r11]
  756. movaps XMMWORD[(-136)+r11],xmm0
  757. movaps xmm9,XMMWORD[((-120))+r11]
  758. movaps XMMWORD[(-120)+r11],xmm0
  759. movaps xmm10,XMMWORD[((-104))+r11]
  760. movaps XMMWORD[(-104)+r11],xmm0
  761. movaps xmm11,XMMWORD[((-88))+r11]
  762. movaps XMMWORD[(-88)+r11],xmm0
  763. movaps xmm12,XMMWORD[((-72))+r11]
  764. movaps XMMWORD[(-72)+r11],xmm0
  765. movaps xmm13,XMMWORD[((-56))+r11]
  766. movaps XMMWORD[(-56)+r11],xmm0
  767. movaps xmm14,XMMWORD[((-40))+r11]
  768. movaps XMMWORD[(-40)+r11],xmm0
  769. movaps xmm15,XMMWORD[((-24))+r11]
  770. movaps XMMWORD[(-24)+r11],xmm0
  771. movaps XMMWORD[rsp],xmm0
  772. movaps XMMWORD[16+rsp],xmm0
  773. movaps XMMWORD[32+rsp],xmm0
  774. movaps XMMWORD[48+rsp],xmm0
  775. movaps XMMWORD[64+rsp],xmm0
  776. movaps XMMWORD[80+rsp],xmm0
  777. movaps XMMWORD[96+rsp],xmm0
  778. movaps XMMWORD[112+rsp],xmm0
  779. mov rbp,QWORD[((-8))+r11]
  780. lea rsp,[r11]
  781. $L$ctr32_epilogue:
  782. mov rdi,QWORD[8+rsp] ;WIN64 epilogue
  783. mov rsi,QWORD[16+rsp]
  784. DB 0F3h,0C3h ;repret
  785. $L$SEH_end_GFp_aes_hw_ctr32_encrypt_blocks:
  786. global GFp_aes_hw_set_encrypt_key
  787. ALIGN 16
  788. GFp_aes_hw_set_encrypt_key:
  789. __aesni_set_encrypt_key:
  790. DB 0x48,0x83,0xEC,0x08
  791. mov rax,-1
  792. test rcx,rcx
  793. jz NEAR $L$enc_key_ret
  794. test r8,r8
  795. jz NEAR $L$enc_key_ret
  796. movups xmm0,XMMWORD[rcx]
  797. xorps xmm4,xmm4
  798. lea r10,[GFp_ia32cap_P]
  799. mov r10d,DWORD[4+r10]
  800. and r10d,268437504
  801. lea rax,[16+r8]
  802. cmp edx,256
  803. je NEAR $L$14rounds
  804. cmp edx,128
  805. jne NEAR $L$bad_keybits
  806. $L$10rounds:
  807. mov edx,9
  808. cmp r10d,268435456
  809. je NEAR $L$10rounds_alt
  810. movups XMMWORD[r8],xmm0
  811. DB 102,15,58,223,200,1
  812. call $L$key_expansion_128_cold
  813. DB 102,15,58,223,200,2
  814. call $L$key_expansion_128
  815. DB 102,15,58,223,200,4
  816. call $L$key_expansion_128
  817. DB 102,15,58,223,200,8
  818. call $L$key_expansion_128
  819. DB 102,15,58,223,200,16
  820. call $L$key_expansion_128
  821. DB 102,15,58,223,200,32
  822. call $L$key_expansion_128
  823. DB 102,15,58,223,200,64
  824. call $L$key_expansion_128
  825. DB 102,15,58,223,200,128
  826. call $L$key_expansion_128
  827. DB 102,15,58,223,200,27
  828. call $L$key_expansion_128
  829. DB 102,15,58,223,200,54
  830. call $L$key_expansion_128
  831. movups XMMWORD[rax],xmm0
  832. mov DWORD[80+rax],edx
  833. xor eax,eax
  834. jmp NEAR $L$enc_key_ret
  835. ALIGN 16
  836. $L$10rounds_alt:
  837. movdqa xmm5,XMMWORD[$L$key_rotate]
  838. mov r10d,8
  839. movdqa xmm4,XMMWORD[$L$key_rcon1]
  840. movdqa xmm2,xmm0
  841. movdqu XMMWORD[r8],xmm0
  842. jmp NEAR $L$oop_key128
  843. ALIGN 16
  844. $L$oop_key128:
  845. DB 102,15,56,0,197
  846. DB 102,15,56,221,196
  847. pslld xmm4,1
  848. lea rax,[16+rax]
  849. movdqa xmm3,xmm2
  850. pslldq xmm2,4
  851. pxor xmm3,xmm2
  852. pslldq xmm2,4
  853. pxor xmm3,xmm2
  854. pslldq xmm2,4
  855. pxor xmm2,xmm3
  856. pxor xmm0,xmm2
  857. movdqu XMMWORD[(-16)+rax],xmm0
  858. movdqa xmm2,xmm0
  859. dec r10d
  860. jnz NEAR $L$oop_key128
  861. movdqa xmm4,XMMWORD[$L$key_rcon1b]
  862. DB 102,15,56,0,197
  863. DB 102,15,56,221,196
  864. pslld xmm4,1
  865. movdqa xmm3,xmm2
  866. pslldq xmm2,4
  867. pxor xmm3,xmm2
  868. pslldq xmm2,4
  869. pxor xmm3,xmm2
  870. pslldq xmm2,4
  871. pxor xmm2,xmm3
  872. pxor xmm0,xmm2
  873. movdqu XMMWORD[rax],xmm0
  874. movdqa xmm2,xmm0
  875. DB 102,15,56,0,197
  876. DB 102,15,56,221,196
  877. movdqa xmm3,xmm2
  878. pslldq xmm2,4
  879. pxor xmm3,xmm2
  880. pslldq xmm2,4
  881. pxor xmm3,xmm2
  882. pslldq xmm2,4
  883. pxor xmm2,xmm3
  884. pxor xmm0,xmm2
  885. movdqu XMMWORD[16+rax],xmm0
  886. mov DWORD[96+rax],edx
  887. xor eax,eax
  888. jmp NEAR $L$enc_key_ret
  889. ALIGN 16
  890. $L$14rounds:
  891. movups xmm2,XMMWORD[16+rcx]
  892. mov edx,13
  893. lea rax,[16+rax]
  894. cmp r10d,268435456
  895. je NEAR $L$14rounds_alt
  896. movups XMMWORD[r8],xmm0
  897. movups XMMWORD[16+r8],xmm2
  898. DB 102,15,58,223,202,1
  899. call $L$key_expansion_256a_cold
  900. DB 102,15,58,223,200,1
  901. call $L$key_expansion_256b
  902. DB 102,15,58,223,202,2
  903. call $L$key_expansion_256a
  904. DB 102,15,58,223,200,2
  905. call $L$key_expansion_256b
  906. DB 102,15,58,223,202,4
  907. call $L$key_expansion_256a
  908. DB 102,15,58,223,200,4
  909. call $L$key_expansion_256b
  910. DB 102,15,58,223,202,8
  911. call $L$key_expansion_256a
  912. DB 102,15,58,223,200,8
  913. call $L$key_expansion_256b
  914. DB 102,15,58,223,202,16
  915. call $L$key_expansion_256a
  916. DB 102,15,58,223,200,16
  917. call $L$key_expansion_256b
  918. DB 102,15,58,223,202,32
  919. call $L$key_expansion_256a
  920. DB 102,15,58,223,200,32
  921. call $L$key_expansion_256b
  922. DB 102,15,58,223,202,64
  923. call $L$key_expansion_256a
  924. movups XMMWORD[rax],xmm0
  925. mov DWORD[16+rax],edx
  926. xor rax,rax
  927. jmp NEAR $L$enc_key_ret
  928. ALIGN 16
  929. $L$14rounds_alt:
  930. movdqa xmm5,XMMWORD[$L$key_rotate]
  931. movdqa xmm4,XMMWORD[$L$key_rcon1]
  932. mov r10d,7
  933. movdqu XMMWORD[r8],xmm0
  934. movdqa xmm1,xmm2
  935. movdqu XMMWORD[16+r8],xmm2
  936. jmp NEAR $L$oop_key256
  937. ALIGN 16
  938. $L$oop_key256:
  939. DB 102,15,56,0,213
  940. DB 102,15,56,221,212
  941. movdqa xmm3,xmm0
  942. pslldq xmm0,4
  943. pxor xmm3,xmm0
  944. pslldq xmm0,4
  945. pxor xmm3,xmm0
  946. pslldq xmm0,4
  947. pxor xmm0,xmm3
  948. pslld xmm4,1
  949. pxor xmm0,xmm2
  950. movdqu XMMWORD[rax],xmm0
  951. dec r10d
  952. jz NEAR $L$done_key256
  953. pshufd xmm2,xmm0,0xff
  954. pxor xmm3,xmm3
  955. DB 102,15,56,221,211
  956. movdqa xmm3,xmm1
  957. pslldq xmm1,4
  958. pxor xmm3,xmm1
  959. pslldq xmm1,4
  960. pxor xmm3,xmm1
  961. pslldq xmm1,4
  962. pxor xmm1,xmm3
  963. pxor xmm2,xmm1
  964. movdqu XMMWORD[16+rax],xmm2
  965. lea rax,[32+rax]
  966. movdqa xmm1,xmm2
  967. jmp NEAR $L$oop_key256
  968. $L$done_key256:
  969. mov DWORD[16+rax],edx
  970. xor eax,eax
  971. jmp NEAR $L$enc_key_ret
  972. ALIGN 16
  973. $L$bad_keybits:
  974. mov rax,-2
  975. $L$enc_key_ret:
  976. pxor xmm0,xmm0
  977. pxor xmm1,xmm1
  978. pxor xmm2,xmm2
  979. pxor xmm3,xmm3
  980. pxor xmm4,xmm4
  981. pxor xmm5,xmm5
  982. add rsp,8
  983. DB 0F3h,0C3h ;repret
  984. $L$SEH_end_GFp_set_encrypt_key:
  985. ALIGN 16
  986. $L$key_expansion_128:
  987. movups XMMWORD[rax],xmm0
  988. lea rax,[16+rax]
  989. $L$key_expansion_128_cold:
  990. shufps xmm4,xmm0,16
  991. xorps xmm0,xmm4
  992. shufps xmm4,xmm0,140
  993. xorps xmm0,xmm4
  994. shufps xmm1,xmm1,255
  995. xorps xmm0,xmm1
  996. DB 0F3h,0C3h ;repret
  997. ALIGN 16
  998. $L$key_expansion_192a:
  999. movups XMMWORD[rax],xmm0
  1000. lea rax,[16+rax]
  1001. $L$key_expansion_192a_cold:
  1002. movaps xmm5,xmm2
  1003. $L$key_expansion_192b_warm:
  1004. shufps xmm4,xmm0,16
  1005. movdqa xmm3,xmm2
  1006. xorps xmm0,xmm4
  1007. shufps xmm4,xmm0,140
  1008. pslldq xmm3,4
  1009. xorps xmm0,xmm4
  1010. pshufd xmm1,xmm1,85
  1011. pxor xmm2,xmm3
  1012. pxor xmm0,xmm1
  1013. pshufd xmm3,xmm0,255
  1014. pxor xmm2,xmm3
  1015. DB 0F3h,0C3h ;repret
  1016. ALIGN 16
  1017. $L$key_expansion_192b:
  1018. movaps xmm3,xmm0
  1019. shufps xmm5,xmm0,68
  1020. movups XMMWORD[rax],xmm5
  1021. shufps xmm3,xmm2,78
  1022. movups XMMWORD[16+rax],xmm3
  1023. lea rax,[32+rax]
  1024. jmp NEAR $L$key_expansion_192b_warm
  1025. ALIGN 16
  1026. $L$key_expansion_256a:
  1027. movups XMMWORD[rax],xmm2
  1028. lea rax,[16+rax]
  1029. $L$key_expansion_256a_cold:
  1030. shufps xmm4,xmm0,16
  1031. xorps xmm0,xmm4
  1032. shufps xmm4,xmm0,140
  1033. xorps xmm0,xmm4
  1034. shufps xmm1,xmm1,255
  1035. xorps xmm0,xmm1
  1036. DB 0F3h,0C3h ;repret
  1037. ALIGN 16
  1038. $L$key_expansion_256b:
  1039. movups XMMWORD[rax],xmm0
  1040. lea rax,[16+rax]
  1041. shufps xmm4,xmm2,16
  1042. xorps xmm2,xmm4
  1043. shufps xmm4,xmm2,140
  1044. xorps xmm2,xmm4
  1045. shufps xmm1,xmm1,170
  1046. xorps xmm2,xmm1
  1047. DB 0F3h,0C3h ;repret
  1048. ALIGN 64
  1049. $L$bswap_mask:
  1050. DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
  1051. $L$increment32:
  1052. DD 6,6,6,0
  1053. $L$increment64:
  1054. DD 1,0,0,0
  1055. $L$increment1:
  1056. DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
  1057. $L$key_rotate:
  1058. DD 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
  1059. $L$key_rotate192:
  1060. DD 0x04070605,0x04070605,0x04070605,0x04070605
  1061. $L$key_rcon1:
  1062. DD 1,1,1,1
  1063. $L$key_rcon1b:
  1064. DD 0x1b,0x1b,0x1b,0x1b
  1065. DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
  1066. DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
  1067. DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
  1068. DB 115,108,46,111,114,103,62,0
  1069. ALIGN 64
  1070. EXTERN __imp_RtlVirtualUnwind
  1071. ALIGN 16
  1072. ctr_xts_se_handler:
  1073. push rsi
  1074. push rdi
  1075. push rbx
  1076. push rbp
  1077. push r12
  1078. push r13
  1079. push r14
  1080. push r15
  1081. pushfq
  1082. sub rsp,64
  1083. mov rax,QWORD[120+r8]
  1084. mov rbx,QWORD[248+r8]
  1085. mov rsi,QWORD[8+r9]
  1086. mov r11,QWORD[56+r9]
  1087. mov r10d,DWORD[r11]
  1088. lea r10,[r10*1+rsi]
  1089. cmp rbx,r10
  1090. jb NEAR $L$common_seh_tail
  1091. mov rax,QWORD[152+r8]
  1092. mov r10d,DWORD[4+r11]
  1093. lea r10,[r10*1+rsi]
  1094. cmp rbx,r10
  1095. jae NEAR $L$common_seh_tail
  1096. mov rax,QWORD[208+r8]
  1097. lea rsi,[((-168))+rax]
  1098. lea rdi,[512+r8]
  1099. mov ecx,20
  1100. DD 0xa548f3fc
  1101. mov rbp,QWORD[((-8))+rax]
  1102. mov QWORD[160+r8],rbp
  1103. $L$common_seh_tail:
  1104. mov rdi,QWORD[8+rax]
  1105. mov rsi,QWORD[16+rax]
  1106. mov QWORD[152+r8],rax
  1107. mov QWORD[168+r8],rsi
  1108. mov QWORD[176+r8],rdi
  1109. mov rdi,QWORD[40+r9]
  1110. mov rsi,r8
  1111. mov ecx,154
  1112. DD 0xa548f3fc
  1113. mov rsi,r9
  1114. xor rcx,rcx
  1115. mov rdx,QWORD[8+rsi]
  1116. mov r8,QWORD[rsi]
  1117. mov r9,QWORD[16+rsi]
  1118. mov r10,QWORD[40+rsi]
  1119. lea r11,[56+rsi]
  1120. lea r12,[24+rsi]
  1121. mov QWORD[32+rsp],r10
  1122. mov QWORD[40+rsp],r11
  1123. mov QWORD[48+rsp],r12
  1124. mov QWORD[56+rsp],rcx
  1125. call QWORD[__imp_RtlVirtualUnwind]
  1126. mov eax,1
  1127. add rsp,64
  1128. popfq
  1129. pop r15
  1130. pop r14
  1131. pop r13
  1132. pop r12
  1133. pop rbp
  1134. pop rbx
  1135. pop rdi
  1136. pop rsi
  1137. DB 0F3h,0C3h ;repret
  1138. section .pdata rdata align=4
  1139. ALIGN 4
  1140. DD $L$SEH_begin_GFp_aes_hw_ctr32_encrypt_blocks wrt ..imagebase
  1141. DD $L$SEH_end_GFp_aes_hw_ctr32_encrypt_blocks wrt ..imagebase
  1142. DD $L$SEH_info_GFp_ctr32 wrt ..imagebase
  1143. DD GFp_aes_hw_set_encrypt_key wrt ..imagebase
  1144. DD $L$SEH_end_GFp_set_encrypt_key wrt ..imagebase
  1145. DD $L$SEH_info_GFp_key wrt ..imagebase
  1146. section .xdata rdata align=8
  1147. ALIGN 8
  1148. $L$SEH_info_GFp_ctr32:
  1149. DB 9,0,0,0
  1150. DD ctr_xts_se_handler wrt ..imagebase
  1151. DD $L$ctr32_body wrt ..imagebase,$L$ctr32_epilogue wrt ..imagebase
  1152. $L$SEH_info_GFp_key:
  1153. DB 0x01,0x04,0x01,0x00
  1154. DB 0x04,0x02,0x00,0x00