vpaes-x86_64-nasm.asm 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982
  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. ALIGN 16
  9. _vpaes_encrypt_core:
  10. mov r9,rdx
  11. mov r11,16
  12. mov eax,DWORD[240+rdx]
  13. movdqa xmm1,xmm9
  14. movdqa xmm2,XMMWORD[$L$k_ipt]
  15. pandn xmm1,xmm0
  16. movdqu xmm5,XMMWORD[r9]
  17. psrld xmm1,4
  18. pand xmm0,xmm9
  19. DB 102,15,56,0,208
  20. movdqa xmm0,XMMWORD[(($L$k_ipt+16))]
  21. DB 102,15,56,0,193
  22. pxor xmm2,xmm5
  23. add r9,16
  24. pxor xmm0,xmm2
  25. lea r10,[$L$k_mc_backward]
  26. jmp NEAR $L$enc_entry
  27. ALIGN 16
  28. $L$enc_loop:
  29. movdqa xmm4,xmm13
  30. movdqa xmm0,xmm12
  31. DB 102,15,56,0,226
  32. DB 102,15,56,0,195
  33. pxor xmm4,xmm5
  34. movdqa xmm5,xmm15
  35. pxor xmm0,xmm4
  36. movdqa xmm1,XMMWORD[((-64))+r10*1+r11]
  37. DB 102,15,56,0,234
  38. movdqa xmm4,XMMWORD[r10*1+r11]
  39. movdqa xmm2,xmm14
  40. DB 102,15,56,0,211
  41. movdqa xmm3,xmm0
  42. pxor xmm2,xmm5
  43. DB 102,15,56,0,193
  44. add r9,16
  45. pxor xmm0,xmm2
  46. DB 102,15,56,0,220
  47. add r11,16
  48. pxor xmm3,xmm0
  49. DB 102,15,56,0,193
  50. and r11,0x30
  51. sub rax,1
  52. pxor xmm0,xmm3
  53. $L$enc_entry:
  54. movdqa xmm1,xmm9
  55. movdqa xmm5,xmm11
  56. pandn xmm1,xmm0
  57. psrld xmm1,4
  58. pand xmm0,xmm9
  59. DB 102,15,56,0,232
  60. movdqa xmm3,xmm10
  61. pxor xmm0,xmm1
  62. DB 102,15,56,0,217
  63. movdqa xmm4,xmm10
  64. pxor xmm3,xmm5
  65. DB 102,15,56,0,224
  66. movdqa xmm2,xmm10
  67. pxor xmm4,xmm5
  68. DB 102,15,56,0,211
  69. movdqa xmm3,xmm10
  70. pxor xmm2,xmm0
  71. DB 102,15,56,0,220
  72. movdqu xmm5,XMMWORD[r9]
  73. pxor xmm3,xmm1
  74. jnz NEAR $L$enc_loop
  75. movdqa xmm4,XMMWORD[((-96))+r10]
  76. movdqa xmm0,XMMWORD[((-80))+r10]
  77. DB 102,15,56,0,226
  78. pxor xmm4,xmm5
  79. DB 102,15,56,0,195
  80. movdqa xmm1,XMMWORD[64+r10*1+r11]
  81. pxor xmm0,xmm4
  82. DB 102,15,56,0,193
  83. DB 0F3h,0C3h ;repret
  84. ALIGN 16
  85. _vpaes_encrypt_core_2x:
  86. mov r9,rdx
  87. mov r11,16
  88. mov eax,DWORD[240+rdx]
  89. movdqa xmm1,xmm9
  90. movdqa xmm7,xmm9
  91. movdqa xmm2,XMMWORD[$L$k_ipt]
  92. movdqa xmm8,xmm2
  93. pandn xmm1,xmm0
  94. pandn xmm7,xmm6
  95. movdqu xmm5,XMMWORD[r9]
  96. psrld xmm1,4
  97. psrld xmm7,4
  98. pand xmm0,xmm9
  99. pand xmm6,xmm9
  100. DB 102,15,56,0,208
  101. DB 102,68,15,56,0,198
  102. movdqa xmm0,XMMWORD[(($L$k_ipt+16))]
  103. movdqa xmm6,xmm0
  104. DB 102,15,56,0,193
  105. DB 102,15,56,0,247
  106. pxor xmm2,xmm5
  107. pxor xmm8,xmm5
  108. add r9,16
  109. pxor xmm0,xmm2
  110. pxor xmm6,xmm8
  111. lea r10,[$L$k_mc_backward]
  112. jmp NEAR $L$enc2x_entry
  113. ALIGN 16
  114. $L$enc2x_loop:
  115. movdqa xmm4,XMMWORD[$L$k_sb1]
  116. movdqa xmm0,XMMWORD[(($L$k_sb1+16))]
  117. movdqa xmm12,xmm4
  118. movdqa xmm6,xmm0
  119. DB 102,15,56,0,226
  120. DB 102,69,15,56,0,224
  121. DB 102,15,56,0,195
  122. DB 102,65,15,56,0,243
  123. pxor xmm4,xmm5
  124. pxor xmm12,xmm5
  125. movdqa xmm5,XMMWORD[$L$k_sb2]
  126. movdqa xmm13,xmm5
  127. pxor xmm0,xmm4
  128. pxor xmm6,xmm12
  129. movdqa xmm1,XMMWORD[((-64))+r10*1+r11]
  130. DB 102,15,56,0,234
  131. DB 102,69,15,56,0,232
  132. movdqa xmm4,XMMWORD[r10*1+r11]
  133. movdqa xmm2,XMMWORD[(($L$k_sb2+16))]
  134. movdqa xmm8,xmm2
  135. DB 102,15,56,0,211
  136. DB 102,69,15,56,0,195
  137. movdqa xmm3,xmm0
  138. movdqa xmm11,xmm6
  139. pxor xmm2,xmm5
  140. pxor xmm8,xmm13
  141. DB 102,15,56,0,193
  142. DB 102,15,56,0,241
  143. add r9,16
  144. pxor xmm0,xmm2
  145. pxor xmm6,xmm8
  146. DB 102,15,56,0,220
  147. DB 102,68,15,56,0,220
  148. add r11,16
  149. pxor xmm3,xmm0
  150. pxor xmm11,xmm6
  151. DB 102,15,56,0,193
  152. DB 102,15,56,0,241
  153. and r11,0x30
  154. sub rax,1
  155. pxor xmm0,xmm3
  156. pxor xmm6,xmm11
  157. $L$enc2x_entry:
  158. movdqa xmm1,xmm9
  159. movdqa xmm7,xmm9
  160. movdqa xmm5,XMMWORD[(($L$k_inv+16))]
  161. movdqa xmm13,xmm5
  162. pandn xmm1,xmm0
  163. pandn xmm7,xmm6
  164. psrld xmm1,4
  165. psrld xmm7,4
  166. pand xmm0,xmm9
  167. pand xmm6,xmm9
  168. DB 102,15,56,0,232
  169. DB 102,68,15,56,0,238
  170. movdqa xmm3,xmm10
  171. movdqa xmm11,xmm10
  172. pxor xmm0,xmm1
  173. pxor xmm6,xmm7
  174. DB 102,15,56,0,217
  175. DB 102,68,15,56,0,223
  176. movdqa xmm4,xmm10
  177. movdqa xmm12,xmm10
  178. pxor xmm3,xmm5
  179. pxor xmm11,xmm13
  180. DB 102,15,56,0,224
  181. DB 102,68,15,56,0,230
  182. movdqa xmm2,xmm10
  183. movdqa xmm8,xmm10
  184. pxor xmm4,xmm5
  185. pxor xmm12,xmm13
  186. DB 102,15,56,0,211
  187. DB 102,69,15,56,0,195
  188. movdqa xmm3,xmm10
  189. movdqa xmm11,xmm10
  190. pxor xmm2,xmm0
  191. pxor xmm8,xmm6
  192. DB 102,15,56,0,220
  193. DB 102,69,15,56,0,220
  194. movdqu xmm5,XMMWORD[r9]
  195. pxor xmm3,xmm1
  196. pxor xmm11,xmm7
  197. jnz NEAR $L$enc2x_loop
  198. movdqa xmm4,XMMWORD[((-96))+r10]
  199. movdqa xmm0,XMMWORD[((-80))+r10]
  200. movdqa xmm12,xmm4
  201. movdqa xmm6,xmm0
  202. DB 102,15,56,0,226
  203. DB 102,69,15,56,0,224
  204. pxor xmm4,xmm5
  205. pxor xmm12,xmm5
  206. DB 102,15,56,0,195
  207. DB 102,65,15,56,0,243
  208. movdqa xmm1,XMMWORD[64+r10*1+r11]
  209. pxor xmm0,xmm4
  210. pxor xmm6,xmm12
  211. DB 102,15,56,0,193
  212. DB 102,15,56,0,241
  213. DB 0F3h,0C3h ;repret
  214. ALIGN 16
  215. _vpaes_schedule_core:
  216. call _vpaes_preheat
  217. movdqa xmm8,XMMWORD[$L$k_rcon]
  218. movdqu xmm0,XMMWORD[rdi]
  219. movdqa xmm3,xmm0
  220. lea r11,[$L$k_ipt]
  221. call _vpaes_schedule_transform
  222. movdqa xmm7,xmm0
  223. lea r10,[$L$k_sr]
  224. movdqu XMMWORD[rdx],xmm0
  225. $L$schedule_go:
  226. cmp esi,192
  227. ja NEAR $L$schedule_256
  228. $L$schedule_128:
  229. mov esi,10
  230. $L$oop_schedule_128:
  231. call _vpaes_schedule_round
  232. dec rsi
  233. jz NEAR $L$schedule_mangle_last
  234. call _vpaes_schedule_mangle
  235. jmp NEAR $L$oop_schedule_128
  236. ALIGN 16
  237. $L$schedule_256:
  238. movdqu xmm0,XMMWORD[16+rdi]
  239. call _vpaes_schedule_transform
  240. mov esi,7
  241. $L$oop_schedule_256:
  242. call _vpaes_schedule_mangle
  243. movdqa xmm6,xmm0
  244. call _vpaes_schedule_round
  245. dec rsi
  246. jz NEAR $L$schedule_mangle_last
  247. call _vpaes_schedule_mangle
  248. pshufd xmm0,xmm0,0xFF
  249. movdqa xmm5,xmm7
  250. movdqa xmm7,xmm6
  251. call _vpaes_schedule_low_round
  252. movdqa xmm7,xmm5
  253. jmp NEAR $L$oop_schedule_256
  254. ALIGN 16
  255. $L$schedule_mangle_last:
  256. lea r11,[$L$k_deskew]
  257. movdqa xmm1,XMMWORD[r10*1+r8]
  258. DB 102,15,56,0,193
  259. lea r11,[$L$k_opt]
  260. add rdx,32
  261. $L$schedule_mangle_last_dec:
  262. add rdx,-16
  263. pxor xmm0,XMMWORD[$L$k_s63]
  264. call _vpaes_schedule_transform
  265. movdqu XMMWORD[rdx],xmm0
  266. pxor xmm0,xmm0
  267. pxor xmm1,xmm1
  268. pxor xmm2,xmm2
  269. pxor xmm3,xmm3
  270. pxor xmm4,xmm4
  271. pxor xmm5,xmm5
  272. pxor xmm6,xmm6
  273. pxor xmm7,xmm7
  274. DB 0F3h,0C3h ;repret
  275. ALIGN 16
  276. _vpaes_schedule_round:
  277. pxor xmm1,xmm1
  278. DB 102,65,15,58,15,200,15
  279. DB 102,69,15,58,15,192,15
  280. pxor xmm7,xmm1
  281. pshufd xmm0,xmm0,0xFF
  282. DB 102,15,58,15,192,1
  283. _vpaes_schedule_low_round:
  284. movdqa xmm1,xmm7
  285. pslldq xmm7,4
  286. pxor xmm7,xmm1
  287. movdqa xmm1,xmm7
  288. pslldq xmm7,8
  289. pxor xmm7,xmm1
  290. pxor xmm7,XMMWORD[$L$k_s63]
  291. movdqa xmm1,xmm9
  292. pandn xmm1,xmm0
  293. psrld xmm1,4
  294. pand xmm0,xmm9
  295. movdqa xmm2,xmm11
  296. DB 102,15,56,0,208
  297. pxor xmm0,xmm1
  298. movdqa xmm3,xmm10
  299. DB 102,15,56,0,217
  300. pxor xmm3,xmm2
  301. movdqa xmm4,xmm10
  302. DB 102,15,56,0,224
  303. pxor xmm4,xmm2
  304. movdqa xmm2,xmm10
  305. DB 102,15,56,0,211
  306. pxor xmm2,xmm0
  307. movdqa xmm3,xmm10
  308. DB 102,15,56,0,220
  309. pxor xmm3,xmm1
  310. movdqa xmm4,xmm13
  311. DB 102,15,56,0,226
  312. movdqa xmm0,xmm12
  313. DB 102,15,56,0,195
  314. pxor xmm0,xmm4
  315. pxor xmm0,xmm7
  316. movdqa xmm7,xmm0
  317. DB 0F3h,0C3h ;repret
  318. ALIGN 16
  319. _vpaes_schedule_transform:
  320. movdqa xmm1,xmm9
  321. pandn xmm1,xmm0
  322. psrld xmm1,4
  323. pand xmm0,xmm9
  324. movdqa xmm2,XMMWORD[r11]
  325. DB 102,15,56,0,208
  326. movdqa xmm0,XMMWORD[16+r11]
  327. DB 102,15,56,0,193
  328. pxor xmm0,xmm2
  329. DB 0F3h,0C3h ;repret
  330. ALIGN 16
  331. _vpaes_schedule_mangle:
  332. movdqa xmm4,xmm0
  333. movdqa xmm5,XMMWORD[$L$k_mc_forward]
  334. add rdx,16
  335. pxor xmm4,XMMWORD[$L$k_s63]
  336. DB 102,15,56,0,229
  337. movdqa xmm3,xmm4
  338. DB 102,15,56,0,229
  339. pxor xmm3,xmm4
  340. DB 102,15,56,0,229
  341. pxor xmm3,xmm4
  342. $L$schedule_mangle_both:
  343. movdqa xmm1,XMMWORD[r10*1+r8]
  344. DB 102,15,56,0,217
  345. add r8,-16
  346. and r8,0x30
  347. movdqu XMMWORD[rdx],xmm3
  348. DB 0F3h,0C3h ;repret
  349. global GFp_vpaes_set_encrypt_key
  350. ALIGN 16
  351. GFp_vpaes_set_encrypt_key:
  352. mov QWORD[8+rsp],rdi ;WIN64 prologue
  353. mov QWORD[16+rsp],rsi
  354. mov rax,rsp
  355. $L$SEH_begin_GFp_vpaes_set_encrypt_key:
  356. mov rdi,rcx
  357. mov rsi,rdx
  358. mov rdx,r8
  359. %ifdef BORINGSSL_DISPATCH_TEST
  360. EXTERN BORINGSSL_function_hit
  361. mov BYTE[((BORINGSSL_function_hit+5))],1
  362. %endif
  363. lea rsp,[((-184))+rsp]
  364. movaps XMMWORD[16+rsp],xmm6
  365. movaps XMMWORD[32+rsp],xmm7
  366. movaps XMMWORD[48+rsp],xmm8
  367. movaps XMMWORD[64+rsp],xmm9
  368. movaps XMMWORD[80+rsp],xmm10
  369. movaps XMMWORD[96+rsp],xmm11
  370. movaps XMMWORD[112+rsp],xmm12
  371. movaps XMMWORD[128+rsp],xmm13
  372. movaps XMMWORD[144+rsp],xmm14
  373. movaps XMMWORD[160+rsp],xmm15
  374. $L$enc_key_body:
  375. mov eax,esi
  376. shr eax,5
  377. add eax,5
  378. mov DWORD[240+rdx],eax
  379. mov ecx,0
  380. mov r8d,0x30
  381. call _vpaes_schedule_core
  382. movaps xmm6,XMMWORD[16+rsp]
  383. movaps xmm7,XMMWORD[32+rsp]
  384. movaps xmm8,XMMWORD[48+rsp]
  385. movaps xmm9,XMMWORD[64+rsp]
  386. movaps xmm10,XMMWORD[80+rsp]
  387. movaps xmm11,XMMWORD[96+rsp]
  388. movaps xmm12,XMMWORD[112+rsp]
  389. movaps xmm13,XMMWORD[128+rsp]
  390. movaps xmm14,XMMWORD[144+rsp]
  391. movaps xmm15,XMMWORD[160+rsp]
  392. lea rsp,[184+rsp]
  393. $L$enc_key_epilogue:
  394. xor eax,eax
  395. mov rdi,QWORD[8+rsp] ;WIN64 epilogue
  396. mov rsi,QWORD[16+rsp]
  397. DB 0F3h,0C3h ;repret
  398. $L$SEH_end_GFp_vpaes_set_encrypt_key:
  399. global GFp_vpaes_encrypt
  400. ALIGN 16
  401. GFp_vpaes_encrypt:
  402. mov QWORD[8+rsp],rdi ;WIN64 prologue
  403. mov QWORD[16+rsp],rsi
  404. mov rax,rsp
  405. $L$SEH_begin_GFp_vpaes_encrypt:
  406. mov rdi,rcx
  407. mov rsi,rdx
  408. mov rdx,r8
  409. lea rsp,[((-184))+rsp]
  410. movaps XMMWORD[16+rsp],xmm6
  411. movaps XMMWORD[32+rsp],xmm7
  412. movaps XMMWORD[48+rsp],xmm8
  413. movaps XMMWORD[64+rsp],xmm9
  414. movaps XMMWORD[80+rsp],xmm10
  415. movaps XMMWORD[96+rsp],xmm11
  416. movaps XMMWORD[112+rsp],xmm12
  417. movaps XMMWORD[128+rsp],xmm13
  418. movaps XMMWORD[144+rsp],xmm14
  419. movaps XMMWORD[160+rsp],xmm15
  420. $L$enc_body:
  421. movdqu xmm0,XMMWORD[rdi]
  422. call _vpaes_preheat
  423. call _vpaes_encrypt_core
  424. movdqu XMMWORD[rsi],xmm0
  425. movaps xmm6,XMMWORD[16+rsp]
  426. movaps xmm7,XMMWORD[32+rsp]
  427. movaps xmm8,XMMWORD[48+rsp]
  428. movaps xmm9,XMMWORD[64+rsp]
  429. movaps xmm10,XMMWORD[80+rsp]
  430. movaps xmm11,XMMWORD[96+rsp]
  431. movaps xmm12,XMMWORD[112+rsp]
  432. movaps xmm13,XMMWORD[128+rsp]
  433. movaps xmm14,XMMWORD[144+rsp]
  434. movaps xmm15,XMMWORD[160+rsp]
  435. lea rsp,[184+rsp]
  436. $L$enc_epilogue:
  437. mov rdi,QWORD[8+rsp] ;WIN64 epilogue
  438. mov rsi,QWORD[16+rsp]
  439. DB 0F3h,0C3h ;repret
  440. $L$SEH_end_GFp_vpaes_encrypt:
  441. global GFp_vpaes_ctr32_encrypt_blocks
  442. ALIGN 16
  443. GFp_vpaes_ctr32_encrypt_blocks:
  444. mov QWORD[8+rsp],rdi ;WIN64 prologue
  445. mov QWORD[16+rsp],rsi
  446. mov rax,rsp
  447. $L$SEH_begin_GFp_vpaes_ctr32_encrypt_blocks:
  448. mov rdi,rcx
  449. mov rsi,rdx
  450. mov rdx,r8
  451. mov rcx,r9
  452. mov r8,QWORD[40+rsp]
  453. xchg rdx,rcx
  454. test rcx,rcx
  455. jz NEAR $L$ctr32_abort
  456. lea rsp,[((-184))+rsp]
  457. movaps XMMWORD[16+rsp],xmm6
  458. movaps XMMWORD[32+rsp],xmm7
  459. movaps XMMWORD[48+rsp],xmm8
  460. movaps XMMWORD[64+rsp],xmm9
  461. movaps XMMWORD[80+rsp],xmm10
  462. movaps XMMWORD[96+rsp],xmm11
  463. movaps XMMWORD[112+rsp],xmm12
  464. movaps XMMWORD[128+rsp],xmm13
  465. movaps XMMWORD[144+rsp],xmm14
  466. movaps XMMWORD[160+rsp],xmm15
  467. $L$ctr32_body:
  468. movdqu xmm0,XMMWORD[r8]
  469. movdqa xmm8,XMMWORD[$L$ctr_add_one]
  470. sub rsi,rdi
  471. call _vpaes_preheat
  472. movdqa xmm6,xmm0
  473. pshufb xmm6,XMMWORD[$L$rev_ctr]
  474. test rcx,1
  475. jz NEAR $L$ctr32_prep_loop
  476. movdqu xmm7,XMMWORD[rdi]
  477. call _vpaes_encrypt_core
  478. pxor xmm0,xmm7
  479. paddd xmm6,xmm8
  480. movdqu XMMWORD[rdi*1+rsi],xmm0
  481. sub rcx,1
  482. lea rdi,[16+rdi]
  483. jz NEAR $L$ctr32_done
  484. $L$ctr32_prep_loop:
  485. movdqa xmm14,xmm6
  486. movdqa xmm15,xmm6
  487. paddd xmm15,xmm8
  488. $L$ctr32_loop:
  489. movdqa xmm1,XMMWORD[$L$rev_ctr]
  490. movdqa xmm0,xmm14
  491. movdqa xmm6,xmm15
  492. DB 102,15,56,0,193
  493. DB 102,15,56,0,241
  494. call _vpaes_encrypt_core_2x
  495. movdqu xmm1,XMMWORD[rdi]
  496. movdqu xmm2,XMMWORD[16+rdi]
  497. movdqa xmm3,XMMWORD[$L$ctr_add_two]
  498. pxor xmm0,xmm1
  499. pxor xmm6,xmm2
  500. paddd xmm14,xmm3
  501. paddd xmm15,xmm3
  502. movdqu XMMWORD[rdi*1+rsi],xmm0
  503. movdqu XMMWORD[16+rdi*1+rsi],xmm6
  504. sub rcx,2
  505. lea rdi,[32+rdi]
  506. jnz NEAR $L$ctr32_loop
  507. $L$ctr32_done:
  508. movaps xmm6,XMMWORD[16+rsp]
  509. movaps xmm7,XMMWORD[32+rsp]
  510. movaps xmm8,XMMWORD[48+rsp]
  511. movaps xmm9,XMMWORD[64+rsp]
  512. movaps xmm10,XMMWORD[80+rsp]
  513. movaps xmm11,XMMWORD[96+rsp]
  514. movaps xmm12,XMMWORD[112+rsp]
  515. movaps xmm13,XMMWORD[128+rsp]
  516. movaps xmm14,XMMWORD[144+rsp]
  517. movaps xmm15,XMMWORD[160+rsp]
  518. lea rsp,[184+rsp]
  519. $L$ctr32_epilogue:
  520. $L$ctr32_abort:
  521. mov rdi,QWORD[8+rsp] ;WIN64 epilogue
  522. mov rsi,QWORD[16+rsp]
  523. DB 0F3h,0C3h ;repret
  524. $L$SEH_end_GFp_vpaes_ctr32_encrypt_blocks:
  525. ALIGN 16
  526. _vpaes_preheat:
  527. lea r10,[$L$k_s0F]
  528. movdqa xmm10,XMMWORD[((-32))+r10]
  529. movdqa xmm11,XMMWORD[((-16))+r10]
  530. movdqa xmm9,XMMWORD[r10]
  531. movdqa xmm13,XMMWORD[48+r10]
  532. movdqa xmm12,XMMWORD[64+r10]
  533. movdqa xmm15,XMMWORD[80+r10]
  534. movdqa xmm14,XMMWORD[96+r10]
  535. DB 0F3h,0C3h ;repret
  536. ALIGN 64
  537. _vpaes_consts:
  538. $L$k_inv:
  539. DQ 0x0E05060F0D080180,0x040703090A0B0C02
  540. DQ 0x01040A060F0B0780,0x030D0E0C02050809
  541. $L$k_s0F:
  542. DQ 0x0F0F0F0F0F0F0F0F,0x0F0F0F0F0F0F0F0F
  543. $L$k_ipt:
  544. DQ 0xC2B2E8985A2A7000,0xCABAE09052227808
  545. DQ 0x4C01307D317C4D00,0xCD80B1FCB0FDCC81
  546. $L$k_sb1:
  547. DQ 0xB19BE18FCB503E00,0xA5DF7A6E142AF544
  548. DQ 0x3618D415FAE22300,0x3BF7CCC10D2ED9EF
  549. $L$k_sb2:
  550. DQ 0xE27A93C60B712400,0x5EB7E955BC982FCD
  551. DQ 0x69EB88400AE12900,0xC2A163C8AB82234A
  552. $L$k_sbo:
  553. DQ 0xD0D26D176FBDC700,0x15AABF7AC502A878
  554. DQ 0xCFE474A55FBB6A00,0x8E1E90D1412B35FA
  555. $L$k_mc_forward:
  556. DQ 0x0407060500030201,0x0C0F0E0D080B0A09
  557. DQ 0x080B0A0904070605,0x000302010C0F0E0D
  558. DQ 0x0C0F0E0D080B0A09,0x0407060500030201
  559. DQ 0x000302010C0F0E0D,0x080B0A0904070605
  560. $L$k_mc_backward:
  561. DQ 0x0605040702010003,0x0E0D0C0F0A09080B
  562. DQ 0x020100030E0D0C0F,0x0A09080B06050407
  563. DQ 0x0E0D0C0F0A09080B,0x0605040702010003
  564. DQ 0x0A09080B06050407,0x020100030E0D0C0F
  565. $L$k_sr:
  566. DQ 0x0706050403020100,0x0F0E0D0C0B0A0908
  567. DQ 0x030E09040F0A0500,0x0B06010C07020D08
  568. DQ 0x0F060D040B020900,0x070E050C030A0108
  569. DQ 0x0B0E0104070A0D00,0x0306090C0F020508
  570. $L$k_rcon:
  571. DQ 0x1F8391B9AF9DEEB6,0x702A98084D7C7D81
  572. $L$k_s63:
  573. DQ 0x5B5B5B5B5B5B5B5B,0x5B5B5B5B5B5B5B5B
  574. $L$k_opt:
  575. DQ 0xFF9F4929D6B66000,0xF7974121DEBE6808
  576. DQ 0x01EDBD5150BCEC00,0xE10D5DB1B05C0CE0
  577. $L$k_deskew:
  578. DQ 0x07E4A34047A4E300,0x1DFEB95A5DBEF91A
  579. DQ 0x5F36B5DC83EA6900,0x2841C2ABF49D1E77
  580. $L$rev_ctr:
  581. DQ 0x0706050403020100,0x0c0d0e0f0b0a0908
  582. $L$ctr_add_one:
  583. DQ 0x0000000000000000,0x0000000100000000
  584. $L$ctr_add_two:
  585. DQ 0x0000000000000000,0x0000000200000000
  586. DB 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
  587. DB 111,110,32,65,69,83,32,102,111,114,32,120,56,54,95,54
  588. DB 52,47,83,83,83,69,51,44,32,77,105,107,101,32,72,97
  589. DB 109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32
  590. DB 85,110,105,118,101,114,115,105,116,121,41,0
  591. ALIGN 64
  592. EXTERN __imp_RtlVirtualUnwind
  593. ALIGN 16
  594. se_handler:
  595. push rsi
  596. push rdi
  597. push rbx
  598. push rbp
  599. push r12
  600. push r13
  601. push r14
  602. push r15
  603. pushfq
  604. sub rsp,64
  605. mov rax,QWORD[120+r8]
  606. mov rbx,QWORD[248+r8]
  607. mov rsi,QWORD[8+r9]
  608. mov r11,QWORD[56+r9]
  609. mov r10d,DWORD[r11]
  610. lea r10,[r10*1+rsi]
  611. cmp rbx,r10
  612. jb NEAR $L$in_prologue
  613. mov rax,QWORD[152+r8]
  614. mov r10d,DWORD[4+r11]
  615. lea r10,[r10*1+rsi]
  616. cmp rbx,r10
  617. jae NEAR $L$in_prologue
  618. lea rsi,[16+rax]
  619. lea rdi,[512+r8]
  620. mov ecx,20
  621. DD 0xa548f3fc
  622. lea rax,[184+rax]
  623. $L$in_prologue:
  624. mov rdi,QWORD[8+rax]
  625. mov rsi,QWORD[16+rax]
  626. mov QWORD[152+r8],rax
  627. mov QWORD[168+r8],rsi
  628. mov QWORD[176+r8],rdi
  629. mov rdi,QWORD[40+r9]
  630. mov rsi,r8
  631. mov ecx,154
  632. DD 0xa548f3fc
  633. mov rsi,r9
  634. xor rcx,rcx
  635. mov rdx,QWORD[8+rsi]
  636. mov r8,QWORD[rsi]
  637. mov r9,QWORD[16+rsi]
  638. mov r10,QWORD[40+rsi]
  639. lea r11,[56+rsi]
  640. lea r12,[24+rsi]
  641. mov QWORD[32+rsp],r10
  642. mov QWORD[40+rsp],r11
  643. mov QWORD[48+rsp],r12
  644. mov QWORD[56+rsp],rcx
  645. call QWORD[__imp_RtlVirtualUnwind]
  646. mov eax,1
  647. add rsp,64
  648. popfq
  649. pop r15
  650. pop r14
  651. pop r13
  652. pop r12
  653. pop rbp
  654. pop rbx
  655. pop rdi
  656. pop rsi
  657. DB 0F3h,0C3h ;repret
  658. section .pdata rdata align=4
  659. ALIGN 4
  660. DD $L$SEH_begin_GFp_vpaes_set_encrypt_key wrt ..imagebase
  661. DD $L$SEH_end_GFp_vpaes_set_encrypt_key wrt ..imagebase
  662. DD $L$SEH_info_GFp_vpaes_set_encrypt_key wrt ..imagebase
  663. DD $L$SEH_begin_GFp_vpaes_encrypt wrt ..imagebase
  664. DD $L$SEH_end_GFp_vpaes_encrypt wrt ..imagebase
  665. DD $L$SEH_info_GFp_vpaes_encrypt wrt ..imagebase
  666. DD $L$SEH_begin_GFp_vpaes_ctr32_encrypt_blocks wrt ..imagebase
  667. DD $L$SEH_end_GFp_vpaes_ctr32_encrypt_blocks wrt ..imagebase
  668. DD $L$SEH_info_GFp_vpaes_ctr32_encrypt_blocks wrt ..imagebase
  669. section .xdata rdata align=8
  670. ALIGN 8
  671. $L$SEH_info_GFp_vpaes_set_encrypt_key:
  672. DB 9,0,0,0
  673. DD se_handler wrt ..imagebase
  674. DD $L$enc_key_body wrt ..imagebase,$L$enc_key_epilogue wrt ..imagebase
  675. $L$SEH_info_GFp_vpaes_encrypt:
  676. DB 9,0,0,0
  677. DD se_handler wrt ..imagebase
  678. DD $L$enc_body wrt ..imagebase,$L$enc_epilogue wrt ..imagebase
  679. $L$SEH_info_GFp_vpaes_ctr32_encrypt_blocks:
  680. DB 9,0,0,0
  681. DD se_handler wrt ..imagebase
  682. DD $L$ctr32_body wrt ..imagebase,$L$ctr32_epilogue wrt ..imagebase