aes_586.asm 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710
  1. %ifidn __OUTPUT_FORMAT__,obj
  2. section code use32 class=code align=256
  3. %elifidn __OUTPUT_FORMAT__,win32
  4. [email protected] equ 1
  5. section .text code align=256
  6. %else
  7. section .text code
  8. %endif
  9. align 16
  10. __x86_AES_encrypt_compact:
  11. mov DWORD [20+esp],edi
  12. xor eax,DWORD [edi]
  13. xor ebx,DWORD [4+edi]
  14. xor ecx,DWORD [8+edi]
  15. xor edx,DWORD [12+edi]
  16. mov esi,DWORD [240+edi]
  17. lea esi,[esi*1+esi-2]
  18. lea esi,[esi*8+edi]
  19. mov DWORD [24+esp],esi
  20. mov edi,DWORD [ebp-128]
  21. mov esi,DWORD [ebp-96]
  22. mov edi,DWORD [ebp-64]
  23. mov esi,DWORD [ebp-32]
  24. mov edi,DWORD [ebp]
  25. mov esi,DWORD [32+ebp]
  26. mov edi,DWORD [64+ebp]
  27. mov esi,DWORD [96+ebp]
  28. align 16
  29. L$000loop:
  30. mov esi,eax
  31. and esi,255
  32. movzx esi,BYTE [esi*1+ebp-128]
  33. movzx edi,bh
  34. movzx edi,BYTE [edi*1+ebp-128]
  35. shl edi,8
  36. xor esi,edi
  37. mov edi,ecx
  38. shr edi,16
  39. and edi,255
  40. movzx edi,BYTE [edi*1+ebp-128]
  41. shl edi,16
  42. xor esi,edi
  43. mov edi,edx
  44. shr edi,24
  45. movzx edi,BYTE [edi*1+ebp-128]
  46. shl edi,24
  47. xor esi,edi
  48. mov DWORD [4+esp],esi
  49. mov esi,ebx
  50. and esi,255
  51. shr ebx,16
  52. movzx esi,BYTE [esi*1+ebp-128]
  53. movzx edi,ch
  54. movzx edi,BYTE [edi*1+ebp-128]
  55. shl edi,8
  56. xor esi,edi
  57. mov edi,edx
  58. shr edi,16
  59. and edi,255
  60. movzx edi,BYTE [edi*1+ebp-128]
  61. shl edi,16
  62. xor esi,edi
  63. mov edi,eax
  64. shr edi,24
  65. movzx edi,BYTE [edi*1+ebp-128]
  66. shl edi,24
  67. xor esi,edi
  68. mov DWORD [8+esp],esi
  69. mov esi,ecx
  70. and esi,255
  71. shr ecx,24
  72. movzx esi,BYTE [esi*1+ebp-128]
  73. movzx edi,dh
  74. movzx edi,BYTE [edi*1+ebp-128]
  75. shl edi,8
  76. xor esi,edi
  77. mov edi,eax
  78. shr edi,16
  79. and edx,255
  80. and edi,255
  81. movzx edi,BYTE [edi*1+ebp-128]
  82. shl edi,16
  83. xor esi,edi
  84. movzx edi,bh
  85. movzx edi,BYTE [edi*1+ebp-128]
  86. shl edi,24
  87. xor esi,edi
  88. and edx,255
  89. movzx edx,BYTE [edx*1+ebp-128]
  90. movzx eax,ah
  91. movzx eax,BYTE [eax*1+ebp-128]
  92. shl eax,8
  93. xor edx,eax
  94. mov eax,DWORD [4+esp]
  95. and ebx,255
  96. movzx ebx,BYTE [ebx*1+ebp-128]
  97. shl ebx,16
  98. xor edx,ebx
  99. mov ebx,DWORD [8+esp]
  100. movzx ecx,BYTE [ecx*1+ebp-128]
  101. shl ecx,24
  102. xor edx,ecx
  103. mov ecx,esi
  104. mov ebp,2155905152
  105. and ebp,ecx
  106. lea edi,[ecx*1+ecx]
  107. mov esi,ebp
  108. shr ebp,7
  109. and edi,4278124286
  110. sub esi,ebp
  111. mov ebp,ecx
  112. and esi,454761243
  113. ror ebp,16
  114. xor esi,edi
  115. mov edi,ecx
  116. xor ecx,esi
  117. ror edi,24
  118. xor esi,ebp
  119. rol ecx,24
  120. xor esi,edi
  121. mov ebp,2155905152
  122. xor ecx,esi
  123. and ebp,edx
  124. lea edi,[edx*1+edx]
  125. mov esi,ebp
  126. shr ebp,7
  127. and edi,4278124286
  128. sub esi,ebp
  129. mov ebp,edx
  130. and esi,454761243
  131. ror ebp,16
  132. xor esi,edi
  133. mov edi,edx
  134. xor edx,esi
  135. ror edi,24
  136. xor esi,ebp
  137. rol edx,24
  138. xor esi,edi
  139. mov ebp,2155905152
  140. xor edx,esi
  141. and ebp,eax
  142. lea edi,[eax*1+eax]
  143. mov esi,ebp
  144. shr ebp,7
  145. and edi,4278124286
  146. sub esi,ebp
  147. mov ebp,eax
  148. and esi,454761243
  149. ror ebp,16
  150. xor esi,edi
  151. mov edi,eax
  152. xor eax,esi
  153. ror edi,24
  154. xor esi,ebp
  155. rol eax,24
  156. xor esi,edi
  157. mov ebp,2155905152
  158. xor eax,esi
  159. and ebp,ebx
  160. lea edi,[ebx*1+ebx]
  161. mov esi,ebp
  162. shr ebp,7
  163. and edi,4278124286
  164. sub esi,ebp
  165. mov ebp,ebx
  166. and esi,454761243
  167. ror ebp,16
  168. xor esi,edi
  169. mov edi,ebx
  170. xor ebx,esi
  171. ror edi,24
  172. xor esi,ebp
  173. rol ebx,24
  174. xor esi,edi
  175. xor ebx,esi
  176. mov edi,DWORD [20+esp]
  177. mov ebp,DWORD [28+esp]
  178. add edi,16
  179. xor eax,DWORD [edi]
  180. xor ebx,DWORD [4+edi]
  181. xor ecx,DWORD [8+edi]
  182. xor edx,DWORD [12+edi]
  183. cmp edi,DWORD [24+esp]
  184. mov DWORD [20+esp],edi
  185. jb NEAR L$000loop
  186. mov esi,eax
  187. and esi,255
  188. movzx esi,BYTE [esi*1+ebp-128]
  189. movzx edi,bh
  190. movzx edi,BYTE [edi*1+ebp-128]
  191. shl edi,8
  192. xor esi,edi
  193. mov edi,ecx
  194. shr edi,16
  195. and edi,255
  196. movzx edi,BYTE [edi*1+ebp-128]
  197. shl edi,16
  198. xor esi,edi
  199. mov edi,edx
  200. shr edi,24
  201. movzx edi,BYTE [edi*1+ebp-128]
  202. shl edi,24
  203. xor esi,edi
  204. mov DWORD [4+esp],esi
  205. mov esi,ebx
  206. and esi,255
  207. shr ebx,16
  208. movzx esi,BYTE [esi*1+ebp-128]
  209. movzx edi,ch
  210. movzx edi,BYTE [edi*1+ebp-128]
  211. shl edi,8
  212. xor esi,edi
  213. mov edi,edx
  214. shr edi,16
  215. and edi,255
  216. movzx edi,BYTE [edi*1+ebp-128]
  217. shl edi,16
  218. xor esi,edi
  219. mov edi,eax
  220. shr edi,24
  221. movzx edi,BYTE [edi*1+ebp-128]
  222. shl edi,24
  223. xor esi,edi
  224. mov DWORD [8+esp],esi
  225. mov esi,ecx
  226. and esi,255
  227. shr ecx,24
  228. movzx esi,BYTE [esi*1+ebp-128]
  229. movzx edi,dh
  230. movzx edi,BYTE [edi*1+ebp-128]
  231. shl edi,8
  232. xor esi,edi
  233. mov edi,eax
  234. shr edi,16
  235. and edx,255
  236. and edi,255
  237. movzx edi,BYTE [edi*1+ebp-128]
  238. shl edi,16
  239. xor esi,edi
  240. movzx edi,bh
  241. movzx edi,BYTE [edi*1+ebp-128]
  242. shl edi,24
  243. xor esi,edi
  244. mov edi,DWORD [20+esp]
  245. and edx,255
  246. movzx edx,BYTE [edx*1+ebp-128]
  247. movzx eax,ah
  248. movzx eax,BYTE [eax*1+ebp-128]
  249. shl eax,8
  250. xor edx,eax
  251. mov eax,DWORD [4+esp]
  252. and ebx,255
  253. movzx ebx,BYTE [ebx*1+ebp-128]
  254. shl ebx,16
  255. xor edx,ebx
  256. mov ebx,DWORD [8+esp]
  257. movzx ecx,BYTE [ecx*1+ebp-128]
  258. shl ecx,24
  259. xor edx,ecx
  260. mov ecx,esi
  261. xor eax,DWORD [16+edi]
  262. xor ebx,DWORD [20+edi]
  263. xor ecx,DWORD [24+edi]
  264. xor edx,DWORD [28+edi]
  265. ret
  266. align 16
  267. __x86_AES_encrypt:
  268. mov DWORD [20+esp],edi
  269. xor eax,DWORD [edi]
  270. xor ebx,DWORD [4+edi]
  271. xor ecx,DWORD [8+edi]
  272. xor edx,DWORD [12+edi]
  273. mov esi,DWORD [240+edi]
  274. lea esi,[esi*1+esi-2]
  275. lea esi,[esi*8+edi]
  276. mov DWORD [24+esp],esi
  277. align 16
  278. L$001loop:
  279. mov esi,eax
  280. and esi,255
  281. mov esi,DWORD [esi*8+ebp]
  282. movzx edi,bh
  283. xor esi,DWORD [3+edi*8+ebp]
  284. mov edi,ecx
  285. shr edi,16
  286. and edi,255
  287. xor esi,DWORD [2+edi*8+ebp]
  288. mov edi,edx
  289. shr edi,24
  290. xor esi,DWORD [1+edi*8+ebp]
  291. mov DWORD [4+esp],esi
  292. mov esi,ebx
  293. and esi,255
  294. shr ebx,16
  295. mov esi,DWORD [esi*8+ebp]
  296. movzx edi,ch
  297. xor esi,DWORD [3+edi*8+ebp]
  298. mov edi,edx
  299. shr edi,16
  300. and edi,255
  301. xor esi,DWORD [2+edi*8+ebp]
  302. mov edi,eax
  303. shr edi,24
  304. xor esi,DWORD [1+edi*8+ebp]
  305. mov DWORD [8+esp],esi
  306. mov esi,ecx
  307. and esi,255
  308. shr ecx,24
  309. mov esi,DWORD [esi*8+ebp]
  310. movzx edi,dh
  311. xor esi,DWORD [3+edi*8+ebp]
  312. mov edi,eax
  313. shr edi,16
  314. and edx,255
  315. and edi,255
  316. xor esi,DWORD [2+edi*8+ebp]
  317. movzx edi,bh
  318. xor esi,DWORD [1+edi*8+ebp]
  319. mov edi,DWORD [20+esp]
  320. mov edx,DWORD [edx*8+ebp]
  321. movzx eax,ah
  322. xor edx,DWORD [3+eax*8+ebp]
  323. mov eax,DWORD [4+esp]
  324. and ebx,255
  325. xor edx,DWORD [2+ebx*8+ebp]
  326. mov ebx,DWORD [8+esp]
  327. xor edx,DWORD [1+ecx*8+ebp]
  328. mov ecx,esi
  329. add edi,16
  330. xor eax,DWORD [edi]
  331. xor ebx,DWORD [4+edi]
  332. xor ecx,DWORD [8+edi]
  333. xor edx,DWORD [12+edi]
  334. cmp edi,DWORD [24+esp]
  335. mov DWORD [20+esp],edi
  336. jb NEAR L$001loop
  337. mov esi,eax
  338. and esi,255
  339. mov esi,DWORD [2+esi*8+ebp]
  340. and esi,255
  341. movzx edi,bh
  342. mov edi,DWORD [edi*8+ebp]
  343. and edi,65280
  344. xor esi,edi
  345. mov edi,ecx
  346. shr edi,16
  347. and edi,255
  348. mov edi,DWORD [edi*8+ebp]
  349. and edi,16711680
  350. xor esi,edi
  351. mov edi,edx
  352. shr edi,24
  353. mov edi,DWORD [2+edi*8+ebp]
  354. and edi,4278190080
  355. xor esi,edi
  356. mov DWORD [4+esp],esi
  357. mov esi,ebx
  358. and esi,255
  359. shr ebx,16
  360. mov esi,DWORD [2+esi*8+ebp]
  361. and esi,255
  362. movzx edi,ch
  363. mov edi,DWORD [edi*8+ebp]
  364. and edi,65280
  365. xor esi,edi
  366. mov edi,edx
  367. shr edi,16
  368. and edi,255
  369. mov edi,DWORD [edi*8+ebp]
  370. and edi,16711680
  371. xor esi,edi
  372. mov edi,eax
  373. shr edi,24
  374. mov edi,DWORD [2+edi*8+ebp]
  375. and edi,4278190080
  376. xor esi,edi
  377. mov DWORD [8+esp],esi
  378. mov esi,ecx
  379. and esi,255
  380. shr ecx,24
  381. mov esi,DWORD [2+esi*8+ebp]
  382. and esi,255
  383. movzx edi,dh
  384. mov edi,DWORD [edi*8+ebp]
  385. and edi,65280
  386. xor esi,edi
  387. mov edi,eax
  388. shr edi,16
  389. and edx,255
  390. and edi,255
  391. mov edi,DWORD [edi*8+ebp]
  392. and edi,16711680
  393. xor esi,edi
  394. movzx edi,bh
  395. mov edi,DWORD [2+edi*8+ebp]
  396. and edi,4278190080
  397. xor esi,edi
  398. mov edi,DWORD [20+esp]
  399. and edx,255
  400. mov edx,DWORD [2+edx*8+ebp]
  401. and edx,255
  402. movzx eax,ah
  403. mov eax,DWORD [eax*8+ebp]
  404. and eax,65280
  405. xor edx,eax
  406. mov eax,DWORD [4+esp]
  407. and ebx,255
  408. mov ebx,DWORD [ebx*8+ebp]
  409. and ebx,16711680
  410. xor edx,ebx
  411. mov ebx,DWORD [8+esp]
  412. mov ecx,DWORD [2+ecx*8+ebp]
  413. and ecx,4278190080
  414. xor edx,ecx
  415. mov ecx,esi
  416. add edi,16
  417. xor eax,DWORD [edi]
  418. xor ebx,DWORD [4+edi]
  419. xor ecx,DWORD [8+edi]
  420. xor edx,DWORD [12+edi]
  421. ret
  422. align 64
  423. L$AES_Te:
  424. dd 2774754246,2774754246
  425. dd 2222750968,2222750968
  426. dd 2574743534,2574743534
  427. dd 2373680118,2373680118
  428. dd 234025727,234025727
  429. dd 3177933782,3177933782
  430. dd 2976870366,2976870366
  431. dd 1422247313,1422247313
  432. dd 1345335392,1345335392
  433. dd 50397442,50397442
  434. dd 2842126286,2842126286
  435. dd 2099981142,2099981142
  436. dd 436141799,436141799
  437. dd 1658312629,1658312629
  438. dd 3870010189,3870010189
  439. dd 2591454956,2591454956
  440. dd 1170918031,1170918031
  441. dd 2642575903,2642575903
  442. dd 1086966153,1086966153
  443. dd 2273148410,2273148410
  444. dd 368769775,368769775
  445. dd 3948501426,3948501426
  446. dd 3376891790,3376891790
  447. dd 200339707,200339707
  448. dd 3970805057,3970805057
  449. dd 1742001331,1742001331
  450. dd 4255294047,4255294047
  451. dd 3937382213,3937382213
  452. dd 3214711843,3214711843
  453. dd 4154762323,4154762323
  454. dd 2524082916,2524082916
  455. dd 1539358875,1539358875
  456. dd 3266819957,3266819957
  457. dd 486407649,486407649
  458. dd 2928907069,2928907069
  459. dd 1780885068,1780885068
  460. dd 1513502316,1513502316
  461. dd 1094664062,1094664062
  462. dd 49805301,49805301
  463. dd 1338821763,1338821763
  464. dd 1546925160,1546925160
  465. dd 4104496465,4104496465
  466. dd 887481809,887481809
  467. dd 150073849,150073849
  468. dd 2473685474,2473685474
  469. dd 1943591083,1943591083
  470. dd 1395732834,1395732834
  471. dd 1058346282,1058346282
  472. dd 201589768,201589768
  473. dd 1388824469,1388824469
  474. dd 1696801606,1696801606
  475. dd 1589887901,1589887901
  476. dd 672667696,672667696
  477. dd 2711000631,2711000631
  478. dd 251987210,251987210
  479. dd 3046808111,3046808111
  480. dd 151455502,151455502
  481. dd 907153956,907153956
  482. dd 2608889883,2608889883
  483. dd 1038279391,1038279391
  484. dd 652995533,652995533
  485. dd 1764173646,1764173646
  486. dd 3451040383,3451040383
  487. dd 2675275242,2675275242
  488. dd 453576978,453576978
  489. dd 2659418909,2659418909
  490. dd 1949051992,1949051992
  491. dd 773462580,773462580
  492. dd 756751158,756751158
  493. dd 2993581788,2993581788
  494. dd 3998898868,3998898868
  495. dd 4221608027,4221608027
  496. dd 4132590244,4132590244
  497. dd 1295727478,1295727478
  498. dd 1641469623,1641469623
  499. dd 3467883389,3467883389
  500. dd 2066295122,2066295122
  501. dd 1055122397,1055122397
  502. dd 1898917726,1898917726
  503. dd 2542044179,2542044179
  504. dd 4115878822,4115878822
  505. dd 1758581177,1758581177
  506. dd 0,0
  507. dd 753790401,753790401
  508. dd 1612718144,1612718144
  509. dd 536673507,536673507
  510. dd 3367088505,3367088505
  511. dd 3982187446,3982187446
  512. dd 3194645204,3194645204
  513. dd 1187761037,1187761037
  514. dd 3653156455,3653156455
  515. dd 1262041458,1262041458
  516. dd 3729410708,3729410708
  517. dd 3561770136,3561770136
  518. dd 3898103984,3898103984
  519. dd 1255133061,1255133061
  520. dd 1808847035,1808847035
  521. dd 720367557,720367557
  522. dd 3853167183,3853167183
  523. dd 385612781,385612781
  524. dd 3309519750,3309519750
  525. dd 3612167578,3612167578
  526. dd 1429418854,1429418854
  527. dd 2491778321,2491778321
  528. dd 3477423498,3477423498
  529. dd 284817897,284817897
  530. dd 100794884,100794884
  531. dd 2172616702,2172616702
  532. dd 4031795360,4031795360
  533. dd 1144798328,1144798328
  534. dd 3131023141,3131023141
  535. dd 3819481163,3819481163
  536. dd 4082192802,4082192802
  537. dd 4272137053,4272137053
  538. dd 3225436288,3225436288
  539. dd 2324664069,2324664069
  540. dd 2912064063,2912064063
  541. dd 3164445985,3164445985
  542. dd 1211644016,1211644016
  543. dd 83228145,83228145
  544. dd 3753688163,3753688163
  545. dd 3249976951,3249976951
  546. dd 1977277103,1977277103
  547. dd 1663115586,1663115586
  548. dd 806359072,806359072
  549. dd 452984805,452984805
  550. dd 250868733,250868733
  551. dd 1842533055,1842533055
  552. dd 1288555905,1288555905
  553. dd 336333848,336333848
  554. dd 890442534,890442534
  555. dd 804056259,804056259
  556. dd 3781124030,3781124030
  557. dd 2727843637,2727843637
  558. dd 3427026056,3427026056
  559. dd 957814574,957814574
  560. dd 1472513171,1472513171
  561. dd 4071073621,4071073621
  562. dd 2189328124,2189328124
  563. dd 1195195770,1195195770
  564. dd 2892260552,2892260552
  565. dd 3881655738,3881655738
  566. dd 723065138,723065138
  567. dd 2507371494,2507371494
  568. dd 2690670784,2690670784
  569. dd 2558624025,2558624025
  570. dd 3511635870,3511635870
  571. dd 2145180835,2145180835
  572. dd 1713513028,1713513028
  573. dd 2116692564,2116692564
  574. dd 2878378043,2878378043
  575. dd 2206763019,2206763019
  576. dd 3393603212,3393603212
  577. dd 703524551,703524551
  578. dd 3552098411,3552098411
  579. dd 1007948840,1007948840
  580. dd 2044649127,2044649127
  581. dd 3797835452,3797835452
  582. dd 487262998,487262998
  583. dd 1994120109,1994120109
  584. dd 1004593371,1004593371
  585. dd 1446130276,1446130276
  586. dd 1312438900,1312438900
  587. dd 503974420,503974420
  588. dd 3679013266,3679013266
  589. dd 168166924,168166924
  590. dd 1814307912,1814307912
  591. dd 3831258296,3831258296
  592. dd 1573044895,1573044895
  593. dd 1859376061,1859376061
  594. dd 4021070915,4021070915
  595. dd 2791465668,2791465668
  596. dd 2828112185,2828112185
  597. dd 2761266481,2761266481
  598. dd 937747667,937747667
  599. dd 2339994098,2339994098
  600. dd 854058965,854058965
  601. dd 1137232011,1137232011
  602. dd 1496790894,1496790894
  603. dd 3077402074,3077402074
  604. dd 2358086913,2358086913
  605. dd 1691735473,1691735473
  606. dd 3528347292,3528347292
  607. dd 3769215305,3769215305
  608. dd 3027004632,3027004632
  609. dd 4199962284,4199962284
  610. dd 133494003,133494003
  611. dd 636152527,636152527
  612. dd 2942657994,2942657994
  613. dd 2390391540,2390391540
  614. dd 3920539207,3920539207
  615. dd 403179536,403179536
  616. dd 3585784431,3585784431
  617. dd 2289596656,2289596656
  618. dd 1864705354,1864705354
  619. dd 1915629148,1915629148
  620. dd 605822008,605822008
  621. dd 4054230615,4054230615
  622. dd 3350508659,3350508659
  623. dd 1371981463,1371981463
  624. dd 602466507,602466507
  625. dd 2094914977,2094914977
  626. dd 2624877800,2624877800
  627. dd 555687742,555687742
  628. dd 3712699286,3712699286
  629. dd 3703422305,3703422305
  630. dd 2257292045,2257292045
  631. dd 2240449039,2240449039
  632. dd 2423288032,2423288032
  633. dd 1111375484,1111375484
  634. dd 3300242801,3300242801
  635. dd 2858837708,2858837708
  636. dd 3628615824,3628615824
  637. dd 84083462,84083462
  638. dd 32962295,32962295
  639. dd 302911004,302911004
  640. dd 2741068226,2741068226
  641. dd 1597322602,1597322602
  642. dd 4183250862,4183250862
  643. dd 3501832553,3501832553
  644. dd 2441512471,2441512471
  645. dd 1489093017,1489093017
  646. dd 656219450,656219450
  647. dd 3114180135,3114180135
  648. dd 954327513,954327513
  649. dd 335083755,335083755
  650. dd 3013122091,3013122091
  651. dd 856756514,856756514
  652. dd 3144247762,3144247762
  653. dd 1893325225,1893325225
  654. dd 2307821063,2307821063
  655. dd 2811532339,2811532339
  656. dd 3063651117,3063651117
  657. dd 572399164,572399164
  658. dd 2458355477,2458355477
  659. dd 552200649,552200649
  660. dd 1238290055,1238290055
  661. dd 4283782570,4283782570
  662. dd 2015897680,2015897680
  663. dd 2061492133,2061492133
  664. dd 2408352771,2408352771
  665. dd 4171342169,4171342169
  666. dd 2156497161,2156497161
  667. dd 386731290,386731290
  668. dd 3669999461,3669999461
  669. dd 837215959,837215959
  670. dd 3326231172,3326231172
  671. dd 3093850320,3093850320
  672. dd 3275833730,3275833730
  673. dd 2962856233,2962856233
  674. dd 1999449434,1999449434
  675. dd 286199582,286199582
  676. dd 3417354363,3417354363
  677. dd 4233385128,4233385128
  678. dd 3602627437,3602627437
  679. dd 974525996,974525996
  680. db 99,124,119,123,242,107,111,197
  681. db 48,1,103,43,254,215,171,118
  682. db 202,130,201,125,250,89,71,240
  683. db 173,212,162,175,156,164,114,192
  684. db 183,253,147,38,54,63,247,204
  685. db 52,165,229,241,113,216,49,21
  686. db 4,199,35,195,24,150,5,154
  687. db 7,18,128,226,235,39,178,117
  688. db 9,131,44,26,27,110,90,160
  689. db 82,59,214,179,41,227,47,132
  690. db 83,209,0,237,32,252,177,91
  691. db 106,203,190,57,74,76,88,207
  692. db 208,239,170,251,67,77,51,133
  693. db 69,249,2,127,80,60,159,168
  694. db 81,163,64,143,146,157,56,245
  695. db 188,182,218,33,16,255,243,210
  696. db 205,12,19,236,95,151,68,23
  697. db 196,167,126,61,100,93,25,115
  698. db 96,129,79,220,34,42,144,136
  699. db 70,238,184,20,222,94,11,219
  700. db 224,50,58,10,73,6,36,92
  701. db 194,211,172,98,145,149,228,121
  702. db 231,200,55,109,141,213,78,169
  703. db 108,86,244,234,101,122,174,8
  704. db 186,120,37,46,28,166,180,198
  705. db 232,221,116,31,75,189,139,138
  706. db 112,62,181,102,72,3,246,14
  707. db 97,53,87,185,134,193,29,158
  708. db 225,248,152,17,105,217,142,148
  709. db 155,30,135,233,206,85,40,223
  710. db 140,161,137,13,191,230,66,104
  711. db 65,153,45,15,176,84,187,22
  712. db 99,124,119,123,242,107,111,197
  713. db 48,1,103,43,254,215,171,118
  714. db 202,130,201,125,250,89,71,240
  715. db 173,212,162,175,156,164,114,192
  716. db 183,253,147,38,54,63,247,204
  717. db 52,165,229,241,113,216,49,21
  718. db 4,199,35,195,24,150,5,154
  719. db 7,18,128,226,235,39,178,117
  720. db 9,131,44,26,27,110,90,160
  721. db 82,59,214,179,41,227,47,132
  722. db 83,209,0,237,32,252,177,91
  723. db 106,203,190,57,74,76,88,207
  724. db 208,239,170,251,67,77,51,133
  725. db 69,249,2,127,80,60,159,168
  726. db 81,163,64,143,146,157,56,245
  727. db 188,182,218,33,16,255,243,210
  728. db 205,12,19,236,95,151,68,23
  729. db 196,167,126,61,100,93,25,115
  730. db 96,129,79,220,34,42,144,136
  731. db 70,238,184,20,222,94,11,219
  732. db 224,50,58,10,73,6,36,92
  733. db 194,211,172,98,145,149,228,121
  734. db 231,200,55,109,141,213,78,169
  735. db 108,86,244,234,101,122,174,8
  736. db 186,120,37,46,28,166,180,198
  737. db 232,221,116,31,75,189,139,138
  738. db 112,62,181,102,72,3,246,14
  739. db 97,53,87,185,134,193,29,158
  740. db 225,248,152,17,105,217,142,148
  741. db 155,30,135,233,206,85,40,223
  742. db 140,161,137,13,191,230,66,104
  743. db 65,153,45,15,176,84,187,22
  744. db 99,124,119,123,242,107,111,197
  745. db 48,1,103,43,254,215,171,118
  746. db 202,130,201,125,250,89,71,240
  747. db 173,212,162,175,156,164,114,192
  748. db 183,253,147,38,54,63,247,204
  749. db 52,165,229,241,113,216,49,21
  750. db 4,199,35,195,24,150,5,154
  751. db 7,18,128,226,235,39,178,117
  752. db 9,131,44,26,27,110,90,160
  753. db 82,59,214,179,41,227,47,132
  754. db 83,209,0,237,32,252,177,91
  755. db 106,203,190,57,74,76,88,207
  756. db 208,239,170,251,67,77,51,133
  757. db 69,249,2,127,80,60,159,168
  758. db 81,163,64,143,146,157,56,245
  759. db 188,182,218,33,16,255,243,210
  760. db 205,12,19,236,95,151,68,23
  761. db 196,167,126,61,100,93,25,115
  762. db 96,129,79,220,34,42,144,136
  763. db 70,238,184,20,222,94,11,219
  764. db 224,50,58,10,73,6,36,92
  765. db 194,211,172,98,145,149,228,121
  766. db 231,200,55,109,141,213,78,169
  767. db 108,86,244,234,101,122,174,8
  768. db 186,120,37,46,28,166,180,198
  769. db 232,221,116,31,75,189,139,138
  770. db 112,62,181,102,72,3,246,14
  771. db 97,53,87,185,134,193,29,158
  772. db 225,248,152,17,105,217,142,148
  773. db 155,30,135,233,206,85,40,223
  774. db 140,161,137,13,191,230,66,104
  775. db 65,153,45,15,176,84,187,22
  776. db 99,124,119,123,242,107,111,197
  777. db 48,1,103,43,254,215,171,118
  778. db 202,130,201,125,250,89,71,240
  779. db 173,212,162,175,156,164,114,192
  780. db 183,253,147,38,54,63,247,204
  781. db 52,165,229,241,113,216,49,21
  782. db 4,199,35,195,24,150,5,154
  783. db 7,18,128,226,235,39,178,117
  784. db 9,131,44,26,27,110,90,160
  785. db 82,59,214,179,41,227,47,132
  786. db 83,209,0,237,32,252,177,91
  787. db 106,203,190,57,74,76,88,207
  788. db 208,239,170,251,67,77,51,133
  789. db 69,249,2,127,80,60,159,168
  790. db 81,163,64,143,146,157,56,245
  791. db 188,182,218,33,16,255,243,210
  792. db 205,12,19,236,95,151,68,23
  793. db 196,167,126,61,100,93,25,115
  794. db 96,129,79,220,34,42,144,136
  795. db 70,238,184,20,222,94,11,219
  796. db 224,50,58,10,73,6,36,92
  797. db 194,211,172,98,145,149,228,121
  798. db 231,200,55,109,141,213,78,169
  799. db 108,86,244,234,101,122,174,8
  800. db 186,120,37,46,28,166,180,198
  801. db 232,221,116,31,75,189,139,138
  802. db 112,62,181,102,72,3,246,14
  803. db 97,53,87,185,134,193,29,158
  804. db 225,248,152,17,105,217,142,148
  805. db 155,30,135,233,206,85,40,223
  806. db 140,161,137,13,191,230,66,104
  807. db 65,153,45,15,176,84,187,22
  808. dd 1,2,4,8
  809. dd 16,32,64,128
  810. dd 27,54,0,0
  811. dd 0,0,0,0
  812. global _AES_encrypt
  813. align 16
  814. _AES_encrypt:
  815. L$_AES_encrypt_begin:
  816. push ebp
  817. push ebx
  818. push esi
  819. push edi
  820. mov esi,DWORD [20+esp]
  821. mov edi,DWORD [28+esp]
  822. mov eax,esp
  823. sub esp,36
  824. and esp,-64
  825. lea ebx,[edi-127]
  826. sub ebx,esp
  827. neg ebx
  828. and ebx,960
  829. sub esp,ebx
  830. add esp,4
  831. mov DWORD [28+esp],eax
  832. call L$002pic_point
  833. L$002pic_point:
  834. pop ebp
  835. lea ebp,[(L$AES_Te-L$002pic_point)+ebp]
  836. lea ebx,[764+esp]
  837. sub ebx,ebp
  838. and ebx,768
  839. lea ebp,[2176+ebx*1+ebp]
  840. align 16
  841. L$003x86:
  842. mov DWORD [24+esp],ebp
  843. mov eax,DWORD [esi]
  844. mov ebx,DWORD [4+esi]
  845. mov ecx,DWORD [8+esi]
  846. mov edx,DWORD [12+esi]
  847. call __x86_AES_encrypt_compact
  848. mov esp,DWORD [28+esp]
  849. mov esi,DWORD [24+esp]
  850. mov DWORD [esi],eax
  851. mov DWORD [4+esi],ebx
  852. mov DWORD [8+esi],ecx
  853. mov DWORD [12+esi],edx
  854. pop edi
  855. pop esi
  856. pop ebx
  857. pop ebp
  858. ret
  859. align 16
  860. __x86_AES_decrypt_compact:
  861. mov DWORD [20+esp],edi
  862. xor eax,DWORD [edi]
  863. xor ebx,DWORD [4+edi]
  864. xor ecx,DWORD [8+edi]
  865. xor edx,DWORD [12+edi]
  866. mov esi,DWORD [240+edi]
  867. lea esi,[esi*1+esi-2]
  868. lea esi,[esi*8+edi]
  869. mov DWORD [24+esp],esi
  870. mov edi,DWORD [ebp-128]
  871. mov esi,DWORD [ebp-96]
  872. mov edi,DWORD [ebp-64]
  873. mov esi,DWORD [ebp-32]
  874. mov edi,DWORD [ebp]
  875. mov esi,DWORD [32+ebp]
  876. mov edi,DWORD [64+ebp]
  877. mov esi,DWORD [96+ebp]
  878. align 16
  879. L$004loop:
  880. mov esi,eax
  881. and esi,255
  882. movzx esi,BYTE [esi*1+ebp-128]
  883. movzx edi,dh
  884. movzx edi,BYTE [edi*1+ebp-128]
  885. shl edi,8
  886. xor esi,edi
  887. mov edi,ecx
  888. shr edi,16
  889. and edi,255
  890. movzx edi,BYTE [edi*1+ebp-128]
  891. shl edi,16
  892. xor esi,edi
  893. mov edi,ebx
  894. shr edi,24
  895. movzx edi,BYTE [edi*1+ebp-128]
  896. shl edi,24
  897. xor esi,edi
  898. mov DWORD [4+esp],esi
  899. mov esi,ebx
  900. and esi,255
  901. movzx esi,BYTE [esi*1+ebp-128]
  902. movzx edi,ah
  903. movzx edi,BYTE [edi*1+ebp-128]
  904. shl edi,8
  905. xor esi,edi
  906. mov edi,edx
  907. shr edi,16
  908. and edi,255
  909. movzx edi,BYTE [edi*1+ebp-128]
  910. shl edi,16
  911. xor esi,edi
  912. mov edi,ecx
  913. shr edi,24
  914. movzx edi,BYTE [edi*1+ebp-128]
  915. shl edi,24
  916. xor esi,edi
  917. mov DWORD [8+esp],esi
  918. mov esi,ecx
  919. and esi,255
  920. movzx esi,BYTE [esi*1+ebp-128]
  921. movzx edi,bh
  922. movzx edi,BYTE [edi*1+ebp-128]
  923. shl edi,8
  924. xor esi,edi
  925. mov edi,eax
  926. shr edi,16
  927. and edi,255
  928. movzx edi,BYTE [edi*1+ebp-128]
  929. shl edi,16
  930. xor esi,edi
  931. mov edi,edx
  932. shr edi,24
  933. movzx edi,BYTE [edi*1+ebp-128]
  934. shl edi,24
  935. xor esi,edi
  936. and edx,255
  937. movzx edx,BYTE [edx*1+ebp-128]
  938. movzx ecx,ch
  939. movzx ecx,BYTE [ecx*1+ebp-128]
  940. shl ecx,8
  941. xor edx,ecx
  942. mov ecx,esi
  943. shr ebx,16
  944. and ebx,255
  945. movzx ebx,BYTE [ebx*1+ebp-128]
  946. shl ebx,16
  947. xor edx,ebx
  948. shr eax,24
  949. movzx eax,BYTE [eax*1+ebp-128]
  950. shl eax,24
  951. xor edx,eax
  952. mov edi,2155905152
  953. and edi,ecx
  954. mov esi,edi
  955. shr edi,7
  956. lea eax,[ecx*1+ecx]
  957. sub esi,edi
  958. and eax,4278124286
  959. and esi,454761243
  960. xor eax,esi
  961. mov edi,2155905152
  962. and edi,eax
  963. mov esi,edi
  964. shr edi,7
  965. lea ebx,[eax*1+eax]
  966. sub esi,edi
  967. and ebx,4278124286
  968. and esi,454761243
  969. xor eax,ecx
  970. xor ebx,esi
  971. mov edi,2155905152
  972. and edi,ebx
  973. mov esi,edi
  974. shr edi,7
  975. lea ebp,[ebx*1+ebx]
  976. sub esi,edi
  977. and ebp,4278124286
  978. and esi,454761243
  979. xor ebx,ecx
  980. rol ecx,8
  981. xor ebp,esi
  982. xor ecx,eax
  983. xor eax,ebp
  984. xor ecx,ebx
  985. xor ebx,ebp
  986. rol eax,24
  987. xor ecx,ebp
  988. rol ebx,16
  989. xor ecx,eax
  990. rol ebp,8
  991. xor ecx,ebx
  992. mov eax,DWORD [4+esp]
  993. xor ecx,ebp
  994. mov DWORD [12+esp],ecx
  995. mov edi,2155905152
  996. and edi,edx
  997. mov esi,edi
  998. shr edi,7
  999. lea ebx,[edx*1+edx]
  1000. sub esi,edi
  1001. and ebx,4278124286
  1002. and esi,454761243
  1003. xor ebx,esi
  1004. mov edi,2155905152
  1005. and edi,ebx
  1006. mov esi,edi
  1007. shr edi,7
  1008. lea ecx,[ebx*1+ebx]
  1009. sub esi,edi
  1010. and ecx,4278124286
  1011. and esi,454761243
  1012. xor ebx,edx
  1013. xor ecx,esi
  1014. mov edi,2155905152
  1015. and edi,ecx
  1016. mov esi,edi
  1017. shr edi,7
  1018. lea ebp,[ecx*1+ecx]
  1019. sub esi,edi
  1020. and ebp,4278124286
  1021. and esi,454761243
  1022. xor ecx,edx
  1023. rol edx,8
  1024. xor ebp,esi
  1025. xor edx,ebx
  1026. xor ebx,ebp
  1027. xor edx,ecx
  1028. xor ecx,ebp
  1029. rol ebx,24
  1030. xor edx,ebp
  1031. rol ecx,16
  1032. xor edx,ebx
  1033. rol ebp,8
  1034. xor edx,ecx
  1035. mov ebx,DWORD [8+esp]
  1036. xor edx,ebp
  1037. mov DWORD [16+esp],edx
  1038. mov edi,2155905152
  1039. and edi,eax
  1040. mov esi,edi
  1041. shr edi,7
  1042. lea ecx,[eax*1+eax]
  1043. sub esi,edi
  1044. and ecx,4278124286
  1045. and esi,454761243
  1046. xor ecx,esi
  1047. mov edi,2155905152
  1048. and edi,ecx
  1049. mov esi,edi
  1050. shr edi,7
  1051. lea edx,[ecx*1+ecx]
  1052. sub esi,edi
  1053. and edx,4278124286
  1054. and esi,454761243
  1055. xor ecx,eax
  1056. xor edx,esi
  1057. mov edi,2155905152
  1058. and edi,edx
  1059. mov esi,edi
  1060. shr edi,7
  1061. lea ebp,[edx*1+edx]
  1062. sub esi,edi
  1063. and ebp,4278124286
  1064. and esi,454761243
  1065. xor edx,eax
  1066. rol eax,8
  1067. xor ebp,esi
  1068. xor eax,ecx
  1069. xor ecx,ebp
  1070. xor eax,edx
  1071. xor edx,ebp
  1072. rol ecx,24
  1073. xor eax,ebp
  1074. rol edx,16
  1075. xor eax,ecx
  1076. rol ebp,8
  1077. xor eax,edx
  1078. xor eax,ebp
  1079. mov edi,2155905152
  1080. and edi,ebx
  1081. mov esi,edi
  1082. shr edi,7
  1083. lea ecx,[ebx*1+ebx]
  1084. sub esi,edi
  1085. and ecx,4278124286
  1086. and esi,454761243
  1087. xor ecx,esi
  1088. mov edi,2155905152
  1089. and edi,ecx
  1090. mov esi,edi
  1091. shr edi,7
  1092. lea edx,[ecx*1+ecx]
  1093. sub esi,edi
  1094. and edx,4278124286
  1095. and esi,454761243
  1096. xor ecx,ebx
  1097. xor edx,esi
  1098. mov edi,2155905152
  1099. and edi,edx
  1100. mov esi,edi
  1101. shr edi,7
  1102. lea ebp,[edx*1+edx]
  1103. sub esi,edi
  1104. and ebp,4278124286
  1105. and esi,454761243
  1106. xor edx,ebx
  1107. rol ebx,8
  1108. xor ebp,esi
  1109. xor ebx,ecx
  1110. xor ecx,ebp
  1111. xor ebx,edx
  1112. xor edx,ebp
  1113. rol ecx,24
  1114. xor ebx,ebp
  1115. rol edx,16
  1116. xor ebx,ecx
  1117. rol ebp,8
  1118. xor ebx,edx
  1119. mov ecx,DWORD [12+esp]
  1120. xor ebx,ebp
  1121. mov edx,DWORD [16+esp]
  1122. mov edi,DWORD [20+esp]
  1123. mov ebp,DWORD [28+esp]
  1124. add edi,16
  1125. xor eax,DWORD [edi]
  1126. xor ebx,DWORD [4+edi]
  1127. xor ecx,DWORD [8+edi]
  1128. xor edx,DWORD [12+edi]
  1129. cmp edi,DWORD [24+esp]
  1130. mov DWORD [20+esp],edi
  1131. jb NEAR L$004loop
  1132. mov esi,eax
  1133. and esi,255
  1134. movzx esi,BYTE [esi*1+ebp-128]
  1135. movzx edi,dh
  1136. movzx edi,BYTE [edi*1+ebp-128]
  1137. shl edi,8
  1138. xor esi,edi
  1139. mov edi,ecx
  1140. shr edi,16
  1141. and edi,255
  1142. movzx edi,BYTE [edi*1+ebp-128]
  1143. shl edi,16
  1144. xor esi,edi
  1145. mov edi,ebx
  1146. shr edi,24
  1147. movzx edi,BYTE [edi*1+ebp-128]
  1148. shl edi,24
  1149. xor esi,edi
  1150. mov DWORD [4+esp],esi
  1151. mov esi,ebx
  1152. and esi,255
  1153. movzx esi,BYTE [esi*1+ebp-128]
  1154. movzx edi,ah
  1155. movzx edi,BYTE [edi*1+ebp-128]
  1156. shl edi,8
  1157. xor esi,edi
  1158. mov edi,edx
  1159. shr edi,16
  1160. and edi,255
  1161. movzx edi,BYTE [edi*1+ebp-128]
  1162. shl edi,16
  1163. xor esi,edi
  1164. mov edi,ecx
  1165. shr edi,24
  1166. movzx edi,BYTE [edi*1+ebp-128]
  1167. shl edi,24
  1168. xor esi,edi
  1169. mov DWORD [8+esp],esi
  1170. mov esi,ecx
  1171. and esi,255
  1172. movzx esi,BYTE [esi*1+ebp-128]
  1173. movzx edi,bh
  1174. movzx edi,BYTE [edi*1+ebp-128]
  1175. shl edi,8
  1176. xor esi,edi
  1177. mov edi,eax
  1178. shr edi,16
  1179. and edi,255
  1180. movzx edi,BYTE [edi*1+ebp-128]
  1181. shl edi,16
  1182. xor esi,edi
  1183. mov edi,edx
  1184. shr edi,24
  1185. movzx edi,BYTE [edi*1+ebp-128]
  1186. shl edi,24
  1187. xor esi,edi
  1188. mov edi,DWORD [20+esp]
  1189. and edx,255
  1190. movzx edx,BYTE [edx*1+ebp-128]
  1191. movzx ecx,ch
  1192. movzx ecx,BYTE [ecx*1+ebp-128]
  1193. shl ecx,8
  1194. xor edx,ecx
  1195. mov ecx,esi
  1196. shr ebx,16
  1197. and ebx,255
  1198. movzx ebx,BYTE [ebx*1+ebp-128]
  1199. shl ebx,16
  1200. xor edx,ebx
  1201. mov ebx,DWORD [8+esp]
  1202. shr eax,24
  1203. movzx eax,BYTE [eax*1+ebp-128]
  1204. shl eax,24
  1205. xor edx,eax
  1206. mov eax,DWORD [4+esp]
  1207. xor eax,DWORD [16+edi]
  1208. xor ebx,DWORD [20+edi]
  1209. xor ecx,DWORD [24+edi]
  1210. xor edx,DWORD [28+edi]
  1211. ret
  1212. align 16
  1213. __x86_AES_decrypt:
  1214. mov DWORD [20+esp],edi
  1215. xor eax,DWORD [edi]
  1216. xor ebx,DWORD [4+edi]
  1217. xor ecx,DWORD [8+edi]
  1218. xor edx,DWORD [12+edi]
  1219. mov esi,DWORD [240+edi]
  1220. lea esi,[esi*1+esi-2]
  1221. lea esi,[esi*8+edi]
  1222. mov DWORD [24+esp],esi
  1223. align 16
  1224. L$005loop:
  1225. mov esi,eax
  1226. and esi,255
  1227. mov esi,DWORD [esi*8+ebp]
  1228. movzx edi,dh
  1229. xor esi,DWORD [3+edi*8+ebp]
  1230. mov edi,ecx
  1231. shr edi,16
  1232. and edi,255
  1233. xor esi,DWORD [2+edi*8+ebp]
  1234. mov edi,ebx
  1235. shr edi,24
  1236. xor esi,DWORD [1+edi*8+ebp]
  1237. mov DWORD [4+esp],esi
  1238. mov esi,ebx
  1239. and esi,255
  1240. mov esi,DWORD [esi*8+ebp]
  1241. movzx edi,ah
  1242. xor esi,DWORD [3+edi*8+ebp]
  1243. mov edi,edx
  1244. shr edi,16
  1245. and edi,255
  1246. xor esi,DWORD [2+edi*8+ebp]
  1247. mov edi,ecx
  1248. shr edi,24
  1249. xor esi,DWORD [1+edi*8+ebp]
  1250. mov DWORD [8+esp],esi
  1251. mov esi,ecx
  1252. and esi,255
  1253. mov esi,DWORD [esi*8+ebp]
  1254. movzx edi,bh
  1255. xor esi,DWORD [3+edi*8+ebp]
  1256. mov edi,eax
  1257. shr edi,16
  1258. and edi,255
  1259. xor esi,DWORD [2+edi*8+ebp]
  1260. mov edi,edx
  1261. shr edi,24
  1262. xor esi,DWORD [1+edi*8+ebp]
  1263. mov edi,DWORD [20+esp]
  1264. and edx,255
  1265. mov edx,DWORD [edx*8+ebp]
  1266. movzx ecx,ch
  1267. xor edx,DWORD [3+ecx*8+ebp]
  1268. mov ecx,esi
  1269. shr ebx,16
  1270. and ebx,255
  1271. xor edx,DWORD [2+ebx*8+ebp]
  1272. mov ebx,DWORD [8+esp]
  1273. shr eax,24
  1274. xor edx,DWORD [1+eax*8+ebp]
  1275. mov eax,DWORD [4+esp]
  1276. add edi,16
  1277. xor eax,DWORD [edi]
  1278. xor ebx,DWORD [4+edi]
  1279. xor ecx,DWORD [8+edi]
  1280. xor edx,DWORD [12+edi]
  1281. cmp edi,DWORD [24+esp]
  1282. mov DWORD [20+esp],edi
  1283. jb NEAR L$005loop
  1284. lea ebp,[2176+ebp]
  1285. mov edi,DWORD [ebp-128]
  1286. mov esi,DWORD [ebp-96]
  1287. mov edi,DWORD [ebp-64]
  1288. mov esi,DWORD [ebp-32]
  1289. mov edi,DWORD [ebp]
  1290. mov esi,DWORD [32+ebp]
  1291. mov edi,DWORD [64+ebp]
  1292. mov esi,DWORD [96+ebp]
  1293. lea ebp,[ebp-128]
  1294. mov esi,eax
  1295. and esi,255
  1296. movzx esi,BYTE [esi*1+ebp]
  1297. movzx edi,dh
  1298. movzx edi,BYTE [edi*1+ebp]
  1299. shl edi,8
  1300. xor esi,edi
  1301. mov edi,ecx
  1302. shr edi,16
  1303. and edi,255
  1304. movzx edi,BYTE [edi*1+ebp]
  1305. shl edi,16
  1306. xor esi,edi
  1307. mov edi,ebx
  1308. shr edi,24
  1309. movzx edi,BYTE [edi*1+ebp]
  1310. shl edi,24
  1311. xor esi,edi
  1312. mov DWORD [4+esp],esi
  1313. mov esi,ebx
  1314. and esi,255
  1315. movzx esi,BYTE [esi*1+ebp]
  1316. movzx edi,ah
  1317. movzx edi,BYTE [edi*1+ebp]
  1318. shl edi,8
  1319. xor esi,edi
  1320. mov edi,edx
  1321. shr edi,16
  1322. and edi,255
  1323. movzx edi,BYTE [edi*1+ebp]
  1324. shl edi,16
  1325. xor esi,edi
  1326. mov edi,ecx
  1327. shr edi,24
  1328. movzx edi,BYTE [edi*1+ebp]
  1329. shl edi,24
  1330. xor esi,edi
  1331. mov DWORD [8+esp],esi
  1332. mov esi,ecx
  1333. and esi,255
  1334. movzx esi,BYTE [esi*1+ebp]
  1335. movzx edi,bh
  1336. movzx edi,BYTE [edi*1+ebp]
  1337. shl edi,8
  1338. xor esi,edi
  1339. mov edi,eax
  1340. shr edi,16
  1341. and edi,255
  1342. movzx edi,BYTE [edi*1+ebp]
  1343. shl edi,16
  1344. xor esi,edi
  1345. mov edi,edx
  1346. shr edi,24
  1347. movzx edi,BYTE [edi*1+ebp]
  1348. shl edi,24
  1349. xor esi,edi
  1350. mov edi,DWORD [20+esp]
  1351. and edx,255
  1352. movzx edx,BYTE [edx*1+ebp]
  1353. movzx ecx,ch
  1354. movzx ecx,BYTE [ecx*1+ebp]
  1355. shl ecx,8
  1356. xor edx,ecx
  1357. mov ecx,esi
  1358. shr ebx,16
  1359. and ebx,255
  1360. movzx ebx,BYTE [ebx*1+ebp]
  1361. shl ebx,16
  1362. xor edx,ebx
  1363. mov ebx,DWORD [8+esp]
  1364. shr eax,24
  1365. movzx eax,BYTE [eax*1+ebp]
  1366. shl eax,24
  1367. xor edx,eax
  1368. mov eax,DWORD [4+esp]
  1369. lea ebp,[ebp-2048]
  1370. add edi,16
  1371. xor eax,DWORD [edi]
  1372. xor ebx,DWORD [4+edi]
  1373. xor ecx,DWORD [8+edi]
  1374. xor edx,DWORD [12+edi]
  1375. ret
  1376. align 64
  1377. L$AES_Td:
  1378. dd 1353184337,1353184337
  1379. dd 1399144830,1399144830
  1380. dd 3282310938,3282310938
  1381. dd 2522752826,2522752826
  1382. dd 3412831035,3412831035
  1383. dd 4047871263,4047871263
  1384. dd 2874735276,2874735276
  1385. dd 2466505547,2466505547
  1386. dd 1442459680,1442459680
  1387. dd 4134368941,4134368941
  1388. dd 2440481928,2440481928
  1389. dd 625738485,625738485
  1390. dd 4242007375,4242007375
  1391. dd 3620416197,3620416197
  1392. dd 2151953702,2151953702
  1393. dd 2409849525,2409849525
  1394. dd 1230680542,1230680542
  1395. dd 1729870373,1729870373
  1396. dd 2551114309,2551114309
  1397. dd 3787521629,3787521629
  1398. dd 41234371,41234371
  1399. dd 317738113,317738113
  1400. dd 2744600205,2744600205
  1401. dd 3338261355,3338261355
  1402. dd 3881799427,3881799427
  1403. dd 2510066197,2510066197
  1404. dd 3950669247,3950669247
  1405. dd 3663286933,3663286933
  1406. dd 763608788,763608788
  1407. dd 3542185048,3542185048
  1408. dd 694804553,694804553
  1409. dd 1154009486,1154009486
  1410. dd 1787413109,1787413109
  1411. dd 2021232372,2021232372
  1412. dd 1799248025,1799248025
  1413. dd 3715217703,3715217703
  1414. dd 3058688446,3058688446
  1415. dd 397248752,397248752
  1416. dd 1722556617,1722556617
  1417. dd 3023752829,3023752829
  1418. dd 407560035,407560035
  1419. dd 2184256229,2184256229
  1420. dd 1613975959,1613975959
  1421. dd 1165972322,1165972322
  1422. dd 3765920945,3765920945
  1423. dd 2226023355,2226023355
  1424. dd 480281086,480281086
  1425. dd 2485848313,2485848313
  1426. dd 1483229296,1483229296
  1427. dd 436028815,436028815
  1428. dd 2272059028,2272059028
  1429. dd 3086515026,3086515026
  1430. dd 601060267,601060267
  1431. dd 3791801202,3791801202
  1432. dd 1468997603,1468997603
  1433. dd 715871590,715871590
  1434. dd 120122290,120122290
  1435. dd 63092015,63092015
  1436. dd 2591802758,2591802758
  1437. dd 2768779219,2768779219
  1438. dd 4068943920,4068943920
  1439. dd 2997206819,2997206819
  1440. dd 3127509762,3127509762
  1441. dd 1552029421,1552029421
  1442. dd 723308426,723308426
  1443. dd 2461301159,2461301159
  1444. dd 4042393587,4042393587
  1445. dd 2715969870,2715969870
  1446. dd 3455375973,3455375973
  1447. dd 3586000134,3586000134
  1448. dd 526529745,526529745
  1449. dd 2331944644,2331944644
  1450. dd 2639474228,2639474228
  1451. dd 2689987490,2689987490
  1452. dd 853641733,853641733
  1453. dd 1978398372,1978398372
  1454. dd 971801355,971801355
  1455. dd 2867814464,2867814464
  1456. dd 111112542,111112542
  1457. dd 1360031421,1360031421
  1458. dd 4186579262,4186579262
  1459. dd 1023860118,1023860118
  1460. dd 2919579357,2919579357
  1461. dd 1186850381,1186850381
  1462. dd 3045938321,3045938321
  1463. dd 90031217,90031217
  1464. dd 1876166148,1876166148
  1465. dd 4279586912,4279586912
  1466. dd 620468249,620468249
  1467. dd 2548678102,2548678102
  1468. dd 3426959497,3426959497
  1469. dd 2006899047,2006899047
  1470. dd 3175278768,3175278768
  1471. dd 2290845959,2290845959
  1472. dd 945494503,945494503
  1473. dd 3689859193,3689859193
  1474. dd 1191869601,1191869601
  1475. dd 3910091388,3910091388
  1476. dd 3374220536,3374220536
  1477. dd 0,0
  1478. dd 2206629897,2206629897
  1479. dd 1223502642,1223502642
  1480. dd 2893025566,2893025566
  1481. dd 1316117100,1316117100
  1482. dd 4227796733,4227796733
  1483. dd 1446544655,1446544655
  1484. dd 517320253,517320253
  1485. dd 658058550,658058550
  1486. dd 1691946762,1691946762
  1487. dd 564550760,564550760
  1488. dd 3511966619,3511966619
  1489. dd 976107044,976107044
  1490. dd 2976320012,2976320012
  1491. dd 266819475,266819475
  1492. dd 3533106868,3533106868
  1493. dd 2660342555,2660342555
  1494. dd 1338359936,1338359936
  1495. dd 2720062561,2720062561
  1496. dd 1766553434,1766553434
  1497. dd 370807324,370807324
  1498. dd 179999714,179999714
  1499. dd 3844776128,3844776128
  1500. dd 1138762300,1138762300
  1501. dd 488053522,488053522
  1502. dd 185403662,185403662
  1503. dd 2915535858,2915535858
  1504. dd 3114841645,3114841645
  1505. dd 3366526484,3366526484
  1506. dd 2233069911,2233069911
  1507. dd 1275557295,1275557295
  1508. dd 3151862254,3151862254
  1509. dd 4250959779,4250959779
  1510. dd 2670068215,2670068215
  1511. dd 3170202204,3170202204
  1512. dd 3309004356,3309004356
  1513. dd 880737115,880737115
  1514. dd 1982415755,1982415755
  1515. dd 3703972811,3703972811
  1516. dd 1761406390,1761406390
  1517. dd 1676797112,1676797112
  1518. dd 3403428311,3403428311
  1519. dd 277177154,277177154
  1520. dd 1076008723,1076008723
  1521. dd 538035844,538035844
  1522. dd 2099530373,2099530373
  1523. dd 4164795346,4164795346
  1524. dd 288553390,288553390
  1525. dd 1839278535,1839278535
  1526. dd 1261411869,1261411869
  1527. dd 4080055004,4080055004
  1528. dd 3964831245,3964831245
  1529. dd 3504587127,3504587127
  1530. dd 1813426987,1813426987
  1531. dd 2579067049,2579067049
  1532. dd 4199060497,4199060497
  1533. dd 577038663,577038663
  1534. dd 3297574056,3297574056
  1535. dd 440397984,440397984
  1536. dd 3626794326,3626794326
  1537. dd 4019204898,4019204898
  1538. dd 3343796615,3343796615
  1539. dd 3251714265,3251714265
  1540. dd 4272081548,4272081548
  1541. dd 906744984,906744984
  1542. dd 3481400742,3481400742
  1543. dd 685669029,685669029
  1544. dd 646887386,646887386
  1545. dd 2764025151,2764025151
  1546. dd 3835509292,3835509292
  1547. dd 227702864,227702864
  1548. dd 2613862250,2613862250
  1549. dd 1648787028,1648787028
  1550. dd 3256061430,3256061430
  1551. dd 3904428176,3904428176
  1552. dd 1593260334,1593260334
  1553. dd 4121936770,4121936770
  1554. dd 3196083615,3196083615
  1555. dd 2090061929,2090061929
  1556. dd 2838353263,2838353263
  1557. dd 3004310991,3004310991
  1558. dd 999926984,999926984
  1559. dd 2809993232,2809993232
  1560. dd 1852021992,1852021992
  1561. dd 2075868123,2075868123
  1562. dd 158869197,158869197
  1563. dd 4095236462,4095236462
  1564. dd 28809964,28809964
  1565. dd 2828685187,2828685187
  1566. dd 1701746150,1701746150
  1567. dd 2129067946,2129067946
  1568. dd 147831841,147831841
  1569. dd 3873969647,3873969647
  1570. dd 3650873274,3650873274
  1571. dd 3459673930,3459673930
  1572. dd 3557400554,3557400554
  1573. dd 3598495785,3598495785
  1574. dd 2947720241,2947720241
  1575. dd 824393514,824393514
  1576. dd 815048134,815048134
  1577. dd 3227951669,3227951669
  1578. dd 935087732,935087732
  1579. dd 2798289660,2798289660
  1580. dd 2966458592,2966458592
  1581. dd 366520115,366520115
  1582. dd 1251476721,1251476721
  1583. dd 4158319681,4158319681
  1584. dd 240176511,240176511
  1585. dd 804688151,804688151
  1586. dd 2379631990,2379631990
  1587. dd 1303441219,1303441219
  1588. dd 1414376140,1414376140
  1589. dd 3741619940,3741619940
  1590. dd 3820343710,3820343710
  1591. dd 461924940,461924940
  1592. dd 3089050817,3089050817
  1593. dd 2136040774,2136040774
  1594. dd 82468509,82468509
  1595. dd 1563790337,1563790337
  1596. dd 1937016826,1937016826
  1597. dd 776014843,776014843
  1598. dd 1511876531,1511876531
  1599. dd 1389550482,1389550482
  1600. dd 861278441,861278441
  1601. dd 323475053,323475053
  1602. dd 2355222426,2355222426
  1603. dd 2047648055,2047648055
  1604. dd 2383738969,2383738969
  1605. dd 2302415851,2302415851
  1606. dd 3995576782,3995576782
  1607. dd 902390199,902390199
  1608. dd 3991215329,3991215329
  1609. dd 1018251130,1018251130
  1610. dd 1507840668,1507840668
  1611. dd 1064563285,1064563285
  1612. dd 2043548696,2043548696
  1613. dd 3208103795,3208103795
  1614. dd 3939366739,3939366739
  1615. dd 1537932639,1537932639
  1616. dd 342834655,342834655
  1617. dd 2262516856,2262516856
  1618. dd 2180231114,2180231114
  1619. dd 1053059257,1053059257
  1620. dd 741614648,741614648
  1621. dd 1598071746,1598071746
  1622. dd 1925389590,1925389590
  1623. dd 203809468,203809468
  1624. dd 2336832552,2336832552
  1625. dd 1100287487,1100287487
  1626. dd 1895934009,1895934009
  1627. dd 3736275976,3736275976
  1628. dd 2632234200,2632234200
  1629. dd 2428589668,2428589668
  1630. dd 1636092795,1636092795
  1631. dd 1890988757,1890988757
  1632. dd 1952214088,1952214088
  1633. dd 1113045200,1113045200
  1634. db 82,9,106,213,48,54,165,56
  1635. db 191,64,163,158,129,243,215,251
  1636. db 124,227,57,130,155,47,255,135
  1637. db 52,142,67,68,196,222,233,203
  1638. db 84,123,148,50,166,194,35,61
  1639. db 238,76,149,11,66,250,195,78
  1640. db 8,46,161,102,40,217,36,178
  1641. db 118,91,162,73,109,139,209,37
  1642. db 114,248,246,100,134,104,152,22
  1643. db 212,164,92,204,93,101,182,146
  1644. db 108,112,72,80,253,237,185,218
  1645. db 94,21,70,87,167,141,157,132
  1646. db 144,216,171,0,140,188,211,10
  1647. db 247,228,88,5,184,179,69,6
  1648. db 208,44,30,143,202,63,15,2
  1649. db 193,175,189,3,1,19,138,107
  1650. db 58,145,17,65,79,103,220,234
  1651. db 151,242,207,206,240,180,230,115
  1652. db 150,172,116,34,231,173,53,133
  1653. db 226,249,55,232,28,117,223,110
  1654. db 71,241,26,113,29,41,197,137
  1655. db 111,183,98,14,170,24,190,27
  1656. db 252,86,62,75,198,210,121,32
  1657. db 154,219,192,254,120,205,90,244
  1658. db 31,221,168,51,136,7,199,49
  1659. db 177,18,16,89,39,128,236,95
  1660. db 96,81,127,169,25,181,74,13
  1661. db 45,229,122,159,147,201,156,239
  1662. db 160,224,59,77,174,42,245,176
  1663. db 200,235,187,60,131,83,153,97
  1664. db 23,43,4,126,186,119,214,38
  1665. db 225,105,20,99,85,33,12,125
  1666. db 82,9,106,213,48,54,165,56
  1667. db 191,64,163,158,129,243,215,251
  1668. db 124,227,57,130,155,47,255,135
  1669. db 52,142,67,68,196,222,233,203
  1670. db 84,123,148,50,166,194,35,61
  1671. db 238,76,149,11,66,250,195,78
  1672. db 8,46,161,102,40,217,36,178
  1673. db 118,91,162,73,109,139,209,37
  1674. db 114,248,246,100,134,104,152,22
  1675. db 212,164,92,204,93,101,182,146
  1676. db 108,112,72,80,253,237,185,218
  1677. db 94,21,70,87,167,141,157,132
  1678. db 144,216,171,0,140,188,211,10
  1679. db 247,228,88,5,184,179,69,6
  1680. db 208,44,30,143,202,63,15,2
  1681. db 193,175,189,3,1,19,138,107
  1682. db 58,145,17,65,79,103,220,234
  1683. db 151,242,207,206,240,180,230,115
  1684. db 150,172,116,34,231,173,53,133
  1685. db 226,249,55,232,28,117,223,110
  1686. db 71,241,26,113,29,41,197,137
  1687. db 111,183,98,14,170,24,190,27
  1688. db 252,86,62,75,198,210,121,32
  1689. db 154,219,192,254,120,205,90,244
  1690. db 31,221,168,51,136,7,199,49
  1691. db 177,18,16,89,39,128,236,95
  1692. db 96,81,127,169,25,181,74,13
  1693. db 45,229,122,159,147,201,156,239
  1694. db 160,224,59,77,174,42,245,176
  1695. db 200,235,187,60,131,83,153,97
  1696. db 23,43,4,126,186,119,214,38
  1697. db 225,105,20,99,85,33,12,125
  1698. db 82,9,106,213,48,54,165,56
  1699. db 191,64,163,158,129,243,215,251
  1700. db 124,227,57,130,155,47,255,135
  1701. db 52,142,67,68,196,222,233,203
  1702. db 84,123,148,50,166,194,35,61
  1703. db 238,76,149,11,66,250,195,78
  1704. db 8,46,161,102,40,217,36,178
  1705. db 118,91,162,73,109,139,209,37
  1706. db 114,248,246,100,134,104,152,22
  1707. db 212,164,92,204,93,101,182,146
  1708. db 108,112,72,80,253,237,185,218
  1709. db 94,21,70,87,167,141,157,132
  1710. db 144,216,171,0,140,188,211,10
  1711. db 247,228,88,5,184,179,69,6
  1712. db 208,44,30,143,202,63,15,2
  1713. db 193,175,189,3,1,19,138,107
  1714. db 58,145,17,65,79,103,220,234
  1715. db 151,242,207,206,240,180,230,115
  1716. db 150,172,116,34,231,173,53,133
  1717. db 226,249,55,232,28,117,223,110
  1718. db 71,241,26,113,29,41,197,137
  1719. db 111,183,98,14,170,24,190,27
  1720. db 252,86,62,75,198,210,121,32
  1721. db 154,219,192,254,120,205,90,244
  1722. db 31,221,168,51,136,7,199,49
  1723. db 177,18,16,89,39,128,236,95
  1724. db 96,81,127,169,25,181,74,13
  1725. db 45,229,122,159,147,201,156,239
  1726. db 160,224,59,77,174,42,245,176
  1727. db 200,235,187,60,131,83,153,97
  1728. db 23,43,4,126,186,119,214,38
  1729. db 225,105,20,99,85,33,12,125
  1730. db 82,9,106,213,48,54,165,56
  1731. db 191,64,163,158,129,243,215,251
  1732. db 124,227,57,130,155,47,255,135
  1733. db 52,142,67,68,196,222,233,203
  1734. db 84,123,148,50,166,194,35,61
  1735. db 238,76,149,11,66,250,195,78
  1736. db 8,46,161,102,40,217,36,178
  1737. db 118,91,162,73,109,139,209,37
  1738. db 114,248,246,100,134,104,152,22
  1739. db 212,164,92,204,93,101,182,146
  1740. db 108,112,72,80,253,237,185,218
  1741. db 94,21,70,87,167,141,157,132
  1742. db 144,216,171,0,140,188,211,10
  1743. db 247,228,88,5,184,179,69,6
  1744. db 208,44,30,143,202,63,15,2
  1745. db 193,175,189,3,1,19,138,107
  1746. db 58,145,17,65,79,103,220,234
  1747. db 151,242,207,206,240,180,230,115
  1748. db 150,172,116,34,231,173,53,133
  1749. db 226,249,55,232,28,117,223,110
  1750. db 71,241,26,113,29,41,197,137
  1751. db 111,183,98,14,170,24,190,27
  1752. db 252,86,62,75,198,210,121,32
  1753. db 154,219,192,254,120,205,90,244
  1754. db 31,221,168,51,136,7,199,49
  1755. db 177,18,16,89,39,128,236,95
  1756. db 96,81,127,169,25,181,74,13
  1757. db 45,229,122,159,147,201,156,239
  1758. db 160,224,59,77,174,42,245,176
  1759. db 200,235,187,60,131,83,153,97
  1760. db 23,43,4,126,186,119,214,38
  1761. db 225,105,20,99,85,33,12,125
  1762. global _AES_decrypt
  1763. align 16
  1764. _AES_decrypt:
  1765. L$_AES_decrypt_begin:
  1766. push ebp
  1767. push ebx
  1768. push esi
  1769. push edi
  1770. mov esi,DWORD [20+esp]
  1771. mov edi,DWORD [28+esp]
  1772. mov eax,esp
  1773. sub esp,36
  1774. and esp,-64
  1775. lea ebx,[edi-127]
  1776. sub ebx,esp
  1777. neg ebx
  1778. and ebx,960
  1779. sub esp,ebx
  1780. add esp,4
  1781. mov DWORD [28+esp],eax
  1782. call L$006pic_point
  1783. L$006pic_point:
  1784. pop ebp
  1785. lea ebp,[(L$AES_Td-L$006pic_point)+ebp]
  1786. lea ebx,[764+esp]
  1787. sub ebx,ebp
  1788. and ebx,768
  1789. lea ebp,[2176+ebx*1+ebp]
  1790. align 16
  1791. L$007x86:
  1792. mov DWORD [24+esp],ebp
  1793. mov eax,DWORD [esi]
  1794. mov ebx,DWORD [4+esi]
  1795. mov ecx,DWORD [8+esi]
  1796. mov edx,DWORD [12+esi]
  1797. call __x86_AES_decrypt_compact
  1798. mov esp,DWORD [28+esp]
  1799. mov esi,DWORD [24+esp]
  1800. mov DWORD [esi],eax
  1801. mov DWORD [4+esi],ebx
  1802. mov DWORD [8+esi],ecx
  1803. mov DWORD [12+esi],edx
  1804. pop edi
  1805. pop esi
  1806. pop ebx
  1807. pop ebp
  1808. ret
  1809. global _AES_cbc_encrypt
  1810. align 16
  1811. _AES_cbc_encrypt:
  1812. L$_AES_cbc_encrypt_begin:
  1813. push ebp
  1814. push ebx
  1815. push esi
  1816. push edi
  1817. mov ecx,DWORD [28+esp]
  1818. cmp ecx,0
  1819. je NEAR L$008drop_out
  1820. call L$009pic_point
  1821. L$009pic_point:
  1822. pop ebp
  1823. cmp DWORD [40+esp],0
  1824. lea ebp,[(L$AES_Te-L$009pic_point)+ebp]
  1825. jne NEAR L$010picked_te
  1826. lea ebp,[(L$AES_Td-L$AES_Te)+ebp]
  1827. L$010picked_te:
  1828. pushfd
  1829. cld
  1830. cmp ecx,512
  1831. jb NEAR L$011slow_way
  1832. test ecx,15
  1833. jnz NEAR L$011slow_way
  1834. lea esi,[esp-324]
  1835. and esi,-64
  1836. mov eax,ebp
  1837. lea ebx,[2304+ebp]
  1838. mov edx,esi
  1839. and eax,4095
  1840. and ebx,4095
  1841. and edx,4095
  1842. cmp edx,ebx
  1843. jb NEAR L$012tbl_break_out
  1844. sub edx,ebx
  1845. sub esi,edx
  1846. jmp NEAR L$013tbl_ok
  1847. align 4
  1848. L$012tbl_break_out:
  1849. sub edx,eax
  1850. and edx,4095
  1851. add edx,384
  1852. sub esi,edx
  1853. align 4
  1854. L$013tbl_ok:
  1855. lea edx,[24+esp]
  1856. xchg esp,esi
  1857. add esp,4
  1858. mov DWORD [24+esp],ebp
  1859. mov DWORD [28+esp],esi
  1860. mov eax,DWORD [edx]
  1861. mov ebx,DWORD [4+edx]
  1862. mov edi,DWORD [12+edx]
  1863. mov esi,DWORD [16+edx]
  1864. mov edx,DWORD [20+edx]
  1865. mov DWORD [32+esp],eax
  1866. mov DWORD [36+esp],ebx
  1867. mov DWORD [40+esp],ecx
  1868. mov DWORD [44+esp],edi
  1869. mov DWORD [48+esp],esi
  1870. mov DWORD [316+esp],0
  1871. mov ebx,edi
  1872. mov ecx,61
  1873. sub ebx,ebp
  1874. mov esi,edi
  1875. and ebx,4095
  1876. lea edi,[76+esp]
  1877. cmp ebx,2304
  1878. jb NEAR L$014do_copy
  1879. cmp ebx,3852
  1880. jb NEAR L$015skip_copy
  1881. align 4
  1882. L$014do_copy:
  1883. mov DWORD [44+esp],edi
  1884. dd 2784229001
  1885. L$015skip_copy:
  1886. mov edi,16
  1887. align 4
  1888. L$016prefetch_tbl:
  1889. mov eax,DWORD [ebp]
  1890. mov ebx,DWORD [32+ebp]
  1891. mov ecx,DWORD [64+ebp]
  1892. mov esi,DWORD [96+ebp]
  1893. lea ebp,[128+ebp]
  1894. sub edi,1
  1895. jnz NEAR L$016prefetch_tbl
  1896. sub ebp,2048
  1897. mov esi,DWORD [32+esp]
  1898. mov edi,DWORD [48+esp]
  1899. cmp edx,0
  1900. je NEAR L$017fast_decrypt
  1901. mov eax,DWORD [edi]
  1902. mov ebx,DWORD [4+edi]
  1903. align 16
  1904. L$018fast_enc_loop:
  1905. mov ecx,DWORD [8+edi]
  1906. mov edx,DWORD [12+edi]
  1907. xor eax,DWORD [esi]
  1908. xor ebx,DWORD [4+esi]
  1909. xor ecx,DWORD [8+esi]
  1910. xor edx,DWORD [12+esi]
  1911. mov edi,DWORD [44+esp]
  1912. call __x86_AES_encrypt
  1913. mov esi,DWORD [32+esp]
  1914. mov edi,DWORD [36+esp]
  1915. mov DWORD [edi],eax
  1916. mov DWORD [4+edi],ebx
  1917. mov DWORD [8+edi],ecx
  1918. mov DWORD [12+edi],edx
  1919. lea esi,[16+esi]
  1920. mov ecx,DWORD [40+esp]
  1921. mov DWORD [32+esp],esi
  1922. lea edx,[16+edi]
  1923. mov DWORD [36+esp],edx
  1924. sub ecx,16
  1925. mov DWORD [40+esp],ecx
  1926. jnz NEAR L$018fast_enc_loop
  1927. mov esi,DWORD [48+esp]
  1928. mov ecx,DWORD [8+edi]
  1929. mov edx,DWORD [12+edi]
  1930. mov DWORD [esi],eax
  1931. mov DWORD [4+esi],ebx
  1932. mov DWORD [8+esi],ecx
  1933. mov DWORD [12+esi],edx
  1934. cmp DWORD [316+esp],0
  1935. mov edi,DWORD [44+esp]
  1936. je NEAR L$019skip_ezero
  1937. mov ecx,60
  1938. xor eax,eax
  1939. align 4
  1940. dd 2884892297
  1941. L$019skip_ezero:
  1942. mov esp,DWORD [28+esp]
  1943. popfd
  1944. L$008drop_out:
  1945. pop edi
  1946. pop esi
  1947. pop ebx
  1948. pop ebp
  1949. ret
  1950. pushfd
  1951. align 16
  1952. L$017fast_decrypt:
  1953. cmp esi,DWORD [36+esp]
  1954. je NEAR L$020fast_dec_in_place
  1955. mov DWORD [52+esp],edi
  1956. align 4
  1957. align 16
  1958. L$021fast_dec_loop:
  1959. mov eax,DWORD [esi]
  1960. mov ebx,DWORD [4+esi]
  1961. mov ecx,DWORD [8+esi]
  1962. mov edx,DWORD [12+esi]
  1963. mov edi,DWORD [44+esp]
  1964. call __x86_AES_decrypt
  1965. mov edi,DWORD [52+esp]
  1966. mov esi,DWORD [40+esp]
  1967. xor eax,DWORD [edi]
  1968. xor ebx,DWORD [4+edi]
  1969. xor ecx,DWORD [8+edi]
  1970. xor edx,DWORD [12+edi]
  1971. mov edi,DWORD [36+esp]
  1972. mov esi,DWORD [32+esp]
  1973. mov DWORD [edi],eax
  1974. mov DWORD [4+edi],ebx
  1975. mov DWORD [8+edi],ecx
  1976. mov DWORD [12+edi],edx
  1977. mov ecx,DWORD [40+esp]
  1978. mov DWORD [52+esp],esi
  1979. lea esi,[16+esi]
  1980. mov DWORD [32+esp],esi
  1981. lea edi,[16+edi]
  1982. mov DWORD [36+esp],edi
  1983. sub ecx,16
  1984. mov DWORD [40+esp],ecx
  1985. jnz NEAR L$021fast_dec_loop
  1986. mov edi,DWORD [52+esp]
  1987. mov esi,DWORD [48+esp]
  1988. mov eax,DWORD [edi]
  1989. mov ebx,DWORD [4+edi]
  1990. mov ecx,DWORD [8+edi]
  1991. mov edx,DWORD [12+edi]
  1992. mov DWORD [esi],eax
  1993. mov DWORD [4+esi],ebx
  1994. mov DWORD [8+esi],ecx
  1995. mov DWORD [12+esi],edx
  1996. jmp NEAR L$022fast_dec_out
  1997. align 16
  1998. L$020fast_dec_in_place:
  1999. L$023fast_dec_in_place_loop:
  2000. mov eax,DWORD [esi]
  2001. mov ebx,DWORD [4+esi]
  2002. mov ecx,DWORD [8+esi]
  2003. mov edx,DWORD [12+esi]
  2004. lea edi,[60+esp]
  2005. mov DWORD [edi],eax
  2006. mov DWORD [4+edi],ebx
  2007. mov DWORD [8+edi],ecx
  2008. mov DWORD [12+edi],edx
  2009. mov edi,DWORD [44+esp]
  2010. call __x86_AES_decrypt
  2011. mov edi,DWORD [48+esp]
  2012. mov esi,DWORD [36+esp]
  2013. xor eax,DWORD [edi]
  2014. xor ebx,DWORD [4+edi]
  2015. xor ecx,DWORD [8+edi]
  2016. xor edx,DWORD [12+edi]
  2017. mov DWORD [esi],eax
  2018. mov DWORD [4+esi],ebx
  2019. mov DWORD [8+esi],ecx
  2020. mov DWORD [12+esi],edx
  2021. lea esi,[16+esi]
  2022. mov DWORD [36+esp],esi
  2023. lea esi,[60+esp]
  2024. mov eax,DWORD [esi]
  2025. mov ebx,DWORD [4+esi]
  2026. mov ecx,DWORD [8+esi]
  2027. mov edx,DWORD [12+esi]
  2028. mov DWORD [edi],eax
  2029. mov DWORD [4+edi],ebx
  2030. mov DWORD [8+edi],ecx
  2031. mov DWORD [12+edi],edx
  2032. mov esi,DWORD [32+esp]
  2033. mov ecx,DWORD [40+esp]
  2034. lea esi,[16+esi]
  2035. mov DWORD [32+esp],esi
  2036. sub ecx,16
  2037. mov DWORD [40+esp],ecx
  2038. jnz NEAR L$023fast_dec_in_place_loop
  2039. align 4
  2040. L$022fast_dec_out:
  2041. cmp DWORD [316+esp],0
  2042. mov edi,DWORD [44+esp]
  2043. je NEAR L$024skip_dzero
  2044. mov ecx,60
  2045. xor eax,eax
  2046. align 4
  2047. dd 2884892297
  2048. L$024skip_dzero:
  2049. mov esp,DWORD [28+esp]
  2050. popfd
  2051. pop edi
  2052. pop esi
  2053. pop ebx
  2054. pop ebp
  2055. ret
  2056. pushfd
  2057. align 16
  2058. L$011slow_way:
  2059. mov edi,DWORD [36+esp]
  2060. lea esi,[esp-80]
  2061. and esi,-64
  2062. lea ebx,[edi-143]
  2063. sub ebx,esi
  2064. neg ebx
  2065. and ebx,960
  2066. sub esi,ebx
  2067. lea ebx,[768+esi]
  2068. sub ebx,ebp
  2069. and ebx,768
  2070. lea ebp,[2176+ebx*1+ebp]
  2071. lea edx,[24+esp]
  2072. xchg esp,esi
  2073. add esp,4
  2074. mov DWORD [24+esp],ebp
  2075. mov DWORD [28+esp],esi
  2076. mov DWORD [52+esp],eax
  2077. mov eax,DWORD [edx]
  2078. mov ebx,DWORD [4+edx]
  2079. mov esi,DWORD [16+edx]
  2080. mov edx,DWORD [20+edx]
  2081. mov DWORD [32+esp],eax
  2082. mov DWORD [36+esp],ebx
  2083. mov DWORD [40+esp],ecx
  2084. mov DWORD [44+esp],edi
  2085. mov DWORD [48+esp],esi
  2086. mov edi,esi
  2087. mov esi,eax
  2088. cmp edx,0
  2089. je NEAR L$025slow_decrypt
  2090. cmp ecx,16
  2091. mov edx,ebx
  2092. jb NEAR L$026slow_enc_tail
  2093. align 16
  2094. L$027slow_enc_x86:
  2095. mov eax,DWORD [edi]
  2096. mov ebx,DWORD [4+edi]
  2097. align 4
  2098. L$028slow_enc_loop_x86:
  2099. mov ecx,DWORD [8+edi]
  2100. mov edx,DWORD [12+edi]
  2101. xor eax,DWORD [esi]
  2102. xor ebx,DWORD [4+esi]
  2103. xor ecx,DWORD [8+esi]
  2104. xor edx,DWORD [12+esi]
  2105. mov edi,DWORD [44+esp]
  2106. call __x86_AES_encrypt_compact
  2107. mov esi,DWORD [32+esp]
  2108. mov edi,DWORD [36+esp]
  2109. mov DWORD [edi],eax
  2110. mov DWORD [4+edi],ebx
  2111. mov DWORD [8+edi],ecx
  2112. mov DWORD [12+edi],edx
  2113. mov ecx,DWORD [40+esp]
  2114. lea esi,[16+esi]
  2115. mov DWORD [32+esp],esi
  2116. lea edx,[16+edi]
  2117. mov DWORD [36+esp],edx
  2118. sub ecx,16
  2119. cmp ecx,16
  2120. mov DWORD [40+esp],ecx
  2121. jae NEAR L$028slow_enc_loop_x86
  2122. test ecx,15
  2123. jnz NEAR L$026slow_enc_tail
  2124. mov esi,DWORD [48+esp]
  2125. mov ecx,DWORD [8+edi]
  2126. mov edx,DWORD [12+edi]
  2127. mov DWORD [esi],eax
  2128. mov DWORD [4+esi],ebx
  2129. mov DWORD [8+esi],ecx
  2130. mov DWORD [12+esi],edx
  2131. mov esp,DWORD [28+esp]
  2132. popfd
  2133. pop edi
  2134. pop esi
  2135. pop ebx
  2136. pop ebp
  2137. ret
  2138. pushfd
  2139. align 16
  2140. L$026slow_enc_tail:
  2141. mov edi,edx
  2142. mov ebx,16
  2143. sub ebx,ecx
  2144. cmp edi,esi
  2145. je NEAR L$029enc_in_place
  2146. align 4
  2147. dd 2767451785
  2148. jmp NEAR L$030enc_skip_in_place
  2149. L$029enc_in_place:
  2150. lea edi,[ecx*1+edi]
  2151. L$030enc_skip_in_place:
  2152. mov ecx,ebx
  2153. xor eax,eax
  2154. align 4
  2155. dd 2868115081
  2156. mov edi,DWORD [48+esp]
  2157. mov esi,edx
  2158. mov eax,DWORD [edi]
  2159. mov ebx,DWORD [4+edi]
  2160. mov DWORD [40+esp],16
  2161. jmp NEAR L$028slow_enc_loop_x86
  2162. align 16
  2163. L$025slow_decrypt:
  2164. align 16
  2165. L$031slow_dec_loop_x86:
  2166. mov eax,DWORD [esi]
  2167. mov ebx,DWORD [4+esi]
  2168. mov ecx,DWORD [8+esi]
  2169. mov edx,DWORD [12+esi]
  2170. lea edi,[60+esp]
  2171. mov DWORD [edi],eax
  2172. mov DWORD [4+edi],ebx
  2173. mov DWORD [8+edi],ecx
  2174. mov DWORD [12+edi],edx
  2175. mov edi,DWORD [44+esp]
  2176. call __x86_AES_decrypt_compact
  2177. mov edi,DWORD [48+esp]
  2178. mov esi,DWORD [40+esp]
  2179. xor eax,DWORD [edi]
  2180. xor ebx,DWORD [4+edi]
  2181. xor ecx,DWORD [8+edi]
  2182. xor edx,DWORD [12+edi]
  2183. sub esi,16
  2184. jc NEAR L$032slow_dec_partial_x86
  2185. mov DWORD [40+esp],esi
  2186. mov esi,DWORD [36+esp]
  2187. mov DWORD [esi],eax
  2188. mov DWORD [4+esi],ebx
  2189. mov DWORD [8+esi],ecx
  2190. mov DWORD [12+esi],edx
  2191. lea esi,[16+esi]
  2192. mov DWORD [36+esp],esi
  2193. lea esi,[60+esp]
  2194. mov eax,DWORD [esi]
  2195. mov ebx,DWORD [4+esi]
  2196. mov ecx,DWORD [8+esi]
  2197. mov edx,DWORD [12+esi]
  2198. mov DWORD [edi],eax
  2199. mov DWORD [4+edi],ebx
  2200. mov DWORD [8+edi],ecx
  2201. mov DWORD [12+edi],edx
  2202. mov esi,DWORD [32+esp]
  2203. lea esi,[16+esi]
  2204. mov DWORD [32+esp],esi
  2205. jnz NEAR L$031slow_dec_loop_x86
  2206. mov esp,DWORD [28+esp]
  2207. popfd
  2208. pop edi
  2209. pop esi
  2210. pop ebx
  2211. pop ebp
  2212. ret
  2213. pushfd
  2214. align 16
  2215. L$032slow_dec_partial_x86:
  2216. lea esi,[60+esp]
  2217. mov DWORD [esi],eax
  2218. mov DWORD [4+esi],ebx
  2219. mov DWORD [8+esi],ecx
  2220. mov DWORD [12+esi],edx
  2221. mov esi,DWORD [32+esp]
  2222. mov eax,DWORD [esi]
  2223. mov ebx,DWORD [4+esi]
  2224. mov ecx,DWORD [8+esi]
  2225. mov edx,DWORD [12+esi]
  2226. mov DWORD [edi],eax
  2227. mov DWORD [4+edi],ebx
  2228. mov DWORD [8+edi],ecx
  2229. mov DWORD [12+edi],edx
  2230. mov ecx,DWORD [40+esp]
  2231. mov edi,DWORD [36+esp]
  2232. lea esi,[60+esp]
  2233. align 4
  2234. dd 2767451785
  2235. mov esp,DWORD [28+esp]
  2236. popfd
  2237. pop edi
  2238. pop esi
  2239. pop ebx
  2240. pop ebp
  2241. ret
  2242. align 16
  2243. __x86_AES_set_encrypt_key:
  2244. push ebp
  2245. push ebx
  2246. push esi
  2247. push edi
  2248. mov esi,DWORD [24+esp]
  2249. mov edi,DWORD [32+esp]
  2250. test esi,-1
  2251. jz NEAR L$033badpointer
  2252. test edi,-1
  2253. jz NEAR L$033badpointer
  2254. call L$034pic_point
  2255. L$034pic_point:
  2256. pop ebp
  2257. lea ebp,[(L$AES_Te-L$034pic_point)+ebp]
  2258. lea ebp,[2176+ebp]
  2259. mov eax,DWORD [ebp-128]
  2260. mov ebx,DWORD [ebp-96]
  2261. mov ecx,DWORD [ebp-64]
  2262. mov edx,DWORD [ebp-32]
  2263. mov eax,DWORD [ebp]
  2264. mov ebx,DWORD [32+ebp]
  2265. mov ecx,DWORD [64+ebp]
  2266. mov edx,DWORD [96+ebp]
  2267. mov ecx,DWORD [28+esp]
  2268. cmp ecx,128
  2269. je NEAR L$03510rounds
  2270. cmp ecx,192
  2271. je NEAR L$03612rounds
  2272. cmp ecx,256
  2273. je NEAR L$03714rounds
  2274. mov eax,-2
  2275. jmp NEAR L$038exit
  2276. L$03510rounds:
  2277. mov eax,DWORD [esi]
  2278. mov ebx,DWORD [4+esi]
  2279. mov ecx,DWORD [8+esi]
  2280. mov edx,DWORD [12+esi]
  2281. mov DWORD [edi],eax
  2282. mov DWORD [4+edi],ebx
  2283. mov DWORD [8+edi],ecx
  2284. mov DWORD [12+edi],edx
  2285. xor ecx,ecx
  2286. jmp NEAR L$03910shortcut
  2287. align 4
  2288. L$04010loop:
  2289. mov eax,DWORD [edi]
  2290. mov edx,DWORD [12+edi]
  2291. L$03910shortcut:
  2292. movzx esi,dl
  2293. movzx ebx,BYTE [esi*1+ebp-128]
  2294. movzx esi,dh
  2295. shl ebx,24
  2296. xor eax,ebx
  2297. movzx ebx,BYTE [esi*1+ebp-128]
  2298. shr edx,16
  2299. movzx esi,dl
  2300. xor eax,ebx
  2301. movzx ebx,BYTE [esi*1+ebp-128]
  2302. movzx esi,dh
  2303. shl ebx,8
  2304. xor eax,ebx
  2305. movzx ebx,BYTE [esi*1+ebp-128]
  2306. shl ebx,16
  2307. xor eax,ebx
  2308. xor eax,DWORD [896+ecx*4+ebp]
  2309. mov DWORD [16+edi],eax
  2310. xor eax,DWORD [4+edi]
  2311. mov DWORD [20+edi],eax
  2312. xor eax,DWORD [8+edi]
  2313. mov DWORD [24+edi],eax
  2314. xor eax,DWORD [12+edi]
  2315. mov DWORD [28+edi],eax
  2316. inc ecx
  2317. add edi,16
  2318. cmp ecx,10
  2319. jl NEAR L$04010loop
  2320. mov DWORD [80+edi],10
  2321. xor eax,eax
  2322. jmp NEAR L$038exit
  2323. L$03612rounds:
  2324. mov eax,DWORD [esi]
  2325. mov ebx,DWORD [4+esi]
  2326. mov ecx,DWORD [8+esi]
  2327. mov edx,DWORD [12+esi]
  2328. mov DWORD [edi],eax
  2329. mov DWORD [4+edi],ebx
  2330. mov DWORD [8+edi],ecx
  2331. mov DWORD [12+edi],edx
  2332. mov ecx,DWORD [16+esi]
  2333. mov edx,DWORD [20+esi]
  2334. mov DWORD [16+edi],ecx
  2335. mov DWORD [20+edi],edx
  2336. xor ecx,ecx
  2337. jmp NEAR L$04112shortcut
  2338. align 4
  2339. L$04212loop:
  2340. mov eax,DWORD [edi]
  2341. mov edx,DWORD [20+edi]
  2342. L$04112shortcut:
  2343. movzx esi,dl
  2344. movzx ebx,BYTE [esi*1+ebp-128]
  2345. movzx esi,dh
  2346. shl ebx,24
  2347. xor eax,ebx
  2348. movzx ebx,BYTE [esi*1+ebp-128]
  2349. shr edx,16
  2350. movzx esi,dl
  2351. xor eax,ebx
  2352. movzx ebx,BYTE [esi*1+ebp-128]
  2353. movzx esi,dh
  2354. shl ebx,8
  2355. xor eax,ebx
  2356. movzx ebx,BYTE [esi*1+ebp-128]
  2357. shl ebx,16
  2358. xor eax,ebx
  2359. xor eax,DWORD [896+ecx*4+ebp]
  2360. mov DWORD [24+edi],eax
  2361. xor eax,DWORD [4+edi]
  2362. mov DWORD [28+edi],eax
  2363. xor eax,DWORD [8+edi]
  2364. mov DWORD [32+edi],eax
  2365. xor eax,DWORD [12+edi]
  2366. mov DWORD [36+edi],eax
  2367. cmp ecx,7
  2368. je NEAR L$04312break
  2369. inc ecx
  2370. xor eax,DWORD [16+edi]
  2371. mov DWORD [40+edi],eax
  2372. xor eax,DWORD [20+edi]
  2373. mov DWORD [44+edi],eax
  2374. add edi,24
  2375. jmp NEAR L$04212loop
  2376. L$04312break:
  2377. mov DWORD [72+edi],12
  2378. xor eax,eax
  2379. jmp NEAR L$038exit
  2380. L$03714rounds:
  2381. mov eax,DWORD [esi]
  2382. mov ebx,DWORD [4+esi]
  2383. mov ecx,DWORD [8+esi]
  2384. mov edx,DWORD [12+esi]
  2385. mov DWORD [edi],eax
  2386. mov DWORD [4+edi],ebx
  2387. mov DWORD [8+edi],ecx
  2388. mov DWORD [12+edi],edx
  2389. mov eax,DWORD [16+esi]
  2390. mov ebx,DWORD [20+esi]
  2391. mov ecx,DWORD [24+esi]
  2392. mov edx,DWORD [28+esi]
  2393. mov DWORD [16+edi],eax
  2394. mov DWORD [20+edi],ebx
  2395. mov DWORD [24+edi],ecx
  2396. mov DWORD [28+edi],edx
  2397. xor ecx,ecx
  2398. jmp NEAR L$04414shortcut
  2399. align 4
  2400. L$04514loop:
  2401. mov edx,DWORD [28+edi]
  2402. L$04414shortcut:
  2403. mov eax,DWORD [edi]
  2404. movzx esi,dl
  2405. movzx ebx,BYTE [esi*1+ebp-128]
  2406. movzx esi,dh
  2407. shl ebx,24
  2408. xor eax,ebx
  2409. movzx ebx,BYTE [esi*1+ebp-128]
  2410. shr edx,16
  2411. movzx esi,dl
  2412. xor eax,ebx
  2413. movzx ebx,BYTE [esi*1+ebp-128]
  2414. movzx esi,dh
  2415. shl ebx,8
  2416. xor eax,ebx
  2417. movzx ebx,BYTE [esi*1+ebp-128]
  2418. shl ebx,16
  2419. xor eax,ebx
  2420. xor eax,DWORD [896+ecx*4+ebp]
  2421. mov DWORD [32+edi],eax
  2422. xor eax,DWORD [4+edi]
  2423. mov DWORD [36+edi],eax
  2424. xor eax,DWORD [8+edi]
  2425. mov DWORD [40+edi],eax
  2426. xor eax,DWORD [12+edi]
  2427. mov DWORD [44+edi],eax
  2428. cmp ecx,6
  2429. je NEAR L$04614break
  2430. inc ecx
  2431. mov edx,eax
  2432. mov eax,DWORD [16+edi]
  2433. movzx esi,dl
  2434. movzx ebx,BYTE [esi*1+ebp-128]
  2435. movzx esi,dh
  2436. xor eax,ebx
  2437. movzx ebx,BYTE [esi*1+ebp-128]
  2438. shr edx,16
  2439. shl ebx,8
  2440. movzx esi,dl
  2441. xor eax,ebx
  2442. movzx ebx,BYTE [esi*1+ebp-128]
  2443. movzx esi,dh
  2444. shl ebx,16
  2445. xor eax,ebx
  2446. movzx ebx,BYTE [esi*1+ebp-128]
  2447. shl ebx,24
  2448. xor eax,ebx
  2449. mov DWORD [48+edi],eax
  2450. xor eax,DWORD [20+edi]
  2451. mov DWORD [52+edi],eax
  2452. xor eax,DWORD [24+edi]
  2453. mov DWORD [56+edi],eax
  2454. xor eax,DWORD [28+edi]
  2455. mov DWORD [60+edi],eax
  2456. add edi,32
  2457. jmp NEAR L$04514loop
  2458. L$04614break:
  2459. mov DWORD [48+edi],14
  2460. xor eax,eax
  2461. jmp NEAR L$038exit
  2462. L$033badpointer:
  2463. mov eax,-1
  2464. L$038exit:
  2465. pop edi
  2466. pop esi
  2467. pop ebx
  2468. pop ebp
  2469. ret
  2470. global _AES_set_encrypt_key
  2471. align 16
  2472. _AES_set_encrypt_key:
  2473. L$_AES_set_encrypt_key_begin:
  2474. call __x86_AES_set_encrypt_key
  2475. ret
  2476. global _AES_set_decrypt_key
  2477. align 16
  2478. _AES_set_decrypt_key:
  2479. L$_AES_set_decrypt_key_begin:
  2480. call __x86_AES_set_encrypt_key
  2481. cmp eax,0
  2482. je NEAR L$047proceed
  2483. ret
  2484. L$047proceed:
  2485. push ebp
  2486. push ebx
  2487. push esi
  2488. push edi
  2489. mov esi,DWORD [28+esp]
  2490. mov ecx,DWORD [240+esi]
  2491. lea ecx,[ecx*4]
  2492. lea edi,[ecx*4+esi]
  2493. align 4
  2494. L$048invert:
  2495. mov eax,DWORD [esi]
  2496. mov ebx,DWORD [4+esi]
  2497. mov ecx,DWORD [edi]
  2498. mov edx,DWORD [4+edi]
  2499. mov DWORD [edi],eax
  2500. mov DWORD [4+edi],ebx
  2501. mov DWORD [esi],ecx
  2502. mov DWORD [4+esi],edx
  2503. mov eax,DWORD [8+esi]
  2504. mov ebx,DWORD [12+esi]
  2505. mov ecx,DWORD [8+edi]
  2506. mov edx,DWORD [12+edi]
  2507. mov DWORD [8+edi],eax
  2508. mov DWORD [12+edi],ebx
  2509. mov DWORD [8+esi],ecx
  2510. mov DWORD [12+esi],edx
  2511. add esi,16
  2512. sub edi,16
  2513. cmp esi,edi
  2514. jne NEAR L$048invert
  2515. mov edi,DWORD [28+esp]
  2516. mov esi,DWORD [240+edi]
  2517. lea esi,[esi*1+esi-2]
  2518. lea esi,[esi*8+edi]
  2519. mov DWORD [28+esp],esi
  2520. mov eax,DWORD [16+edi]
  2521. align 4
  2522. L$049permute:
  2523. add edi,16
  2524. mov ebp,2155905152
  2525. and ebp,eax
  2526. lea ebx,[eax*1+eax]
  2527. mov esi,ebp
  2528. shr ebp,7
  2529. sub esi,ebp
  2530. and ebx,4278124286
  2531. and esi,454761243
  2532. xor ebx,esi
  2533. mov ebp,2155905152
  2534. and ebp,ebx
  2535. lea ecx,[ebx*1+ebx]
  2536. mov esi,ebp
  2537. shr ebp,7
  2538. sub esi,ebp
  2539. and ecx,4278124286
  2540. and esi,454761243
  2541. xor ebx,eax
  2542. xor ecx,esi
  2543. mov ebp,2155905152
  2544. and ebp,ecx
  2545. lea edx,[ecx*1+ecx]
  2546. mov esi,ebp
  2547. shr ebp,7
  2548. xor ecx,eax
  2549. sub esi,ebp
  2550. and edx,4278124286
  2551. and esi,454761243
  2552. rol eax,8
  2553. xor edx,esi
  2554. mov ebp,DWORD [4+edi]
  2555. xor eax,ebx
  2556. xor ebx,edx
  2557. xor eax,ecx
  2558. rol ebx,24
  2559. xor ecx,edx
  2560. xor eax,edx
  2561. rol ecx,16
  2562. xor eax,ebx
  2563. rol edx,8
  2564. xor eax,ecx
  2565. mov ebx,ebp
  2566. xor eax,edx
  2567. mov DWORD [edi],eax
  2568. mov ebp,2155905152
  2569. and ebp,ebx
  2570. lea ecx,[ebx*1+ebx]
  2571. mov esi,ebp
  2572. shr ebp,7
  2573. sub esi,ebp
  2574. and ecx,4278124286
  2575. and esi,454761243
  2576. xor ecx,esi
  2577. mov ebp,2155905152
  2578. and ebp,ecx
  2579. lea edx,[ecx*1+ecx]
  2580. mov esi,ebp
  2581. shr ebp,7
  2582. sub esi,ebp
  2583. and edx,4278124286
  2584. and esi,454761243
  2585. xor ecx,ebx
  2586. xor edx,esi
  2587. mov ebp,2155905152
  2588. and ebp,edx
  2589. lea eax,[edx*1+edx]
  2590. mov esi,ebp
  2591. shr ebp,7
  2592. xor edx,ebx
  2593. sub esi,ebp
  2594. and eax,4278124286
  2595. and esi,454761243
  2596. rol ebx,8
  2597. xor eax,esi
  2598. mov ebp,DWORD [8+edi]
  2599. xor ebx,ecx
  2600. xor ecx,eax
  2601. xor ebx,edx
  2602. rol ecx,24
  2603. xor edx,eax
  2604. xor ebx,eax
  2605. rol edx,16
  2606. xor ebx,ecx
  2607. rol eax,8
  2608. xor ebx,edx
  2609. mov ecx,ebp
  2610. xor ebx,eax
  2611. mov DWORD [4+edi],ebx
  2612. mov ebp,2155905152
  2613. and ebp,ecx
  2614. lea edx,[ecx*1+ecx]
  2615. mov esi,ebp
  2616. shr ebp,7
  2617. sub esi,ebp
  2618. and edx,4278124286
  2619. and esi,454761243
  2620. xor edx,esi
  2621. mov ebp,2155905152
  2622. and ebp,edx
  2623. lea eax,[edx*1+edx]
  2624. mov esi,ebp
  2625. shr ebp,7
  2626. sub esi,ebp
  2627. and eax,4278124286
  2628. and esi,454761243
  2629. xor edx,ecx
  2630. xor eax,esi
  2631. mov ebp,2155905152
  2632. and ebp,eax
  2633. lea ebx,[eax*1+eax]
  2634. mov esi,ebp
  2635. shr ebp,7
  2636. xor eax,ecx
  2637. sub esi,ebp
  2638. and ebx,4278124286
  2639. and esi,454761243
  2640. rol ecx,8
  2641. xor ebx,esi
  2642. mov ebp,DWORD [12+edi]
  2643. xor ecx,edx
  2644. xor edx,ebx
  2645. xor ecx,eax
  2646. rol edx,24
  2647. xor eax,ebx
  2648. xor ecx,ebx
  2649. rol eax,16
  2650. xor ecx,edx
  2651. rol ebx,8
  2652. xor ecx,eax
  2653. mov edx,ebp
  2654. xor ecx,ebx
  2655. mov DWORD [8+edi],ecx
  2656. mov ebp,2155905152
  2657. and ebp,edx
  2658. lea eax,[edx*1+edx]
  2659. mov esi,ebp
  2660. shr ebp,7
  2661. sub esi,ebp
  2662. and eax,4278124286
  2663. and esi,454761243
  2664. xor eax,esi
  2665. mov ebp,2155905152
  2666. and ebp,eax
  2667. lea ebx,[eax*1+eax]
  2668. mov esi,ebp
  2669. shr ebp,7
  2670. sub esi,ebp
  2671. and ebx,4278124286
  2672. and esi,454761243
  2673. xor eax,edx
  2674. xor ebx,esi
  2675. mov ebp,2155905152
  2676. and ebp,ebx
  2677. lea ecx,[ebx*1+ebx]
  2678. mov esi,ebp
  2679. shr ebp,7
  2680. xor ebx,edx
  2681. sub esi,ebp
  2682. and ecx,4278124286
  2683. and esi,454761243
  2684. rol edx,8
  2685. xor ecx,esi
  2686. mov ebp,DWORD [16+edi]
  2687. xor edx,eax
  2688. xor eax,ecx
  2689. xor edx,ebx
  2690. rol eax,24
  2691. xor ebx,ecx
  2692. xor edx,ecx
  2693. rol ebx,16
  2694. xor edx,eax
  2695. rol ecx,8
  2696. xor edx,ebx
  2697. mov eax,ebp
  2698. xor edx,ecx
  2699. mov DWORD [12+edi],edx
  2700. cmp edi,DWORD [28+esp]
  2701. jb NEAR L$049permute
  2702. xor eax,eax
  2703. pop edi
  2704. pop esi
  2705. pop ebx
  2706. pop ebp
  2707. ret
  2708. db 65,69,83,32,102,111,114,32,120,56,54,44,32,67,82,89
  2709. db 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
  2710. db 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0