des_586.asm 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828
  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. global _DES_SPtrans
  10. align 16
  11. __x86_DES_encrypt:
  12. push ecx
  13. ; Round 0
  14. mov eax,DWORD [ecx]
  15. xor ebx,ebx
  16. mov edx,DWORD [4+ecx]
  17. xor eax,esi
  18. xor ecx,ecx
  19. xor edx,esi
  20. and eax,0xfcfcfcfc
  21. and edx,0xcfcfcfcf
  22. mov bl,al
  23. mov cl,ah
  24. ror edx,4
  25. xor edi,DWORD [ebx*1+ebp]
  26. mov bl,dl
  27. xor edi,DWORD [0x200+ecx*1+ebp]
  28. mov cl,dh
  29. shr eax,16
  30. xor edi,DWORD [0x100+ebx*1+ebp]
  31. mov bl,ah
  32. shr edx,16
  33. xor edi,DWORD [0x300+ecx*1+ebp]
  34. mov cl,dh
  35. and eax,0xff
  36. and edx,0xff
  37. xor edi,DWORD [0x600+ebx*1+ebp]
  38. xor edi,DWORD [0x700+ecx*1+ebp]
  39. mov ecx,DWORD [esp]
  40. xor edi,DWORD [0x400+eax*1+ebp]
  41. xor edi,DWORD [0x500+edx*1+ebp]
  42. ; Round 1
  43. mov eax,DWORD [8+ecx]
  44. xor ebx,ebx
  45. mov edx,DWORD [12+ecx]
  46. xor eax,edi
  47. xor ecx,ecx
  48. xor edx,edi
  49. and eax,0xfcfcfcfc
  50. and edx,0xcfcfcfcf
  51. mov bl,al
  52. mov cl,ah
  53. ror edx,4
  54. xor esi,DWORD [ebx*1+ebp]
  55. mov bl,dl
  56. xor esi,DWORD [0x200+ecx*1+ebp]
  57. mov cl,dh
  58. shr eax,16
  59. xor esi,DWORD [0x100+ebx*1+ebp]
  60. mov bl,ah
  61. shr edx,16
  62. xor esi,DWORD [0x300+ecx*1+ebp]
  63. mov cl,dh
  64. and eax,0xff
  65. and edx,0xff
  66. xor esi,DWORD [0x600+ebx*1+ebp]
  67. xor esi,DWORD [0x700+ecx*1+ebp]
  68. mov ecx,DWORD [esp]
  69. xor esi,DWORD [0x400+eax*1+ebp]
  70. xor esi,DWORD [0x500+edx*1+ebp]
  71. ; Round 2
  72. mov eax,DWORD [16+ecx]
  73. xor ebx,ebx
  74. mov edx,DWORD [20+ecx]
  75. xor eax,esi
  76. xor ecx,ecx
  77. xor edx,esi
  78. and eax,0xfcfcfcfc
  79. and edx,0xcfcfcfcf
  80. mov bl,al
  81. mov cl,ah
  82. ror edx,4
  83. xor edi,DWORD [ebx*1+ebp]
  84. mov bl,dl
  85. xor edi,DWORD [0x200+ecx*1+ebp]
  86. mov cl,dh
  87. shr eax,16
  88. xor edi,DWORD [0x100+ebx*1+ebp]
  89. mov bl,ah
  90. shr edx,16
  91. xor edi,DWORD [0x300+ecx*1+ebp]
  92. mov cl,dh
  93. and eax,0xff
  94. and edx,0xff
  95. xor edi,DWORD [0x600+ebx*1+ebp]
  96. xor edi,DWORD [0x700+ecx*1+ebp]
  97. mov ecx,DWORD [esp]
  98. xor edi,DWORD [0x400+eax*1+ebp]
  99. xor edi,DWORD [0x500+edx*1+ebp]
  100. ; Round 3
  101. mov eax,DWORD [24+ecx]
  102. xor ebx,ebx
  103. mov edx,DWORD [28+ecx]
  104. xor eax,edi
  105. xor ecx,ecx
  106. xor edx,edi
  107. and eax,0xfcfcfcfc
  108. and edx,0xcfcfcfcf
  109. mov bl,al
  110. mov cl,ah
  111. ror edx,4
  112. xor esi,DWORD [ebx*1+ebp]
  113. mov bl,dl
  114. xor esi,DWORD [0x200+ecx*1+ebp]
  115. mov cl,dh
  116. shr eax,16
  117. xor esi,DWORD [0x100+ebx*1+ebp]
  118. mov bl,ah
  119. shr edx,16
  120. xor esi,DWORD [0x300+ecx*1+ebp]
  121. mov cl,dh
  122. and eax,0xff
  123. and edx,0xff
  124. xor esi,DWORD [0x600+ebx*1+ebp]
  125. xor esi,DWORD [0x700+ecx*1+ebp]
  126. mov ecx,DWORD [esp]
  127. xor esi,DWORD [0x400+eax*1+ebp]
  128. xor esi,DWORD [0x500+edx*1+ebp]
  129. ; Round 4
  130. mov eax,DWORD [32+ecx]
  131. xor ebx,ebx
  132. mov edx,DWORD [36+ecx]
  133. xor eax,esi
  134. xor ecx,ecx
  135. xor edx,esi
  136. and eax,0xfcfcfcfc
  137. and edx,0xcfcfcfcf
  138. mov bl,al
  139. mov cl,ah
  140. ror edx,4
  141. xor edi,DWORD [ebx*1+ebp]
  142. mov bl,dl
  143. xor edi,DWORD [0x200+ecx*1+ebp]
  144. mov cl,dh
  145. shr eax,16
  146. xor edi,DWORD [0x100+ebx*1+ebp]
  147. mov bl,ah
  148. shr edx,16
  149. xor edi,DWORD [0x300+ecx*1+ebp]
  150. mov cl,dh
  151. and eax,0xff
  152. and edx,0xff
  153. xor edi,DWORD [0x600+ebx*1+ebp]
  154. xor edi,DWORD [0x700+ecx*1+ebp]
  155. mov ecx,DWORD [esp]
  156. xor edi,DWORD [0x400+eax*1+ebp]
  157. xor edi,DWORD [0x500+edx*1+ebp]
  158. ; Round 5
  159. mov eax,DWORD [40+ecx]
  160. xor ebx,ebx
  161. mov edx,DWORD [44+ecx]
  162. xor eax,edi
  163. xor ecx,ecx
  164. xor edx,edi
  165. and eax,0xfcfcfcfc
  166. and edx,0xcfcfcfcf
  167. mov bl,al
  168. mov cl,ah
  169. ror edx,4
  170. xor esi,DWORD [ebx*1+ebp]
  171. mov bl,dl
  172. xor esi,DWORD [0x200+ecx*1+ebp]
  173. mov cl,dh
  174. shr eax,16
  175. xor esi,DWORD [0x100+ebx*1+ebp]
  176. mov bl,ah
  177. shr edx,16
  178. xor esi,DWORD [0x300+ecx*1+ebp]
  179. mov cl,dh
  180. and eax,0xff
  181. and edx,0xff
  182. xor esi,DWORD [0x600+ebx*1+ebp]
  183. xor esi,DWORD [0x700+ecx*1+ebp]
  184. mov ecx,DWORD [esp]
  185. xor esi,DWORD [0x400+eax*1+ebp]
  186. xor esi,DWORD [0x500+edx*1+ebp]
  187. ; Round 6
  188. mov eax,DWORD [48+ecx]
  189. xor ebx,ebx
  190. mov edx,DWORD [52+ecx]
  191. xor eax,esi
  192. xor ecx,ecx
  193. xor edx,esi
  194. and eax,0xfcfcfcfc
  195. and edx,0xcfcfcfcf
  196. mov bl,al
  197. mov cl,ah
  198. ror edx,4
  199. xor edi,DWORD [ebx*1+ebp]
  200. mov bl,dl
  201. xor edi,DWORD [0x200+ecx*1+ebp]
  202. mov cl,dh
  203. shr eax,16
  204. xor edi,DWORD [0x100+ebx*1+ebp]
  205. mov bl,ah
  206. shr edx,16
  207. xor edi,DWORD [0x300+ecx*1+ebp]
  208. mov cl,dh
  209. and eax,0xff
  210. and edx,0xff
  211. xor edi,DWORD [0x600+ebx*1+ebp]
  212. xor edi,DWORD [0x700+ecx*1+ebp]
  213. mov ecx,DWORD [esp]
  214. xor edi,DWORD [0x400+eax*1+ebp]
  215. xor edi,DWORD [0x500+edx*1+ebp]
  216. ; Round 7
  217. mov eax,DWORD [56+ecx]
  218. xor ebx,ebx
  219. mov edx,DWORD [60+ecx]
  220. xor eax,edi
  221. xor ecx,ecx
  222. xor edx,edi
  223. and eax,0xfcfcfcfc
  224. and edx,0xcfcfcfcf
  225. mov bl,al
  226. mov cl,ah
  227. ror edx,4
  228. xor esi,DWORD [ebx*1+ebp]
  229. mov bl,dl
  230. xor esi,DWORD [0x200+ecx*1+ebp]
  231. mov cl,dh
  232. shr eax,16
  233. xor esi,DWORD [0x100+ebx*1+ebp]
  234. mov bl,ah
  235. shr edx,16
  236. xor esi,DWORD [0x300+ecx*1+ebp]
  237. mov cl,dh
  238. and eax,0xff
  239. and edx,0xff
  240. xor esi,DWORD [0x600+ebx*1+ebp]
  241. xor esi,DWORD [0x700+ecx*1+ebp]
  242. mov ecx,DWORD [esp]
  243. xor esi,DWORD [0x400+eax*1+ebp]
  244. xor esi,DWORD [0x500+edx*1+ebp]
  245. ; Round 8
  246. mov eax,DWORD [64+ecx]
  247. xor ebx,ebx
  248. mov edx,DWORD [68+ecx]
  249. xor eax,esi
  250. xor ecx,ecx
  251. xor edx,esi
  252. and eax,0xfcfcfcfc
  253. and edx,0xcfcfcfcf
  254. mov bl,al
  255. mov cl,ah
  256. ror edx,4
  257. xor edi,DWORD [ebx*1+ebp]
  258. mov bl,dl
  259. xor edi,DWORD [0x200+ecx*1+ebp]
  260. mov cl,dh
  261. shr eax,16
  262. xor edi,DWORD [0x100+ebx*1+ebp]
  263. mov bl,ah
  264. shr edx,16
  265. xor edi,DWORD [0x300+ecx*1+ebp]
  266. mov cl,dh
  267. and eax,0xff
  268. and edx,0xff
  269. xor edi,DWORD [0x600+ebx*1+ebp]
  270. xor edi,DWORD [0x700+ecx*1+ebp]
  271. mov ecx,DWORD [esp]
  272. xor edi,DWORD [0x400+eax*1+ebp]
  273. xor edi,DWORD [0x500+edx*1+ebp]
  274. ; Round 9
  275. mov eax,DWORD [72+ecx]
  276. xor ebx,ebx
  277. mov edx,DWORD [76+ecx]
  278. xor eax,edi
  279. xor ecx,ecx
  280. xor edx,edi
  281. and eax,0xfcfcfcfc
  282. and edx,0xcfcfcfcf
  283. mov bl,al
  284. mov cl,ah
  285. ror edx,4
  286. xor esi,DWORD [ebx*1+ebp]
  287. mov bl,dl
  288. xor esi,DWORD [0x200+ecx*1+ebp]
  289. mov cl,dh
  290. shr eax,16
  291. xor esi,DWORD [0x100+ebx*1+ebp]
  292. mov bl,ah
  293. shr edx,16
  294. xor esi,DWORD [0x300+ecx*1+ebp]
  295. mov cl,dh
  296. and eax,0xff
  297. and edx,0xff
  298. xor esi,DWORD [0x600+ebx*1+ebp]
  299. xor esi,DWORD [0x700+ecx*1+ebp]
  300. mov ecx,DWORD [esp]
  301. xor esi,DWORD [0x400+eax*1+ebp]
  302. xor esi,DWORD [0x500+edx*1+ebp]
  303. ; Round 10
  304. mov eax,DWORD [80+ecx]
  305. xor ebx,ebx
  306. mov edx,DWORD [84+ecx]
  307. xor eax,esi
  308. xor ecx,ecx
  309. xor edx,esi
  310. and eax,0xfcfcfcfc
  311. and edx,0xcfcfcfcf
  312. mov bl,al
  313. mov cl,ah
  314. ror edx,4
  315. xor edi,DWORD [ebx*1+ebp]
  316. mov bl,dl
  317. xor edi,DWORD [0x200+ecx*1+ebp]
  318. mov cl,dh
  319. shr eax,16
  320. xor edi,DWORD [0x100+ebx*1+ebp]
  321. mov bl,ah
  322. shr edx,16
  323. xor edi,DWORD [0x300+ecx*1+ebp]
  324. mov cl,dh
  325. and eax,0xff
  326. and edx,0xff
  327. xor edi,DWORD [0x600+ebx*1+ebp]
  328. xor edi,DWORD [0x700+ecx*1+ebp]
  329. mov ecx,DWORD [esp]
  330. xor edi,DWORD [0x400+eax*1+ebp]
  331. xor edi,DWORD [0x500+edx*1+ebp]
  332. ; Round 11
  333. mov eax,DWORD [88+ecx]
  334. xor ebx,ebx
  335. mov edx,DWORD [92+ecx]
  336. xor eax,edi
  337. xor ecx,ecx
  338. xor edx,edi
  339. and eax,0xfcfcfcfc
  340. and edx,0xcfcfcfcf
  341. mov bl,al
  342. mov cl,ah
  343. ror edx,4
  344. xor esi,DWORD [ebx*1+ebp]
  345. mov bl,dl
  346. xor esi,DWORD [0x200+ecx*1+ebp]
  347. mov cl,dh
  348. shr eax,16
  349. xor esi,DWORD [0x100+ebx*1+ebp]
  350. mov bl,ah
  351. shr edx,16
  352. xor esi,DWORD [0x300+ecx*1+ebp]
  353. mov cl,dh
  354. and eax,0xff
  355. and edx,0xff
  356. xor esi,DWORD [0x600+ebx*1+ebp]
  357. xor esi,DWORD [0x700+ecx*1+ebp]
  358. mov ecx,DWORD [esp]
  359. xor esi,DWORD [0x400+eax*1+ebp]
  360. xor esi,DWORD [0x500+edx*1+ebp]
  361. ; Round 12
  362. mov eax,DWORD [96+ecx]
  363. xor ebx,ebx
  364. mov edx,DWORD [100+ecx]
  365. xor eax,esi
  366. xor ecx,ecx
  367. xor edx,esi
  368. and eax,0xfcfcfcfc
  369. and edx,0xcfcfcfcf
  370. mov bl,al
  371. mov cl,ah
  372. ror edx,4
  373. xor edi,DWORD [ebx*1+ebp]
  374. mov bl,dl
  375. xor edi,DWORD [0x200+ecx*1+ebp]
  376. mov cl,dh
  377. shr eax,16
  378. xor edi,DWORD [0x100+ebx*1+ebp]
  379. mov bl,ah
  380. shr edx,16
  381. xor edi,DWORD [0x300+ecx*1+ebp]
  382. mov cl,dh
  383. and eax,0xff
  384. and edx,0xff
  385. xor edi,DWORD [0x600+ebx*1+ebp]
  386. xor edi,DWORD [0x700+ecx*1+ebp]
  387. mov ecx,DWORD [esp]
  388. xor edi,DWORD [0x400+eax*1+ebp]
  389. xor edi,DWORD [0x500+edx*1+ebp]
  390. ; Round 13
  391. mov eax,DWORD [104+ecx]
  392. xor ebx,ebx
  393. mov edx,DWORD [108+ecx]
  394. xor eax,edi
  395. xor ecx,ecx
  396. xor edx,edi
  397. and eax,0xfcfcfcfc
  398. and edx,0xcfcfcfcf
  399. mov bl,al
  400. mov cl,ah
  401. ror edx,4
  402. xor esi,DWORD [ebx*1+ebp]
  403. mov bl,dl
  404. xor esi,DWORD [0x200+ecx*1+ebp]
  405. mov cl,dh
  406. shr eax,16
  407. xor esi,DWORD [0x100+ebx*1+ebp]
  408. mov bl,ah
  409. shr edx,16
  410. xor esi,DWORD [0x300+ecx*1+ebp]
  411. mov cl,dh
  412. and eax,0xff
  413. and edx,0xff
  414. xor esi,DWORD [0x600+ebx*1+ebp]
  415. xor esi,DWORD [0x700+ecx*1+ebp]
  416. mov ecx,DWORD [esp]
  417. xor esi,DWORD [0x400+eax*1+ebp]
  418. xor esi,DWORD [0x500+edx*1+ebp]
  419. ; Round 14
  420. mov eax,DWORD [112+ecx]
  421. xor ebx,ebx
  422. mov edx,DWORD [116+ecx]
  423. xor eax,esi
  424. xor ecx,ecx
  425. xor edx,esi
  426. and eax,0xfcfcfcfc
  427. and edx,0xcfcfcfcf
  428. mov bl,al
  429. mov cl,ah
  430. ror edx,4
  431. xor edi,DWORD [ebx*1+ebp]
  432. mov bl,dl
  433. xor edi,DWORD [0x200+ecx*1+ebp]
  434. mov cl,dh
  435. shr eax,16
  436. xor edi,DWORD [0x100+ebx*1+ebp]
  437. mov bl,ah
  438. shr edx,16
  439. xor edi,DWORD [0x300+ecx*1+ebp]
  440. mov cl,dh
  441. and eax,0xff
  442. and edx,0xff
  443. xor edi,DWORD [0x600+ebx*1+ebp]
  444. xor edi,DWORD [0x700+ecx*1+ebp]
  445. mov ecx,DWORD [esp]
  446. xor edi,DWORD [0x400+eax*1+ebp]
  447. xor edi,DWORD [0x500+edx*1+ebp]
  448. ; Round 15
  449. mov eax,DWORD [120+ecx]
  450. xor ebx,ebx
  451. mov edx,DWORD [124+ecx]
  452. xor eax,edi
  453. xor ecx,ecx
  454. xor edx,edi
  455. and eax,0xfcfcfcfc
  456. and edx,0xcfcfcfcf
  457. mov bl,al
  458. mov cl,ah
  459. ror edx,4
  460. xor esi,DWORD [ebx*1+ebp]
  461. mov bl,dl
  462. xor esi,DWORD [0x200+ecx*1+ebp]
  463. mov cl,dh
  464. shr eax,16
  465. xor esi,DWORD [0x100+ebx*1+ebp]
  466. mov bl,ah
  467. shr edx,16
  468. xor esi,DWORD [0x300+ecx*1+ebp]
  469. mov cl,dh
  470. and eax,0xff
  471. and edx,0xff
  472. xor esi,DWORD [0x600+ebx*1+ebp]
  473. xor esi,DWORD [0x700+ecx*1+ebp]
  474. mov ecx,DWORD [esp]
  475. xor esi,DWORD [0x400+eax*1+ebp]
  476. xor esi,DWORD [0x500+edx*1+ebp]
  477. add esp,4
  478. ret
  479. align 16
  480. __x86_DES_decrypt:
  481. push ecx
  482. ; Round 15
  483. mov eax,DWORD [120+ecx]
  484. xor ebx,ebx
  485. mov edx,DWORD [124+ecx]
  486. xor eax,esi
  487. xor ecx,ecx
  488. xor edx,esi
  489. and eax,0xfcfcfcfc
  490. and edx,0xcfcfcfcf
  491. mov bl,al
  492. mov cl,ah
  493. ror edx,4
  494. xor edi,DWORD [ebx*1+ebp]
  495. mov bl,dl
  496. xor edi,DWORD [0x200+ecx*1+ebp]
  497. mov cl,dh
  498. shr eax,16
  499. xor edi,DWORD [0x100+ebx*1+ebp]
  500. mov bl,ah
  501. shr edx,16
  502. xor edi,DWORD [0x300+ecx*1+ebp]
  503. mov cl,dh
  504. and eax,0xff
  505. and edx,0xff
  506. xor edi,DWORD [0x600+ebx*1+ebp]
  507. xor edi,DWORD [0x700+ecx*1+ebp]
  508. mov ecx,DWORD [esp]
  509. xor edi,DWORD [0x400+eax*1+ebp]
  510. xor edi,DWORD [0x500+edx*1+ebp]
  511. ; Round 14
  512. mov eax,DWORD [112+ecx]
  513. xor ebx,ebx
  514. mov edx,DWORD [116+ecx]
  515. xor eax,edi
  516. xor ecx,ecx
  517. xor edx,edi
  518. and eax,0xfcfcfcfc
  519. and edx,0xcfcfcfcf
  520. mov bl,al
  521. mov cl,ah
  522. ror edx,4
  523. xor esi,DWORD [ebx*1+ebp]
  524. mov bl,dl
  525. xor esi,DWORD [0x200+ecx*1+ebp]
  526. mov cl,dh
  527. shr eax,16
  528. xor esi,DWORD [0x100+ebx*1+ebp]
  529. mov bl,ah
  530. shr edx,16
  531. xor esi,DWORD [0x300+ecx*1+ebp]
  532. mov cl,dh
  533. and eax,0xff
  534. and edx,0xff
  535. xor esi,DWORD [0x600+ebx*1+ebp]
  536. xor esi,DWORD [0x700+ecx*1+ebp]
  537. mov ecx,DWORD [esp]
  538. xor esi,DWORD [0x400+eax*1+ebp]
  539. xor esi,DWORD [0x500+edx*1+ebp]
  540. ; Round 13
  541. mov eax,DWORD [104+ecx]
  542. xor ebx,ebx
  543. mov edx,DWORD [108+ecx]
  544. xor eax,esi
  545. xor ecx,ecx
  546. xor edx,esi
  547. and eax,0xfcfcfcfc
  548. and edx,0xcfcfcfcf
  549. mov bl,al
  550. mov cl,ah
  551. ror edx,4
  552. xor edi,DWORD [ebx*1+ebp]
  553. mov bl,dl
  554. xor edi,DWORD [0x200+ecx*1+ebp]
  555. mov cl,dh
  556. shr eax,16
  557. xor edi,DWORD [0x100+ebx*1+ebp]
  558. mov bl,ah
  559. shr edx,16
  560. xor edi,DWORD [0x300+ecx*1+ebp]
  561. mov cl,dh
  562. and eax,0xff
  563. and edx,0xff
  564. xor edi,DWORD [0x600+ebx*1+ebp]
  565. xor edi,DWORD [0x700+ecx*1+ebp]
  566. mov ecx,DWORD [esp]
  567. xor edi,DWORD [0x400+eax*1+ebp]
  568. xor edi,DWORD [0x500+edx*1+ebp]
  569. ; Round 12
  570. mov eax,DWORD [96+ecx]
  571. xor ebx,ebx
  572. mov edx,DWORD [100+ecx]
  573. xor eax,edi
  574. xor ecx,ecx
  575. xor edx,edi
  576. and eax,0xfcfcfcfc
  577. and edx,0xcfcfcfcf
  578. mov bl,al
  579. mov cl,ah
  580. ror edx,4
  581. xor esi,DWORD [ebx*1+ebp]
  582. mov bl,dl
  583. xor esi,DWORD [0x200+ecx*1+ebp]
  584. mov cl,dh
  585. shr eax,16
  586. xor esi,DWORD [0x100+ebx*1+ebp]
  587. mov bl,ah
  588. shr edx,16
  589. xor esi,DWORD [0x300+ecx*1+ebp]
  590. mov cl,dh
  591. and eax,0xff
  592. and edx,0xff
  593. xor esi,DWORD [0x600+ebx*1+ebp]
  594. xor esi,DWORD [0x700+ecx*1+ebp]
  595. mov ecx,DWORD [esp]
  596. xor esi,DWORD [0x400+eax*1+ebp]
  597. xor esi,DWORD [0x500+edx*1+ebp]
  598. ; Round 11
  599. mov eax,DWORD [88+ecx]
  600. xor ebx,ebx
  601. mov edx,DWORD [92+ecx]
  602. xor eax,esi
  603. xor ecx,ecx
  604. xor edx,esi
  605. and eax,0xfcfcfcfc
  606. and edx,0xcfcfcfcf
  607. mov bl,al
  608. mov cl,ah
  609. ror edx,4
  610. xor edi,DWORD [ebx*1+ebp]
  611. mov bl,dl
  612. xor edi,DWORD [0x200+ecx*1+ebp]
  613. mov cl,dh
  614. shr eax,16
  615. xor edi,DWORD [0x100+ebx*1+ebp]
  616. mov bl,ah
  617. shr edx,16
  618. xor edi,DWORD [0x300+ecx*1+ebp]
  619. mov cl,dh
  620. and eax,0xff
  621. and edx,0xff
  622. xor edi,DWORD [0x600+ebx*1+ebp]
  623. xor edi,DWORD [0x700+ecx*1+ebp]
  624. mov ecx,DWORD [esp]
  625. xor edi,DWORD [0x400+eax*1+ebp]
  626. xor edi,DWORD [0x500+edx*1+ebp]
  627. ; Round 10
  628. mov eax,DWORD [80+ecx]
  629. xor ebx,ebx
  630. mov edx,DWORD [84+ecx]
  631. xor eax,edi
  632. xor ecx,ecx
  633. xor edx,edi
  634. and eax,0xfcfcfcfc
  635. and edx,0xcfcfcfcf
  636. mov bl,al
  637. mov cl,ah
  638. ror edx,4
  639. xor esi,DWORD [ebx*1+ebp]
  640. mov bl,dl
  641. xor esi,DWORD [0x200+ecx*1+ebp]
  642. mov cl,dh
  643. shr eax,16
  644. xor esi,DWORD [0x100+ebx*1+ebp]
  645. mov bl,ah
  646. shr edx,16
  647. xor esi,DWORD [0x300+ecx*1+ebp]
  648. mov cl,dh
  649. and eax,0xff
  650. and edx,0xff
  651. xor esi,DWORD [0x600+ebx*1+ebp]
  652. xor esi,DWORD [0x700+ecx*1+ebp]
  653. mov ecx,DWORD [esp]
  654. xor esi,DWORD [0x400+eax*1+ebp]
  655. xor esi,DWORD [0x500+edx*1+ebp]
  656. ; Round 9
  657. mov eax,DWORD [72+ecx]
  658. xor ebx,ebx
  659. mov edx,DWORD [76+ecx]
  660. xor eax,esi
  661. xor ecx,ecx
  662. xor edx,esi
  663. and eax,0xfcfcfcfc
  664. and edx,0xcfcfcfcf
  665. mov bl,al
  666. mov cl,ah
  667. ror edx,4
  668. xor edi,DWORD [ebx*1+ebp]
  669. mov bl,dl
  670. xor edi,DWORD [0x200+ecx*1+ebp]
  671. mov cl,dh
  672. shr eax,16
  673. xor edi,DWORD [0x100+ebx*1+ebp]
  674. mov bl,ah
  675. shr edx,16
  676. xor edi,DWORD [0x300+ecx*1+ebp]
  677. mov cl,dh
  678. and eax,0xff
  679. and edx,0xff
  680. xor edi,DWORD [0x600+ebx*1+ebp]
  681. xor edi,DWORD [0x700+ecx*1+ebp]
  682. mov ecx,DWORD [esp]
  683. xor edi,DWORD [0x400+eax*1+ebp]
  684. xor edi,DWORD [0x500+edx*1+ebp]
  685. ; Round 8
  686. mov eax,DWORD [64+ecx]
  687. xor ebx,ebx
  688. mov edx,DWORD [68+ecx]
  689. xor eax,edi
  690. xor ecx,ecx
  691. xor edx,edi
  692. and eax,0xfcfcfcfc
  693. and edx,0xcfcfcfcf
  694. mov bl,al
  695. mov cl,ah
  696. ror edx,4
  697. xor esi,DWORD [ebx*1+ebp]
  698. mov bl,dl
  699. xor esi,DWORD [0x200+ecx*1+ebp]
  700. mov cl,dh
  701. shr eax,16
  702. xor esi,DWORD [0x100+ebx*1+ebp]
  703. mov bl,ah
  704. shr edx,16
  705. xor esi,DWORD [0x300+ecx*1+ebp]
  706. mov cl,dh
  707. and eax,0xff
  708. and edx,0xff
  709. xor esi,DWORD [0x600+ebx*1+ebp]
  710. xor esi,DWORD [0x700+ecx*1+ebp]
  711. mov ecx,DWORD [esp]
  712. xor esi,DWORD [0x400+eax*1+ebp]
  713. xor esi,DWORD [0x500+edx*1+ebp]
  714. ; Round 7
  715. mov eax,DWORD [56+ecx]
  716. xor ebx,ebx
  717. mov edx,DWORD [60+ecx]
  718. xor eax,esi
  719. xor ecx,ecx
  720. xor edx,esi
  721. and eax,0xfcfcfcfc
  722. and edx,0xcfcfcfcf
  723. mov bl,al
  724. mov cl,ah
  725. ror edx,4
  726. xor edi,DWORD [ebx*1+ebp]
  727. mov bl,dl
  728. xor edi,DWORD [0x200+ecx*1+ebp]
  729. mov cl,dh
  730. shr eax,16
  731. xor edi,DWORD [0x100+ebx*1+ebp]
  732. mov bl,ah
  733. shr edx,16
  734. xor edi,DWORD [0x300+ecx*1+ebp]
  735. mov cl,dh
  736. and eax,0xff
  737. and edx,0xff
  738. xor edi,DWORD [0x600+ebx*1+ebp]
  739. xor edi,DWORD [0x700+ecx*1+ebp]
  740. mov ecx,DWORD [esp]
  741. xor edi,DWORD [0x400+eax*1+ebp]
  742. xor edi,DWORD [0x500+edx*1+ebp]
  743. ; Round 6
  744. mov eax,DWORD [48+ecx]
  745. xor ebx,ebx
  746. mov edx,DWORD [52+ecx]
  747. xor eax,edi
  748. xor ecx,ecx
  749. xor edx,edi
  750. and eax,0xfcfcfcfc
  751. and edx,0xcfcfcfcf
  752. mov bl,al
  753. mov cl,ah
  754. ror edx,4
  755. xor esi,DWORD [ebx*1+ebp]
  756. mov bl,dl
  757. xor esi,DWORD [0x200+ecx*1+ebp]
  758. mov cl,dh
  759. shr eax,16
  760. xor esi,DWORD [0x100+ebx*1+ebp]
  761. mov bl,ah
  762. shr edx,16
  763. xor esi,DWORD [0x300+ecx*1+ebp]
  764. mov cl,dh
  765. and eax,0xff
  766. and edx,0xff
  767. xor esi,DWORD [0x600+ebx*1+ebp]
  768. xor esi,DWORD [0x700+ecx*1+ebp]
  769. mov ecx,DWORD [esp]
  770. xor esi,DWORD [0x400+eax*1+ebp]
  771. xor esi,DWORD [0x500+edx*1+ebp]
  772. ; Round 5
  773. mov eax,DWORD [40+ecx]
  774. xor ebx,ebx
  775. mov edx,DWORD [44+ecx]
  776. xor eax,esi
  777. xor ecx,ecx
  778. xor edx,esi
  779. and eax,0xfcfcfcfc
  780. and edx,0xcfcfcfcf
  781. mov bl,al
  782. mov cl,ah
  783. ror edx,4
  784. xor edi,DWORD [ebx*1+ebp]
  785. mov bl,dl
  786. xor edi,DWORD [0x200+ecx*1+ebp]
  787. mov cl,dh
  788. shr eax,16
  789. xor edi,DWORD [0x100+ebx*1+ebp]
  790. mov bl,ah
  791. shr edx,16
  792. xor edi,DWORD [0x300+ecx*1+ebp]
  793. mov cl,dh
  794. and eax,0xff
  795. and edx,0xff
  796. xor edi,DWORD [0x600+ebx*1+ebp]
  797. xor edi,DWORD [0x700+ecx*1+ebp]
  798. mov ecx,DWORD [esp]
  799. xor edi,DWORD [0x400+eax*1+ebp]
  800. xor edi,DWORD [0x500+edx*1+ebp]
  801. ; Round 4
  802. mov eax,DWORD [32+ecx]
  803. xor ebx,ebx
  804. mov edx,DWORD [36+ecx]
  805. xor eax,edi
  806. xor ecx,ecx
  807. xor edx,edi
  808. and eax,0xfcfcfcfc
  809. and edx,0xcfcfcfcf
  810. mov bl,al
  811. mov cl,ah
  812. ror edx,4
  813. xor esi,DWORD [ebx*1+ebp]
  814. mov bl,dl
  815. xor esi,DWORD [0x200+ecx*1+ebp]
  816. mov cl,dh
  817. shr eax,16
  818. xor esi,DWORD [0x100+ebx*1+ebp]
  819. mov bl,ah
  820. shr edx,16
  821. xor esi,DWORD [0x300+ecx*1+ebp]
  822. mov cl,dh
  823. and eax,0xff
  824. and edx,0xff
  825. xor esi,DWORD [0x600+ebx*1+ebp]
  826. xor esi,DWORD [0x700+ecx*1+ebp]
  827. mov ecx,DWORD [esp]
  828. xor esi,DWORD [0x400+eax*1+ebp]
  829. xor esi,DWORD [0x500+edx*1+ebp]
  830. ; Round 3
  831. mov eax,DWORD [24+ecx]
  832. xor ebx,ebx
  833. mov edx,DWORD [28+ecx]
  834. xor eax,esi
  835. xor ecx,ecx
  836. xor edx,esi
  837. and eax,0xfcfcfcfc
  838. and edx,0xcfcfcfcf
  839. mov bl,al
  840. mov cl,ah
  841. ror edx,4
  842. xor edi,DWORD [ebx*1+ebp]
  843. mov bl,dl
  844. xor edi,DWORD [0x200+ecx*1+ebp]
  845. mov cl,dh
  846. shr eax,16
  847. xor edi,DWORD [0x100+ebx*1+ebp]
  848. mov bl,ah
  849. shr edx,16
  850. xor edi,DWORD [0x300+ecx*1+ebp]
  851. mov cl,dh
  852. and eax,0xff
  853. and edx,0xff
  854. xor edi,DWORD [0x600+ebx*1+ebp]
  855. xor edi,DWORD [0x700+ecx*1+ebp]
  856. mov ecx,DWORD [esp]
  857. xor edi,DWORD [0x400+eax*1+ebp]
  858. xor edi,DWORD [0x500+edx*1+ebp]
  859. ; Round 2
  860. mov eax,DWORD [16+ecx]
  861. xor ebx,ebx
  862. mov edx,DWORD [20+ecx]
  863. xor eax,edi
  864. xor ecx,ecx
  865. xor edx,edi
  866. and eax,0xfcfcfcfc
  867. and edx,0xcfcfcfcf
  868. mov bl,al
  869. mov cl,ah
  870. ror edx,4
  871. xor esi,DWORD [ebx*1+ebp]
  872. mov bl,dl
  873. xor esi,DWORD [0x200+ecx*1+ebp]
  874. mov cl,dh
  875. shr eax,16
  876. xor esi,DWORD [0x100+ebx*1+ebp]
  877. mov bl,ah
  878. shr edx,16
  879. xor esi,DWORD [0x300+ecx*1+ebp]
  880. mov cl,dh
  881. and eax,0xff
  882. and edx,0xff
  883. xor esi,DWORD [0x600+ebx*1+ebp]
  884. xor esi,DWORD [0x700+ecx*1+ebp]
  885. mov ecx,DWORD [esp]
  886. xor esi,DWORD [0x400+eax*1+ebp]
  887. xor esi,DWORD [0x500+edx*1+ebp]
  888. ; Round 1
  889. mov eax,DWORD [8+ecx]
  890. xor ebx,ebx
  891. mov edx,DWORD [12+ecx]
  892. xor eax,esi
  893. xor ecx,ecx
  894. xor edx,esi
  895. and eax,0xfcfcfcfc
  896. and edx,0xcfcfcfcf
  897. mov bl,al
  898. mov cl,ah
  899. ror edx,4
  900. xor edi,DWORD [ebx*1+ebp]
  901. mov bl,dl
  902. xor edi,DWORD [0x200+ecx*1+ebp]
  903. mov cl,dh
  904. shr eax,16
  905. xor edi,DWORD [0x100+ebx*1+ebp]
  906. mov bl,ah
  907. shr edx,16
  908. xor edi,DWORD [0x300+ecx*1+ebp]
  909. mov cl,dh
  910. and eax,0xff
  911. and edx,0xff
  912. xor edi,DWORD [0x600+ebx*1+ebp]
  913. xor edi,DWORD [0x700+ecx*1+ebp]
  914. mov ecx,DWORD [esp]
  915. xor edi,DWORD [0x400+eax*1+ebp]
  916. xor edi,DWORD [0x500+edx*1+ebp]
  917. ; Round 0
  918. mov eax,DWORD [ecx]
  919. xor ebx,ebx
  920. mov edx,DWORD [4+ecx]
  921. xor eax,edi
  922. xor ecx,ecx
  923. xor edx,edi
  924. and eax,0xfcfcfcfc
  925. and edx,0xcfcfcfcf
  926. mov bl,al
  927. mov cl,ah
  928. ror edx,4
  929. xor esi,DWORD [ebx*1+ebp]
  930. mov bl,dl
  931. xor esi,DWORD [0x200+ecx*1+ebp]
  932. mov cl,dh
  933. shr eax,16
  934. xor esi,DWORD [0x100+ebx*1+ebp]
  935. mov bl,ah
  936. shr edx,16
  937. xor esi,DWORD [0x300+ecx*1+ebp]
  938. mov cl,dh
  939. and eax,0xff
  940. and edx,0xff
  941. xor esi,DWORD [0x600+ebx*1+ebp]
  942. xor esi,DWORD [0x700+ecx*1+ebp]
  943. mov ecx,DWORD [esp]
  944. xor esi,DWORD [0x400+eax*1+ebp]
  945. xor esi,DWORD [0x500+edx*1+ebp]
  946. add esp,4
  947. ret
  948. global _DES_encrypt1
  949. align 16
  950. _DES_encrypt1:
  951. L$_DES_encrypt1_begin:
  952. push esi
  953. push edi
  954. ;
  955. ; Load the 2 words
  956. mov esi,DWORD [12+esp]
  957. xor ecx,ecx
  958. push ebx
  959. push ebp
  960. mov eax,DWORD [esi]
  961. mov ebx,DWORD [28+esp]
  962. mov edi,DWORD [4+esi]
  963. ;
  964. ; IP
  965. rol eax,4
  966. mov esi,eax
  967. xor eax,edi
  968. and eax,0xf0f0f0f0
  969. xor esi,eax
  970. xor edi,eax
  971. ;
  972. rol edi,20
  973. mov eax,edi
  974. xor edi,esi
  975. and edi,0xfff0000f
  976. xor eax,edi
  977. xor esi,edi
  978. ;
  979. rol eax,14
  980. mov edi,eax
  981. xor eax,esi
  982. and eax,0x33333333
  983. xor edi,eax
  984. xor esi,eax
  985. ;
  986. rol esi,22
  987. mov eax,esi
  988. xor esi,edi
  989. and esi,0x03fc03fc
  990. xor eax,esi
  991. xor edi,esi
  992. ;
  993. rol eax,9
  994. mov esi,eax
  995. xor eax,edi
  996. and eax,0xaaaaaaaa
  997. xor esi,eax
  998. xor edi,eax
  999. ;
  1000. rol edi,1
  1001. call L$000pic_point
  1002. L$000pic_point:
  1003. pop ebp
  1004. lea ebp,[(L$des_sptrans-L$000pic_point)+ebp]
  1005. mov ecx,DWORD [24+esp]
  1006. cmp ebx,0
  1007. je NEAR L$001decrypt
  1008. call __x86_DES_encrypt
  1009. jmp NEAR L$002done
  1010. L$001decrypt:
  1011. call __x86_DES_decrypt
  1012. L$002done:
  1013. ;
  1014. ; FP
  1015. mov edx,DWORD [20+esp]
  1016. ror esi,1
  1017. mov eax,edi
  1018. xor edi,esi
  1019. and edi,0xaaaaaaaa
  1020. xor eax,edi
  1021. xor esi,edi
  1022. ;
  1023. rol eax,23
  1024. mov edi,eax
  1025. xor eax,esi
  1026. and eax,0x03fc03fc
  1027. xor edi,eax
  1028. xor esi,eax
  1029. ;
  1030. rol edi,10
  1031. mov eax,edi
  1032. xor edi,esi
  1033. and edi,0x33333333
  1034. xor eax,edi
  1035. xor esi,edi
  1036. ;
  1037. rol esi,18
  1038. mov edi,esi
  1039. xor esi,eax
  1040. and esi,0xfff0000f
  1041. xor edi,esi
  1042. xor eax,esi
  1043. ;
  1044. rol edi,12
  1045. mov esi,edi
  1046. xor edi,eax
  1047. and edi,0xf0f0f0f0
  1048. xor esi,edi
  1049. xor eax,edi
  1050. ;
  1051. ror eax,4
  1052. mov DWORD [edx],eax
  1053. mov DWORD [4+edx],esi
  1054. pop ebp
  1055. pop ebx
  1056. pop edi
  1057. pop esi
  1058. ret
  1059. global _DES_encrypt2
  1060. align 16
  1061. _DES_encrypt2:
  1062. L$_DES_encrypt2_begin:
  1063. push esi
  1064. push edi
  1065. ;
  1066. ; Load the 2 words
  1067. mov eax,DWORD [12+esp]
  1068. xor ecx,ecx
  1069. push ebx
  1070. push ebp
  1071. mov esi,DWORD [eax]
  1072. mov ebx,DWORD [28+esp]
  1073. rol esi,3
  1074. mov edi,DWORD [4+eax]
  1075. rol edi,3
  1076. call L$003pic_point
  1077. L$003pic_point:
  1078. pop ebp
  1079. lea ebp,[(L$des_sptrans-L$003pic_point)+ebp]
  1080. mov ecx,DWORD [24+esp]
  1081. cmp ebx,0
  1082. je NEAR L$004decrypt
  1083. call __x86_DES_encrypt
  1084. jmp NEAR L$005done
  1085. L$004decrypt:
  1086. call __x86_DES_decrypt
  1087. L$005done:
  1088. ;
  1089. ; Fixup
  1090. ror edi,3
  1091. mov eax,DWORD [20+esp]
  1092. ror esi,3
  1093. mov DWORD [eax],edi
  1094. mov DWORD [4+eax],esi
  1095. pop ebp
  1096. pop ebx
  1097. pop edi
  1098. pop esi
  1099. ret
  1100. global _DES_encrypt3
  1101. align 16
  1102. _DES_encrypt3:
  1103. L$_DES_encrypt3_begin:
  1104. push ebx
  1105. mov ebx,DWORD [8+esp]
  1106. push ebp
  1107. push esi
  1108. push edi
  1109. ;
  1110. ; Load the data words
  1111. mov edi,DWORD [ebx]
  1112. mov esi,DWORD [4+ebx]
  1113. sub esp,12
  1114. ;
  1115. ; IP
  1116. rol edi,4
  1117. mov edx,edi
  1118. xor edi,esi
  1119. and edi,0xf0f0f0f0
  1120. xor edx,edi
  1121. xor esi,edi
  1122. ;
  1123. rol esi,20
  1124. mov edi,esi
  1125. xor esi,edx
  1126. and esi,0xfff0000f
  1127. xor edi,esi
  1128. xor edx,esi
  1129. ;
  1130. rol edi,14
  1131. mov esi,edi
  1132. xor edi,edx
  1133. and edi,0x33333333
  1134. xor esi,edi
  1135. xor edx,edi
  1136. ;
  1137. rol edx,22
  1138. mov edi,edx
  1139. xor edx,esi
  1140. and edx,0x03fc03fc
  1141. xor edi,edx
  1142. xor esi,edx
  1143. ;
  1144. rol edi,9
  1145. mov edx,edi
  1146. xor edi,esi
  1147. and edi,0xaaaaaaaa
  1148. xor edx,edi
  1149. xor esi,edi
  1150. ;
  1151. ror edx,3
  1152. ror esi,2
  1153. mov DWORD [4+ebx],esi
  1154. mov eax,DWORD [36+esp]
  1155. mov DWORD [ebx],edx
  1156. mov edi,DWORD [40+esp]
  1157. mov esi,DWORD [44+esp]
  1158. mov DWORD [8+esp],DWORD 1
  1159. mov DWORD [4+esp],eax
  1160. mov DWORD [esp],ebx
  1161. call L$_DES_encrypt2_begin
  1162. mov DWORD [8+esp],DWORD 0
  1163. mov DWORD [4+esp],edi
  1164. mov DWORD [esp],ebx
  1165. call L$_DES_encrypt2_begin
  1166. mov DWORD [8+esp],DWORD 1
  1167. mov DWORD [4+esp],esi
  1168. mov DWORD [esp],ebx
  1169. call L$_DES_encrypt2_begin
  1170. add esp,12
  1171. mov edi,DWORD [ebx]
  1172. mov esi,DWORD [4+ebx]
  1173. ;
  1174. ; FP
  1175. rol esi,2
  1176. rol edi,3
  1177. mov eax,edi
  1178. xor edi,esi
  1179. and edi,0xaaaaaaaa
  1180. xor eax,edi
  1181. xor esi,edi
  1182. ;
  1183. rol eax,23
  1184. mov edi,eax
  1185. xor eax,esi
  1186. and eax,0x03fc03fc
  1187. xor edi,eax
  1188. xor esi,eax
  1189. ;
  1190. rol edi,10
  1191. mov eax,edi
  1192. xor edi,esi
  1193. and edi,0x33333333
  1194. xor eax,edi
  1195. xor esi,edi
  1196. ;
  1197. rol esi,18
  1198. mov edi,esi
  1199. xor esi,eax
  1200. and esi,0xfff0000f
  1201. xor edi,esi
  1202. xor eax,esi
  1203. ;
  1204. rol edi,12
  1205. mov esi,edi
  1206. xor edi,eax
  1207. and edi,0xf0f0f0f0
  1208. xor esi,edi
  1209. xor eax,edi
  1210. ;
  1211. ror eax,4
  1212. mov DWORD [ebx],eax
  1213. mov DWORD [4+ebx],esi
  1214. pop edi
  1215. pop esi
  1216. pop ebp
  1217. pop ebx
  1218. ret
  1219. global _DES_decrypt3
  1220. align 16
  1221. _DES_decrypt3:
  1222. L$_DES_decrypt3_begin:
  1223. push ebx
  1224. mov ebx,DWORD [8+esp]
  1225. push ebp
  1226. push esi
  1227. push edi
  1228. ;
  1229. ; Load the data words
  1230. mov edi,DWORD [ebx]
  1231. mov esi,DWORD [4+ebx]
  1232. sub esp,12
  1233. ;
  1234. ; IP
  1235. rol edi,4
  1236. mov edx,edi
  1237. xor edi,esi
  1238. and edi,0xf0f0f0f0
  1239. xor edx,edi
  1240. xor esi,edi
  1241. ;
  1242. rol esi,20
  1243. mov edi,esi
  1244. xor esi,edx
  1245. and esi,0xfff0000f
  1246. xor edi,esi
  1247. xor edx,esi
  1248. ;
  1249. rol edi,14
  1250. mov esi,edi
  1251. xor edi,edx
  1252. and edi,0x33333333
  1253. xor esi,edi
  1254. xor edx,edi
  1255. ;
  1256. rol edx,22
  1257. mov edi,edx
  1258. xor edx,esi
  1259. and edx,0x03fc03fc
  1260. xor edi,edx
  1261. xor esi,edx
  1262. ;
  1263. rol edi,9
  1264. mov edx,edi
  1265. xor edi,esi
  1266. and edi,0xaaaaaaaa
  1267. xor edx,edi
  1268. xor esi,edi
  1269. ;
  1270. ror edx,3
  1271. ror esi,2
  1272. mov DWORD [4+ebx],esi
  1273. mov esi,DWORD [36+esp]
  1274. mov DWORD [ebx],edx
  1275. mov edi,DWORD [40+esp]
  1276. mov eax,DWORD [44+esp]
  1277. mov DWORD [8+esp],DWORD 0
  1278. mov DWORD [4+esp],eax
  1279. mov DWORD [esp],ebx
  1280. call L$_DES_encrypt2_begin
  1281. mov DWORD [8+esp],DWORD 1
  1282. mov DWORD [4+esp],edi
  1283. mov DWORD [esp],ebx
  1284. call L$_DES_encrypt2_begin
  1285. mov DWORD [8+esp],DWORD 0
  1286. mov DWORD [4+esp],esi
  1287. mov DWORD [esp],ebx
  1288. call L$_DES_encrypt2_begin
  1289. add esp,12
  1290. mov edi,DWORD [ebx]
  1291. mov esi,DWORD [4+ebx]
  1292. ;
  1293. ; FP
  1294. rol esi,2
  1295. rol edi,3
  1296. mov eax,edi
  1297. xor edi,esi
  1298. and edi,0xaaaaaaaa
  1299. xor eax,edi
  1300. xor esi,edi
  1301. ;
  1302. rol eax,23
  1303. mov edi,eax
  1304. xor eax,esi
  1305. and eax,0x03fc03fc
  1306. xor edi,eax
  1307. xor esi,eax
  1308. ;
  1309. rol edi,10
  1310. mov eax,edi
  1311. xor edi,esi
  1312. and edi,0x33333333
  1313. xor eax,edi
  1314. xor esi,edi
  1315. ;
  1316. rol esi,18
  1317. mov edi,esi
  1318. xor esi,eax
  1319. and esi,0xfff0000f
  1320. xor edi,esi
  1321. xor eax,esi
  1322. ;
  1323. rol edi,12
  1324. mov esi,edi
  1325. xor edi,eax
  1326. and edi,0xf0f0f0f0
  1327. xor esi,edi
  1328. xor eax,edi
  1329. ;
  1330. ror eax,4
  1331. mov DWORD [ebx],eax
  1332. mov DWORD [4+ebx],esi
  1333. pop edi
  1334. pop esi
  1335. pop ebp
  1336. pop ebx
  1337. ret
  1338. global _DES_ncbc_encrypt
  1339. align 16
  1340. _DES_ncbc_encrypt:
  1341. L$_DES_ncbc_encrypt_begin:
  1342. ;
  1343. push ebp
  1344. push ebx
  1345. push esi
  1346. push edi
  1347. mov ebp,DWORD [28+esp]
  1348. ; getting iv ptr from parameter 4
  1349. mov ebx,DWORD [36+esp]
  1350. mov esi,DWORD [ebx]
  1351. mov edi,DWORD [4+ebx]
  1352. push edi
  1353. push esi
  1354. push edi
  1355. push esi
  1356. mov ebx,esp
  1357. mov esi,DWORD [36+esp]
  1358. mov edi,DWORD [40+esp]
  1359. ; getting encrypt flag from parameter 5
  1360. mov ecx,DWORD [56+esp]
  1361. ; get and push parameter 5
  1362. push ecx
  1363. ; get and push parameter 3
  1364. mov eax,DWORD [52+esp]
  1365. push eax
  1366. push ebx
  1367. cmp ecx,0
  1368. jz NEAR L$006decrypt
  1369. and ebp,4294967288
  1370. mov eax,DWORD [12+esp]
  1371. mov ebx,DWORD [16+esp]
  1372. jz NEAR L$007encrypt_finish
  1373. L$008encrypt_loop:
  1374. mov ecx,DWORD [esi]
  1375. mov edx,DWORD [4+esi]
  1376. xor eax,ecx
  1377. xor ebx,edx
  1378. mov DWORD [12+esp],eax
  1379. mov DWORD [16+esp],ebx
  1380. call L$_DES_encrypt1_begin
  1381. mov eax,DWORD [12+esp]
  1382. mov ebx,DWORD [16+esp]
  1383. mov DWORD [edi],eax
  1384. mov DWORD [4+edi],ebx
  1385. add esi,8
  1386. add edi,8
  1387. sub ebp,8
  1388. jnz NEAR L$008encrypt_loop
  1389. L$007encrypt_finish:
  1390. mov ebp,DWORD [56+esp]
  1391. and ebp,7
  1392. jz NEAR L$009finish
  1393. call L$010PIC_point
  1394. L$010PIC_point:
  1395. pop edx
  1396. lea ecx,[(L$011cbc_enc_jmp_table-L$010PIC_point)+edx]
  1397. mov ebp,DWORD [ebp*4+ecx]
  1398. add ebp,edx
  1399. xor ecx,ecx
  1400. xor edx,edx
  1401. jmp ebp
  1402. L$012ej7:
  1403. mov dh,BYTE [6+esi]
  1404. shl edx,8
  1405. L$013ej6:
  1406. mov dh,BYTE [5+esi]
  1407. L$014ej5:
  1408. mov dl,BYTE [4+esi]
  1409. L$015ej4:
  1410. mov ecx,DWORD [esi]
  1411. jmp NEAR L$016ejend
  1412. L$017ej3:
  1413. mov ch,BYTE [2+esi]
  1414. shl ecx,8
  1415. L$018ej2:
  1416. mov ch,BYTE [1+esi]
  1417. L$019ej1:
  1418. mov cl,BYTE [esi]
  1419. L$016ejend:
  1420. xor eax,ecx
  1421. xor ebx,edx
  1422. mov DWORD [12+esp],eax
  1423. mov DWORD [16+esp],ebx
  1424. call L$_DES_encrypt1_begin
  1425. mov eax,DWORD [12+esp]
  1426. mov ebx,DWORD [16+esp]
  1427. mov DWORD [edi],eax
  1428. mov DWORD [4+edi],ebx
  1429. jmp NEAR L$009finish
  1430. L$006decrypt:
  1431. and ebp,4294967288
  1432. mov eax,DWORD [20+esp]
  1433. mov ebx,DWORD [24+esp]
  1434. jz NEAR L$020decrypt_finish
  1435. L$021decrypt_loop:
  1436. mov eax,DWORD [esi]
  1437. mov ebx,DWORD [4+esi]
  1438. mov DWORD [12+esp],eax
  1439. mov DWORD [16+esp],ebx
  1440. call L$_DES_encrypt1_begin
  1441. mov eax,DWORD [12+esp]
  1442. mov ebx,DWORD [16+esp]
  1443. mov ecx,DWORD [20+esp]
  1444. mov edx,DWORD [24+esp]
  1445. xor ecx,eax
  1446. xor edx,ebx
  1447. mov eax,DWORD [esi]
  1448. mov ebx,DWORD [4+esi]
  1449. mov DWORD [edi],ecx
  1450. mov DWORD [4+edi],edx
  1451. mov DWORD [20+esp],eax
  1452. mov DWORD [24+esp],ebx
  1453. add esi,8
  1454. add edi,8
  1455. sub ebp,8
  1456. jnz NEAR L$021decrypt_loop
  1457. L$020decrypt_finish:
  1458. mov ebp,DWORD [56+esp]
  1459. and ebp,7
  1460. jz NEAR L$009finish
  1461. mov eax,DWORD [esi]
  1462. mov ebx,DWORD [4+esi]
  1463. mov DWORD [12+esp],eax
  1464. mov DWORD [16+esp],ebx
  1465. call L$_DES_encrypt1_begin
  1466. mov eax,DWORD [12+esp]
  1467. mov ebx,DWORD [16+esp]
  1468. mov ecx,DWORD [20+esp]
  1469. mov edx,DWORD [24+esp]
  1470. xor ecx,eax
  1471. xor edx,ebx
  1472. mov eax,DWORD [esi]
  1473. mov ebx,DWORD [4+esi]
  1474. L$022dj7:
  1475. ror edx,16
  1476. mov BYTE [6+edi],dl
  1477. shr edx,16
  1478. L$023dj6:
  1479. mov BYTE [5+edi],dh
  1480. L$024dj5:
  1481. mov BYTE [4+edi],dl
  1482. L$025dj4:
  1483. mov DWORD [edi],ecx
  1484. jmp NEAR L$026djend
  1485. L$027dj3:
  1486. ror ecx,16
  1487. mov BYTE [2+edi],cl
  1488. shl ecx,16
  1489. L$028dj2:
  1490. mov BYTE [1+esi],ch
  1491. L$029dj1:
  1492. mov BYTE [esi],cl
  1493. L$026djend:
  1494. jmp NEAR L$009finish
  1495. L$009finish:
  1496. mov ecx,DWORD [64+esp]
  1497. add esp,28
  1498. mov DWORD [ecx],eax
  1499. mov DWORD [4+ecx],ebx
  1500. pop edi
  1501. pop esi
  1502. pop ebx
  1503. pop ebp
  1504. ret
  1505. align 64
  1506. L$011cbc_enc_jmp_table:
  1507. dd 0
  1508. dd L$019ej1-L$010PIC_point
  1509. dd L$018ej2-L$010PIC_point
  1510. dd L$017ej3-L$010PIC_point
  1511. dd L$015ej4-L$010PIC_point
  1512. dd L$014ej5-L$010PIC_point
  1513. dd L$013ej6-L$010PIC_point
  1514. dd L$012ej7-L$010PIC_point
  1515. align 64
  1516. global _DES_ede3_cbc_encrypt
  1517. align 16
  1518. _DES_ede3_cbc_encrypt:
  1519. L$_DES_ede3_cbc_encrypt_begin:
  1520. ;
  1521. push ebp
  1522. push ebx
  1523. push esi
  1524. push edi
  1525. mov ebp,DWORD [28+esp]
  1526. ; getting iv ptr from parameter 6
  1527. mov ebx,DWORD [44+esp]
  1528. mov esi,DWORD [ebx]
  1529. mov edi,DWORD [4+ebx]
  1530. push edi
  1531. push esi
  1532. push edi
  1533. push esi
  1534. mov ebx,esp
  1535. mov esi,DWORD [36+esp]
  1536. mov edi,DWORD [40+esp]
  1537. ; getting encrypt flag from parameter 7
  1538. mov ecx,DWORD [64+esp]
  1539. ; get and push parameter 5
  1540. mov eax,DWORD [56+esp]
  1541. push eax
  1542. ; get and push parameter 4
  1543. mov eax,DWORD [56+esp]
  1544. push eax
  1545. ; get and push parameter 3
  1546. mov eax,DWORD [56+esp]
  1547. push eax
  1548. push ebx
  1549. cmp ecx,0
  1550. jz NEAR L$030decrypt
  1551. and ebp,4294967288
  1552. mov eax,DWORD [16+esp]
  1553. mov ebx,DWORD [20+esp]
  1554. jz NEAR L$031encrypt_finish
  1555. L$032encrypt_loop:
  1556. mov ecx,DWORD [esi]
  1557. mov edx,DWORD [4+esi]
  1558. xor eax,ecx
  1559. xor ebx,edx
  1560. mov DWORD [16+esp],eax
  1561. mov DWORD [20+esp],ebx
  1562. call L$_DES_encrypt3_begin
  1563. mov eax,DWORD [16+esp]
  1564. mov ebx,DWORD [20+esp]
  1565. mov DWORD [edi],eax
  1566. mov DWORD [4+edi],ebx
  1567. add esi,8
  1568. add edi,8
  1569. sub ebp,8
  1570. jnz NEAR L$032encrypt_loop
  1571. L$031encrypt_finish:
  1572. mov ebp,DWORD [60+esp]
  1573. and ebp,7
  1574. jz NEAR L$033finish
  1575. call L$034PIC_point
  1576. L$034PIC_point:
  1577. pop edx
  1578. lea ecx,[(L$035cbc_enc_jmp_table-L$034PIC_point)+edx]
  1579. mov ebp,DWORD [ebp*4+ecx]
  1580. add ebp,edx
  1581. xor ecx,ecx
  1582. xor edx,edx
  1583. jmp ebp
  1584. L$036ej7:
  1585. mov dh,BYTE [6+esi]
  1586. shl edx,8
  1587. L$037ej6:
  1588. mov dh,BYTE [5+esi]
  1589. L$038ej5:
  1590. mov dl,BYTE [4+esi]
  1591. L$039ej4:
  1592. mov ecx,DWORD [esi]
  1593. jmp NEAR L$040ejend
  1594. L$041ej3:
  1595. mov ch,BYTE [2+esi]
  1596. shl ecx,8
  1597. L$042ej2:
  1598. mov ch,BYTE [1+esi]
  1599. L$043ej1:
  1600. mov cl,BYTE [esi]
  1601. L$040ejend:
  1602. xor eax,ecx
  1603. xor ebx,edx
  1604. mov DWORD [16+esp],eax
  1605. mov DWORD [20+esp],ebx
  1606. call L$_DES_encrypt3_begin
  1607. mov eax,DWORD [16+esp]
  1608. mov ebx,DWORD [20+esp]
  1609. mov DWORD [edi],eax
  1610. mov DWORD [4+edi],ebx
  1611. jmp NEAR L$033finish
  1612. L$030decrypt:
  1613. and ebp,4294967288
  1614. mov eax,DWORD [24+esp]
  1615. mov ebx,DWORD [28+esp]
  1616. jz NEAR L$044decrypt_finish
  1617. L$045decrypt_loop:
  1618. mov eax,DWORD [esi]
  1619. mov ebx,DWORD [4+esi]
  1620. mov DWORD [16+esp],eax
  1621. mov DWORD [20+esp],ebx
  1622. call L$_DES_decrypt3_begin
  1623. mov eax,DWORD [16+esp]
  1624. mov ebx,DWORD [20+esp]
  1625. mov ecx,DWORD [24+esp]
  1626. mov edx,DWORD [28+esp]
  1627. xor ecx,eax
  1628. xor edx,ebx
  1629. mov eax,DWORD [esi]
  1630. mov ebx,DWORD [4+esi]
  1631. mov DWORD [edi],ecx
  1632. mov DWORD [4+edi],edx
  1633. mov DWORD [24+esp],eax
  1634. mov DWORD [28+esp],ebx
  1635. add esi,8
  1636. add edi,8
  1637. sub ebp,8
  1638. jnz NEAR L$045decrypt_loop
  1639. L$044decrypt_finish:
  1640. mov ebp,DWORD [60+esp]
  1641. and ebp,7
  1642. jz NEAR L$033finish
  1643. mov eax,DWORD [esi]
  1644. mov ebx,DWORD [4+esi]
  1645. mov DWORD [16+esp],eax
  1646. mov DWORD [20+esp],ebx
  1647. call L$_DES_decrypt3_begin
  1648. mov eax,DWORD [16+esp]
  1649. mov ebx,DWORD [20+esp]
  1650. mov ecx,DWORD [24+esp]
  1651. mov edx,DWORD [28+esp]
  1652. xor ecx,eax
  1653. xor edx,ebx
  1654. mov eax,DWORD [esi]
  1655. mov ebx,DWORD [4+esi]
  1656. L$046dj7:
  1657. ror edx,16
  1658. mov BYTE [6+edi],dl
  1659. shr edx,16
  1660. L$047dj6:
  1661. mov BYTE [5+edi],dh
  1662. L$048dj5:
  1663. mov BYTE [4+edi],dl
  1664. L$049dj4:
  1665. mov DWORD [edi],ecx
  1666. jmp NEAR L$050djend
  1667. L$051dj3:
  1668. ror ecx,16
  1669. mov BYTE [2+edi],cl
  1670. shl ecx,16
  1671. L$052dj2:
  1672. mov BYTE [1+esi],ch
  1673. L$053dj1:
  1674. mov BYTE [esi],cl
  1675. L$050djend:
  1676. jmp NEAR L$033finish
  1677. L$033finish:
  1678. mov ecx,DWORD [76+esp]
  1679. add esp,32
  1680. mov DWORD [ecx],eax
  1681. mov DWORD [4+ecx],ebx
  1682. pop edi
  1683. pop esi
  1684. pop ebx
  1685. pop ebp
  1686. ret
  1687. align 64
  1688. L$035cbc_enc_jmp_table:
  1689. dd 0
  1690. dd L$043ej1-L$034PIC_point
  1691. dd L$042ej2-L$034PIC_point
  1692. dd L$041ej3-L$034PIC_point
  1693. dd L$039ej4-L$034PIC_point
  1694. dd L$038ej5-L$034PIC_point
  1695. dd L$037ej6-L$034PIC_point
  1696. dd L$036ej7-L$034PIC_point
  1697. align 64
  1698. align 64
  1699. _DES_SPtrans:
  1700. L$des_sptrans:
  1701. dd 34080768,524288,33554434,34080770
  1702. dd 33554432,526338,524290,33554434
  1703. dd 526338,34080768,34078720,2050
  1704. dd 33556482,33554432,0,524290
  1705. dd 524288,2,33556480,526336
  1706. dd 34080770,34078720,2050,33556480
  1707. dd 2,2048,526336,34078722
  1708. dd 2048,33556482,34078722,0
  1709. dd 0,34080770,33556480,524290
  1710. dd 34080768,524288,2050,33556480
  1711. dd 34078722,2048,526336,33554434
  1712. dd 526338,2,33554434,34078720
  1713. dd 34080770,526336,34078720,33556482
  1714. dd 33554432,2050,524290,0
  1715. dd 524288,33554432,33556482,34080768
  1716. dd 2,34078722,2048,526338
  1717. dd 1074823184,0,1081344,1074790400
  1718. dd 1073741840,32784,1073774592,1081344
  1719. dd 32768,1074790416,16,1073774592
  1720. dd 1048592,1074823168,1074790400,16
  1721. dd 1048576,1073774608,1074790416,32768
  1722. dd 1081360,1073741824,0,1048592
  1723. dd 1073774608,1081360,1074823168,1073741840
  1724. dd 1073741824,1048576,32784,1074823184
  1725. dd 1048592,1074823168,1073774592,1081360
  1726. dd 1074823184,1048592,1073741840,0
  1727. dd 1073741824,32784,1048576,1074790416
  1728. dd 32768,1073741824,1081360,1073774608
  1729. dd 1074823168,32768,0,1073741840
  1730. dd 16,1074823184,1081344,1074790400
  1731. dd 1074790416,1048576,32784,1073774592
  1732. dd 1073774608,16,1074790400,1081344
  1733. dd 67108865,67371264,256,67109121
  1734. dd 262145,67108864,67109121,262400
  1735. dd 67109120,262144,67371008,1
  1736. dd 67371265,257,1,67371009
  1737. dd 0,262145,67371264,256
  1738. dd 257,67371265,262144,67108865
  1739. dd 67371009,67109120,262401,67371008
  1740. dd 262400,0,67108864,262401
  1741. dd 67371264,256,1,262144
  1742. dd 257,262145,67371008,67109121
  1743. dd 0,67371264,262400,67371009
  1744. dd 262145,67108864,67371265,1
  1745. dd 262401,67108865,67108864,67371265
  1746. dd 262144,67109120,67109121,262400
  1747. dd 67109120,0,67371009,257
  1748. dd 67108865,262401,256,67371008
  1749. dd 4198408,268439552,8,272633864
  1750. dd 0,272629760,268439560,4194312
  1751. dd 272633856,268435464,268435456,4104
  1752. dd 268435464,4198408,4194304,268435456
  1753. dd 272629768,4198400,4096,8
  1754. dd 4198400,268439560,272629760,4096
  1755. dd 4104,0,4194312,272633856
  1756. dd 268439552,272629768,272633864,4194304
  1757. dd 272629768,4104,4194304,268435464
  1758. dd 4198400,268439552,8,272629760
  1759. dd 268439560,0,4096,4194312
  1760. dd 0,272629768,272633856,4096
  1761. dd 268435456,272633864,4198408,4194304
  1762. dd 272633864,8,268439552,4198408
  1763. dd 4194312,4198400,272629760,268439560
  1764. dd 4104,268435456,268435464,272633856
  1765. dd 134217728,65536,1024,134284320
  1766. dd 134283296,134218752,66592,134283264
  1767. dd 65536,32,134217760,66560
  1768. dd 134218784,134283296,134284288,0
  1769. dd 66560,134217728,65568,1056
  1770. dd 134218752,66592,0,134217760
  1771. dd 32,134218784,134284320,65568
  1772. dd 134283264,1024,1056,134284288
  1773. dd 134284288,134218784,65568,134283264
  1774. dd 65536,32,134217760,134218752
  1775. dd 134217728,66560,134284320,0
  1776. dd 66592,134217728,1024,65568
  1777. dd 134218784,1024,0,134284320
  1778. dd 134283296,134284288,1056,65536
  1779. dd 66560,134283296,134218752,1056
  1780. dd 32,66592,134283264,134217760
  1781. dd 2147483712,2097216,0,2149588992
  1782. dd 2097216,8192,2147491904,2097152
  1783. dd 8256,2149589056,2105344,2147483648
  1784. dd 2147491840,2147483712,2149580800,2105408
  1785. dd 2097152,2147491904,2149580864,0
  1786. dd 8192,64,2149588992,2149580864
  1787. dd 2149589056,2149580800,2147483648,8256
  1788. dd 64,2105344,2105408,2147491840
  1789. dd 8256,2147483648,2147491840,2105408
  1790. dd 2149588992,2097216,0,2147491840
  1791. dd 2147483648,8192,2149580864,2097152
  1792. dd 2097216,2149589056,2105344,64
  1793. dd 2149589056,2105344,2097152,2147491904
  1794. dd 2147483712,2149580800,2105408,0
  1795. dd 8192,2147483712,2147491904,2149588992
  1796. dd 2149580800,8256,64,2149580864
  1797. dd 16384,512,16777728,16777220
  1798. dd 16794116,16388,16896,0
  1799. dd 16777216,16777732,516,16793600
  1800. dd 4,16794112,16793600,516
  1801. dd 16777732,16384,16388,16794116
  1802. dd 0,16777728,16777220,16896
  1803. dd 16793604,16900,16794112,4
  1804. dd 16900,16793604,512,16777216
  1805. dd 16900,16793600,16793604,516
  1806. dd 16384,512,16777216,16793604
  1807. dd 16777732,16900,16896,0
  1808. dd 512,16777220,4,16777728
  1809. dd 0,16777732,16777728,16896
  1810. dd 516,16384,16794116,16777216
  1811. dd 16794112,4,16388,16794116
  1812. dd 16777220,16794112,16793600,16388
  1813. dd 545259648,545390592,131200,0
  1814. dd 537001984,8388736,545259520,545390720
  1815. dd 128,536870912,8519680,131200
  1816. dd 8519808,537002112,536871040,545259520
  1817. dd 131072,8519808,8388736,537001984
  1818. dd 545390720,536871040,0,8519680
  1819. dd 536870912,8388608,537002112,545259648
  1820. dd 8388608,131072,545390592,128
  1821. dd 8388608,131072,536871040,545390720
  1822. dd 131200,536870912,0,8519680
  1823. dd 545259648,537002112,537001984,8388736
  1824. dd 545390592,128,8388736,537001984
  1825. dd 545390720,8388608,545259520,536871040
  1826. dd 8519680,131200,537002112,545259520
  1827. dd 128,545390592,8519808,0
  1828. dd 536870912,545259648,131072,8519808