cmll-x86_64.masm 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164
  1. OPTION DOTNAME
  2. .text$ SEGMENT ALIGN(256) 'CODE'
  3. PUBLIC Camellia_EncryptBlock
  4. ALIGN 16
  5. Camellia_EncryptBlock PROC PUBLIC
  6. mov eax,128
  7. sub eax,ecx
  8. mov ecx,3
  9. adc ecx,0
  10. jmp $L$enc_rounds
  11. Camellia_EncryptBlock ENDP
  12. PUBLIC Camellia_EncryptBlock_Rounds
  13. ALIGN 16
  14. $L$enc_rounds::
  15. Camellia_EncryptBlock_Rounds PROC PUBLIC
  16. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  17. mov QWORD PTR[16+rsp],rsi
  18. mov rax,rsp
  19. $L$SEH_begin_Camellia_EncryptBlock_Rounds::
  20. mov rdi,rcx
  21. mov rsi,rdx
  22. mov rdx,r8
  23. mov rcx,r9
  24. push rbx
  25. push rbp
  26. push r13
  27. push r14
  28. push r15
  29. $L$enc_prologue::
  30. mov r13,rcx
  31. mov r14,rdx
  32. shl edi,6
  33. lea rbp,QWORD PTR[$L$Camellia_SBOX]
  34. lea r15,QWORD PTR[rdi*1+r14]
  35. mov r8d,DWORD PTR[rsi]
  36. mov r9d,DWORD PTR[4+rsi]
  37. mov r10d,DWORD PTR[8+rsi]
  38. bswap r8d
  39. mov r11d,DWORD PTR[12+rsi]
  40. bswap r9d
  41. bswap r10d
  42. bswap r11d
  43. call _x86_64_Camellia_encrypt
  44. bswap r8d
  45. bswap r9d
  46. bswap r10d
  47. mov DWORD PTR[r13],r8d
  48. bswap r11d
  49. mov DWORD PTR[4+r13],r9d
  50. mov DWORD PTR[8+r13],r10d
  51. mov DWORD PTR[12+r13],r11d
  52. mov r15,QWORD PTR[rsp]
  53. mov r14,QWORD PTR[8+rsp]
  54. mov r13,QWORD PTR[16+rsp]
  55. mov rbp,QWORD PTR[24+rsp]
  56. mov rbx,QWORD PTR[32+rsp]
  57. lea rsp,QWORD PTR[40+rsp]
  58. $L$enc_epilogue::
  59. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  60. mov rsi,QWORD PTR[16+rsp]
  61. DB 0F3h,0C3h ;repret
  62. $L$SEH_end_Camellia_EncryptBlock_Rounds::
  63. Camellia_EncryptBlock_Rounds ENDP
  64. ALIGN 16
  65. _x86_64_Camellia_encrypt PROC PRIVATE
  66. xor r9d,DWORD PTR[r14]
  67. xor r8d,DWORD PTR[4+r14]
  68. xor r11d,DWORD PTR[8+r14]
  69. xor r10d,DWORD PTR[12+r14]
  70. ALIGN 16
  71. $L$eloop::
  72. mov ebx,DWORD PTR[16+r14]
  73. mov eax,DWORD PTR[20+r14]
  74. xor eax,r8d
  75. xor ebx,r9d
  76. movzx esi,ah
  77. movzx edi,bl
  78. mov edx,DWORD PTR[2052+rsi*8+rbp]
  79. mov ecx,DWORD PTR[rdi*8+rbp]
  80. movzx esi,al
  81. shr eax,16
  82. movzx edi,bh
  83. xor edx,DWORD PTR[4+rsi*8+rbp]
  84. shr ebx,16
  85. xor ecx,DWORD PTR[4+rdi*8+rbp]
  86. movzx esi,ah
  87. movzx edi,bl
  88. xor edx,DWORD PTR[rsi*8+rbp]
  89. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  90. movzx esi,al
  91. movzx edi,bh
  92. xor edx,DWORD PTR[2048+rsi*8+rbp]
  93. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  94. mov ebx,DWORD PTR[24+r14]
  95. mov eax,DWORD PTR[28+r14]
  96. xor ecx,edx
  97. ror edx,8
  98. xor r10d,ecx
  99. xor r11d,ecx
  100. xor r11d,edx
  101. xor eax,r10d
  102. xor ebx,r11d
  103. movzx esi,ah
  104. movzx edi,bl
  105. mov edx,DWORD PTR[2052+rsi*8+rbp]
  106. mov ecx,DWORD PTR[rdi*8+rbp]
  107. movzx esi,al
  108. shr eax,16
  109. movzx edi,bh
  110. xor edx,DWORD PTR[4+rsi*8+rbp]
  111. shr ebx,16
  112. xor ecx,DWORD PTR[4+rdi*8+rbp]
  113. movzx esi,ah
  114. movzx edi,bl
  115. xor edx,DWORD PTR[rsi*8+rbp]
  116. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  117. movzx esi,al
  118. movzx edi,bh
  119. xor edx,DWORD PTR[2048+rsi*8+rbp]
  120. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  121. mov ebx,DWORD PTR[32+r14]
  122. mov eax,DWORD PTR[36+r14]
  123. xor ecx,edx
  124. ror edx,8
  125. xor r8d,ecx
  126. xor r9d,ecx
  127. xor r9d,edx
  128. xor eax,r8d
  129. xor ebx,r9d
  130. movzx esi,ah
  131. movzx edi,bl
  132. mov edx,DWORD PTR[2052+rsi*8+rbp]
  133. mov ecx,DWORD PTR[rdi*8+rbp]
  134. movzx esi,al
  135. shr eax,16
  136. movzx edi,bh
  137. xor edx,DWORD PTR[4+rsi*8+rbp]
  138. shr ebx,16
  139. xor ecx,DWORD PTR[4+rdi*8+rbp]
  140. movzx esi,ah
  141. movzx edi,bl
  142. xor edx,DWORD PTR[rsi*8+rbp]
  143. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  144. movzx esi,al
  145. movzx edi,bh
  146. xor edx,DWORD PTR[2048+rsi*8+rbp]
  147. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  148. mov ebx,DWORD PTR[40+r14]
  149. mov eax,DWORD PTR[44+r14]
  150. xor ecx,edx
  151. ror edx,8
  152. xor r10d,ecx
  153. xor r11d,ecx
  154. xor r11d,edx
  155. xor eax,r10d
  156. xor ebx,r11d
  157. movzx esi,ah
  158. movzx edi,bl
  159. mov edx,DWORD PTR[2052+rsi*8+rbp]
  160. mov ecx,DWORD PTR[rdi*8+rbp]
  161. movzx esi,al
  162. shr eax,16
  163. movzx edi,bh
  164. xor edx,DWORD PTR[4+rsi*8+rbp]
  165. shr ebx,16
  166. xor ecx,DWORD PTR[4+rdi*8+rbp]
  167. movzx esi,ah
  168. movzx edi,bl
  169. xor edx,DWORD PTR[rsi*8+rbp]
  170. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  171. movzx esi,al
  172. movzx edi,bh
  173. xor edx,DWORD PTR[2048+rsi*8+rbp]
  174. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  175. mov ebx,DWORD PTR[48+r14]
  176. mov eax,DWORD PTR[52+r14]
  177. xor ecx,edx
  178. ror edx,8
  179. xor r8d,ecx
  180. xor r9d,ecx
  181. xor r9d,edx
  182. xor eax,r8d
  183. xor ebx,r9d
  184. movzx esi,ah
  185. movzx edi,bl
  186. mov edx,DWORD PTR[2052+rsi*8+rbp]
  187. mov ecx,DWORD PTR[rdi*8+rbp]
  188. movzx esi,al
  189. shr eax,16
  190. movzx edi,bh
  191. xor edx,DWORD PTR[4+rsi*8+rbp]
  192. shr ebx,16
  193. xor ecx,DWORD PTR[4+rdi*8+rbp]
  194. movzx esi,ah
  195. movzx edi,bl
  196. xor edx,DWORD PTR[rsi*8+rbp]
  197. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  198. movzx esi,al
  199. movzx edi,bh
  200. xor edx,DWORD PTR[2048+rsi*8+rbp]
  201. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  202. mov ebx,DWORD PTR[56+r14]
  203. mov eax,DWORD PTR[60+r14]
  204. xor ecx,edx
  205. ror edx,8
  206. xor r10d,ecx
  207. xor r11d,ecx
  208. xor r11d,edx
  209. xor eax,r10d
  210. xor ebx,r11d
  211. movzx esi,ah
  212. movzx edi,bl
  213. mov edx,DWORD PTR[2052+rsi*8+rbp]
  214. mov ecx,DWORD PTR[rdi*8+rbp]
  215. movzx esi,al
  216. shr eax,16
  217. movzx edi,bh
  218. xor edx,DWORD PTR[4+rsi*8+rbp]
  219. shr ebx,16
  220. xor ecx,DWORD PTR[4+rdi*8+rbp]
  221. movzx esi,ah
  222. movzx edi,bl
  223. xor edx,DWORD PTR[rsi*8+rbp]
  224. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  225. movzx esi,al
  226. movzx edi,bh
  227. xor edx,DWORD PTR[2048+rsi*8+rbp]
  228. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  229. mov ebx,DWORD PTR[64+r14]
  230. mov eax,DWORD PTR[68+r14]
  231. xor ecx,edx
  232. ror edx,8
  233. xor r8d,ecx
  234. xor r9d,ecx
  235. xor r9d,edx
  236. lea r14,QWORD PTR[64+r14]
  237. cmp r14,r15
  238. mov edx,DWORD PTR[8+r14]
  239. mov ecx,DWORD PTR[12+r14]
  240. je $L$edone
  241. and eax,r8d
  242. or edx,r11d
  243. rol eax,1
  244. xor r10d,edx
  245. xor r9d,eax
  246. and ecx,r10d
  247. or ebx,r9d
  248. rol ecx,1
  249. xor r8d,ebx
  250. xor r11d,ecx
  251. jmp $L$eloop
  252. ALIGN 16
  253. $L$edone::
  254. xor eax,r10d
  255. xor ebx,r11d
  256. xor ecx,r8d
  257. xor edx,r9d
  258. mov r8d,eax
  259. mov r9d,ebx
  260. mov r10d,ecx
  261. mov r11d,edx
  262. DB 0f3h,0c3h
  263. _x86_64_Camellia_encrypt ENDP
  264. PUBLIC Camellia_DecryptBlock
  265. ALIGN 16
  266. Camellia_DecryptBlock PROC PUBLIC
  267. mov eax,128
  268. sub eax,ecx
  269. mov ecx,3
  270. adc ecx,0
  271. jmp $L$dec_rounds
  272. Camellia_DecryptBlock ENDP
  273. PUBLIC Camellia_DecryptBlock_Rounds
  274. ALIGN 16
  275. $L$dec_rounds::
  276. Camellia_DecryptBlock_Rounds PROC PUBLIC
  277. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  278. mov QWORD PTR[16+rsp],rsi
  279. mov rax,rsp
  280. $L$SEH_begin_Camellia_DecryptBlock_Rounds::
  281. mov rdi,rcx
  282. mov rsi,rdx
  283. mov rdx,r8
  284. mov rcx,r9
  285. push rbx
  286. push rbp
  287. push r13
  288. push r14
  289. push r15
  290. $L$dec_prologue::
  291. mov r13,rcx
  292. mov r15,rdx
  293. shl edi,6
  294. lea rbp,QWORD PTR[$L$Camellia_SBOX]
  295. lea r14,QWORD PTR[rdi*1+r15]
  296. mov r8d,DWORD PTR[rsi]
  297. mov r9d,DWORD PTR[4+rsi]
  298. mov r10d,DWORD PTR[8+rsi]
  299. bswap r8d
  300. mov r11d,DWORD PTR[12+rsi]
  301. bswap r9d
  302. bswap r10d
  303. bswap r11d
  304. call _x86_64_Camellia_decrypt
  305. bswap r8d
  306. bswap r9d
  307. bswap r10d
  308. mov DWORD PTR[r13],r8d
  309. bswap r11d
  310. mov DWORD PTR[4+r13],r9d
  311. mov DWORD PTR[8+r13],r10d
  312. mov DWORD PTR[12+r13],r11d
  313. mov r15,QWORD PTR[rsp]
  314. mov r14,QWORD PTR[8+rsp]
  315. mov r13,QWORD PTR[16+rsp]
  316. mov rbp,QWORD PTR[24+rsp]
  317. mov rbx,QWORD PTR[32+rsp]
  318. lea rsp,QWORD PTR[40+rsp]
  319. $L$dec_epilogue::
  320. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  321. mov rsi,QWORD PTR[16+rsp]
  322. DB 0F3h,0C3h ;repret
  323. $L$SEH_end_Camellia_DecryptBlock_Rounds::
  324. Camellia_DecryptBlock_Rounds ENDP
  325. ALIGN 16
  326. _x86_64_Camellia_decrypt PROC PRIVATE
  327. xor r9d,DWORD PTR[r14]
  328. xor r8d,DWORD PTR[4+r14]
  329. xor r11d,DWORD PTR[8+r14]
  330. xor r10d,DWORD PTR[12+r14]
  331. ALIGN 16
  332. $L$dloop::
  333. mov ebx,DWORD PTR[((-8))+r14]
  334. mov eax,DWORD PTR[((-4))+r14]
  335. xor eax,r8d
  336. xor ebx,r9d
  337. movzx esi,ah
  338. movzx edi,bl
  339. mov edx,DWORD PTR[2052+rsi*8+rbp]
  340. mov ecx,DWORD PTR[rdi*8+rbp]
  341. movzx esi,al
  342. shr eax,16
  343. movzx edi,bh
  344. xor edx,DWORD PTR[4+rsi*8+rbp]
  345. shr ebx,16
  346. xor ecx,DWORD PTR[4+rdi*8+rbp]
  347. movzx esi,ah
  348. movzx edi,bl
  349. xor edx,DWORD PTR[rsi*8+rbp]
  350. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  351. movzx esi,al
  352. movzx edi,bh
  353. xor edx,DWORD PTR[2048+rsi*8+rbp]
  354. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  355. mov ebx,DWORD PTR[((-16))+r14]
  356. mov eax,DWORD PTR[((-12))+r14]
  357. xor ecx,edx
  358. ror edx,8
  359. xor r10d,ecx
  360. xor r11d,ecx
  361. xor r11d,edx
  362. xor eax,r10d
  363. xor ebx,r11d
  364. movzx esi,ah
  365. movzx edi,bl
  366. mov edx,DWORD PTR[2052+rsi*8+rbp]
  367. mov ecx,DWORD PTR[rdi*8+rbp]
  368. movzx esi,al
  369. shr eax,16
  370. movzx edi,bh
  371. xor edx,DWORD PTR[4+rsi*8+rbp]
  372. shr ebx,16
  373. xor ecx,DWORD PTR[4+rdi*8+rbp]
  374. movzx esi,ah
  375. movzx edi,bl
  376. xor edx,DWORD PTR[rsi*8+rbp]
  377. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  378. movzx esi,al
  379. movzx edi,bh
  380. xor edx,DWORD PTR[2048+rsi*8+rbp]
  381. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  382. mov ebx,DWORD PTR[((-24))+r14]
  383. mov eax,DWORD PTR[((-20))+r14]
  384. xor ecx,edx
  385. ror edx,8
  386. xor r8d,ecx
  387. xor r9d,ecx
  388. xor r9d,edx
  389. xor eax,r8d
  390. xor ebx,r9d
  391. movzx esi,ah
  392. movzx edi,bl
  393. mov edx,DWORD PTR[2052+rsi*8+rbp]
  394. mov ecx,DWORD PTR[rdi*8+rbp]
  395. movzx esi,al
  396. shr eax,16
  397. movzx edi,bh
  398. xor edx,DWORD PTR[4+rsi*8+rbp]
  399. shr ebx,16
  400. xor ecx,DWORD PTR[4+rdi*8+rbp]
  401. movzx esi,ah
  402. movzx edi,bl
  403. xor edx,DWORD PTR[rsi*8+rbp]
  404. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  405. movzx esi,al
  406. movzx edi,bh
  407. xor edx,DWORD PTR[2048+rsi*8+rbp]
  408. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  409. mov ebx,DWORD PTR[((-32))+r14]
  410. mov eax,DWORD PTR[((-28))+r14]
  411. xor ecx,edx
  412. ror edx,8
  413. xor r10d,ecx
  414. xor r11d,ecx
  415. xor r11d,edx
  416. xor eax,r10d
  417. xor ebx,r11d
  418. movzx esi,ah
  419. movzx edi,bl
  420. mov edx,DWORD PTR[2052+rsi*8+rbp]
  421. mov ecx,DWORD PTR[rdi*8+rbp]
  422. movzx esi,al
  423. shr eax,16
  424. movzx edi,bh
  425. xor edx,DWORD PTR[4+rsi*8+rbp]
  426. shr ebx,16
  427. xor ecx,DWORD PTR[4+rdi*8+rbp]
  428. movzx esi,ah
  429. movzx edi,bl
  430. xor edx,DWORD PTR[rsi*8+rbp]
  431. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  432. movzx esi,al
  433. movzx edi,bh
  434. xor edx,DWORD PTR[2048+rsi*8+rbp]
  435. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  436. mov ebx,DWORD PTR[((-40))+r14]
  437. mov eax,DWORD PTR[((-36))+r14]
  438. xor ecx,edx
  439. ror edx,8
  440. xor r8d,ecx
  441. xor r9d,ecx
  442. xor r9d,edx
  443. xor eax,r8d
  444. xor ebx,r9d
  445. movzx esi,ah
  446. movzx edi,bl
  447. mov edx,DWORD PTR[2052+rsi*8+rbp]
  448. mov ecx,DWORD PTR[rdi*8+rbp]
  449. movzx esi,al
  450. shr eax,16
  451. movzx edi,bh
  452. xor edx,DWORD PTR[4+rsi*8+rbp]
  453. shr ebx,16
  454. xor ecx,DWORD PTR[4+rdi*8+rbp]
  455. movzx esi,ah
  456. movzx edi,bl
  457. xor edx,DWORD PTR[rsi*8+rbp]
  458. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  459. movzx esi,al
  460. movzx edi,bh
  461. xor edx,DWORD PTR[2048+rsi*8+rbp]
  462. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  463. mov ebx,DWORD PTR[((-48))+r14]
  464. mov eax,DWORD PTR[((-44))+r14]
  465. xor ecx,edx
  466. ror edx,8
  467. xor r10d,ecx
  468. xor r11d,ecx
  469. xor r11d,edx
  470. xor eax,r10d
  471. xor ebx,r11d
  472. movzx esi,ah
  473. movzx edi,bl
  474. mov edx,DWORD PTR[2052+rsi*8+rbp]
  475. mov ecx,DWORD PTR[rdi*8+rbp]
  476. movzx esi,al
  477. shr eax,16
  478. movzx edi,bh
  479. xor edx,DWORD PTR[4+rsi*8+rbp]
  480. shr ebx,16
  481. xor ecx,DWORD PTR[4+rdi*8+rbp]
  482. movzx esi,ah
  483. movzx edi,bl
  484. xor edx,DWORD PTR[rsi*8+rbp]
  485. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  486. movzx esi,al
  487. movzx edi,bh
  488. xor edx,DWORD PTR[2048+rsi*8+rbp]
  489. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  490. mov ebx,DWORD PTR[((-56))+r14]
  491. mov eax,DWORD PTR[((-52))+r14]
  492. xor ecx,edx
  493. ror edx,8
  494. xor r8d,ecx
  495. xor r9d,ecx
  496. xor r9d,edx
  497. lea r14,QWORD PTR[((-64))+r14]
  498. cmp r14,r15
  499. mov edx,DWORD PTR[r14]
  500. mov ecx,DWORD PTR[4+r14]
  501. je $L$ddone
  502. and eax,r8d
  503. or edx,r11d
  504. rol eax,1
  505. xor r10d,edx
  506. xor r9d,eax
  507. and ecx,r10d
  508. or ebx,r9d
  509. rol ecx,1
  510. xor r8d,ebx
  511. xor r11d,ecx
  512. jmp $L$dloop
  513. ALIGN 16
  514. $L$ddone::
  515. xor ecx,r10d
  516. xor edx,r11d
  517. xor eax,r8d
  518. xor ebx,r9d
  519. mov r8d,ecx
  520. mov r9d,edx
  521. mov r10d,eax
  522. mov r11d,ebx
  523. DB 0f3h,0c3h
  524. _x86_64_Camellia_decrypt ENDP
  525. PUBLIC Camellia_Ekeygen
  526. ALIGN 16
  527. Camellia_Ekeygen PROC PUBLIC
  528. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  529. mov QWORD PTR[16+rsp],rsi
  530. mov rax,rsp
  531. $L$SEH_begin_Camellia_Ekeygen::
  532. mov rdi,rcx
  533. mov rsi,rdx
  534. mov rdx,r8
  535. push rbx
  536. push rbp
  537. push r13
  538. push r14
  539. push r15
  540. $L$key_prologue::
  541. mov r15d,edi
  542. mov r13,rdx
  543. mov r8d,DWORD PTR[rsi]
  544. mov r9d,DWORD PTR[4+rsi]
  545. mov r10d,DWORD PTR[8+rsi]
  546. mov r11d,DWORD PTR[12+rsi]
  547. bswap r8d
  548. bswap r9d
  549. bswap r10d
  550. bswap r11d
  551. mov DWORD PTR[r13],r9d
  552. mov DWORD PTR[4+r13],r8d
  553. mov DWORD PTR[8+r13],r11d
  554. mov DWORD PTR[12+r13],r10d
  555. cmp r15,128
  556. je $L$1st128
  557. mov r8d,DWORD PTR[16+rsi]
  558. mov r9d,DWORD PTR[20+rsi]
  559. cmp r15,192
  560. je $L$1st192
  561. mov r10d,DWORD PTR[24+rsi]
  562. mov r11d,DWORD PTR[28+rsi]
  563. jmp $L$1st256
  564. $L$1st192::
  565. mov r10d,r8d
  566. mov r11d,r9d
  567. not r10d
  568. not r11d
  569. $L$1st256::
  570. bswap r8d
  571. bswap r9d
  572. bswap r10d
  573. bswap r11d
  574. mov DWORD PTR[32+r13],r9d
  575. mov DWORD PTR[36+r13],r8d
  576. mov DWORD PTR[40+r13],r11d
  577. mov DWORD PTR[44+r13],r10d
  578. xor r9d,DWORD PTR[r13]
  579. xor r8d,DWORD PTR[4+r13]
  580. xor r11d,DWORD PTR[8+r13]
  581. xor r10d,DWORD PTR[12+r13]
  582. $L$1st128::
  583. lea r14,QWORD PTR[$L$Camellia_SIGMA]
  584. lea rbp,QWORD PTR[$L$Camellia_SBOX]
  585. mov ebx,DWORD PTR[r14]
  586. mov eax,DWORD PTR[4+r14]
  587. xor eax,r8d
  588. xor ebx,r9d
  589. movzx esi,ah
  590. movzx edi,bl
  591. mov edx,DWORD PTR[2052+rsi*8+rbp]
  592. mov ecx,DWORD PTR[rdi*8+rbp]
  593. movzx esi,al
  594. shr eax,16
  595. movzx edi,bh
  596. xor edx,DWORD PTR[4+rsi*8+rbp]
  597. shr ebx,16
  598. xor ecx,DWORD PTR[4+rdi*8+rbp]
  599. movzx esi,ah
  600. movzx edi,bl
  601. xor edx,DWORD PTR[rsi*8+rbp]
  602. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  603. movzx esi,al
  604. movzx edi,bh
  605. xor edx,DWORD PTR[2048+rsi*8+rbp]
  606. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  607. mov ebx,DWORD PTR[8+r14]
  608. mov eax,DWORD PTR[12+r14]
  609. xor ecx,edx
  610. ror edx,8
  611. xor r10d,ecx
  612. xor r11d,ecx
  613. xor r11d,edx
  614. xor eax,r10d
  615. xor ebx,r11d
  616. movzx esi,ah
  617. movzx edi,bl
  618. mov edx,DWORD PTR[2052+rsi*8+rbp]
  619. mov ecx,DWORD PTR[rdi*8+rbp]
  620. movzx esi,al
  621. shr eax,16
  622. movzx edi,bh
  623. xor edx,DWORD PTR[4+rsi*8+rbp]
  624. shr ebx,16
  625. xor ecx,DWORD PTR[4+rdi*8+rbp]
  626. movzx esi,ah
  627. movzx edi,bl
  628. xor edx,DWORD PTR[rsi*8+rbp]
  629. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  630. movzx esi,al
  631. movzx edi,bh
  632. xor edx,DWORD PTR[2048+rsi*8+rbp]
  633. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  634. mov ebx,DWORD PTR[16+r14]
  635. mov eax,DWORD PTR[20+r14]
  636. xor ecx,edx
  637. ror edx,8
  638. xor r8d,ecx
  639. xor r9d,ecx
  640. xor r9d,edx
  641. xor r9d,DWORD PTR[r13]
  642. xor r8d,DWORD PTR[4+r13]
  643. xor r11d,DWORD PTR[8+r13]
  644. xor r10d,DWORD PTR[12+r13]
  645. xor eax,r8d
  646. xor ebx,r9d
  647. movzx esi,ah
  648. movzx edi,bl
  649. mov edx,DWORD PTR[2052+rsi*8+rbp]
  650. mov ecx,DWORD PTR[rdi*8+rbp]
  651. movzx esi,al
  652. shr eax,16
  653. movzx edi,bh
  654. xor edx,DWORD PTR[4+rsi*8+rbp]
  655. shr ebx,16
  656. xor ecx,DWORD PTR[4+rdi*8+rbp]
  657. movzx esi,ah
  658. movzx edi,bl
  659. xor edx,DWORD PTR[rsi*8+rbp]
  660. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  661. movzx esi,al
  662. movzx edi,bh
  663. xor edx,DWORD PTR[2048+rsi*8+rbp]
  664. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  665. mov ebx,DWORD PTR[24+r14]
  666. mov eax,DWORD PTR[28+r14]
  667. xor ecx,edx
  668. ror edx,8
  669. xor r10d,ecx
  670. xor r11d,ecx
  671. xor r11d,edx
  672. xor eax,r10d
  673. xor ebx,r11d
  674. movzx esi,ah
  675. movzx edi,bl
  676. mov edx,DWORD PTR[2052+rsi*8+rbp]
  677. mov ecx,DWORD PTR[rdi*8+rbp]
  678. movzx esi,al
  679. shr eax,16
  680. movzx edi,bh
  681. xor edx,DWORD PTR[4+rsi*8+rbp]
  682. shr ebx,16
  683. xor ecx,DWORD PTR[4+rdi*8+rbp]
  684. movzx esi,ah
  685. movzx edi,bl
  686. xor edx,DWORD PTR[rsi*8+rbp]
  687. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  688. movzx esi,al
  689. movzx edi,bh
  690. xor edx,DWORD PTR[2048+rsi*8+rbp]
  691. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  692. mov ebx,DWORD PTR[32+r14]
  693. mov eax,DWORD PTR[36+r14]
  694. xor ecx,edx
  695. ror edx,8
  696. xor r8d,ecx
  697. xor r9d,ecx
  698. xor r9d,edx
  699. cmp r15,128
  700. jne $L$2nd256
  701. lea r13,QWORD PTR[128+r13]
  702. shl r8,32
  703. shl r10,32
  704. or r8,r9
  705. or r10,r11
  706. mov rax,QWORD PTR[((-128))+r13]
  707. mov rbx,QWORD PTR[((-120))+r13]
  708. mov QWORD PTR[((-112))+r13],r8
  709. mov QWORD PTR[((-104))+r13],r10
  710. mov r11,rax
  711. shl rax,15
  712. mov r9,rbx
  713. shr r9,49
  714. shr r11,49
  715. or rax,r9
  716. shl rbx,15
  717. or rbx,r11
  718. mov QWORD PTR[((-96))+r13],rax
  719. mov QWORD PTR[((-88))+r13],rbx
  720. mov r11,r8
  721. shl r8,15
  722. mov r9,r10
  723. shr r9,49
  724. shr r11,49
  725. or r8,r9
  726. shl r10,15
  727. or r10,r11
  728. mov QWORD PTR[((-80))+r13],r8
  729. mov QWORD PTR[((-72))+r13],r10
  730. mov r11,r8
  731. shl r8,15
  732. mov r9,r10
  733. shr r9,49
  734. shr r11,49
  735. or r8,r9
  736. shl r10,15
  737. or r10,r11
  738. mov QWORD PTR[((-64))+r13],r8
  739. mov QWORD PTR[((-56))+r13],r10
  740. mov r11,rax
  741. shl rax,30
  742. mov r9,rbx
  743. shr r9,34
  744. shr r11,34
  745. or rax,r9
  746. shl rbx,30
  747. or rbx,r11
  748. mov QWORD PTR[((-48))+r13],rax
  749. mov QWORD PTR[((-40))+r13],rbx
  750. mov r11,r8
  751. shl r8,15
  752. mov r9,r10
  753. shr r9,49
  754. shr r11,49
  755. or r8,r9
  756. shl r10,15
  757. or r10,r11
  758. mov QWORD PTR[((-32))+r13],r8
  759. mov r11,rax
  760. shl rax,15
  761. mov r9,rbx
  762. shr r9,49
  763. shr r11,49
  764. or rax,r9
  765. shl rbx,15
  766. or rbx,r11
  767. mov QWORD PTR[((-24))+r13],rbx
  768. mov r11,r8
  769. shl r8,15
  770. mov r9,r10
  771. shr r9,49
  772. shr r11,49
  773. or r8,r9
  774. shl r10,15
  775. or r10,r11
  776. mov QWORD PTR[((-16))+r13],r8
  777. mov QWORD PTR[((-8))+r13],r10
  778. mov r11,rax
  779. shl rax,17
  780. mov r9,rbx
  781. shr r9,47
  782. shr r11,47
  783. or rax,r9
  784. shl rbx,17
  785. or rbx,r11
  786. mov QWORD PTR[r13],rax
  787. mov QWORD PTR[8+r13],rbx
  788. mov r11,rax
  789. shl rax,17
  790. mov r9,rbx
  791. shr r9,47
  792. shr r11,47
  793. or rax,r9
  794. shl rbx,17
  795. or rbx,r11
  796. mov QWORD PTR[16+r13],rax
  797. mov QWORD PTR[24+r13],rbx
  798. mov r11,r8
  799. shl r8,34
  800. mov r9,r10
  801. shr r9,30
  802. shr r11,30
  803. or r8,r9
  804. shl r10,34
  805. or r10,r11
  806. mov QWORD PTR[32+r13],r8
  807. mov QWORD PTR[40+r13],r10
  808. mov r11,rax
  809. shl rax,17
  810. mov r9,rbx
  811. shr r9,47
  812. shr r11,47
  813. or rax,r9
  814. shl rbx,17
  815. or rbx,r11
  816. mov QWORD PTR[48+r13],rax
  817. mov QWORD PTR[56+r13],rbx
  818. mov r11,r8
  819. shl r8,17
  820. mov r9,r10
  821. shr r9,47
  822. shr r11,47
  823. or r8,r9
  824. shl r10,17
  825. or r10,r11
  826. mov QWORD PTR[64+r13],r8
  827. mov QWORD PTR[72+r13],r10
  828. mov eax,3
  829. jmp $L$done
  830. ALIGN 16
  831. $L$2nd256::
  832. mov DWORD PTR[48+r13],r9d
  833. mov DWORD PTR[52+r13],r8d
  834. mov DWORD PTR[56+r13],r11d
  835. mov DWORD PTR[60+r13],r10d
  836. xor r9d,DWORD PTR[32+r13]
  837. xor r8d,DWORD PTR[36+r13]
  838. xor r11d,DWORD PTR[40+r13]
  839. xor r10d,DWORD PTR[44+r13]
  840. xor eax,r8d
  841. xor ebx,r9d
  842. movzx esi,ah
  843. movzx edi,bl
  844. mov edx,DWORD PTR[2052+rsi*8+rbp]
  845. mov ecx,DWORD PTR[rdi*8+rbp]
  846. movzx esi,al
  847. shr eax,16
  848. movzx edi,bh
  849. xor edx,DWORD PTR[4+rsi*8+rbp]
  850. shr ebx,16
  851. xor ecx,DWORD PTR[4+rdi*8+rbp]
  852. movzx esi,ah
  853. movzx edi,bl
  854. xor edx,DWORD PTR[rsi*8+rbp]
  855. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  856. movzx esi,al
  857. movzx edi,bh
  858. xor edx,DWORD PTR[2048+rsi*8+rbp]
  859. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  860. mov ebx,DWORD PTR[40+r14]
  861. mov eax,DWORD PTR[44+r14]
  862. xor ecx,edx
  863. ror edx,8
  864. xor r10d,ecx
  865. xor r11d,ecx
  866. xor r11d,edx
  867. xor eax,r10d
  868. xor ebx,r11d
  869. movzx esi,ah
  870. movzx edi,bl
  871. mov edx,DWORD PTR[2052+rsi*8+rbp]
  872. mov ecx,DWORD PTR[rdi*8+rbp]
  873. movzx esi,al
  874. shr eax,16
  875. movzx edi,bh
  876. xor edx,DWORD PTR[4+rsi*8+rbp]
  877. shr ebx,16
  878. xor ecx,DWORD PTR[4+rdi*8+rbp]
  879. movzx esi,ah
  880. movzx edi,bl
  881. xor edx,DWORD PTR[rsi*8+rbp]
  882. xor ecx,DWORD PTR[2052+rdi*8+rbp]
  883. movzx esi,al
  884. movzx edi,bh
  885. xor edx,DWORD PTR[2048+rsi*8+rbp]
  886. xor ecx,DWORD PTR[2048+rdi*8+rbp]
  887. mov ebx,DWORD PTR[48+r14]
  888. mov eax,DWORD PTR[52+r14]
  889. xor ecx,edx
  890. ror edx,8
  891. xor r8d,ecx
  892. xor r9d,ecx
  893. xor r9d,edx
  894. mov rax,QWORD PTR[r13]
  895. mov rbx,QWORD PTR[8+r13]
  896. mov rcx,QWORD PTR[32+r13]
  897. mov rdx,QWORD PTR[40+r13]
  898. mov r14,QWORD PTR[48+r13]
  899. mov r15,QWORD PTR[56+r13]
  900. lea r13,QWORD PTR[128+r13]
  901. shl r8,32
  902. shl r10,32
  903. or r8,r9
  904. or r10,r11
  905. mov QWORD PTR[((-112))+r13],r8
  906. mov QWORD PTR[((-104))+r13],r10
  907. mov r11,rcx
  908. shl rcx,15
  909. mov r9,rdx
  910. shr r9,49
  911. shr r11,49
  912. or rcx,r9
  913. shl rdx,15
  914. or rdx,r11
  915. mov QWORD PTR[((-96))+r13],rcx
  916. mov QWORD PTR[((-88))+r13],rdx
  917. mov r11,r14
  918. shl r14,15
  919. mov r9,r15
  920. shr r9,49
  921. shr r11,49
  922. or r14,r9
  923. shl r15,15
  924. or r15,r11
  925. mov QWORD PTR[((-80))+r13],r14
  926. mov QWORD PTR[((-72))+r13],r15
  927. mov r11,rcx
  928. shl rcx,15
  929. mov r9,rdx
  930. shr r9,49
  931. shr r11,49
  932. or rcx,r9
  933. shl rdx,15
  934. or rdx,r11
  935. mov QWORD PTR[((-64))+r13],rcx
  936. mov QWORD PTR[((-56))+r13],rdx
  937. mov r11,r8
  938. shl r8,30
  939. mov r9,r10
  940. shr r9,34
  941. shr r11,34
  942. or r8,r9
  943. shl r10,30
  944. or r10,r11
  945. mov QWORD PTR[((-48))+r13],r8
  946. mov QWORD PTR[((-40))+r13],r10
  947. mov r11,rax
  948. shl rax,45
  949. mov r9,rbx
  950. shr r9,19
  951. shr r11,19
  952. or rax,r9
  953. shl rbx,45
  954. or rbx,r11
  955. mov QWORD PTR[((-32))+r13],rax
  956. mov QWORD PTR[((-24))+r13],rbx
  957. mov r11,r14
  958. shl r14,30
  959. mov r9,r15
  960. shr r9,34
  961. shr r11,34
  962. or r14,r9
  963. shl r15,30
  964. or r15,r11
  965. mov QWORD PTR[((-16))+r13],r14
  966. mov QWORD PTR[((-8))+r13],r15
  967. mov r11,rax
  968. shl rax,15
  969. mov r9,rbx
  970. shr r9,49
  971. shr r11,49
  972. or rax,r9
  973. shl rbx,15
  974. or rbx,r11
  975. mov QWORD PTR[r13],rax
  976. mov QWORD PTR[8+r13],rbx
  977. mov r11,rcx
  978. shl rcx,30
  979. mov r9,rdx
  980. shr r9,34
  981. shr r11,34
  982. or rcx,r9
  983. shl rdx,30
  984. or rdx,r11
  985. mov QWORD PTR[16+r13],rcx
  986. mov QWORD PTR[24+r13],rdx
  987. mov r11,r8
  988. shl r8,30
  989. mov r9,r10
  990. shr r9,34
  991. shr r11,34
  992. or r8,r9
  993. shl r10,30
  994. or r10,r11
  995. mov QWORD PTR[32+r13],r8
  996. mov QWORD PTR[40+r13],r10
  997. mov r11,rax
  998. shl rax,17
  999. mov r9,rbx
  1000. shr r9,47
  1001. shr r11,47
  1002. or rax,r9
  1003. shl rbx,17
  1004. or rbx,r11
  1005. mov QWORD PTR[48+r13],rax
  1006. mov QWORD PTR[56+r13],rbx
  1007. mov r11,r14
  1008. shl r14,32
  1009. mov r9,r15
  1010. shr r9,32
  1011. shr r11,32
  1012. or r14,r9
  1013. shl r15,32
  1014. or r15,r11
  1015. mov QWORD PTR[64+r13],r14
  1016. mov QWORD PTR[72+r13],r15
  1017. mov r11,rcx
  1018. shl rcx,34
  1019. mov r9,rdx
  1020. shr r9,30
  1021. shr r11,30
  1022. or rcx,r9
  1023. shl rdx,34
  1024. or rdx,r11
  1025. mov QWORD PTR[80+r13],rcx
  1026. mov QWORD PTR[88+r13],rdx
  1027. mov r11,r14
  1028. shl r14,17
  1029. mov r9,r15
  1030. shr r9,47
  1031. shr r11,47
  1032. or r14,r9
  1033. shl r15,17
  1034. or r15,r11
  1035. mov QWORD PTR[96+r13],r14
  1036. mov QWORD PTR[104+r13],r15
  1037. mov r11,rax
  1038. shl rax,34
  1039. mov r9,rbx
  1040. shr r9,30
  1041. shr r11,30
  1042. or rax,r9
  1043. shl rbx,34
  1044. or rbx,r11
  1045. mov QWORD PTR[112+r13],rax
  1046. mov QWORD PTR[120+r13],rbx
  1047. mov r11,r8
  1048. shl r8,51
  1049. mov r9,r10
  1050. shr r9,13
  1051. shr r11,13
  1052. or r8,r9
  1053. shl r10,51
  1054. or r10,r11
  1055. mov QWORD PTR[128+r13],r8
  1056. mov QWORD PTR[136+r13],r10
  1057. mov eax,4
  1058. $L$done::
  1059. mov r15,QWORD PTR[rsp]
  1060. mov r14,QWORD PTR[8+rsp]
  1061. mov r13,QWORD PTR[16+rsp]
  1062. mov rbp,QWORD PTR[24+rsp]
  1063. mov rbx,QWORD PTR[32+rsp]
  1064. lea rsp,QWORD PTR[40+rsp]
  1065. $L$key_epilogue::
  1066. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  1067. mov rsi,QWORD PTR[16+rsp]
  1068. DB 0F3h,0C3h ;repret
  1069. $L$SEH_end_Camellia_Ekeygen::
  1070. Camellia_Ekeygen ENDP
  1071. ALIGN 64
  1072. $L$Camellia_SIGMA::
  1073. DD 03bcc908bh,0a09e667fh,04caa73b2h,0b67ae858h
  1074. DD 0e94f82beh,0c6ef372fh,0f1d36f1ch,054ff53a5h
  1075. DD 0de682d1dh,010e527fah,0b3e6c1fdh,0b05688c2h
  1076. DD 0,0,0,0
  1077. $L$Camellia_SBOX::
  1078. DD 070707000h,070700070h
  1079. DD 082828200h,02c2c002ch
  1080. DD 02c2c2c00h,0b3b300b3h
  1081. DD 0ececec00h,0c0c000c0h
  1082. DD 0b3b3b300h,0e4e400e4h
  1083. DD 027272700h,057570057h
  1084. DD 0c0c0c000h,0eaea00eah
  1085. DD 0e5e5e500h,0aeae00aeh
  1086. DD 0e4e4e400h,023230023h
  1087. DD 085858500h,06b6b006bh
  1088. DD 057575700h,045450045h
  1089. DD 035353500h,0a5a500a5h
  1090. DD 0eaeaea00h,0eded00edh
  1091. DD 00c0c0c00h,04f4f004fh
  1092. DD 0aeaeae00h,01d1d001dh
  1093. DD 041414100h,092920092h
  1094. DD 023232300h,086860086h
  1095. DD 0efefef00h,0afaf00afh
  1096. DD 06b6b6b00h,07c7c007ch
  1097. DD 093939300h,01f1f001fh
  1098. DD 045454500h,03e3e003eh
  1099. DD 019191900h,0dcdc00dch
  1100. DD 0a5a5a500h,05e5e005eh
  1101. DD 021212100h,00b0b000bh
  1102. DD 0ededed00h,0a6a600a6h
  1103. DD 00e0e0e00h,039390039h
  1104. DD 04f4f4f00h,0d5d500d5h
  1105. DD 04e4e4e00h,05d5d005dh
  1106. DD 01d1d1d00h,0d9d900d9h
  1107. DD 065656500h,05a5a005ah
  1108. DD 092929200h,051510051h
  1109. DD 0bdbdbd00h,06c6c006ch
  1110. DD 086868600h,08b8b008bh
  1111. DD 0b8b8b800h,09a9a009ah
  1112. DD 0afafaf00h,0fbfb00fbh
  1113. DD 08f8f8f00h,0b0b000b0h
  1114. DD 07c7c7c00h,074740074h
  1115. DD 0ebebeb00h,02b2b002bh
  1116. DD 01f1f1f00h,0f0f000f0h
  1117. DD 0cecece00h,084840084h
  1118. DD 03e3e3e00h,0dfdf00dfh
  1119. DD 030303000h,0cbcb00cbh
  1120. DD 0dcdcdc00h,034340034h
  1121. DD 05f5f5f00h,076760076h
  1122. DD 05e5e5e00h,06d6d006dh
  1123. DD 0c5c5c500h,0a9a900a9h
  1124. DD 00b0b0b00h,0d1d100d1h
  1125. DD 01a1a1a00h,004040004h
  1126. DD 0a6a6a600h,014140014h
  1127. DD 0e1e1e100h,03a3a003ah
  1128. DD 039393900h,0dede00deh
  1129. DD 0cacaca00h,011110011h
  1130. DD 0d5d5d500h,032320032h
  1131. DD 047474700h,09c9c009ch
  1132. DD 05d5d5d00h,053530053h
  1133. DD 03d3d3d00h,0f2f200f2h
  1134. DD 0d9d9d900h,0fefe00feh
  1135. DD 001010100h,0cfcf00cfh
  1136. DD 05a5a5a00h,0c3c300c3h
  1137. DD 0d6d6d600h,07a7a007ah
  1138. DD 051515100h,024240024h
  1139. DD 056565600h,0e8e800e8h
  1140. DD 06c6c6c00h,060600060h
  1141. DD 04d4d4d00h,069690069h
  1142. DD 08b8b8b00h,0aaaa00aah
  1143. DD 00d0d0d00h,0a0a000a0h
  1144. DD 09a9a9a00h,0a1a100a1h
  1145. DD 066666600h,062620062h
  1146. DD 0fbfbfb00h,054540054h
  1147. DD 0cccccc00h,01e1e001eh
  1148. DD 0b0b0b000h,0e0e000e0h
  1149. DD 02d2d2d00h,064640064h
  1150. DD 074747400h,010100010h
  1151. DD 012121200h,000000000h
  1152. DD 02b2b2b00h,0a3a300a3h
  1153. DD 020202000h,075750075h
  1154. DD 0f0f0f000h,08a8a008ah
  1155. DD 0b1b1b100h,0e6e600e6h
  1156. DD 084848400h,009090009h
  1157. DD 099999900h,0dddd00ddh
  1158. DD 0dfdfdf00h,087870087h
  1159. DD 04c4c4c00h,083830083h
  1160. DD 0cbcbcb00h,0cdcd00cdh
  1161. DD 0c2c2c200h,090900090h
  1162. DD 034343400h,073730073h
  1163. DD 07e7e7e00h,0f6f600f6h
  1164. DD 076767600h,09d9d009dh
  1165. DD 005050500h,0bfbf00bfh
  1166. DD 06d6d6d00h,052520052h
  1167. DD 0b7b7b700h,0d8d800d8h
  1168. DD 0a9a9a900h,0c8c800c8h
  1169. DD 031313100h,0c6c600c6h
  1170. DD 0d1d1d100h,081810081h
  1171. DD 017171700h,06f6f006fh
  1172. DD 004040400h,013130013h
  1173. DD 0d7d7d700h,063630063h
  1174. DD 014141400h,0e9e900e9h
  1175. DD 058585800h,0a7a700a7h
  1176. DD 03a3a3a00h,09f9f009fh
  1177. DD 061616100h,0bcbc00bch
  1178. DD 0dedede00h,029290029h
  1179. DD 01b1b1b00h,0f9f900f9h
  1180. DD 011111100h,02f2f002fh
  1181. DD 01c1c1c00h,0b4b400b4h
  1182. DD 032323200h,078780078h
  1183. DD 00f0f0f00h,006060006h
  1184. DD 09c9c9c00h,0e7e700e7h
  1185. DD 016161600h,071710071h
  1186. DD 053535300h,0d4d400d4h
  1187. DD 018181800h,0abab00abh
  1188. DD 0f2f2f200h,088880088h
  1189. DD 022222200h,08d8d008dh
  1190. DD 0fefefe00h,072720072h
  1191. DD 044444400h,0b9b900b9h
  1192. DD 0cfcfcf00h,0f8f800f8h
  1193. DD 0b2b2b200h,0acac00ach
  1194. DD 0c3c3c300h,036360036h
  1195. DD 0b5b5b500h,02a2a002ah
  1196. DD 07a7a7a00h,03c3c003ch
  1197. DD 091919100h,0f1f100f1h
  1198. DD 024242400h,040400040h
  1199. DD 008080800h,0d3d300d3h
  1200. DD 0e8e8e800h,0bbbb00bbh
  1201. DD 0a8a8a800h,043430043h
  1202. DD 060606000h,015150015h
  1203. DD 0fcfcfc00h,0adad00adh
  1204. DD 069696900h,077770077h
  1205. DD 050505000h,080800080h
  1206. DD 0aaaaaa00h,082820082h
  1207. DD 0d0d0d000h,0ecec00ech
  1208. DD 0a0a0a000h,027270027h
  1209. DD 07d7d7d00h,0e5e500e5h
  1210. DD 0a1a1a100h,085850085h
  1211. DD 089898900h,035350035h
  1212. DD 062626200h,00c0c000ch
  1213. DD 097979700h,041410041h
  1214. DD 054545400h,0efef00efh
  1215. DD 05b5b5b00h,093930093h
  1216. DD 01e1e1e00h,019190019h
  1217. DD 095959500h,021210021h
  1218. DD 0e0e0e000h,00e0e000eh
  1219. DD 0ffffff00h,04e4e004eh
  1220. DD 064646400h,065650065h
  1221. DD 0d2d2d200h,0bdbd00bdh
  1222. DD 010101000h,0b8b800b8h
  1223. DD 0c4c4c400h,08f8f008fh
  1224. DD 000000000h,0ebeb00ebh
  1225. DD 048484800h,0cece00ceh
  1226. DD 0a3a3a300h,030300030h
  1227. DD 0f7f7f700h,05f5f005fh
  1228. DD 075757500h,0c5c500c5h
  1229. DD 0dbdbdb00h,01a1a001ah
  1230. DD 08a8a8a00h,0e1e100e1h
  1231. DD 003030300h,0caca00cah
  1232. DD 0e6e6e600h,047470047h
  1233. DD 0dadada00h,03d3d003dh
  1234. DD 009090900h,001010001h
  1235. DD 03f3f3f00h,0d6d600d6h
  1236. DD 0dddddd00h,056560056h
  1237. DD 094949400h,04d4d004dh
  1238. DD 087878700h,00d0d000dh
  1239. DD 05c5c5c00h,066660066h
  1240. DD 083838300h,0cccc00cch
  1241. DD 002020200h,02d2d002dh
  1242. DD 0cdcdcd00h,012120012h
  1243. DD 04a4a4a00h,020200020h
  1244. DD 090909000h,0b1b100b1h
  1245. DD 033333300h,099990099h
  1246. DD 073737300h,04c4c004ch
  1247. DD 067676700h,0c2c200c2h
  1248. DD 0f6f6f600h,07e7e007eh
  1249. DD 0f3f3f300h,005050005h
  1250. DD 09d9d9d00h,0b7b700b7h
  1251. DD 07f7f7f00h,031310031h
  1252. DD 0bfbfbf00h,017170017h
  1253. DD 0e2e2e200h,0d7d700d7h
  1254. DD 052525200h,058580058h
  1255. DD 09b9b9b00h,061610061h
  1256. DD 0d8d8d800h,01b1b001bh
  1257. DD 026262600h,01c1c001ch
  1258. DD 0c8c8c800h,00f0f000fh
  1259. DD 037373700h,016160016h
  1260. DD 0c6c6c600h,018180018h
  1261. DD 03b3b3b00h,022220022h
  1262. DD 081818100h,044440044h
  1263. DD 096969600h,0b2b200b2h
  1264. DD 06f6f6f00h,0b5b500b5h
  1265. DD 04b4b4b00h,091910091h
  1266. DD 013131300h,008080008h
  1267. DD 0bebebe00h,0a8a800a8h
  1268. DD 063636300h,0fcfc00fch
  1269. DD 02e2e2e00h,050500050h
  1270. DD 0e9e9e900h,0d0d000d0h
  1271. DD 079797900h,07d7d007dh
  1272. DD 0a7a7a700h,089890089h
  1273. DD 08c8c8c00h,097970097h
  1274. DD 09f9f9f00h,05b5b005bh
  1275. DD 06e6e6e00h,095950095h
  1276. DD 0bcbcbc00h,0ffff00ffh
  1277. DD 08e8e8e00h,0d2d200d2h
  1278. DD 029292900h,0c4c400c4h
  1279. DD 0f5f5f500h,048480048h
  1280. DD 0f9f9f900h,0f7f700f7h
  1281. DD 0b6b6b600h,0dbdb00dbh
  1282. DD 02f2f2f00h,003030003h
  1283. DD 0fdfdfd00h,0dada00dah
  1284. DD 0b4b4b400h,03f3f003fh
  1285. DD 059595900h,094940094h
  1286. DD 078787800h,05c5c005ch
  1287. DD 098989800h,002020002h
  1288. DD 006060600h,04a4a004ah
  1289. DD 06a6a6a00h,033330033h
  1290. DD 0e7e7e700h,067670067h
  1291. DD 046464600h,0f3f300f3h
  1292. DD 071717100h,07f7f007fh
  1293. DD 0bababa00h,0e2e200e2h
  1294. DD 0d4d4d400h,09b9b009bh
  1295. DD 025252500h,026260026h
  1296. DD 0ababab00h,037370037h
  1297. DD 042424200h,03b3b003bh
  1298. DD 088888800h,096960096h
  1299. DD 0a2a2a200h,04b4b004bh
  1300. DD 08d8d8d00h,0bebe00beh
  1301. DD 0fafafa00h,02e2e002eh
  1302. DD 072727200h,079790079h
  1303. DD 007070700h,08c8c008ch
  1304. DD 0b9b9b900h,06e6e006eh
  1305. DD 055555500h,08e8e008eh
  1306. DD 0f8f8f800h,0f5f500f5h
  1307. DD 0eeeeee00h,0b6b600b6h
  1308. DD 0acacac00h,0fdfd00fdh
  1309. DD 00a0a0a00h,059590059h
  1310. DD 036363600h,098980098h
  1311. DD 049494900h,06a6a006ah
  1312. DD 02a2a2a00h,046460046h
  1313. DD 068686800h,0baba00bah
  1314. DD 03c3c3c00h,025250025h
  1315. DD 038383800h,042420042h
  1316. DD 0f1f1f100h,0a2a200a2h
  1317. DD 0a4a4a400h,0fafa00fah
  1318. DD 040404000h,007070007h
  1319. DD 028282800h,055550055h
  1320. DD 0d3d3d300h,0eeee00eeh
  1321. DD 07b7b7b00h,00a0a000ah
  1322. DD 0bbbbbb00h,049490049h
  1323. DD 0c9c9c900h,068680068h
  1324. DD 043434300h,038380038h
  1325. DD 0c1c1c100h,0a4a400a4h
  1326. DD 015151500h,028280028h
  1327. DD 0e3e3e300h,07b7b007bh
  1328. DD 0adadad00h,0c9c900c9h
  1329. DD 0f4f4f400h,0c1c100c1h
  1330. DD 077777700h,0e3e300e3h
  1331. DD 0c7c7c700h,0f4f400f4h
  1332. DD 080808000h,0c7c700c7h
  1333. DD 09e9e9e00h,09e9e009eh
  1334. DD 000e0e0e0h,038003838h
  1335. DD 000050505h,041004141h
  1336. DD 000585858h,016001616h
  1337. DD 000d9d9d9h,076007676h
  1338. DD 000676767h,0d900d9d9h
  1339. DD 0004e4e4eh,093009393h
  1340. DD 000818181h,060006060h
  1341. DD 000cbcbcbh,0f200f2f2h
  1342. DD 000c9c9c9h,072007272h
  1343. DD 0000b0b0bh,0c200c2c2h
  1344. DD 000aeaeaeh,0ab00ababh
  1345. DD 0006a6a6ah,09a009a9ah
  1346. DD 000d5d5d5h,075007575h
  1347. DD 000181818h,006000606h
  1348. DD 0005d5d5dh,057005757h
  1349. DD 000828282h,0a000a0a0h
  1350. DD 000464646h,091009191h
  1351. DD 000dfdfdfh,0f700f7f7h
  1352. DD 000d6d6d6h,0b500b5b5h
  1353. DD 000272727h,0c900c9c9h
  1354. DD 0008a8a8ah,0a200a2a2h
  1355. DD 000323232h,08c008c8ch
  1356. DD 0004b4b4bh,0d200d2d2h
  1357. DD 000424242h,090009090h
  1358. DD 000dbdbdbh,0f600f6f6h
  1359. DD 0001c1c1ch,007000707h
  1360. DD 0009e9e9eh,0a700a7a7h
  1361. DD 0009c9c9ch,027002727h
  1362. DD 0003a3a3ah,08e008e8eh
  1363. DD 000cacacah,0b200b2b2h
  1364. DD 000252525h,049004949h
  1365. DD 0007b7b7bh,0de00dedeh
  1366. DD 0000d0d0dh,043004343h
  1367. DD 000717171h,05c005c5ch
  1368. DD 0005f5f5fh,0d700d7d7h
  1369. DD 0001f1f1fh,0c700c7c7h
  1370. DD 000f8f8f8h,03e003e3eh
  1371. DD 000d7d7d7h,0f500f5f5h
  1372. DD 0003e3e3eh,08f008f8fh
  1373. DD 0009d9d9dh,067006767h
  1374. DD 0007c7c7ch,01f001f1fh
  1375. DD 000606060h,018001818h
  1376. DD 000b9b9b9h,06e006e6eh
  1377. DD 000bebebeh,0af00afafh
  1378. DD 000bcbcbch,02f002f2fh
  1379. DD 0008b8b8bh,0e200e2e2h
  1380. DD 000161616h,085008585h
  1381. DD 000343434h,00d000d0dh
  1382. DD 0004d4d4dh,053005353h
  1383. DD 000c3c3c3h,0f000f0f0h
  1384. DD 000727272h,09c009c9ch
  1385. DD 000959595h,065006565h
  1386. DD 000abababh,0ea00eaeah
  1387. DD 0008e8e8eh,0a300a3a3h
  1388. DD 000bababah,0ae00aeaeh
  1389. DD 0007a7a7ah,09e009e9eh
  1390. DD 000b3b3b3h,0ec00ecech
  1391. DD 000020202h,080008080h
  1392. DD 000b4b4b4h,02d002d2dh
  1393. DD 000adadadh,06b006b6bh
  1394. DD 000a2a2a2h,0a800a8a8h
  1395. DD 000acacach,02b002b2bh
  1396. DD 000d8d8d8h,036003636h
  1397. DD 0009a9a9ah,0a600a6a6h
  1398. DD 000171717h,0c500c5c5h
  1399. DD 0001a1a1ah,086008686h
  1400. DD 000353535h,04d004d4dh
  1401. DD 000cccccch,033003333h
  1402. DD 000f7f7f7h,0fd00fdfdh
  1403. DD 000999999h,066006666h
  1404. DD 000616161h,058005858h
  1405. DD 0005a5a5ah,096009696h
  1406. DD 000e8e8e8h,03a003a3ah
  1407. DD 000242424h,009000909h
  1408. DD 000565656h,095009595h
  1409. DD 000404040h,010001010h
  1410. DD 000e1e1e1h,078007878h
  1411. DD 000636363h,0d800d8d8h
  1412. DD 000090909h,042004242h
  1413. DD 000333333h,0cc00cccch
  1414. DD 000bfbfbfh,0ef00efefh
  1415. DD 000989898h,026002626h
  1416. DD 000979797h,0e500e5e5h
  1417. DD 000858585h,061006161h
  1418. DD 000686868h,01a001a1ah
  1419. DD 000fcfcfch,03f003f3fh
  1420. DD 000ececech,03b003b3bh
  1421. DD 0000a0a0ah,082008282h
  1422. DD 000dadadah,0b600b6b6h
  1423. DD 0006f6f6fh,0db00dbdbh
  1424. DD 000535353h,0d400d4d4h
  1425. DD 000626262h,098009898h
  1426. DD 000a3a3a3h,0e800e8e8h
  1427. DD 0002e2e2eh,08b008b8bh
  1428. DD 000080808h,002000202h
  1429. DD 000afafafh,0eb00ebebh
  1430. DD 000282828h,00a000a0ah
  1431. DD 000b0b0b0h,02c002c2ch
  1432. DD 000747474h,01d001d1dh
  1433. DD 000c2c2c2h,0b000b0b0h
  1434. DD 000bdbdbdh,06f006f6fh
  1435. DD 000363636h,08d008d8dh
  1436. DD 000222222h,088008888h
  1437. DD 000383838h,00e000e0eh
  1438. DD 000646464h,019001919h
  1439. DD 0001e1e1eh,087008787h
  1440. DD 000393939h,04e004e4eh
  1441. DD 0002c2c2ch,00b000b0bh
  1442. DD 000a6a6a6h,0a900a9a9h
  1443. DD 000303030h,00c000c0ch
  1444. DD 000e5e5e5h,079007979h
  1445. DD 000444444h,011001111h
  1446. DD 000fdfdfdh,07f007f7fh
  1447. DD 000888888h,022002222h
  1448. DD 0009f9f9fh,0e700e7e7h
  1449. DD 000656565h,059005959h
  1450. DD 000878787h,0e100e1e1h
  1451. DD 0006b6b6bh,0da00dadah
  1452. DD 000f4f4f4h,03d003d3dh
  1453. DD 000232323h,0c800c8c8h
  1454. DD 000484848h,012001212h
  1455. DD 000101010h,004000404h
  1456. DD 000d1d1d1h,074007474h
  1457. DD 000515151h,054005454h
  1458. DD 000c0c0c0h,030003030h
  1459. DD 000f9f9f9h,07e007e7eh
  1460. DD 000d2d2d2h,0b400b4b4h
  1461. DD 000a0a0a0h,028002828h
  1462. DD 000555555h,055005555h
  1463. DD 000a1a1a1h,068006868h
  1464. DD 000414141h,050005050h
  1465. DD 000fafafah,0be00bebeh
  1466. DD 000434343h,0d000d0d0h
  1467. DD 000131313h,0c400c4c4h
  1468. DD 000c4c4c4h,031003131h
  1469. DD 0002f2f2fh,0cb00cbcbh
  1470. DD 000a8a8a8h,02a002a2ah
  1471. DD 000b6b6b6h,0ad00adadh
  1472. DD 0003c3c3ch,00f000f0fh
  1473. DD 0002b2b2bh,0ca00cacah
  1474. DD 000c1c1c1h,070007070h
  1475. DD 000ffffffh,0ff00ffffh
  1476. DD 000c8c8c8h,032003232h
  1477. DD 000a5a5a5h,069006969h
  1478. DD 000202020h,008000808h
  1479. DD 000898989h,062006262h
  1480. DD 000000000h,000000000h
  1481. DD 000909090h,024002424h
  1482. DD 000474747h,0d100d1d1h
  1483. DD 000efefefh,0fb00fbfbh
  1484. DD 000eaeaeah,0ba00babah
  1485. DD 000b7b7b7h,0ed00ededh
  1486. DD 000151515h,045004545h
  1487. DD 000060606h,081008181h
  1488. DD 000cdcdcdh,073007373h
  1489. DD 000b5b5b5h,06d006d6dh
  1490. DD 000121212h,084008484h
  1491. DD 0007e7e7eh,09f009f9fh
  1492. DD 000bbbbbbh,0ee00eeeeh
  1493. DD 000292929h,04a004a4ah
  1494. DD 0000f0f0fh,0c300c3c3h
  1495. DD 000b8b8b8h,02e002e2eh
  1496. DD 000070707h,0c100c1c1h
  1497. DD 000040404h,001000101h
  1498. DD 0009b9b9bh,0e600e6e6h
  1499. DD 000949494h,025002525h
  1500. DD 000212121h,048004848h
  1501. DD 000666666h,099009999h
  1502. DD 000e6e6e6h,0b900b9b9h
  1503. DD 000cececeh,0b300b3b3h
  1504. DD 000edededh,07b007b7bh
  1505. DD 000e7e7e7h,0f900f9f9h
  1506. DD 0003b3b3bh,0ce00ceceh
  1507. DD 000fefefeh,0bf00bfbfh
  1508. DD 0007f7f7fh,0df00dfdfh
  1509. DD 000c5c5c5h,071007171h
  1510. DD 000a4a4a4h,029002929h
  1511. DD 000373737h,0cd00cdcdh
  1512. DD 000b1b1b1h,06c006c6ch
  1513. DD 0004c4c4ch,013001313h
  1514. DD 000919191h,064006464h
  1515. DD 0006e6e6eh,09b009b9bh
  1516. DD 0008d8d8dh,063006363h
  1517. DD 000767676h,09d009d9dh
  1518. DD 000030303h,0c000c0c0h
  1519. DD 0002d2d2dh,04b004b4bh
  1520. DD 000dededeh,0b700b7b7h
  1521. DD 000969696h,0a500a5a5h
  1522. DD 000262626h,089008989h
  1523. DD 0007d7d7dh,05f005f5fh
  1524. DD 000c6c6c6h,0b100b1b1h
  1525. DD 0005c5c5ch,017001717h
  1526. DD 000d3d3d3h,0f400f4f4h
  1527. DD 000f2f2f2h,0bc00bcbch
  1528. DD 0004f4f4fh,0d300d3d3h
  1529. DD 000191919h,046004646h
  1530. DD 0003f3f3fh,0cf00cfcfh
  1531. DD 000dcdcdch,037003737h
  1532. DD 000797979h,05e005e5eh
  1533. DD 0001d1d1dh,047004747h
  1534. DD 000525252h,094009494h
  1535. DD 000ebebebh,0fa00fafah
  1536. DD 000f3f3f3h,0fc00fcfch
  1537. DD 0006d6d6dh,05b005b5bh
  1538. DD 0005e5e5eh,097009797h
  1539. DD 000fbfbfbh,0fe00fefeh
  1540. DD 000696969h,05a005a5ah
  1541. DD 000b2b2b2h,0ac00acach
  1542. DD 000f0f0f0h,03c003c3ch
  1543. DD 000313131h,04c004c4ch
  1544. DD 0000c0c0ch,003000303h
  1545. DD 000d4d4d4h,035003535h
  1546. DD 000cfcfcfh,0f300f3f3h
  1547. DD 0008c8c8ch,023002323h
  1548. DD 000e2e2e2h,0b800b8b8h
  1549. DD 000757575h,05d005d5dh
  1550. DD 000a9a9a9h,06a006a6ah
  1551. DD 0004a4a4ah,092009292h
  1552. DD 000575757h,0d500d5d5h
  1553. DD 000848484h,021002121h
  1554. DD 000111111h,044004444h
  1555. DD 000454545h,051005151h
  1556. DD 0001b1b1bh,0c600c6c6h
  1557. DD 000f5f5f5h,07d007d7dh
  1558. DD 000e4e4e4h,039003939h
  1559. DD 0000e0e0eh,083008383h
  1560. DD 000737373h,0dc00dcdch
  1561. DD 000aaaaaah,0aa00aaaah
  1562. DD 000f1f1f1h,07c007c7ch
  1563. DD 000ddddddh,077007777h
  1564. DD 000595959h,056005656h
  1565. DD 000141414h,005000505h
  1566. DD 0006c6c6ch,01b001b1bh
  1567. DD 000929292h,0a400a4a4h
  1568. DD 000545454h,015001515h
  1569. DD 000d0d0d0h,034003434h
  1570. DD 000787878h,01e001e1eh
  1571. DD 000707070h,01c001c1ch
  1572. DD 000e3e3e3h,0f800f8f8h
  1573. DD 000494949h,052005252h
  1574. DD 000808080h,020002020h
  1575. DD 000505050h,014001414h
  1576. DD 000a7a7a7h,0e900e9e9h
  1577. DD 000f6f6f6h,0bd00bdbdh
  1578. DD 000777777h,0dd00ddddh
  1579. DD 000939393h,0e400e4e4h
  1580. DD 000868686h,0a100a1a1h
  1581. DD 000838383h,0e000e0e0h
  1582. DD 0002a2a2ah,08a008a8ah
  1583. DD 000c7c7c7h,0f100f1f1h
  1584. DD 0005b5b5bh,0d600d6d6h
  1585. DD 000e9e9e9h,07a007a7ah
  1586. DD 000eeeeeeh,0bb00bbbbh
  1587. DD 0008f8f8fh,0e300e3e3h
  1588. DD 000010101h,040004040h
  1589. DD 0003d3d3dh,04f004f4fh
  1590. PUBLIC Camellia_cbc_encrypt
  1591. ALIGN 16
  1592. Camellia_cbc_encrypt PROC PUBLIC
  1593. mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
  1594. mov QWORD PTR[16+rsp],rsi
  1595. mov rax,rsp
  1596. $L$SEH_begin_Camellia_cbc_encrypt::
  1597. mov rdi,rcx
  1598. mov rsi,rdx
  1599. mov rdx,r8
  1600. mov rcx,r9
  1601. mov r8,QWORD PTR[40+rsp]
  1602. mov r9,QWORD PTR[48+rsp]
  1603. cmp rdx,0
  1604. je $L$cbc_abort
  1605. push rbx
  1606. push rbp
  1607. push r12
  1608. push r13
  1609. push r14
  1610. push r15
  1611. $L$cbc_prologue::
  1612. mov rbp,rsp
  1613. sub rsp,64
  1614. and rsp,-64
  1615. lea r10,QWORD PTR[((-64-63))+rcx]
  1616. sub r10,rsp
  1617. neg r10
  1618. and r10,03C0h
  1619. sub rsp,r10
  1620. mov r12,rdi
  1621. mov r13,rsi
  1622. mov rbx,r8
  1623. mov r14,rcx
  1624. mov r15d,DWORD PTR[272+rcx]
  1625. mov QWORD PTR[40+rsp],r8
  1626. mov QWORD PTR[48+rsp],rbp
  1627. $L$cbc_body::
  1628. lea rbp,QWORD PTR[$L$Camellia_SBOX]
  1629. mov ecx,32
  1630. ALIGN 4
  1631. $L$cbc_prefetch_sbox::
  1632. mov rax,QWORD PTR[rbp]
  1633. mov rsi,QWORD PTR[32+rbp]
  1634. mov rdi,QWORD PTR[64+rbp]
  1635. mov r11,QWORD PTR[96+rbp]
  1636. lea rbp,QWORD PTR[128+rbp]
  1637. loop $L$cbc_prefetch_sbox
  1638. sub rbp,4096
  1639. shl r15,6
  1640. mov rcx,rdx
  1641. lea r15,QWORD PTR[r15*1+r14]
  1642. cmp r9d,0
  1643. je $L$CBC_DECRYPT
  1644. and rdx,-16
  1645. and rcx,15
  1646. lea rdx,QWORD PTR[rdx*1+r12]
  1647. mov QWORD PTR[rsp],r14
  1648. mov QWORD PTR[8+rsp],rdx
  1649. mov QWORD PTR[16+rsp],rcx
  1650. cmp rdx,r12
  1651. mov r8d,DWORD PTR[rbx]
  1652. mov r9d,DWORD PTR[4+rbx]
  1653. mov r10d,DWORD PTR[8+rbx]
  1654. mov r11d,DWORD PTR[12+rbx]
  1655. je $L$cbc_enc_tail
  1656. jmp $L$cbc_eloop
  1657. ALIGN 16
  1658. $L$cbc_eloop::
  1659. xor r8d,DWORD PTR[r12]
  1660. xor r9d,DWORD PTR[4+r12]
  1661. xor r10d,DWORD PTR[8+r12]
  1662. bswap r8d
  1663. xor r11d,DWORD PTR[12+r12]
  1664. bswap r9d
  1665. bswap r10d
  1666. bswap r11d
  1667. call _x86_64_Camellia_encrypt
  1668. mov r14,QWORD PTR[rsp]
  1669. bswap r8d
  1670. mov rdx,QWORD PTR[8+rsp]
  1671. bswap r9d
  1672. mov rcx,QWORD PTR[16+rsp]
  1673. bswap r10d
  1674. mov DWORD PTR[r13],r8d
  1675. bswap r11d
  1676. mov DWORD PTR[4+r13],r9d
  1677. mov DWORD PTR[8+r13],r10d
  1678. lea r12,QWORD PTR[16+r12]
  1679. mov DWORD PTR[12+r13],r11d
  1680. cmp r12,rdx
  1681. lea r13,QWORD PTR[16+r13]
  1682. jne $L$cbc_eloop
  1683. cmp rcx,0
  1684. jne $L$cbc_enc_tail
  1685. mov r13,QWORD PTR[40+rsp]
  1686. mov DWORD PTR[r13],r8d
  1687. mov DWORD PTR[4+r13],r9d
  1688. mov DWORD PTR[8+r13],r10d
  1689. mov DWORD PTR[12+r13],r11d
  1690. jmp $L$cbc_done
  1691. ALIGN 16
  1692. $L$cbc_enc_tail::
  1693. xor rax,rax
  1694. mov QWORD PTR[((0+24))+rsp],rax
  1695. mov QWORD PTR[((8+24))+rsp],rax
  1696. mov QWORD PTR[16+rsp],rax
  1697. $L$cbc_enc_pushf::
  1698. pushfq
  1699. cld
  1700. mov rsi,r12
  1701. lea rdi,QWORD PTR[((8+24))+rsp]
  1702. DD 09066A4F3h
  1703. popfq
  1704. $L$cbc_enc_popf::
  1705. lea r12,QWORD PTR[24+rsp]
  1706. lea rax,QWORD PTR[((16+24))+rsp]
  1707. mov QWORD PTR[8+rsp],rax
  1708. jmp $L$cbc_eloop
  1709. ALIGN 16
  1710. $L$CBC_DECRYPT::
  1711. xchg r15,r14
  1712. add rdx,15
  1713. and rcx,15
  1714. and rdx,-16
  1715. mov QWORD PTR[rsp],r14
  1716. lea rdx,QWORD PTR[rdx*1+r12]
  1717. mov QWORD PTR[8+rsp],rdx
  1718. mov QWORD PTR[16+rsp],rcx
  1719. mov rax,QWORD PTR[rbx]
  1720. mov rbx,QWORD PTR[8+rbx]
  1721. jmp $L$cbc_dloop
  1722. ALIGN 16
  1723. $L$cbc_dloop::
  1724. mov r8d,DWORD PTR[r12]
  1725. mov r9d,DWORD PTR[4+r12]
  1726. mov r10d,DWORD PTR[8+r12]
  1727. bswap r8d
  1728. mov r11d,DWORD PTR[12+r12]
  1729. bswap r9d
  1730. mov QWORD PTR[((0+24))+rsp],rax
  1731. bswap r10d
  1732. mov QWORD PTR[((8+24))+rsp],rbx
  1733. bswap r11d
  1734. call _x86_64_Camellia_decrypt
  1735. mov r14,QWORD PTR[rsp]
  1736. mov rdx,QWORD PTR[8+rsp]
  1737. mov rcx,QWORD PTR[16+rsp]
  1738. bswap r8d
  1739. mov rax,QWORD PTR[r12]
  1740. bswap r9d
  1741. mov rbx,QWORD PTR[8+r12]
  1742. bswap r10d
  1743. xor r8d,DWORD PTR[((0+24))+rsp]
  1744. bswap r11d
  1745. xor r9d,DWORD PTR[((4+24))+rsp]
  1746. xor r10d,DWORD PTR[((8+24))+rsp]
  1747. lea r12,QWORD PTR[16+r12]
  1748. xor r11d,DWORD PTR[((12+24))+rsp]
  1749. cmp r12,rdx
  1750. je $L$cbc_ddone
  1751. mov DWORD PTR[r13],r8d
  1752. mov DWORD PTR[4+r13],r9d
  1753. mov DWORD PTR[8+r13],r10d
  1754. mov DWORD PTR[12+r13],r11d
  1755. lea r13,QWORD PTR[16+r13]
  1756. jmp $L$cbc_dloop
  1757. ALIGN 16
  1758. $L$cbc_ddone::
  1759. mov rdx,QWORD PTR[40+rsp]
  1760. cmp rcx,0
  1761. jne $L$cbc_dec_tail
  1762. mov DWORD PTR[r13],r8d
  1763. mov DWORD PTR[4+r13],r9d
  1764. mov DWORD PTR[8+r13],r10d
  1765. mov DWORD PTR[12+r13],r11d
  1766. mov QWORD PTR[rdx],rax
  1767. mov QWORD PTR[8+rdx],rbx
  1768. jmp $L$cbc_done
  1769. ALIGN 16
  1770. $L$cbc_dec_tail::
  1771. mov DWORD PTR[((0+24))+rsp],r8d
  1772. mov DWORD PTR[((4+24))+rsp],r9d
  1773. mov DWORD PTR[((8+24))+rsp],r10d
  1774. mov DWORD PTR[((12+24))+rsp],r11d
  1775. $L$cbc_dec_pushf::
  1776. pushfq
  1777. cld
  1778. lea rsi,QWORD PTR[((8+24))+rsp]
  1779. lea rdi,QWORD PTR[r13]
  1780. DD 09066A4F3h
  1781. popfq
  1782. $L$cbc_dec_popf::
  1783. mov QWORD PTR[rdx],rax
  1784. mov QWORD PTR[8+rdx],rbx
  1785. jmp $L$cbc_done
  1786. ALIGN 16
  1787. $L$cbc_done::
  1788. mov rcx,QWORD PTR[48+rsp]
  1789. mov r15,QWORD PTR[rcx]
  1790. mov r14,QWORD PTR[8+rcx]
  1791. mov r13,QWORD PTR[16+rcx]
  1792. mov r12,QWORD PTR[24+rcx]
  1793. mov rbp,QWORD PTR[32+rcx]
  1794. mov rbx,QWORD PTR[40+rcx]
  1795. lea rsp,QWORD PTR[48+rcx]
  1796. $L$cbc_abort::
  1797. mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
  1798. mov rsi,QWORD PTR[16+rsp]
  1799. DB 0F3h,0C3h ;repret
  1800. $L$SEH_end_Camellia_cbc_encrypt::
  1801. Camellia_cbc_encrypt ENDP
  1802. DB 67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54
  1803. DB 95,54,52,32,98,121,32,60,97,112,112,114,111,64,111,112
  1804. DB 101,110,115,115,108,46,111,114,103,62,0
  1805. EXTERN __imp_RtlVirtualUnwind:NEAR
  1806. ALIGN 16
  1807. common_se_handler PROC PRIVATE
  1808. push rsi
  1809. push rdi
  1810. push rbx
  1811. push rbp
  1812. push r12
  1813. push r13
  1814. push r14
  1815. push r15
  1816. pushfq
  1817. lea rsp,QWORD PTR[((-64))+rsp]
  1818. mov rax,QWORD PTR[120+r8]
  1819. mov rbx,QWORD PTR[248+r8]
  1820. mov rsi,QWORD PTR[8+r9]
  1821. mov r11,QWORD PTR[56+r9]
  1822. mov r10d,DWORD PTR[r11]
  1823. lea r10,QWORD PTR[r10*1+rsi]
  1824. cmp rbx,r10
  1825. jb $L$in_prologue
  1826. mov rax,QWORD PTR[152+r8]
  1827. mov r10d,DWORD PTR[4+r11]
  1828. lea r10,QWORD PTR[r10*1+rsi]
  1829. cmp rbx,r10
  1830. jae $L$in_prologue
  1831. lea rax,QWORD PTR[40+rax]
  1832. mov rbx,QWORD PTR[((-8))+rax]
  1833. mov rbp,QWORD PTR[((-16))+rax]
  1834. mov r13,QWORD PTR[((-24))+rax]
  1835. mov r14,QWORD PTR[((-32))+rax]
  1836. mov r15,QWORD PTR[((-40))+rax]
  1837. mov QWORD PTR[144+r8],rbx
  1838. mov QWORD PTR[160+r8],rbp
  1839. mov QWORD PTR[224+r8],r13
  1840. mov QWORD PTR[232+r8],r14
  1841. mov QWORD PTR[240+r8],r15
  1842. $L$in_prologue::
  1843. mov rdi,QWORD PTR[8+rax]
  1844. mov rsi,QWORD PTR[16+rax]
  1845. mov QWORD PTR[152+r8],rax
  1846. mov QWORD PTR[168+r8],rsi
  1847. mov QWORD PTR[176+r8],rdi
  1848. jmp $L$common_seh_exit
  1849. common_se_handler ENDP
  1850. ALIGN 16
  1851. cbc_se_handler PROC PRIVATE
  1852. push rsi
  1853. push rdi
  1854. push rbx
  1855. push rbp
  1856. push r12
  1857. push r13
  1858. push r14
  1859. push r15
  1860. pushfq
  1861. lea rsp,QWORD PTR[((-64))+rsp]
  1862. mov rax,QWORD PTR[120+r8]
  1863. mov rbx,QWORD PTR[248+r8]
  1864. lea r10,QWORD PTR[$L$cbc_prologue]
  1865. cmp rbx,r10
  1866. jb $L$in_cbc_prologue
  1867. lea r10,QWORD PTR[$L$cbc_body]
  1868. cmp rbx,r10
  1869. jb $L$in_cbc_frame_setup
  1870. mov rax,QWORD PTR[152+r8]
  1871. lea r10,QWORD PTR[$L$cbc_abort]
  1872. cmp rbx,r10
  1873. jae $L$in_cbc_prologue
  1874. lea r10,QWORD PTR[$L$cbc_enc_pushf]
  1875. cmp rbx,r10
  1876. jbe $L$in_cbc_no_flag
  1877. lea rax,QWORD PTR[8+rax]
  1878. lea r10,QWORD PTR[$L$cbc_enc_popf]
  1879. cmp rbx,r10
  1880. jb $L$in_cbc_no_flag
  1881. lea rax,QWORD PTR[((-8))+rax]
  1882. lea r10,QWORD PTR[$L$cbc_dec_pushf]
  1883. cmp rbx,r10
  1884. jbe $L$in_cbc_no_flag
  1885. lea rax,QWORD PTR[8+rax]
  1886. lea r10,QWORD PTR[$L$cbc_dec_popf]
  1887. cmp rbx,r10
  1888. jb $L$in_cbc_no_flag
  1889. lea rax,QWORD PTR[((-8))+rax]
  1890. $L$in_cbc_no_flag::
  1891. mov rax,QWORD PTR[48+rax]
  1892. lea rax,QWORD PTR[48+rax]
  1893. $L$in_cbc_frame_setup::
  1894. mov rbx,QWORD PTR[((-8))+rax]
  1895. mov rbp,QWORD PTR[((-16))+rax]
  1896. mov r12,QWORD PTR[((-24))+rax]
  1897. mov r13,QWORD PTR[((-32))+rax]
  1898. mov r14,QWORD PTR[((-40))+rax]
  1899. mov r15,QWORD PTR[((-48))+rax]
  1900. mov QWORD PTR[144+r8],rbx
  1901. mov QWORD PTR[160+r8],rbp
  1902. mov QWORD PTR[216+r8],r12
  1903. mov QWORD PTR[224+r8],r13
  1904. mov QWORD PTR[232+r8],r14
  1905. mov QWORD PTR[240+r8],r15
  1906. $L$in_cbc_prologue::
  1907. mov rdi,QWORD PTR[8+rax]
  1908. mov rsi,QWORD PTR[16+rax]
  1909. mov QWORD PTR[152+r8],rax
  1910. mov QWORD PTR[168+r8],rsi
  1911. mov QWORD PTR[176+r8],rdi
  1912. ALIGN 4
  1913. $L$common_seh_exit::
  1914. mov rdi,QWORD PTR[40+r9]
  1915. mov rsi,r8
  1916. mov ecx,154
  1917. DD 0a548f3fch
  1918. mov rsi,r9
  1919. xor rcx,rcx
  1920. mov rdx,QWORD PTR[8+rsi]
  1921. mov r8,QWORD PTR[rsi]
  1922. mov r9,QWORD PTR[16+rsi]
  1923. mov r10,QWORD PTR[40+rsi]
  1924. lea r11,QWORD PTR[56+rsi]
  1925. lea r12,QWORD PTR[24+rsi]
  1926. mov QWORD PTR[32+rsp],r10
  1927. mov QWORD PTR[40+rsp],r11
  1928. mov QWORD PTR[48+rsp],r12
  1929. mov QWORD PTR[56+rsp],rcx
  1930. call QWORD PTR[__imp_RtlVirtualUnwind]
  1931. mov eax,1
  1932. lea rsp,QWORD PTR[64+rsp]
  1933. popfq
  1934. pop r15
  1935. pop r14
  1936. pop r13
  1937. pop r12
  1938. pop rbp
  1939. pop rbx
  1940. pop rdi
  1941. pop rsi
  1942. DB 0F3h,0C3h ;repret
  1943. cbc_se_handler ENDP
  1944. .text$ ENDS
  1945. .pdata SEGMENT READONLY ALIGN(4)
  1946. ALIGN 4
  1947. DD imagerel $L$SEH_begin_Camellia_EncryptBlock_Rounds
  1948. DD imagerel $L$SEH_end_Camellia_EncryptBlock_Rounds
  1949. DD imagerel $L$SEH_info_Camellia_EncryptBlock_Rounds
  1950. DD imagerel $L$SEH_begin_Camellia_DecryptBlock_Rounds
  1951. DD imagerel $L$SEH_end_Camellia_DecryptBlock_Rounds
  1952. DD imagerel $L$SEH_info_Camellia_DecryptBlock_Rounds
  1953. DD imagerel $L$SEH_begin_Camellia_Ekeygen
  1954. DD imagerel $L$SEH_end_Camellia_Ekeygen
  1955. DD imagerel $L$SEH_info_Camellia_Ekeygen
  1956. DD imagerel $L$SEH_begin_Camellia_cbc_encrypt
  1957. DD imagerel $L$SEH_end_Camellia_cbc_encrypt
  1958. DD imagerel $L$SEH_info_Camellia_cbc_encrypt
  1959. .pdata ENDS
  1960. .xdata SEGMENT READONLY ALIGN(8)
  1961. ALIGN 8
  1962. $L$SEH_info_Camellia_EncryptBlock_Rounds::
  1963. DB 9,0,0,0
  1964. DD imagerel common_se_handler
  1965. DD imagerel $L$enc_prologue,imagerel $L$enc_epilogue
  1966. $L$SEH_info_Camellia_DecryptBlock_Rounds::
  1967. DB 9,0,0,0
  1968. DD imagerel common_se_handler
  1969. DD imagerel $L$dec_prologue,imagerel $L$dec_epilogue
  1970. $L$SEH_info_Camellia_Ekeygen::
  1971. DB 9,0,0,0
  1972. DD imagerel common_se_handler
  1973. DD imagerel $L$key_prologue,imagerel $L$key_epilogue
  1974. $L$SEH_info_Camellia_cbc_encrypt::
  1975. DB 9,0,0,0
  1976. DD imagerel cbc_se_handler
  1977. .xdata ENDS
  1978. END