vpaes-x86_64.asm 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472
  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. %ifdef BORINGSSL_PREFIX
  8. %include "boringssl_prefix_symbols_nasm.inc"
  9. %endif
  10. section .text code align=64
  11. ALIGN 16
  12. _vpaes_encrypt_core:
  13. mov r9,rdx
  14. mov r11,16
  15. mov eax,DWORD[240+rdx]
  16. movdqa xmm1,xmm9
  17. movdqa xmm2,XMMWORD[$L$k_ipt]
  18. pandn xmm1,xmm0
  19. movdqu xmm5,XMMWORD[r9]
  20. psrld xmm1,4
  21. pand xmm0,xmm9
  22. DB 102,15,56,0,208
  23. movdqa xmm0,XMMWORD[(($L$k_ipt+16))]
  24. DB 102,15,56,0,193
  25. pxor xmm2,xmm5
  26. add r9,16
  27. pxor xmm0,xmm2
  28. lea r10,[$L$k_mc_backward]
  29. jmp NEAR $L$enc_entry
  30. ALIGN 16
  31. $L$enc_loop:
  32. movdqa xmm4,xmm13
  33. movdqa xmm0,xmm12
  34. DB 102,15,56,0,226
  35. DB 102,15,56,0,195
  36. pxor xmm4,xmm5
  37. movdqa xmm5,xmm15
  38. pxor xmm0,xmm4
  39. movdqa xmm1,XMMWORD[((-64))+r10*1+r11]
  40. DB 102,15,56,0,234
  41. movdqa xmm4,XMMWORD[r10*1+r11]
  42. movdqa xmm2,xmm14
  43. DB 102,15,56,0,211
  44. movdqa xmm3,xmm0
  45. pxor xmm2,xmm5
  46. DB 102,15,56,0,193
  47. add r9,16
  48. pxor xmm0,xmm2
  49. DB 102,15,56,0,220
  50. add r11,16
  51. pxor xmm3,xmm0
  52. DB 102,15,56,0,193
  53. and r11,0x30
  54. sub rax,1
  55. pxor xmm0,xmm3
  56. $L$enc_entry:
  57. movdqa xmm1,xmm9
  58. movdqa xmm5,xmm11
  59. pandn xmm1,xmm0
  60. psrld xmm1,4
  61. pand xmm0,xmm9
  62. DB 102,15,56,0,232
  63. movdqa xmm3,xmm10
  64. pxor xmm0,xmm1
  65. DB 102,15,56,0,217
  66. movdqa xmm4,xmm10
  67. pxor xmm3,xmm5
  68. DB 102,15,56,0,224
  69. movdqa xmm2,xmm10
  70. pxor xmm4,xmm5
  71. DB 102,15,56,0,211
  72. movdqa xmm3,xmm10
  73. pxor xmm2,xmm0
  74. DB 102,15,56,0,220
  75. movdqu xmm5,XMMWORD[r9]
  76. pxor xmm3,xmm1
  77. jnz NEAR $L$enc_loop
  78. movdqa xmm4,XMMWORD[((-96))+r10]
  79. movdqa xmm0,XMMWORD[((-80))+r10]
  80. DB 102,15,56,0,226
  81. pxor xmm4,xmm5
  82. DB 102,15,56,0,195
  83. movdqa xmm1,XMMWORD[64+r10*1+r11]
  84. pxor xmm0,xmm4
  85. DB 102,15,56,0,193
  86. DB 0F3h,0C3h ;repret
  87. ALIGN 16
  88. _vpaes_encrypt_core_2x:
  89. mov r9,rdx
  90. mov r11,16
  91. mov eax,DWORD[240+rdx]
  92. movdqa xmm1,xmm9
  93. movdqa xmm7,xmm9
  94. movdqa xmm2,XMMWORD[$L$k_ipt]
  95. movdqa xmm8,xmm2
  96. pandn xmm1,xmm0
  97. pandn xmm7,xmm6
  98. movdqu xmm5,XMMWORD[r9]
  99. psrld xmm1,4
  100. psrld xmm7,4
  101. pand xmm0,xmm9
  102. pand xmm6,xmm9
  103. DB 102,15,56,0,208
  104. DB 102,68,15,56,0,198
  105. movdqa xmm0,XMMWORD[(($L$k_ipt+16))]
  106. movdqa xmm6,xmm0
  107. DB 102,15,56,0,193
  108. DB 102,15,56,0,247
  109. pxor xmm2,xmm5
  110. pxor xmm8,xmm5
  111. add r9,16
  112. pxor xmm0,xmm2
  113. pxor xmm6,xmm8
  114. lea r10,[$L$k_mc_backward]
  115. jmp NEAR $L$enc2x_entry
  116. ALIGN 16
  117. $L$enc2x_loop:
  118. movdqa xmm4,XMMWORD[$L$k_sb1]
  119. movdqa xmm0,XMMWORD[(($L$k_sb1+16))]
  120. movdqa xmm12,xmm4
  121. movdqa xmm6,xmm0
  122. DB 102,15,56,0,226
  123. DB 102,69,15,56,0,224
  124. DB 102,15,56,0,195
  125. DB 102,65,15,56,0,243
  126. pxor xmm4,xmm5
  127. pxor xmm12,xmm5
  128. movdqa xmm5,XMMWORD[$L$k_sb2]
  129. movdqa xmm13,xmm5
  130. pxor xmm0,xmm4
  131. pxor xmm6,xmm12
  132. movdqa xmm1,XMMWORD[((-64))+r10*1+r11]
  133. DB 102,15,56,0,234
  134. DB 102,69,15,56,0,232
  135. movdqa xmm4,XMMWORD[r10*1+r11]
  136. movdqa xmm2,XMMWORD[(($L$k_sb2+16))]
  137. movdqa xmm8,xmm2
  138. DB 102,15,56,0,211
  139. DB 102,69,15,56,0,195
  140. movdqa xmm3,xmm0
  141. movdqa xmm11,xmm6
  142. pxor xmm2,xmm5
  143. pxor xmm8,xmm13
  144. DB 102,15,56,0,193
  145. DB 102,15,56,0,241
  146. add r9,16
  147. pxor xmm0,xmm2
  148. pxor xmm6,xmm8
  149. DB 102,15,56,0,220
  150. DB 102,68,15,56,0,220
  151. add r11,16
  152. pxor xmm3,xmm0
  153. pxor xmm11,xmm6
  154. DB 102,15,56,0,193
  155. DB 102,15,56,0,241
  156. and r11,0x30
  157. sub rax,1
  158. pxor xmm0,xmm3
  159. pxor xmm6,xmm11
  160. $L$enc2x_entry:
  161. movdqa xmm1,xmm9
  162. movdqa xmm7,xmm9
  163. movdqa xmm5,XMMWORD[(($L$k_inv+16))]
  164. movdqa xmm13,xmm5
  165. pandn xmm1,xmm0
  166. pandn xmm7,xmm6
  167. psrld xmm1,4
  168. psrld xmm7,4
  169. pand xmm0,xmm9
  170. pand xmm6,xmm9
  171. DB 102,15,56,0,232
  172. DB 102,68,15,56,0,238
  173. movdqa xmm3,xmm10
  174. movdqa xmm11,xmm10
  175. pxor xmm0,xmm1
  176. pxor xmm6,xmm7
  177. DB 102,15,56,0,217
  178. DB 102,68,15,56,0,223
  179. movdqa xmm4,xmm10
  180. movdqa xmm12,xmm10
  181. pxor xmm3,xmm5
  182. pxor xmm11,xmm13
  183. DB 102,15,56,0,224
  184. DB 102,68,15,56,0,230
  185. movdqa xmm2,xmm10
  186. movdqa xmm8,xmm10
  187. pxor xmm4,xmm5
  188. pxor xmm12,xmm13
  189. DB 102,15,56,0,211
  190. DB 102,69,15,56,0,195
  191. movdqa xmm3,xmm10
  192. movdqa xmm11,xmm10
  193. pxor xmm2,xmm0
  194. pxor xmm8,xmm6
  195. DB 102,15,56,0,220
  196. DB 102,69,15,56,0,220
  197. movdqu xmm5,XMMWORD[r9]
  198. pxor xmm3,xmm1
  199. pxor xmm11,xmm7
  200. jnz NEAR $L$enc2x_loop
  201. movdqa xmm4,XMMWORD[((-96))+r10]
  202. movdqa xmm0,XMMWORD[((-80))+r10]
  203. movdqa xmm12,xmm4
  204. movdqa xmm6,xmm0
  205. DB 102,15,56,0,226
  206. DB 102,69,15,56,0,224
  207. pxor xmm4,xmm5
  208. pxor xmm12,xmm5
  209. DB 102,15,56,0,195
  210. DB 102,65,15,56,0,243
  211. movdqa xmm1,XMMWORD[64+r10*1+r11]
  212. pxor xmm0,xmm4
  213. pxor xmm6,xmm12
  214. DB 102,15,56,0,193
  215. DB 102,15,56,0,241
  216. DB 0F3h,0C3h ;repret
  217. ALIGN 16
  218. _vpaes_decrypt_core:
  219. mov r9,rdx
  220. mov eax,DWORD[240+rdx]
  221. movdqa xmm1,xmm9
  222. movdqa xmm2,XMMWORD[$L$k_dipt]
  223. pandn xmm1,xmm0
  224. mov r11,rax
  225. psrld xmm1,4
  226. movdqu xmm5,XMMWORD[r9]
  227. shl r11,4
  228. pand xmm0,xmm9
  229. DB 102,15,56,0,208
  230. movdqa xmm0,XMMWORD[(($L$k_dipt+16))]
  231. xor r11,0x30
  232. lea r10,[$L$k_dsbd]
  233. DB 102,15,56,0,193
  234. and r11,0x30
  235. pxor xmm2,xmm5
  236. movdqa xmm5,XMMWORD[(($L$k_mc_forward+48))]
  237. pxor xmm0,xmm2
  238. add r9,16
  239. add r11,r10
  240. jmp NEAR $L$dec_entry
  241. ALIGN 16
  242. $L$dec_loop:
  243. movdqa xmm4,XMMWORD[((-32))+r10]
  244. movdqa xmm1,XMMWORD[((-16))+r10]
  245. DB 102,15,56,0,226
  246. DB 102,15,56,0,203
  247. pxor xmm0,xmm4
  248. movdqa xmm4,XMMWORD[r10]
  249. pxor xmm0,xmm1
  250. movdqa xmm1,XMMWORD[16+r10]
  251. DB 102,15,56,0,226
  252. DB 102,15,56,0,197
  253. DB 102,15,56,0,203
  254. pxor xmm0,xmm4
  255. movdqa xmm4,XMMWORD[32+r10]
  256. pxor xmm0,xmm1
  257. movdqa xmm1,XMMWORD[48+r10]
  258. DB 102,15,56,0,226
  259. DB 102,15,56,0,197
  260. DB 102,15,56,0,203
  261. pxor xmm0,xmm4
  262. movdqa xmm4,XMMWORD[64+r10]
  263. pxor xmm0,xmm1
  264. movdqa xmm1,XMMWORD[80+r10]
  265. DB 102,15,56,0,226
  266. DB 102,15,56,0,197
  267. DB 102,15,56,0,203
  268. pxor xmm0,xmm4
  269. add r9,16
  270. DB 102,15,58,15,237,12
  271. pxor xmm0,xmm1
  272. sub rax,1
  273. $L$dec_entry:
  274. movdqa xmm1,xmm9
  275. pandn xmm1,xmm0
  276. movdqa xmm2,xmm11
  277. psrld xmm1,4
  278. pand xmm0,xmm9
  279. DB 102,15,56,0,208
  280. movdqa xmm3,xmm10
  281. pxor xmm0,xmm1
  282. DB 102,15,56,0,217
  283. movdqa xmm4,xmm10
  284. pxor xmm3,xmm2
  285. DB 102,15,56,0,224
  286. pxor xmm4,xmm2
  287. movdqa xmm2,xmm10
  288. DB 102,15,56,0,211
  289. movdqa xmm3,xmm10
  290. pxor xmm2,xmm0
  291. DB 102,15,56,0,220
  292. movdqu xmm0,XMMWORD[r9]
  293. pxor xmm3,xmm1
  294. jnz NEAR $L$dec_loop
  295. movdqa xmm4,XMMWORD[96+r10]
  296. DB 102,15,56,0,226
  297. pxor xmm4,xmm0
  298. movdqa xmm0,XMMWORD[112+r10]
  299. movdqa xmm2,XMMWORD[((-352))+r11]
  300. DB 102,15,56,0,195
  301. pxor xmm0,xmm4
  302. DB 102,15,56,0,194
  303. DB 0F3h,0C3h ;repret
  304. ALIGN 16
  305. _vpaes_schedule_core:
  306. call _vpaes_preheat
  307. movdqa xmm8,XMMWORD[$L$k_rcon]
  308. movdqu xmm0,XMMWORD[rdi]
  309. movdqa xmm3,xmm0
  310. lea r11,[$L$k_ipt]
  311. call _vpaes_schedule_transform
  312. movdqa xmm7,xmm0
  313. lea r10,[$L$k_sr]
  314. test rcx,rcx
  315. jnz NEAR $L$schedule_am_decrypting
  316. movdqu XMMWORD[rdx],xmm0
  317. jmp NEAR $L$schedule_go
  318. $L$schedule_am_decrypting:
  319. movdqa xmm1,XMMWORD[r10*1+r8]
  320. DB 102,15,56,0,217
  321. movdqu XMMWORD[rdx],xmm3
  322. xor r8,0x30
  323. $L$schedule_go:
  324. cmp esi,192
  325. ja NEAR $L$schedule_256
  326. je NEAR $L$schedule_192
  327. $L$schedule_128:
  328. mov esi,10
  329. $L$oop_schedule_128:
  330. call _vpaes_schedule_round
  331. dec rsi
  332. jz NEAR $L$schedule_mangle_last
  333. call _vpaes_schedule_mangle
  334. jmp NEAR $L$oop_schedule_128
  335. ALIGN 16
  336. $L$schedule_192:
  337. movdqu xmm0,XMMWORD[8+rdi]
  338. call _vpaes_schedule_transform
  339. movdqa xmm6,xmm0
  340. pxor xmm4,xmm4
  341. movhlps xmm6,xmm4
  342. mov esi,4
  343. $L$oop_schedule_192:
  344. call _vpaes_schedule_round
  345. DB 102,15,58,15,198,8
  346. call _vpaes_schedule_mangle
  347. call _vpaes_schedule_192_smear
  348. call _vpaes_schedule_mangle
  349. call _vpaes_schedule_round
  350. dec rsi
  351. jz NEAR $L$schedule_mangle_last
  352. call _vpaes_schedule_mangle
  353. call _vpaes_schedule_192_smear
  354. jmp NEAR $L$oop_schedule_192
  355. ALIGN 16
  356. $L$schedule_256:
  357. movdqu xmm0,XMMWORD[16+rdi]
  358. call _vpaes_schedule_transform
  359. mov esi,7
  360. $L$oop_schedule_256:
  361. call _vpaes_schedule_mangle
  362. movdqa xmm6,xmm0
  363. call _vpaes_schedule_round
  364. dec rsi
  365. jz NEAR $L$schedule_mangle_last
  366. call _vpaes_schedule_mangle
  367. pshufd xmm0,xmm0,0xFF
  368. movdqa xmm5,xmm7
  369. movdqa xmm7,xmm6
  370. call _vpaes_schedule_low_round
  371. movdqa xmm7,xmm5
  372. jmp NEAR $L$oop_schedule_256
  373. ALIGN 16
  374. $L$schedule_mangle_last:
  375. lea r11,[$L$k_deskew]
  376. test rcx,rcx
  377. jnz NEAR $L$schedule_mangle_last_dec
  378. movdqa xmm1,XMMWORD[r10*1+r8]
  379. DB 102,15,56,0,193
  380. lea r11,[$L$k_opt]
  381. add rdx,32
  382. $L$schedule_mangle_last_dec:
  383. add rdx,-16
  384. pxor xmm0,XMMWORD[$L$k_s63]
  385. call _vpaes_schedule_transform
  386. movdqu XMMWORD[rdx],xmm0
  387. pxor xmm0,xmm0
  388. pxor xmm1,xmm1
  389. pxor xmm2,xmm2
  390. pxor xmm3,xmm3
  391. pxor xmm4,xmm4
  392. pxor xmm5,xmm5
  393. pxor xmm6,xmm6
  394. pxor xmm7,xmm7
  395. DB 0F3h,0C3h ;repret
  396. ALIGN 16
  397. _vpaes_schedule_192_smear:
  398. pshufd xmm1,xmm6,0x80
  399. pshufd xmm0,xmm7,0xFE
  400. pxor xmm6,xmm1
  401. pxor xmm1,xmm1
  402. pxor xmm6,xmm0
  403. movdqa xmm0,xmm6
  404. movhlps xmm6,xmm1
  405. DB 0F3h,0C3h ;repret
  406. ALIGN 16
  407. _vpaes_schedule_round:
  408. pxor xmm1,xmm1
  409. DB 102,65,15,58,15,200,15
  410. DB 102,69,15,58,15,192,15
  411. pxor xmm7,xmm1
  412. pshufd xmm0,xmm0,0xFF
  413. DB 102,15,58,15,192,1
  414. _vpaes_schedule_low_round:
  415. movdqa xmm1,xmm7
  416. pslldq xmm7,4
  417. pxor xmm7,xmm1
  418. movdqa xmm1,xmm7
  419. pslldq xmm7,8
  420. pxor xmm7,xmm1
  421. pxor xmm7,XMMWORD[$L$k_s63]
  422. movdqa xmm1,xmm9
  423. pandn xmm1,xmm0
  424. psrld xmm1,4
  425. pand xmm0,xmm9
  426. movdqa xmm2,xmm11
  427. DB 102,15,56,0,208
  428. pxor xmm0,xmm1
  429. movdqa xmm3,xmm10
  430. DB 102,15,56,0,217
  431. pxor xmm3,xmm2
  432. movdqa xmm4,xmm10
  433. DB 102,15,56,0,224
  434. pxor xmm4,xmm2
  435. movdqa xmm2,xmm10
  436. DB 102,15,56,0,211
  437. pxor xmm2,xmm0
  438. movdqa xmm3,xmm10
  439. DB 102,15,56,0,220
  440. pxor xmm3,xmm1
  441. movdqa xmm4,xmm13
  442. DB 102,15,56,0,226
  443. movdqa xmm0,xmm12
  444. DB 102,15,56,0,195
  445. pxor xmm0,xmm4
  446. pxor xmm0,xmm7
  447. movdqa xmm7,xmm0
  448. DB 0F3h,0C3h ;repret
  449. ALIGN 16
  450. _vpaes_schedule_transform:
  451. movdqa xmm1,xmm9
  452. pandn xmm1,xmm0
  453. psrld xmm1,4
  454. pand xmm0,xmm9
  455. movdqa xmm2,XMMWORD[r11]
  456. DB 102,15,56,0,208
  457. movdqa xmm0,XMMWORD[16+r11]
  458. DB 102,15,56,0,193
  459. pxor xmm0,xmm2
  460. DB 0F3h,0C3h ;repret
  461. ALIGN 16
  462. _vpaes_schedule_mangle:
  463. movdqa xmm4,xmm0
  464. movdqa xmm5,XMMWORD[$L$k_mc_forward]
  465. test rcx,rcx
  466. jnz NEAR $L$schedule_mangle_dec
  467. add rdx,16
  468. pxor xmm4,XMMWORD[$L$k_s63]
  469. DB 102,15,56,0,229
  470. movdqa xmm3,xmm4
  471. DB 102,15,56,0,229
  472. pxor xmm3,xmm4
  473. DB 102,15,56,0,229
  474. pxor xmm3,xmm4
  475. jmp NEAR $L$schedule_mangle_both
  476. ALIGN 16
  477. $L$schedule_mangle_dec:
  478. lea r11,[$L$k_dksd]
  479. movdqa xmm1,xmm9
  480. pandn xmm1,xmm4
  481. psrld xmm1,4
  482. pand xmm4,xmm9
  483. movdqa xmm2,XMMWORD[r11]
  484. DB 102,15,56,0,212
  485. movdqa xmm3,XMMWORD[16+r11]
  486. DB 102,15,56,0,217
  487. pxor xmm3,xmm2
  488. DB 102,15,56,0,221
  489. movdqa xmm2,XMMWORD[32+r11]
  490. DB 102,15,56,0,212
  491. pxor xmm2,xmm3
  492. movdqa xmm3,XMMWORD[48+r11]
  493. DB 102,15,56,0,217
  494. pxor xmm3,xmm2
  495. DB 102,15,56,0,221
  496. movdqa xmm2,XMMWORD[64+r11]
  497. DB 102,15,56,0,212
  498. pxor xmm2,xmm3
  499. movdqa xmm3,XMMWORD[80+r11]
  500. DB 102,15,56,0,217
  501. pxor xmm3,xmm2
  502. DB 102,15,56,0,221
  503. movdqa xmm2,XMMWORD[96+r11]
  504. DB 102,15,56,0,212
  505. pxor xmm2,xmm3
  506. movdqa xmm3,XMMWORD[112+r11]
  507. DB 102,15,56,0,217
  508. pxor xmm3,xmm2
  509. add rdx,-16
  510. $L$schedule_mangle_both:
  511. movdqa xmm1,XMMWORD[r10*1+r8]
  512. DB 102,15,56,0,217
  513. add r8,-16
  514. and r8,0x30
  515. movdqu XMMWORD[rdx],xmm3
  516. DB 0F3h,0C3h ;repret
  517. global vpaes_set_encrypt_key
  518. ALIGN 16
  519. vpaes_set_encrypt_key:
  520. mov QWORD[8+rsp],rdi ;WIN64 prologue
  521. mov QWORD[16+rsp],rsi
  522. mov rax,rsp
  523. $L$SEH_begin_vpaes_set_encrypt_key:
  524. mov rdi,rcx
  525. mov rsi,rdx
  526. mov rdx,r8
  527. %ifdef BORINGSSL_DISPATCH_TEST
  528. EXTERN BORINGSSL_function_hit
  529. mov BYTE[((BORINGSSL_function_hit+5))],1
  530. %endif
  531. lea rsp,[((-184))+rsp]
  532. movaps XMMWORD[16+rsp],xmm6
  533. movaps XMMWORD[32+rsp],xmm7
  534. movaps XMMWORD[48+rsp],xmm8
  535. movaps XMMWORD[64+rsp],xmm9
  536. movaps XMMWORD[80+rsp],xmm10
  537. movaps XMMWORD[96+rsp],xmm11
  538. movaps XMMWORD[112+rsp],xmm12
  539. movaps XMMWORD[128+rsp],xmm13
  540. movaps XMMWORD[144+rsp],xmm14
  541. movaps XMMWORD[160+rsp],xmm15
  542. $L$enc_key_body:
  543. mov eax,esi
  544. shr eax,5
  545. add eax,5
  546. mov DWORD[240+rdx],eax
  547. mov ecx,0
  548. mov r8d,0x30
  549. call _vpaes_schedule_core
  550. movaps xmm6,XMMWORD[16+rsp]
  551. movaps xmm7,XMMWORD[32+rsp]
  552. movaps xmm8,XMMWORD[48+rsp]
  553. movaps xmm9,XMMWORD[64+rsp]
  554. movaps xmm10,XMMWORD[80+rsp]
  555. movaps xmm11,XMMWORD[96+rsp]
  556. movaps xmm12,XMMWORD[112+rsp]
  557. movaps xmm13,XMMWORD[128+rsp]
  558. movaps xmm14,XMMWORD[144+rsp]
  559. movaps xmm15,XMMWORD[160+rsp]
  560. lea rsp,[184+rsp]
  561. $L$enc_key_epilogue:
  562. xor eax,eax
  563. mov rdi,QWORD[8+rsp] ;WIN64 epilogue
  564. mov rsi,QWORD[16+rsp]
  565. DB 0F3h,0C3h ;repret
  566. $L$SEH_end_vpaes_set_encrypt_key:
  567. global vpaes_set_decrypt_key
  568. ALIGN 16
  569. vpaes_set_decrypt_key:
  570. mov QWORD[8+rsp],rdi ;WIN64 prologue
  571. mov QWORD[16+rsp],rsi
  572. mov rax,rsp
  573. $L$SEH_begin_vpaes_set_decrypt_key:
  574. mov rdi,rcx
  575. mov rsi,rdx
  576. mov rdx,r8
  577. lea rsp,[((-184))+rsp]
  578. movaps XMMWORD[16+rsp],xmm6
  579. movaps XMMWORD[32+rsp],xmm7
  580. movaps XMMWORD[48+rsp],xmm8
  581. movaps XMMWORD[64+rsp],xmm9
  582. movaps XMMWORD[80+rsp],xmm10
  583. movaps XMMWORD[96+rsp],xmm11
  584. movaps XMMWORD[112+rsp],xmm12
  585. movaps XMMWORD[128+rsp],xmm13
  586. movaps XMMWORD[144+rsp],xmm14
  587. movaps XMMWORD[160+rsp],xmm15
  588. $L$dec_key_body:
  589. mov eax,esi
  590. shr eax,5
  591. add eax,5
  592. mov DWORD[240+rdx],eax
  593. shl eax,4
  594. lea rdx,[16+rax*1+rdx]
  595. mov ecx,1
  596. mov r8d,esi
  597. shr r8d,1
  598. and r8d,32
  599. xor r8d,32
  600. call _vpaes_schedule_core
  601. movaps xmm6,XMMWORD[16+rsp]
  602. movaps xmm7,XMMWORD[32+rsp]
  603. movaps xmm8,XMMWORD[48+rsp]
  604. movaps xmm9,XMMWORD[64+rsp]
  605. movaps xmm10,XMMWORD[80+rsp]
  606. movaps xmm11,XMMWORD[96+rsp]
  607. movaps xmm12,XMMWORD[112+rsp]
  608. movaps xmm13,XMMWORD[128+rsp]
  609. movaps xmm14,XMMWORD[144+rsp]
  610. movaps xmm15,XMMWORD[160+rsp]
  611. lea rsp,[184+rsp]
  612. $L$dec_key_epilogue:
  613. xor eax,eax
  614. mov rdi,QWORD[8+rsp] ;WIN64 epilogue
  615. mov rsi,QWORD[16+rsp]
  616. DB 0F3h,0C3h ;repret
  617. $L$SEH_end_vpaes_set_decrypt_key:
  618. global vpaes_encrypt
  619. ALIGN 16
  620. vpaes_encrypt:
  621. mov QWORD[8+rsp],rdi ;WIN64 prologue
  622. mov QWORD[16+rsp],rsi
  623. mov rax,rsp
  624. $L$SEH_begin_vpaes_encrypt:
  625. mov rdi,rcx
  626. mov rsi,rdx
  627. mov rdx,r8
  628. %ifdef BORINGSSL_DISPATCH_TEST
  629. EXTERN BORINGSSL_function_hit
  630. mov BYTE[((BORINGSSL_function_hit+4))],1
  631. %endif
  632. lea rsp,[((-184))+rsp]
  633. movaps XMMWORD[16+rsp],xmm6
  634. movaps XMMWORD[32+rsp],xmm7
  635. movaps XMMWORD[48+rsp],xmm8
  636. movaps XMMWORD[64+rsp],xmm9
  637. movaps XMMWORD[80+rsp],xmm10
  638. movaps XMMWORD[96+rsp],xmm11
  639. movaps XMMWORD[112+rsp],xmm12
  640. movaps XMMWORD[128+rsp],xmm13
  641. movaps XMMWORD[144+rsp],xmm14
  642. movaps XMMWORD[160+rsp],xmm15
  643. $L$enc_body:
  644. movdqu xmm0,XMMWORD[rdi]
  645. call _vpaes_preheat
  646. call _vpaes_encrypt_core
  647. movdqu XMMWORD[rsi],xmm0
  648. movaps xmm6,XMMWORD[16+rsp]
  649. movaps xmm7,XMMWORD[32+rsp]
  650. movaps xmm8,XMMWORD[48+rsp]
  651. movaps xmm9,XMMWORD[64+rsp]
  652. movaps xmm10,XMMWORD[80+rsp]
  653. movaps xmm11,XMMWORD[96+rsp]
  654. movaps xmm12,XMMWORD[112+rsp]
  655. movaps xmm13,XMMWORD[128+rsp]
  656. movaps xmm14,XMMWORD[144+rsp]
  657. movaps xmm15,XMMWORD[160+rsp]
  658. lea rsp,[184+rsp]
  659. $L$enc_epilogue:
  660. mov rdi,QWORD[8+rsp] ;WIN64 epilogue
  661. mov rsi,QWORD[16+rsp]
  662. DB 0F3h,0C3h ;repret
  663. $L$SEH_end_vpaes_encrypt:
  664. global vpaes_decrypt
  665. ALIGN 16
  666. vpaes_decrypt:
  667. mov QWORD[8+rsp],rdi ;WIN64 prologue
  668. mov QWORD[16+rsp],rsi
  669. mov rax,rsp
  670. $L$SEH_begin_vpaes_decrypt:
  671. mov rdi,rcx
  672. mov rsi,rdx
  673. mov rdx,r8
  674. lea rsp,[((-184))+rsp]
  675. movaps XMMWORD[16+rsp],xmm6
  676. movaps XMMWORD[32+rsp],xmm7
  677. movaps XMMWORD[48+rsp],xmm8
  678. movaps XMMWORD[64+rsp],xmm9
  679. movaps XMMWORD[80+rsp],xmm10
  680. movaps XMMWORD[96+rsp],xmm11
  681. movaps XMMWORD[112+rsp],xmm12
  682. movaps XMMWORD[128+rsp],xmm13
  683. movaps XMMWORD[144+rsp],xmm14
  684. movaps XMMWORD[160+rsp],xmm15
  685. $L$dec_body:
  686. movdqu xmm0,XMMWORD[rdi]
  687. call _vpaes_preheat
  688. call _vpaes_decrypt_core
  689. movdqu XMMWORD[rsi],xmm0
  690. movaps xmm6,XMMWORD[16+rsp]
  691. movaps xmm7,XMMWORD[32+rsp]
  692. movaps xmm8,XMMWORD[48+rsp]
  693. movaps xmm9,XMMWORD[64+rsp]
  694. movaps xmm10,XMMWORD[80+rsp]
  695. movaps xmm11,XMMWORD[96+rsp]
  696. movaps xmm12,XMMWORD[112+rsp]
  697. movaps xmm13,XMMWORD[128+rsp]
  698. movaps xmm14,XMMWORD[144+rsp]
  699. movaps xmm15,XMMWORD[160+rsp]
  700. lea rsp,[184+rsp]
  701. $L$dec_epilogue:
  702. mov rdi,QWORD[8+rsp] ;WIN64 epilogue
  703. mov rsi,QWORD[16+rsp]
  704. DB 0F3h,0C3h ;repret
  705. $L$SEH_end_vpaes_decrypt:
  706. global vpaes_cbc_encrypt
  707. ALIGN 16
  708. vpaes_cbc_encrypt:
  709. mov QWORD[8+rsp],rdi ;WIN64 prologue
  710. mov QWORD[16+rsp],rsi
  711. mov rax,rsp
  712. $L$SEH_begin_vpaes_cbc_encrypt:
  713. mov rdi,rcx
  714. mov rsi,rdx
  715. mov rdx,r8
  716. mov rcx,r9
  717. mov r8,QWORD[40+rsp]
  718. mov r9,QWORD[48+rsp]
  719. xchg rdx,rcx
  720. sub rcx,16
  721. jc NEAR $L$cbc_abort
  722. lea rsp,[((-184))+rsp]
  723. movaps XMMWORD[16+rsp],xmm6
  724. movaps XMMWORD[32+rsp],xmm7
  725. movaps XMMWORD[48+rsp],xmm8
  726. movaps XMMWORD[64+rsp],xmm9
  727. movaps XMMWORD[80+rsp],xmm10
  728. movaps XMMWORD[96+rsp],xmm11
  729. movaps XMMWORD[112+rsp],xmm12
  730. movaps XMMWORD[128+rsp],xmm13
  731. movaps XMMWORD[144+rsp],xmm14
  732. movaps XMMWORD[160+rsp],xmm15
  733. $L$cbc_body:
  734. movdqu xmm6,XMMWORD[r8]
  735. sub rsi,rdi
  736. call _vpaes_preheat
  737. cmp r9d,0
  738. je NEAR $L$cbc_dec_loop
  739. jmp NEAR $L$cbc_enc_loop
  740. ALIGN 16
  741. $L$cbc_enc_loop:
  742. movdqu xmm0,XMMWORD[rdi]
  743. pxor xmm0,xmm6
  744. call _vpaes_encrypt_core
  745. movdqa xmm6,xmm0
  746. movdqu XMMWORD[rdi*1+rsi],xmm0
  747. lea rdi,[16+rdi]
  748. sub rcx,16
  749. jnc NEAR $L$cbc_enc_loop
  750. jmp NEAR $L$cbc_done
  751. ALIGN 16
  752. $L$cbc_dec_loop:
  753. movdqu xmm0,XMMWORD[rdi]
  754. movdqa xmm7,xmm0
  755. call _vpaes_decrypt_core
  756. pxor xmm0,xmm6
  757. movdqa xmm6,xmm7
  758. movdqu XMMWORD[rdi*1+rsi],xmm0
  759. lea rdi,[16+rdi]
  760. sub rcx,16
  761. jnc NEAR $L$cbc_dec_loop
  762. $L$cbc_done:
  763. movdqu XMMWORD[r8],xmm6
  764. movaps xmm6,XMMWORD[16+rsp]
  765. movaps xmm7,XMMWORD[32+rsp]
  766. movaps xmm8,XMMWORD[48+rsp]
  767. movaps xmm9,XMMWORD[64+rsp]
  768. movaps xmm10,XMMWORD[80+rsp]
  769. movaps xmm11,XMMWORD[96+rsp]
  770. movaps xmm12,XMMWORD[112+rsp]
  771. movaps xmm13,XMMWORD[128+rsp]
  772. movaps xmm14,XMMWORD[144+rsp]
  773. movaps xmm15,XMMWORD[160+rsp]
  774. lea rsp,[184+rsp]
  775. $L$cbc_epilogue:
  776. $L$cbc_abort:
  777. mov rdi,QWORD[8+rsp] ;WIN64 epilogue
  778. mov rsi,QWORD[16+rsp]
  779. DB 0F3h,0C3h ;repret
  780. $L$SEH_end_vpaes_cbc_encrypt:
  781. global vpaes_ctr32_encrypt_blocks
  782. ALIGN 16
  783. vpaes_ctr32_encrypt_blocks:
  784. mov QWORD[8+rsp],rdi ;WIN64 prologue
  785. mov QWORD[16+rsp],rsi
  786. mov rax,rsp
  787. $L$SEH_begin_vpaes_ctr32_encrypt_blocks:
  788. mov rdi,rcx
  789. mov rsi,rdx
  790. mov rdx,r8
  791. mov rcx,r9
  792. mov r8,QWORD[40+rsp]
  793. xchg rdx,rcx
  794. test rcx,rcx
  795. jz NEAR $L$ctr32_abort
  796. lea rsp,[((-184))+rsp]
  797. movaps XMMWORD[16+rsp],xmm6
  798. movaps XMMWORD[32+rsp],xmm7
  799. movaps XMMWORD[48+rsp],xmm8
  800. movaps XMMWORD[64+rsp],xmm9
  801. movaps XMMWORD[80+rsp],xmm10
  802. movaps XMMWORD[96+rsp],xmm11
  803. movaps XMMWORD[112+rsp],xmm12
  804. movaps XMMWORD[128+rsp],xmm13
  805. movaps XMMWORD[144+rsp],xmm14
  806. movaps XMMWORD[160+rsp],xmm15
  807. $L$ctr32_body:
  808. movdqu xmm0,XMMWORD[r8]
  809. movdqa xmm8,XMMWORD[$L$ctr_add_one]
  810. sub rsi,rdi
  811. call _vpaes_preheat
  812. movdqa xmm6,xmm0
  813. pshufb xmm6,XMMWORD[$L$rev_ctr]
  814. test rcx,1
  815. jz NEAR $L$ctr32_prep_loop
  816. movdqu xmm7,XMMWORD[rdi]
  817. call _vpaes_encrypt_core
  818. pxor xmm0,xmm7
  819. paddd xmm6,xmm8
  820. movdqu XMMWORD[rdi*1+rsi],xmm0
  821. sub rcx,1
  822. lea rdi,[16+rdi]
  823. jz NEAR $L$ctr32_done
  824. $L$ctr32_prep_loop:
  825. movdqa xmm14,xmm6
  826. movdqa xmm15,xmm6
  827. paddd xmm15,xmm8
  828. $L$ctr32_loop:
  829. movdqa xmm1,XMMWORD[$L$rev_ctr]
  830. movdqa xmm0,xmm14
  831. movdqa xmm6,xmm15
  832. DB 102,15,56,0,193
  833. DB 102,15,56,0,241
  834. call _vpaes_encrypt_core_2x
  835. movdqu xmm1,XMMWORD[rdi]
  836. movdqu xmm2,XMMWORD[16+rdi]
  837. movdqa xmm3,XMMWORD[$L$ctr_add_two]
  838. pxor xmm0,xmm1
  839. pxor xmm6,xmm2
  840. paddd xmm14,xmm3
  841. paddd xmm15,xmm3
  842. movdqu XMMWORD[rdi*1+rsi],xmm0
  843. movdqu XMMWORD[16+rdi*1+rsi],xmm6
  844. sub rcx,2
  845. lea rdi,[32+rdi]
  846. jnz NEAR $L$ctr32_loop
  847. $L$ctr32_done:
  848. movaps xmm6,XMMWORD[16+rsp]
  849. movaps xmm7,XMMWORD[32+rsp]
  850. movaps xmm8,XMMWORD[48+rsp]
  851. movaps xmm9,XMMWORD[64+rsp]
  852. movaps xmm10,XMMWORD[80+rsp]
  853. movaps xmm11,XMMWORD[96+rsp]
  854. movaps xmm12,XMMWORD[112+rsp]
  855. movaps xmm13,XMMWORD[128+rsp]
  856. movaps xmm14,XMMWORD[144+rsp]
  857. movaps xmm15,XMMWORD[160+rsp]
  858. lea rsp,[184+rsp]
  859. $L$ctr32_epilogue:
  860. $L$ctr32_abort:
  861. mov rdi,QWORD[8+rsp] ;WIN64 epilogue
  862. mov rsi,QWORD[16+rsp]
  863. DB 0F3h,0C3h ;repret
  864. $L$SEH_end_vpaes_ctr32_encrypt_blocks:
  865. ALIGN 16
  866. _vpaes_preheat:
  867. lea r10,[$L$k_s0F]
  868. movdqa xmm10,XMMWORD[((-32))+r10]
  869. movdqa xmm11,XMMWORD[((-16))+r10]
  870. movdqa xmm9,XMMWORD[r10]
  871. movdqa xmm13,XMMWORD[48+r10]
  872. movdqa xmm12,XMMWORD[64+r10]
  873. movdqa xmm15,XMMWORD[80+r10]
  874. movdqa xmm14,XMMWORD[96+r10]
  875. DB 0F3h,0C3h ;repret
  876. ALIGN 64
  877. _vpaes_consts:
  878. $L$k_inv:
  879. DQ 0x0E05060F0D080180,0x040703090A0B0C02
  880. DQ 0x01040A060F0B0780,0x030D0E0C02050809
  881. $L$k_s0F:
  882. DQ 0x0F0F0F0F0F0F0F0F,0x0F0F0F0F0F0F0F0F
  883. $L$k_ipt:
  884. DQ 0xC2B2E8985A2A7000,0xCABAE09052227808
  885. DQ 0x4C01307D317C4D00,0xCD80B1FCB0FDCC81
  886. $L$k_sb1:
  887. DQ 0xB19BE18FCB503E00,0xA5DF7A6E142AF544
  888. DQ 0x3618D415FAE22300,0x3BF7CCC10D2ED9EF
  889. $L$k_sb2:
  890. DQ 0xE27A93C60B712400,0x5EB7E955BC982FCD
  891. DQ 0x69EB88400AE12900,0xC2A163C8AB82234A
  892. $L$k_sbo:
  893. DQ 0xD0D26D176FBDC700,0x15AABF7AC502A878
  894. DQ 0xCFE474A55FBB6A00,0x8E1E90D1412B35FA
  895. $L$k_mc_forward:
  896. DQ 0x0407060500030201,0x0C0F0E0D080B0A09
  897. DQ 0x080B0A0904070605,0x000302010C0F0E0D
  898. DQ 0x0C0F0E0D080B0A09,0x0407060500030201
  899. DQ 0x000302010C0F0E0D,0x080B0A0904070605
  900. $L$k_mc_backward:
  901. DQ 0x0605040702010003,0x0E0D0C0F0A09080B
  902. DQ 0x020100030E0D0C0F,0x0A09080B06050407
  903. DQ 0x0E0D0C0F0A09080B,0x0605040702010003
  904. DQ 0x0A09080B06050407,0x020100030E0D0C0F
  905. $L$k_sr:
  906. DQ 0x0706050403020100,0x0F0E0D0C0B0A0908
  907. DQ 0x030E09040F0A0500,0x0B06010C07020D08
  908. DQ 0x0F060D040B020900,0x070E050C030A0108
  909. DQ 0x0B0E0104070A0D00,0x0306090C0F020508
  910. $L$k_rcon:
  911. DQ 0x1F8391B9AF9DEEB6,0x702A98084D7C7D81
  912. $L$k_s63:
  913. DQ 0x5B5B5B5B5B5B5B5B,0x5B5B5B5B5B5B5B5B
  914. $L$k_opt:
  915. DQ 0xFF9F4929D6B66000,0xF7974121DEBE6808
  916. DQ 0x01EDBD5150BCEC00,0xE10D5DB1B05C0CE0
  917. $L$k_deskew:
  918. DQ 0x07E4A34047A4E300,0x1DFEB95A5DBEF91A
  919. DQ 0x5F36B5DC83EA6900,0x2841C2ABF49D1E77
  920. $L$k_dksd:
  921. DQ 0xFEB91A5DA3E44700,0x0740E3A45A1DBEF9
  922. DQ 0x41C277F4B5368300,0x5FDC69EAAB289D1E
  923. $L$k_dksb:
  924. DQ 0x9A4FCA1F8550D500,0x03D653861CC94C99
  925. DQ 0x115BEDA7B6FC4A00,0xD993256F7E3482C8
  926. $L$k_dkse:
  927. DQ 0xD5031CCA1FC9D600,0x53859A4C994F5086
  928. DQ 0xA23196054FDC7BE8,0xCD5EF96A20B31487
  929. $L$k_dks9:
  930. DQ 0xB6116FC87ED9A700,0x4AED933482255BFC
  931. DQ 0x4576516227143300,0x8BB89FACE9DAFDCE
  932. $L$k_dipt:
  933. DQ 0x0F505B040B545F00,0x154A411E114E451A
  934. DQ 0x86E383E660056500,0x12771772F491F194
  935. $L$k_dsb9:
  936. DQ 0x851C03539A86D600,0xCAD51F504F994CC9
  937. DQ 0xC03B1789ECD74900,0x725E2C9EB2FBA565
  938. $L$k_dsbd:
  939. DQ 0x7D57CCDFE6B1A200,0xF56E9B13882A4439
  940. DQ 0x3CE2FAF724C6CB00,0x2931180D15DEEFD3
  941. $L$k_dsbb:
  942. DQ 0xD022649296B44200,0x602646F6B0F2D404
  943. DQ 0xC19498A6CD596700,0xF3FF0C3E3255AA6B
  944. $L$k_dsbe:
  945. DQ 0x46F2929626D4D000,0x2242600464B4F6B0
  946. DQ 0x0C55A6CDFFAAC100,0x9467F36B98593E32
  947. $L$k_dsbo:
  948. DQ 0x1387EA537EF94000,0xC7AA6DB9D4943E2D
  949. DQ 0x12D7560F93441D00,0xCA4B8159D8C58E9C
  950. $L$rev_ctr:
  951. DQ 0x0706050403020100,0x0c0d0e0f0b0a0908
  952. $L$ctr_add_one:
  953. DQ 0x0000000000000000,0x0000000100000000
  954. $L$ctr_add_two:
  955. DQ 0x0000000000000000,0x0000000200000000
  956. DB 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
  957. DB 111,110,32,65,69,83,32,102,111,114,32,120,56,54,95,54
  958. DB 52,47,83,83,83,69,51,44,32,77,105,107,101,32,72,97
  959. DB 109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32
  960. DB 85,110,105,118,101,114,115,105,116,121,41,0
  961. ALIGN 64
  962. EXTERN __imp_RtlVirtualUnwind
  963. ALIGN 16
  964. se_handler:
  965. push rsi
  966. push rdi
  967. push rbx
  968. push rbp
  969. push r12
  970. push r13
  971. push r14
  972. push r15
  973. pushfq
  974. sub rsp,64
  975. mov rax,QWORD[120+r8]
  976. mov rbx,QWORD[248+r8]
  977. mov rsi,QWORD[8+r9]
  978. mov r11,QWORD[56+r9]
  979. mov r10d,DWORD[r11]
  980. lea r10,[r10*1+rsi]
  981. cmp rbx,r10
  982. jb NEAR $L$in_prologue
  983. mov rax,QWORD[152+r8]
  984. mov r10d,DWORD[4+r11]
  985. lea r10,[r10*1+rsi]
  986. cmp rbx,r10
  987. jae NEAR $L$in_prologue
  988. lea rsi,[16+rax]
  989. lea rdi,[512+r8]
  990. mov ecx,20
  991. DD 0xa548f3fc
  992. lea rax,[184+rax]
  993. $L$in_prologue:
  994. mov rdi,QWORD[8+rax]
  995. mov rsi,QWORD[16+rax]
  996. mov QWORD[152+r8],rax
  997. mov QWORD[168+r8],rsi
  998. mov QWORD[176+r8],rdi
  999. mov rdi,QWORD[40+r9]
  1000. mov rsi,r8
  1001. mov ecx,154
  1002. DD 0xa548f3fc
  1003. mov rsi,r9
  1004. xor rcx,rcx
  1005. mov rdx,QWORD[8+rsi]
  1006. mov r8,QWORD[rsi]
  1007. mov r9,QWORD[16+rsi]
  1008. mov r10,QWORD[40+rsi]
  1009. lea r11,[56+rsi]
  1010. lea r12,[24+rsi]
  1011. mov QWORD[32+rsp],r10
  1012. mov QWORD[40+rsp],r11
  1013. mov QWORD[48+rsp],r12
  1014. mov QWORD[56+rsp],rcx
  1015. call QWORD[__imp_RtlVirtualUnwind]
  1016. mov eax,1
  1017. add rsp,64
  1018. popfq
  1019. pop r15
  1020. pop r14
  1021. pop r13
  1022. pop r12
  1023. pop rbp
  1024. pop rbx
  1025. pop rdi
  1026. pop rsi
  1027. DB 0F3h,0C3h ;repret
  1028. section .pdata rdata align=4
  1029. ALIGN 4
  1030. DD $L$SEH_begin_vpaes_set_encrypt_key wrt ..imagebase
  1031. DD $L$SEH_end_vpaes_set_encrypt_key wrt ..imagebase
  1032. DD $L$SEH_info_vpaes_set_encrypt_key wrt ..imagebase
  1033. DD $L$SEH_begin_vpaes_set_decrypt_key wrt ..imagebase
  1034. DD $L$SEH_end_vpaes_set_decrypt_key wrt ..imagebase
  1035. DD $L$SEH_info_vpaes_set_decrypt_key wrt ..imagebase
  1036. DD $L$SEH_begin_vpaes_encrypt wrt ..imagebase
  1037. DD $L$SEH_end_vpaes_encrypt wrt ..imagebase
  1038. DD $L$SEH_info_vpaes_encrypt wrt ..imagebase
  1039. DD $L$SEH_begin_vpaes_decrypt wrt ..imagebase
  1040. DD $L$SEH_end_vpaes_decrypt wrt ..imagebase
  1041. DD $L$SEH_info_vpaes_decrypt wrt ..imagebase
  1042. DD $L$SEH_begin_vpaes_cbc_encrypt wrt ..imagebase
  1043. DD $L$SEH_end_vpaes_cbc_encrypt wrt ..imagebase
  1044. DD $L$SEH_info_vpaes_cbc_encrypt wrt ..imagebase
  1045. DD $L$SEH_begin_vpaes_ctr32_encrypt_blocks wrt ..imagebase
  1046. DD $L$SEH_end_vpaes_ctr32_encrypt_blocks wrt ..imagebase
  1047. DD $L$SEH_info_vpaes_ctr32_encrypt_blocks wrt ..imagebase
  1048. section .xdata rdata align=8
  1049. ALIGN 8
  1050. $L$SEH_info_vpaes_set_encrypt_key:
  1051. DB 9,0,0,0
  1052. DD se_handler wrt ..imagebase
  1053. DD $L$enc_key_body wrt ..imagebase,$L$enc_key_epilogue wrt ..imagebase
  1054. $L$SEH_info_vpaes_set_decrypt_key:
  1055. DB 9,0,0,0
  1056. DD se_handler wrt ..imagebase
  1057. DD $L$dec_key_body wrt ..imagebase,$L$dec_key_epilogue wrt ..imagebase
  1058. $L$SEH_info_vpaes_encrypt:
  1059. DB 9,0,0,0
  1060. DD se_handler wrt ..imagebase
  1061. DD $L$enc_body wrt ..imagebase,$L$enc_epilogue wrt ..imagebase
  1062. $L$SEH_info_vpaes_decrypt:
  1063. DB 9,0,0,0
  1064. DD se_handler wrt ..imagebase
  1065. DD $L$dec_body wrt ..imagebase,$L$dec_epilogue wrt ..imagebase
  1066. $L$SEH_info_vpaes_cbc_encrypt:
  1067. DB 9,0,0,0
  1068. DD se_handler wrt ..imagebase
  1069. DD $L$cbc_body wrt ..imagebase,$L$cbc_epilogue wrt ..imagebase
  1070. $L$SEH_info_vpaes_ctr32_encrypt_blocks:
  1071. DB 9,0,0,0
  1072. DD se_handler wrt ..imagebase
  1073. DD $L$ctr32_body wrt ..imagebase,$L$ctr32_epilogue wrt ..imagebase