cmll-x86.masm 49 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369
  1. IF @Version LT 800
  2. ECHO MASM version 8.00 or later is strongly recommended.
  3. ENDIF
  4. .686
  5. .MODEL FLAT
  6. OPTION DOTNAME
  7. IF @Version LT 800
  8. .text$ SEGMENT PAGE 'CODE'
  9. ELSE
  10. .text$ SEGMENT ALIGN(64) 'CODE'
  11. ENDIF
  12. ALIGN 16
  13. _Camellia_EncryptBlock_Rounds PROC PUBLIC
  14. $L_Camellia_EncryptBlock_Rounds_begin::
  15. push ebp
  16. push ebx
  17. push esi
  18. push edi
  19. mov eax,DWORD PTR 20[esp]
  20. mov esi,DWORD PTR 24[esp]
  21. mov edi,DWORD PTR 28[esp]
  22. mov ebx,esp
  23. sub esp,28
  24. and esp,-64
  25. lea ecx,DWORD PTR [edi-127]
  26. sub ecx,esp
  27. neg ecx
  28. and ecx,960
  29. sub esp,ecx
  30. add esp,4
  31. shl eax,6
  32. lea eax,DWORD PTR [eax*1+edi]
  33. mov DWORD PTR 20[esp],ebx
  34. mov DWORD PTR 16[esp],eax
  35. call $L000pic_point
  36. $L000pic_point:
  37. pop ebp
  38. lea ebp,DWORD PTR ($LCamellia_SBOX-$L000pic_point)[ebp]
  39. mov eax,DWORD PTR [esi]
  40. mov ebx,DWORD PTR 4[esi]
  41. mov ecx,DWORD PTR 8[esi]
  42. bswap eax
  43. mov edx,DWORD PTR 12[esi]
  44. bswap ebx
  45. bswap ecx
  46. bswap edx
  47. call __x86_Camellia_encrypt
  48. mov esp,DWORD PTR 20[esp]
  49. bswap eax
  50. mov esi,DWORD PTR 32[esp]
  51. bswap ebx
  52. bswap ecx
  53. bswap edx
  54. mov DWORD PTR [esi],eax
  55. mov DWORD PTR 4[esi],ebx
  56. mov DWORD PTR 8[esi],ecx
  57. mov DWORD PTR 12[esi],edx
  58. pop edi
  59. pop esi
  60. pop ebx
  61. pop ebp
  62. ret
  63. _Camellia_EncryptBlock_Rounds ENDP
  64. ALIGN 16
  65. _Camellia_EncryptBlock PROC PUBLIC
  66. $L_Camellia_EncryptBlock_begin::
  67. mov eax,128
  68. sub eax,DWORD PTR 4[esp]
  69. mov eax,3
  70. adc eax,0
  71. mov DWORD PTR 4[esp],eax
  72. jmp $L_Camellia_EncryptBlock_Rounds_begin
  73. _Camellia_EncryptBlock ENDP
  74. ALIGN 16
  75. _Camellia_encrypt PROC PUBLIC
  76. $L_Camellia_encrypt_begin::
  77. push ebp
  78. push ebx
  79. push esi
  80. push edi
  81. mov esi,DWORD PTR 20[esp]
  82. mov edi,DWORD PTR 28[esp]
  83. mov ebx,esp
  84. sub esp,28
  85. and esp,-64
  86. mov eax,DWORD PTR 272[edi]
  87. lea ecx,DWORD PTR [edi-127]
  88. sub ecx,esp
  89. neg ecx
  90. and ecx,960
  91. sub esp,ecx
  92. add esp,4
  93. shl eax,6
  94. lea eax,DWORD PTR [eax*1+edi]
  95. mov DWORD PTR 20[esp],ebx
  96. mov DWORD PTR 16[esp],eax
  97. call $L001pic_point
  98. $L001pic_point:
  99. pop ebp
  100. lea ebp,DWORD PTR ($LCamellia_SBOX-$L001pic_point)[ebp]
  101. mov eax,DWORD PTR [esi]
  102. mov ebx,DWORD PTR 4[esi]
  103. mov ecx,DWORD PTR 8[esi]
  104. bswap eax
  105. mov edx,DWORD PTR 12[esi]
  106. bswap ebx
  107. bswap ecx
  108. bswap edx
  109. call __x86_Camellia_encrypt
  110. mov esp,DWORD PTR 20[esp]
  111. bswap eax
  112. mov esi,DWORD PTR 24[esp]
  113. bswap ebx
  114. bswap ecx
  115. bswap edx
  116. mov DWORD PTR [esi],eax
  117. mov DWORD PTR 4[esi],ebx
  118. mov DWORD PTR 8[esi],ecx
  119. mov DWORD PTR 12[esi],edx
  120. pop edi
  121. pop esi
  122. pop ebx
  123. pop ebp
  124. ret
  125. _Camellia_encrypt ENDP
  126. ALIGN 16
  127. __x86_Camellia_encrypt PROC PRIVATE
  128. xor eax,DWORD PTR [edi]
  129. xor ebx,DWORD PTR 4[edi]
  130. xor ecx,DWORD PTR 8[edi]
  131. xor edx,DWORD PTR 12[edi]
  132. mov esi,DWORD PTR 16[edi]
  133. mov DWORD PTR 4[esp],eax
  134. mov DWORD PTR 8[esp],ebx
  135. mov DWORD PTR 12[esp],ecx
  136. mov DWORD PTR 16[esp],edx
  137. ALIGN 16
  138. $L002loop:
  139. xor eax,esi
  140. xor ebx,DWORD PTR 20[edi]
  141. movzx esi,ah
  142. mov edx,DWORD PTR 2052[esi*8+ebp]
  143. movzx esi,al
  144. xor edx,DWORD PTR 4[esi*8+ebp]
  145. shr eax,16
  146. movzx esi,bl
  147. mov ecx,DWORD PTR [esi*8+ebp]
  148. movzx esi,ah
  149. xor edx,DWORD PTR [esi*8+ebp]
  150. movzx esi,bh
  151. xor ecx,DWORD PTR 4[esi*8+ebp]
  152. shr ebx,16
  153. movzx eax,al
  154. xor edx,DWORD PTR 2048[eax*8+ebp]
  155. movzx esi,bh
  156. mov eax,DWORD PTR 16[esp]
  157. xor ecx,edx
  158. ror edx,8
  159. xor ecx,DWORD PTR 2048[esi*8+ebp]
  160. movzx esi,bl
  161. mov ebx,DWORD PTR 12[esp]
  162. xor edx,eax
  163. xor ecx,DWORD PTR 2052[esi*8+ebp]
  164. mov esi,DWORD PTR 24[edi]
  165. xor edx,ecx
  166. mov DWORD PTR 16[esp],edx
  167. xor ecx,ebx
  168. mov DWORD PTR 12[esp],ecx
  169. xor ecx,esi
  170. xor edx,DWORD PTR 28[edi]
  171. movzx esi,ch
  172. mov ebx,DWORD PTR 2052[esi*8+ebp]
  173. movzx esi,cl
  174. xor ebx,DWORD PTR 4[esi*8+ebp]
  175. shr ecx,16
  176. movzx esi,dl
  177. mov eax,DWORD PTR [esi*8+ebp]
  178. movzx esi,ch
  179. xor ebx,DWORD PTR [esi*8+ebp]
  180. movzx esi,dh
  181. xor eax,DWORD PTR 4[esi*8+ebp]
  182. shr edx,16
  183. movzx ecx,cl
  184. xor ebx,DWORD PTR 2048[ecx*8+ebp]
  185. movzx esi,dh
  186. mov ecx,DWORD PTR 8[esp]
  187. xor eax,ebx
  188. ror ebx,8
  189. xor eax,DWORD PTR 2048[esi*8+ebp]
  190. movzx esi,dl
  191. mov edx,DWORD PTR 4[esp]
  192. xor ebx,ecx
  193. xor eax,DWORD PTR 2052[esi*8+ebp]
  194. mov esi,DWORD PTR 32[edi]
  195. xor ebx,eax
  196. mov DWORD PTR 8[esp],ebx
  197. xor eax,edx
  198. mov DWORD PTR 4[esp],eax
  199. xor eax,esi
  200. xor ebx,DWORD PTR 36[edi]
  201. movzx esi,ah
  202. mov edx,DWORD PTR 2052[esi*8+ebp]
  203. movzx esi,al
  204. xor edx,DWORD PTR 4[esi*8+ebp]
  205. shr eax,16
  206. movzx esi,bl
  207. mov ecx,DWORD PTR [esi*8+ebp]
  208. movzx esi,ah
  209. xor edx,DWORD PTR [esi*8+ebp]
  210. movzx esi,bh
  211. xor ecx,DWORD PTR 4[esi*8+ebp]
  212. shr ebx,16
  213. movzx eax,al
  214. xor edx,DWORD PTR 2048[eax*8+ebp]
  215. movzx esi,bh
  216. mov eax,DWORD PTR 16[esp]
  217. xor ecx,edx
  218. ror edx,8
  219. xor ecx,DWORD PTR 2048[esi*8+ebp]
  220. movzx esi,bl
  221. mov ebx,DWORD PTR 12[esp]
  222. xor edx,eax
  223. xor ecx,DWORD PTR 2052[esi*8+ebp]
  224. mov esi,DWORD PTR 40[edi]
  225. xor edx,ecx
  226. mov DWORD PTR 16[esp],edx
  227. xor ecx,ebx
  228. mov DWORD PTR 12[esp],ecx
  229. xor ecx,esi
  230. xor edx,DWORD PTR 44[edi]
  231. movzx esi,ch
  232. mov ebx,DWORD PTR 2052[esi*8+ebp]
  233. movzx esi,cl
  234. xor ebx,DWORD PTR 4[esi*8+ebp]
  235. shr ecx,16
  236. movzx esi,dl
  237. mov eax,DWORD PTR [esi*8+ebp]
  238. movzx esi,ch
  239. xor ebx,DWORD PTR [esi*8+ebp]
  240. movzx esi,dh
  241. xor eax,DWORD PTR 4[esi*8+ebp]
  242. shr edx,16
  243. movzx ecx,cl
  244. xor ebx,DWORD PTR 2048[ecx*8+ebp]
  245. movzx esi,dh
  246. mov ecx,DWORD PTR 8[esp]
  247. xor eax,ebx
  248. ror ebx,8
  249. xor eax,DWORD PTR 2048[esi*8+ebp]
  250. movzx esi,dl
  251. mov edx,DWORD PTR 4[esp]
  252. xor ebx,ecx
  253. xor eax,DWORD PTR 2052[esi*8+ebp]
  254. mov esi,DWORD PTR 48[edi]
  255. xor ebx,eax
  256. mov DWORD PTR 8[esp],ebx
  257. xor eax,edx
  258. mov DWORD PTR 4[esp],eax
  259. xor eax,esi
  260. xor ebx,DWORD PTR 52[edi]
  261. movzx esi,ah
  262. mov edx,DWORD PTR 2052[esi*8+ebp]
  263. movzx esi,al
  264. xor edx,DWORD PTR 4[esi*8+ebp]
  265. shr eax,16
  266. movzx esi,bl
  267. mov ecx,DWORD PTR [esi*8+ebp]
  268. movzx esi,ah
  269. xor edx,DWORD PTR [esi*8+ebp]
  270. movzx esi,bh
  271. xor ecx,DWORD PTR 4[esi*8+ebp]
  272. shr ebx,16
  273. movzx eax,al
  274. xor edx,DWORD PTR 2048[eax*8+ebp]
  275. movzx esi,bh
  276. mov eax,DWORD PTR 16[esp]
  277. xor ecx,edx
  278. ror edx,8
  279. xor ecx,DWORD PTR 2048[esi*8+ebp]
  280. movzx esi,bl
  281. mov ebx,DWORD PTR 12[esp]
  282. xor edx,eax
  283. xor ecx,DWORD PTR 2052[esi*8+ebp]
  284. mov esi,DWORD PTR 56[edi]
  285. xor edx,ecx
  286. mov DWORD PTR 16[esp],edx
  287. xor ecx,ebx
  288. mov DWORD PTR 12[esp],ecx
  289. xor ecx,esi
  290. xor edx,DWORD PTR 60[edi]
  291. movzx esi,ch
  292. mov ebx,DWORD PTR 2052[esi*8+ebp]
  293. movzx esi,cl
  294. xor ebx,DWORD PTR 4[esi*8+ebp]
  295. shr ecx,16
  296. movzx esi,dl
  297. mov eax,DWORD PTR [esi*8+ebp]
  298. movzx esi,ch
  299. xor ebx,DWORD PTR [esi*8+ebp]
  300. movzx esi,dh
  301. xor eax,DWORD PTR 4[esi*8+ebp]
  302. shr edx,16
  303. movzx ecx,cl
  304. xor ebx,DWORD PTR 2048[ecx*8+ebp]
  305. movzx esi,dh
  306. mov ecx,DWORD PTR 8[esp]
  307. xor eax,ebx
  308. ror ebx,8
  309. xor eax,DWORD PTR 2048[esi*8+ebp]
  310. movzx esi,dl
  311. mov edx,DWORD PTR 4[esp]
  312. xor ebx,ecx
  313. xor eax,DWORD PTR 2052[esi*8+ebp]
  314. mov esi,DWORD PTR 64[edi]
  315. xor ebx,eax
  316. mov DWORD PTR 8[esp],ebx
  317. xor eax,edx
  318. mov DWORD PTR 4[esp],eax
  319. add edi,64
  320. cmp edi,DWORD PTR 20[esp]
  321. je $L003done
  322. and esi,eax
  323. mov edx,DWORD PTR 16[esp]
  324. rol esi,1
  325. mov ecx,edx
  326. xor ebx,esi
  327. or ecx,DWORD PTR 12[edi]
  328. mov DWORD PTR 8[esp],ebx
  329. xor ecx,DWORD PTR 12[esp]
  330. mov esi,DWORD PTR 4[edi]
  331. mov DWORD PTR 12[esp],ecx
  332. or esi,ebx
  333. and ecx,DWORD PTR 8[edi]
  334. xor eax,esi
  335. rol ecx,1
  336. mov DWORD PTR 4[esp],eax
  337. xor edx,ecx
  338. mov esi,DWORD PTR 16[edi]
  339. mov DWORD PTR 16[esp],edx
  340. jmp $L002loop
  341. ALIGN 8
  342. $L003done:
  343. mov ecx,eax
  344. mov edx,ebx
  345. mov eax,DWORD PTR 12[esp]
  346. mov ebx,DWORD PTR 16[esp]
  347. xor eax,esi
  348. xor ebx,DWORD PTR 4[edi]
  349. xor ecx,DWORD PTR 8[edi]
  350. xor edx,DWORD PTR 12[edi]
  351. ret
  352. __x86_Camellia_encrypt ENDP
  353. ALIGN 16
  354. _Camellia_DecryptBlock_Rounds PROC PUBLIC
  355. $L_Camellia_DecryptBlock_Rounds_begin::
  356. push ebp
  357. push ebx
  358. push esi
  359. push edi
  360. mov eax,DWORD PTR 20[esp]
  361. mov esi,DWORD PTR 24[esp]
  362. mov edi,DWORD PTR 28[esp]
  363. mov ebx,esp
  364. sub esp,28
  365. and esp,-64
  366. lea ecx,DWORD PTR [edi-127]
  367. sub ecx,esp
  368. neg ecx
  369. and ecx,960
  370. sub esp,ecx
  371. add esp,4
  372. shl eax,6
  373. mov DWORD PTR 16[esp],edi
  374. lea edi,DWORD PTR [eax*1+edi]
  375. mov DWORD PTR 20[esp],ebx
  376. call $L004pic_point
  377. $L004pic_point:
  378. pop ebp
  379. lea ebp,DWORD PTR ($LCamellia_SBOX-$L004pic_point)[ebp]
  380. mov eax,DWORD PTR [esi]
  381. mov ebx,DWORD PTR 4[esi]
  382. mov ecx,DWORD PTR 8[esi]
  383. bswap eax
  384. mov edx,DWORD PTR 12[esi]
  385. bswap ebx
  386. bswap ecx
  387. bswap edx
  388. call __x86_Camellia_decrypt
  389. mov esp,DWORD PTR 20[esp]
  390. bswap eax
  391. mov esi,DWORD PTR 32[esp]
  392. bswap ebx
  393. bswap ecx
  394. bswap edx
  395. mov DWORD PTR [esi],eax
  396. mov DWORD PTR 4[esi],ebx
  397. mov DWORD PTR 8[esi],ecx
  398. mov DWORD PTR 12[esi],edx
  399. pop edi
  400. pop esi
  401. pop ebx
  402. pop ebp
  403. ret
  404. _Camellia_DecryptBlock_Rounds ENDP
  405. ALIGN 16
  406. _Camellia_DecryptBlock PROC PUBLIC
  407. $L_Camellia_DecryptBlock_begin::
  408. mov eax,128
  409. sub eax,DWORD PTR 4[esp]
  410. mov eax,3
  411. adc eax,0
  412. mov DWORD PTR 4[esp],eax
  413. jmp $L_Camellia_DecryptBlock_Rounds_begin
  414. _Camellia_DecryptBlock ENDP
  415. ALIGN 16
  416. _Camellia_decrypt PROC PUBLIC
  417. $L_Camellia_decrypt_begin::
  418. push ebp
  419. push ebx
  420. push esi
  421. push edi
  422. mov esi,DWORD PTR 20[esp]
  423. mov edi,DWORD PTR 28[esp]
  424. mov ebx,esp
  425. sub esp,28
  426. and esp,-64
  427. mov eax,DWORD PTR 272[edi]
  428. lea ecx,DWORD PTR [edi-127]
  429. sub ecx,esp
  430. neg ecx
  431. and ecx,960
  432. sub esp,ecx
  433. add esp,4
  434. shl eax,6
  435. mov DWORD PTR 16[esp],edi
  436. lea edi,DWORD PTR [eax*1+edi]
  437. mov DWORD PTR 20[esp],ebx
  438. call $L005pic_point
  439. $L005pic_point:
  440. pop ebp
  441. lea ebp,DWORD PTR ($LCamellia_SBOX-$L005pic_point)[ebp]
  442. mov eax,DWORD PTR [esi]
  443. mov ebx,DWORD PTR 4[esi]
  444. mov ecx,DWORD PTR 8[esi]
  445. bswap eax
  446. mov edx,DWORD PTR 12[esi]
  447. bswap ebx
  448. bswap ecx
  449. bswap edx
  450. call __x86_Camellia_decrypt
  451. mov esp,DWORD PTR 20[esp]
  452. bswap eax
  453. mov esi,DWORD PTR 24[esp]
  454. bswap ebx
  455. bswap ecx
  456. bswap edx
  457. mov DWORD PTR [esi],eax
  458. mov DWORD PTR 4[esi],ebx
  459. mov DWORD PTR 8[esi],ecx
  460. mov DWORD PTR 12[esi],edx
  461. pop edi
  462. pop esi
  463. pop ebx
  464. pop ebp
  465. ret
  466. _Camellia_decrypt ENDP
  467. ALIGN 16
  468. __x86_Camellia_decrypt PROC PRIVATE
  469. xor eax,DWORD PTR [edi]
  470. xor ebx,DWORD PTR 4[edi]
  471. xor ecx,DWORD PTR 8[edi]
  472. xor edx,DWORD PTR 12[edi]
  473. mov esi,DWORD PTR [edi-8]
  474. mov DWORD PTR 4[esp],eax
  475. mov DWORD PTR 8[esp],ebx
  476. mov DWORD PTR 12[esp],ecx
  477. mov DWORD PTR 16[esp],edx
  478. ALIGN 16
  479. $L006loop:
  480. xor eax,esi
  481. xor ebx,DWORD PTR [edi-4]
  482. movzx esi,ah
  483. mov edx,DWORD PTR 2052[esi*8+ebp]
  484. movzx esi,al
  485. xor edx,DWORD PTR 4[esi*8+ebp]
  486. shr eax,16
  487. movzx esi,bl
  488. mov ecx,DWORD PTR [esi*8+ebp]
  489. movzx esi,ah
  490. xor edx,DWORD PTR [esi*8+ebp]
  491. movzx esi,bh
  492. xor ecx,DWORD PTR 4[esi*8+ebp]
  493. shr ebx,16
  494. movzx eax,al
  495. xor edx,DWORD PTR 2048[eax*8+ebp]
  496. movzx esi,bh
  497. mov eax,DWORD PTR 16[esp]
  498. xor ecx,edx
  499. ror edx,8
  500. xor ecx,DWORD PTR 2048[esi*8+ebp]
  501. movzx esi,bl
  502. mov ebx,DWORD PTR 12[esp]
  503. xor edx,eax
  504. xor ecx,DWORD PTR 2052[esi*8+ebp]
  505. mov esi,DWORD PTR [edi-16]
  506. xor edx,ecx
  507. mov DWORD PTR 16[esp],edx
  508. xor ecx,ebx
  509. mov DWORD PTR 12[esp],ecx
  510. xor ecx,esi
  511. xor edx,DWORD PTR [edi-12]
  512. movzx esi,ch
  513. mov ebx,DWORD PTR 2052[esi*8+ebp]
  514. movzx esi,cl
  515. xor ebx,DWORD PTR 4[esi*8+ebp]
  516. shr ecx,16
  517. movzx esi,dl
  518. mov eax,DWORD PTR [esi*8+ebp]
  519. movzx esi,ch
  520. xor ebx,DWORD PTR [esi*8+ebp]
  521. movzx esi,dh
  522. xor eax,DWORD PTR 4[esi*8+ebp]
  523. shr edx,16
  524. movzx ecx,cl
  525. xor ebx,DWORD PTR 2048[ecx*8+ebp]
  526. movzx esi,dh
  527. mov ecx,DWORD PTR 8[esp]
  528. xor eax,ebx
  529. ror ebx,8
  530. xor eax,DWORD PTR 2048[esi*8+ebp]
  531. movzx esi,dl
  532. mov edx,DWORD PTR 4[esp]
  533. xor ebx,ecx
  534. xor eax,DWORD PTR 2052[esi*8+ebp]
  535. mov esi,DWORD PTR [edi-24]
  536. xor ebx,eax
  537. mov DWORD PTR 8[esp],ebx
  538. xor eax,edx
  539. mov DWORD PTR 4[esp],eax
  540. xor eax,esi
  541. xor ebx,DWORD PTR [edi-20]
  542. movzx esi,ah
  543. mov edx,DWORD PTR 2052[esi*8+ebp]
  544. movzx esi,al
  545. xor edx,DWORD PTR 4[esi*8+ebp]
  546. shr eax,16
  547. movzx esi,bl
  548. mov ecx,DWORD PTR [esi*8+ebp]
  549. movzx esi,ah
  550. xor edx,DWORD PTR [esi*8+ebp]
  551. movzx esi,bh
  552. xor ecx,DWORD PTR 4[esi*8+ebp]
  553. shr ebx,16
  554. movzx eax,al
  555. xor edx,DWORD PTR 2048[eax*8+ebp]
  556. movzx esi,bh
  557. mov eax,DWORD PTR 16[esp]
  558. xor ecx,edx
  559. ror edx,8
  560. xor ecx,DWORD PTR 2048[esi*8+ebp]
  561. movzx esi,bl
  562. mov ebx,DWORD PTR 12[esp]
  563. xor edx,eax
  564. xor ecx,DWORD PTR 2052[esi*8+ebp]
  565. mov esi,DWORD PTR [edi-32]
  566. xor edx,ecx
  567. mov DWORD PTR 16[esp],edx
  568. xor ecx,ebx
  569. mov DWORD PTR 12[esp],ecx
  570. xor ecx,esi
  571. xor edx,DWORD PTR [edi-28]
  572. movzx esi,ch
  573. mov ebx,DWORD PTR 2052[esi*8+ebp]
  574. movzx esi,cl
  575. xor ebx,DWORD PTR 4[esi*8+ebp]
  576. shr ecx,16
  577. movzx esi,dl
  578. mov eax,DWORD PTR [esi*8+ebp]
  579. movzx esi,ch
  580. xor ebx,DWORD PTR [esi*8+ebp]
  581. movzx esi,dh
  582. xor eax,DWORD PTR 4[esi*8+ebp]
  583. shr edx,16
  584. movzx ecx,cl
  585. xor ebx,DWORD PTR 2048[ecx*8+ebp]
  586. movzx esi,dh
  587. mov ecx,DWORD PTR 8[esp]
  588. xor eax,ebx
  589. ror ebx,8
  590. xor eax,DWORD PTR 2048[esi*8+ebp]
  591. movzx esi,dl
  592. mov edx,DWORD PTR 4[esp]
  593. xor ebx,ecx
  594. xor eax,DWORD PTR 2052[esi*8+ebp]
  595. mov esi,DWORD PTR [edi-40]
  596. xor ebx,eax
  597. mov DWORD PTR 8[esp],ebx
  598. xor eax,edx
  599. mov DWORD PTR 4[esp],eax
  600. xor eax,esi
  601. xor ebx,DWORD PTR [edi-36]
  602. movzx esi,ah
  603. mov edx,DWORD PTR 2052[esi*8+ebp]
  604. movzx esi,al
  605. xor edx,DWORD PTR 4[esi*8+ebp]
  606. shr eax,16
  607. movzx esi,bl
  608. mov ecx,DWORD PTR [esi*8+ebp]
  609. movzx esi,ah
  610. xor edx,DWORD PTR [esi*8+ebp]
  611. movzx esi,bh
  612. xor ecx,DWORD PTR 4[esi*8+ebp]
  613. shr ebx,16
  614. movzx eax,al
  615. xor edx,DWORD PTR 2048[eax*8+ebp]
  616. movzx esi,bh
  617. mov eax,DWORD PTR 16[esp]
  618. xor ecx,edx
  619. ror edx,8
  620. xor ecx,DWORD PTR 2048[esi*8+ebp]
  621. movzx esi,bl
  622. mov ebx,DWORD PTR 12[esp]
  623. xor edx,eax
  624. xor ecx,DWORD PTR 2052[esi*8+ebp]
  625. mov esi,DWORD PTR [edi-48]
  626. xor edx,ecx
  627. mov DWORD PTR 16[esp],edx
  628. xor ecx,ebx
  629. mov DWORD PTR 12[esp],ecx
  630. xor ecx,esi
  631. xor edx,DWORD PTR [edi-44]
  632. movzx esi,ch
  633. mov ebx,DWORD PTR 2052[esi*8+ebp]
  634. movzx esi,cl
  635. xor ebx,DWORD PTR 4[esi*8+ebp]
  636. shr ecx,16
  637. movzx esi,dl
  638. mov eax,DWORD PTR [esi*8+ebp]
  639. movzx esi,ch
  640. xor ebx,DWORD PTR [esi*8+ebp]
  641. movzx esi,dh
  642. xor eax,DWORD PTR 4[esi*8+ebp]
  643. shr edx,16
  644. movzx ecx,cl
  645. xor ebx,DWORD PTR 2048[ecx*8+ebp]
  646. movzx esi,dh
  647. mov ecx,DWORD PTR 8[esp]
  648. xor eax,ebx
  649. ror ebx,8
  650. xor eax,DWORD PTR 2048[esi*8+ebp]
  651. movzx esi,dl
  652. mov edx,DWORD PTR 4[esp]
  653. xor ebx,ecx
  654. xor eax,DWORD PTR 2052[esi*8+ebp]
  655. mov esi,DWORD PTR [edi-56]
  656. xor ebx,eax
  657. mov DWORD PTR 8[esp],ebx
  658. xor eax,edx
  659. mov DWORD PTR 4[esp],eax
  660. sub edi,64
  661. cmp edi,DWORD PTR 20[esp]
  662. je $L007done
  663. and esi,eax
  664. mov edx,DWORD PTR 16[esp]
  665. rol esi,1
  666. mov ecx,edx
  667. xor ebx,esi
  668. or ecx,DWORD PTR 4[edi]
  669. mov DWORD PTR 8[esp],ebx
  670. xor ecx,DWORD PTR 12[esp]
  671. mov esi,DWORD PTR 12[edi]
  672. mov DWORD PTR 12[esp],ecx
  673. or esi,ebx
  674. and ecx,DWORD PTR [edi]
  675. xor eax,esi
  676. rol ecx,1
  677. mov DWORD PTR 4[esp],eax
  678. xor edx,ecx
  679. mov esi,DWORD PTR [edi-8]
  680. mov DWORD PTR 16[esp],edx
  681. jmp $L006loop
  682. ALIGN 8
  683. $L007done:
  684. mov ecx,eax
  685. mov edx,ebx
  686. mov eax,DWORD PTR 12[esp]
  687. mov ebx,DWORD PTR 16[esp]
  688. xor ecx,esi
  689. xor edx,DWORD PTR 12[edi]
  690. xor eax,DWORD PTR [edi]
  691. xor ebx,DWORD PTR 4[edi]
  692. ret
  693. __x86_Camellia_decrypt ENDP
  694. ALIGN 16
  695. _Camellia_Ekeygen PROC PUBLIC
  696. $L_Camellia_Ekeygen_begin::
  697. push ebp
  698. push ebx
  699. push esi
  700. push edi
  701. sub esp,16
  702. mov ebp,DWORD PTR 36[esp]
  703. mov esi,DWORD PTR 40[esp]
  704. mov edi,DWORD PTR 44[esp]
  705. mov eax,DWORD PTR [esi]
  706. mov ebx,DWORD PTR 4[esi]
  707. mov ecx,DWORD PTR 8[esi]
  708. mov edx,DWORD PTR 12[esi]
  709. bswap eax
  710. bswap ebx
  711. bswap ecx
  712. bswap edx
  713. mov DWORD PTR [edi],eax
  714. mov DWORD PTR 4[edi],ebx
  715. mov DWORD PTR 8[edi],ecx
  716. mov DWORD PTR 12[edi],edx
  717. cmp ebp,128
  718. je $L0081st128
  719. mov eax,DWORD PTR 16[esi]
  720. mov ebx,DWORD PTR 20[esi]
  721. cmp ebp,192
  722. je $L0091st192
  723. mov ecx,DWORD PTR 24[esi]
  724. mov edx,DWORD PTR 28[esi]
  725. jmp $L0101st256
  726. ALIGN 4
  727. $L0091st192:
  728. mov ecx,eax
  729. mov edx,ebx
  730. not ecx
  731. not edx
  732. ALIGN 4
  733. $L0101st256:
  734. bswap eax
  735. bswap ebx
  736. bswap ecx
  737. bswap edx
  738. mov DWORD PTR 32[edi],eax
  739. mov DWORD PTR 36[edi],ebx
  740. mov DWORD PTR 40[edi],ecx
  741. mov DWORD PTR 44[edi],edx
  742. xor eax,DWORD PTR [edi]
  743. xor ebx,DWORD PTR 4[edi]
  744. xor ecx,DWORD PTR 8[edi]
  745. xor edx,DWORD PTR 12[edi]
  746. ALIGN 4
  747. $L0081st128:
  748. call $L011pic_point
  749. $L011pic_point:
  750. pop ebp
  751. lea ebp,DWORD PTR ($LCamellia_SBOX-$L011pic_point)[ebp]
  752. lea edi,DWORD PTR ($LCamellia_SIGMA-$LCamellia_SBOX)[ebp]
  753. mov esi,DWORD PTR [edi]
  754. mov DWORD PTR [esp],eax
  755. mov DWORD PTR 4[esp],ebx
  756. mov DWORD PTR 8[esp],ecx
  757. mov DWORD PTR 12[esp],edx
  758. xor eax,esi
  759. xor ebx,DWORD PTR 4[edi]
  760. movzx esi,ah
  761. mov edx,DWORD PTR 2052[esi*8+ebp]
  762. movzx esi,al
  763. xor edx,DWORD PTR 4[esi*8+ebp]
  764. shr eax,16
  765. movzx esi,bl
  766. mov ecx,DWORD PTR [esi*8+ebp]
  767. movzx esi,ah
  768. xor edx,DWORD PTR [esi*8+ebp]
  769. movzx esi,bh
  770. xor ecx,DWORD PTR 4[esi*8+ebp]
  771. shr ebx,16
  772. movzx eax,al
  773. xor edx,DWORD PTR 2048[eax*8+ebp]
  774. movzx esi,bh
  775. mov eax,DWORD PTR 12[esp]
  776. xor ecx,edx
  777. ror edx,8
  778. xor ecx,DWORD PTR 2048[esi*8+ebp]
  779. movzx esi,bl
  780. mov ebx,DWORD PTR 8[esp]
  781. xor edx,eax
  782. xor ecx,DWORD PTR 2052[esi*8+ebp]
  783. mov esi,DWORD PTR 8[edi]
  784. xor edx,ecx
  785. mov DWORD PTR 12[esp],edx
  786. xor ecx,ebx
  787. mov DWORD PTR 8[esp],ecx
  788. xor ecx,esi
  789. xor edx,DWORD PTR 12[edi]
  790. movzx esi,ch
  791. mov ebx,DWORD PTR 2052[esi*8+ebp]
  792. movzx esi,cl
  793. xor ebx,DWORD PTR 4[esi*8+ebp]
  794. shr ecx,16
  795. movzx esi,dl
  796. mov eax,DWORD PTR [esi*8+ebp]
  797. movzx esi,ch
  798. xor ebx,DWORD PTR [esi*8+ebp]
  799. movzx esi,dh
  800. xor eax,DWORD PTR 4[esi*8+ebp]
  801. shr edx,16
  802. movzx ecx,cl
  803. xor ebx,DWORD PTR 2048[ecx*8+ebp]
  804. movzx esi,dh
  805. mov ecx,DWORD PTR 4[esp]
  806. xor eax,ebx
  807. ror ebx,8
  808. xor eax,DWORD PTR 2048[esi*8+ebp]
  809. movzx esi,dl
  810. mov edx,DWORD PTR [esp]
  811. xor ebx,ecx
  812. xor eax,DWORD PTR 2052[esi*8+ebp]
  813. mov esi,DWORD PTR 16[edi]
  814. xor ebx,eax
  815. mov DWORD PTR 4[esp],ebx
  816. xor eax,edx
  817. mov DWORD PTR [esp],eax
  818. mov ecx,DWORD PTR 8[esp]
  819. mov edx,DWORD PTR 12[esp]
  820. mov esi,DWORD PTR 44[esp]
  821. xor eax,DWORD PTR [esi]
  822. xor ebx,DWORD PTR 4[esi]
  823. xor ecx,DWORD PTR 8[esi]
  824. xor edx,DWORD PTR 12[esi]
  825. mov esi,DWORD PTR 16[edi]
  826. mov DWORD PTR [esp],eax
  827. mov DWORD PTR 4[esp],ebx
  828. mov DWORD PTR 8[esp],ecx
  829. mov DWORD PTR 12[esp],edx
  830. xor eax,esi
  831. xor ebx,DWORD PTR 20[edi]
  832. movzx esi,ah
  833. mov edx,DWORD PTR 2052[esi*8+ebp]
  834. movzx esi,al
  835. xor edx,DWORD PTR 4[esi*8+ebp]
  836. shr eax,16
  837. movzx esi,bl
  838. mov ecx,DWORD PTR [esi*8+ebp]
  839. movzx esi,ah
  840. xor edx,DWORD PTR [esi*8+ebp]
  841. movzx esi,bh
  842. xor ecx,DWORD PTR 4[esi*8+ebp]
  843. shr ebx,16
  844. movzx eax,al
  845. xor edx,DWORD PTR 2048[eax*8+ebp]
  846. movzx esi,bh
  847. mov eax,DWORD PTR 12[esp]
  848. xor ecx,edx
  849. ror edx,8
  850. xor ecx,DWORD PTR 2048[esi*8+ebp]
  851. movzx esi,bl
  852. mov ebx,DWORD PTR 8[esp]
  853. xor edx,eax
  854. xor ecx,DWORD PTR 2052[esi*8+ebp]
  855. mov esi,DWORD PTR 24[edi]
  856. xor edx,ecx
  857. mov DWORD PTR 12[esp],edx
  858. xor ecx,ebx
  859. mov DWORD PTR 8[esp],ecx
  860. xor ecx,esi
  861. xor edx,DWORD PTR 28[edi]
  862. movzx esi,ch
  863. mov ebx,DWORD PTR 2052[esi*8+ebp]
  864. movzx esi,cl
  865. xor ebx,DWORD PTR 4[esi*8+ebp]
  866. shr ecx,16
  867. movzx esi,dl
  868. mov eax,DWORD PTR [esi*8+ebp]
  869. movzx esi,ch
  870. xor ebx,DWORD PTR [esi*8+ebp]
  871. movzx esi,dh
  872. xor eax,DWORD PTR 4[esi*8+ebp]
  873. shr edx,16
  874. movzx ecx,cl
  875. xor ebx,DWORD PTR 2048[ecx*8+ebp]
  876. movzx esi,dh
  877. mov ecx,DWORD PTR 4[esp]
  878. xor eax,ebx
  879. ror ebx,8
  880. xor eax,DWORD PTR 2048[esi*8+ebp]
  881. movzx esi,dl
  882. mov edx,DWORD PTR [esp]
  883. xor ebx,ecx
  884. xor eax,DWORD PTR 2052[esi*8+ebp]
  885. mov esi,DWORD PTR 32[edi]
  886. xor ebx,eax
  887. mov DWORD PTR 4[esp],ebx
  888. xor eax,edx
  889. mov DWORD PTR [esp],eax
  890. mov ecx,DWORD PTR 8[esp]
  891. mov edx,DWORD PTR 12[esp]
  892. mov esi,DWORD PTR 36[esp]
  893. cmp esi,128
  894. jne $L0122nd256
  895. mov edi,DWORD PTR 44[esp]
  896. lea edi,DWORD PTR 128[edi]
  897. mov DWORD PTR [edi-112],eax
  898. mov DWORD PTR [edi-108],ebx
  899. mov DWORD PTR [edi-104],ecx
  900. mov DWORD PTR [edi-100],edx
  901. mov ebp,eax
  902. shl eax,15
  903. mov esi,ebx
  904. shr esi,17
  905. shl ebx,15
  906. or eax,esi
  907. mov esi,ecx
  908. shl ecx,15
  909. mov DWORD PTR [edi-80],eax
  910. shr esi,17
  911. or ebx,esi
  912. shr ebp,17
  913. mov esi,edx
  914. shr esi,17
  915. mov DWORD PTR [edi-76],ebx
  916. shl edx,15
  917. or ecx,esi
  918. or edx,ebp
  919. mov DWORD PTR [edi-72],ecx
  920. mov DWORD PTR [edi-68],edx
  921. mov ebp,eax
  922. shl eax,15
  923. mov esi,ebx
  924. shr esi,17
  925. shl ebx,15
  926. or eax,esi
  927. mov esi,ecx
  928. shl ecx,15
  929. mov DWORD PTR [edi-64],eax
  930. shr esi,17
  931. or ebx,esi
  932. shr ebp,17
  933. mov esi,edx
  934. shr esi,17
  935. mov DWORD PTR [edi-60],ebx
  936. shl edx,15
  937. or ecx,esi
  938. or edx,ebp
  939. mov DWORD PTR [edi-56],ecx
  940. mov DWORD PTR [edi-52],edx
  941. mov ebp,eax
  942. shl eax,15
  943. mov esi,ebx
  944. shr esi,17
  945. shl ebx,15
  946. or eax,esi
  947. mov esi,ecx
  948. shl ecx,15
  949. mov DWORD PTR [edi-32],eax
  950. shr esi,17
  951. or ebx,esi
  952. shr ebp,17
  953. mov esi,edx
  954. shr esi,17
  955. mov DWORD PTR [edi-28],ebx
  956. shl edx,15
  957. or ecx,esi
  958. or edx,ebp
  959. mov ebp,eax
  960. shl eax,15
  961. mov esi,ebx
  962. shr esi,17
  963. shl ebx,15
  964. or eax,esi
  965. mov esi,ecx
  966. shl ecx,15
  967. mov DWORD PTR [edi-16],eax
  968. shr esi,17
  969. or ebx,esi
  970. shr ebp,17
  971. mov esi,edx
  972. shr esi,17
  973. mov DWORD PTR [edi-12],ebx
  974. shl edx,15
  975. or ecx,esi
  976. or edx,ebp
  977. mov DWORD PTR [edi-8],ecx
  978. mov DWORD PTR [edi-4],edx
  979. mov ebp,ebx
  980. shl ebx,2
  981. mov esi,ecx
  982. shr esi,30
  983. shl ecx,2
  984. or ebx,esi
  985. mov esi,edx
  986. shl edx,2
  987. mov DWORD PTR 32[edi],ebx
  988. shr esi,30
  989. or ecx,esi
  990. shr ebp,30
  991. mov esi,eax
  992. shr esi,30
  993. mov DWORD PTR 36[edi],ecx
  994. shl eax,2
  995. or edx,esi
  996. or eax,ebp
  997. mov DWORD PTR 40[edi],edx
  998. mov DWORD PTR 44[edi],eax
  999. mov ebp,ebx
  1000. shl ebx,17
  1001. mov esi,ecx
  1002. shr esi,15
  1003. shl ecx,17
  1004. or ebx,esi
  1005. mov esi,edx
  1006. shl edx,17
  1007. mov DWORD PTR 64[edi],ebx
  1008. shr esi,15
  1009. or ecx,esi
  1010. shr ebp,15
  1011. mov esi,eax
  1012. shr esi,15
  1013. mov DWORD PTR 68[edi],ecx
  1014. shl eax,17
  1015. or edx,esi
  1016. or eax,ebp
  1017. mov DWORD PTR 72[edi],edx
  1018. mov DWORD PTR 76[edi],eax
  1019. mov ebx,DWORD PTR [edi-128]
  1020. mov ecx,DWORD PTR [edi-124]
  1021. mov edx,DWORD PTR [edi-120]
  1022. mov eax,DWORD PTR [edi-116]
  1023. mov ebp,ebx
  1024. shl ebx,15
  1025. mov esi,ecx
  1026. shr esi,17
  1027. shl ecx,15
  1028. or ebx,esi
  1029. mov esi,edx
  1030. shl edx,15
  1031. mov DWORD PTR [edi-96],ebx
  1032. shr esi,17
  1033. or ecx,esi
  1034. shr ebp,17
  1035. mov esi,eax
  1036. shr esi,17
  1037. mov DWORD PTR [edi-92],ecx
  1038. shl eax,15
  1039. or edx,esi
  1040. or eax,ebp
  1041. mov DWORD PTR [edi-88],edx
  1042. mov DWORD PTR [edi-84],eax
  1043. mov ebp,ebx
  1044. shl ebx,30
  1045. mov esi,ecx
  1046. shr esi,2
  1047. shl ecx,30
  1048. or ebx,esi
  1049. mov esi,edx
  1050. shl edx,30
  1051. mov DWORD PTR [edi-48],ebx
  1052. shr esi,2
  1053. or ecx,esi
  1054. shr ebp,2
  1055. mov esi,eax
  1056. shr esi,2
  1057. mov DWORD PTR [edi-44],ecx
  1058. shl eax,30
  1059. or edx,esi
  1060. or eax,ebp
  1061. mov DWORD PTR [edi-40],edx
  1062. mov DWORD PTR [edi-36],eax
  1063. mov ebp,ebx
  1064. shl ebx,15
  1065. mov esi,ecx
  1066. shr esi,17
  1067. shl ecx,15
  1068. or ebx,esi
  1069. mov esi,edx
  1070. shl edx,15
  1071. shr esi,17
  1072. or ecx,esi
  1073. shr ebp,17
  1074. mov esi,eax
  1075. shr esi,17
  1076. shl eax,15
  1077. or edx,esi
  1078. or eax,ebp
  1079. mov DWORD PTR [edi-24],edx
  1080. mov DWORD PTR [edi-20],eax
  1081. mov ebp,ebx
  1082. shl ebx,17
  1083. mov esi,ecx
  1084. shr esi,15
  1085. shl ecx,17
  1086. or ebx,esi
  1087. mov esi,edx
  1088. shl edx,17
  1089. mov DWORD PTR [edi],ebx
  1090. shr esi,15
  1091. or ecx,esi
  1092. shr ebp,15
  1093. mov esi,eax
  1094. shr esi,15
  1095. mov DWORD PTR 4[edi],ecx
  1096. shl eax,17
  1097. or edx,esi
  1098. or eax,ebp
  1099. mov DWORD PTR 8[edi],edx
  1100. mov DWORD PTR 12[edi],eax
  1101. mov ebp,ebx
  1102. shl ebx,17
  1103. mov esi,ecx
  1104. shr esi,15
  1105. shl ecx,17
  1106. or ebx,esi
  1107. mov esi,edx
  1108. shl edx,17
  1109. mov DWORD PTR 16[edi],ebx
  1110. shr esi,15
  1111. or ecx,esi
  1112. shr ebp,15
  1113. mov esi,eax
  1114. shr esi,15
  1115. mov DWORD PTR 20[edi],ecx
  1116. shl eax,17
  1117. or edx,esi
  1118. or eax,ebp
  1119. mov DWORD PTR 24[edi],edx
  1120. mov DWORD PTR 28[edi],eax
  1121. mov ebp,ebx
  1122. shl ebx,17
  1123. mov esi,ecx
  1124. shr esi,15
  1125. shl ecx,17
  1126. or ebx,esi
  1127. mov esi,edx
  1128. shl edx,17
  1129. mov DWORD PTR 48[edi],ebx
  1130. shr esi,15
  1131. or ecx,esi
  1132. shr ebp,15
  1133. mov esi,eax
  1134. shr esi,15
  1135. mov DWORD PTR 52[edi],ecx
  1136. shl eax,17
  1137. or edx,esi
  1138. or eax,ebp
  1139. mov DWORD PTR 56[edi],edx
  1140. mov DWORD PTR 60[edi],eax
  1141. mov eax,3
  1142. jmp $L013done
  1143. ALIGN 16
  1144. $L0122nd256:
  1145. mov esi,DWORD PTR 44[esp]
  1146. mov DWORD PTR 48[esi],eax
  1147. mov DWORD PTR 52[esi],ebx
  1148. mov DWORD PTR 56[esi],ecx
  1149. mov DWORD PTR 60[esi],edx
  1150. xor eax,DWORD PTR 32[esi]
  1151. xor ebx,DWORD PTR 36[esi]
  1152. xor ecx,DWORD PTR 40[esi]
  1153. xor edx,DWORD PTR 44[esi]
  1154. mov esi,DWORD PTR 32[edi]
  1155. mov DWORD PTR [esp],eax
  1156. mov DWORD PTR 4[esp],ebx
  1157. mov DWORD PTR 8[esp],ecx
  1158. mov DWORD PTR 12[esp],edx
  1159. xor eax,esi
  1160. xor ebx,DWORD PTR 36[edi]
  1161. movzx esi,ah
  1162. mov edx,DWORD PTR 2052[esi*8+ebp]
  1163. movzx esi,al
  1164. xor edx,DWORD PTR 4[esi*8+ebp]
  1165. shr eax,16
  1166. movzx esi,bl
  1167. mov ecx,DWORD PTR [esi*8+ebp]
  1168. movzx esi,ah
  1169. xor edx,DWORD PTR [esi*8+ebp]
  1170. movzx esi,bh
  1171. xor ecx,DWORD PTR 4[esi*8+ebp]
  1172. shr ebx,16
  1173. movzx eax,al
  1174. xor edx,DWORD PTR 2048[eax*8+ebp]
  1175. movzx esi,bh
  1176. mov eax,DWORD PTR 12[esp]
  1177. xor ecx,edx
  1178. ror edx,8
  1179. xor ecx,DWORD PTR 2048[esi*8+ebp]
  1180. movzx esi,bl
  1181. mov ebx,DWORD PTR 8[esp]
  1182. xor edx,eax
  1183. xor ecx,DWORD PTR 2052[esi*8+ebp]
  1184. mov esi,DWORD PTR 40[edi]
  1185. xor edx,ecx
  1186. mov DWORD PTR 12[esp],edx
  1187. xor ecx,ebx
  1188. mov DWORD PTR 8[esp],ecx
  1189. xor ecx,esi
  1190. xor edx,DWORD PTR 44[edi]
  1191. movzx esi,ch
  1192. mov ebx,DWORD PTR 2052[esi*8+ebp]
  1193. movzx esi,cl
  1194. xor ebx,DWORD PTR 4[esi*8+ebp]
  1195. shr ecx,16
  1196. movzx esi,dl
  1197. mov eax,DWORD PTR [esi*8+ebp]
  1198. movzx esi,ch
  1199. xor ebx,DWORD PTR [esi*8+ebp]
  1200. movzx esi,dh
  1201. xor eax,DWORD PTR 4[esi*8+ebp]
  1202. shr edx,16
  1203. movzx ecx,cl
  1204. xor ebx,DWORD PTR 2048[ecx*8+ebp]
  1205. movzx esi,dh
  1206. mov ecx,DWORD PTR 4[esp]
  1207. xor eax,ebx
  1208. ror ebx,8
  1209. xor eax,DWORD PTR 2048[esi*8+ebp]
  1210. movzx esi,dl
  1211. mov edx,DWORD PTR [esp]
  1212. xor ebx,ecx
  1213. xor eax,DWORD PTR 2052[esi*8+ebp]
  1214. mov esi,DWORD PTR 48[edi]
  1215. xor ebx,eax
  1216. mov DWORD PTR 4[esp],ebx
  1217. xor eax,edx
  1218. mov DWORD PTR [esp],eax
  1219. mov ecx,DWORD PTR 8[esp]
  1220. mov edx,DWORD PTR 12[esp]
  1221. mov edi,DWORD PTR 44[esp]
  1222. lea edi,DWORD PTR 128[edi]
  1223. mov DWORD PTR [edi-112],eax
  1224. mov DWORD PTR [edi-108],ebx
  1225. mov DWORD PTR [edi-104],ecx
  1226. mov DWORD PTR [edi-100],edx
  1227. mov ebp,eax
  1228. shl eax,30
  1229. mov esi,ebx
  1230. shr esi,2
  1231. shl ebx,30
  1232. or eax,esi
  1233. mov esi,ecx
  1234. shl ecx,30
  1235. mov DWORD PTR [edi-48],eax
  1236. shr esi,2
  1237. or ebx,esi
  1238. shr ebp,2
  1239. mov esi,edx
  1240. shr esi,2
  1241. mov DWORD PTR [edi-44],ebx
  1242. shl edx,30
  1243. or ecx,esi
  1244. or edx,ebp
  1245. mov DWORD PTR [edi-40],ecx
  1246. mov DWORD PTR [edi-36],edx
  1247. mov ebp,eax
  1248. shl eax,30
  1249. mov esi,ebx
  1250. shr esi,2
  1251. shl ebx,30
  1252. or eax,esi
  1253. mov esi,ecx
  1254. shl ecx,30
  1255. mov DWORD PTR 32[edi],eax
  1256. shr esi,2
  1257. or ebx,esi
  1258. shr ebp,2
  1259. mov esi,edx
  1260. shr esi,2
  1261. mov DWORD PTR 36[edi],ebx
  1262. shl edx,30
  1263. or ecx,esi
  1264. or edx,ebp
  1265. mov DWORD PTR 40[edi],ecx
  1266. mov DWORD PTR 44[edi],edx
  1267. mov ebp,ebx
  1268. shl ebx,19
  1269. mov esi,ecx
  1270. shr esi,13
  1271. shl ecx,19
  1272. or ebx,esi
  1273. mov esi,edx
  1274. shl edx,19
  1275. mov DWORD PTR 128[edi],ebx
  1276. shr esi,13
  1277. or ecx,esi
  1278. shr ebp,13
  1279. mov esi,eax
  1280. shr esi,13
  1281. mov DWORD PTR 132[edi],ecx
  1282. shl eax,19
  1283. or edx,esi
  1284. or eax,ebp
  1285. mov DWORD PTR 136[edi],edx
  1286. mov DWORD PTR 140[edi],eax
  1287. mov ebx,DWORD PTR [edi-96]
  1288. mov ecx,DWORD PTR [edi-92]
  1289. mov edx,DWORD PTR [edi-88]
  1290. mov eax,DWORD PTR [edi-84]
  1291. mov ebp,ebx
  1292. shl ebx,15
  1293. mov esi,ecx
  1294. shr esi,17
  1295. shl ecx,15
  1296. or ebx,esi
  1297. mov esi,edx
  1298. shl edx,15
  1299. mov DWORD PTR [edi-96],ebx
  1300. shr esi,17
  1301. or ecx,esi
  1302. shr ebp,17
  1303. mov esi,eax
  1304. shr esi,17
  1305. mov DWORD PTR [edi-92],ecx
  1306. shl eax,15
  1307. or edx,esi
  1308. or eax,ebp
  1309. mov DWORD PTR [edi-88],edx
  1310. mov DWORD PTR [edi-84],eax
  1311. mov ebp,ebx
  1312. shl ebx,15
  1313. mov esi,ecx
  1314. shr esi,17
  1315. shl ecx,15
  1316. or ebx,esi
  1317. mov esi,edx
  1318. shl edx,15
  1319. mov DWORD PTR [edi-64],ebx
  1320. shr esi,17
  1321. or ecx,esi
  1322. shr ebp,17
  1323. mov esi,eax
  1324. shr esi,17
  1325. mov DWORD PTR [edi-60],ecx
  1326. shl eax,15
  1327. or edx,esi
  1328. or eax,ebp
  1329. mov DWORD PTR [edi-56],edx
  1330. mov DWORD PTR [edi-52],eax
  1331. mov ebp,ebx
  1332. shl ebx,30
  1333. mov esi,ecx
  1334. shr esi,2
  1335. shl ecx,30
  1336. or ebx,esi
  1337. mov esi,edx
  1338. shl edx,30
  1339. mov DWORD PTR 16[edi],ebx
  1340. shr esi,2
  1341. or ecx,esi
  1342. shr ebp,2
  1343. mov esi,eax
  1344. shr esi,2
  1345. mov DWORD PTR 20[edi],ecx
  1346. shl eax,30
  1347. or edx,esi
  1348. or eax,ebp
  1349. mov DWORD PTR 24[edi],edx
  1350. mov DWORD PTR 28[edi],eax
  1351. mov ebp,ecx
  1352. shl ecx,2
  1353. mov esi,edx
  1354. shr esi,30
  1355. shl edx,2
  1356. or ecx,esi
  1357. mov esi,eax
  1358. shl eax,2
  1359. mov DWORD PTR 80[edi],ecx
  1360. shr esi,30
  1361. or edx,esi
  1362. shr ebp,30
  1363. mov esi,ebx
  1364. shr esi,30
  1365. mov DWORD PTR 84[edi],edx
  1366. shl ebx,2
  1367. or eax,esi
  1368. or ebx,ebp
  1369. mov DWORD PTR 88[edi],eax
  1370. mov DWORD PTR 92[edi],ebx
  1371. mov ecx,DWORD PTR [edi-80]
  1372. mov edx,DWORD PTR [edi-76]
  1373. mov eax,DWORD PTR [edi-72]
  1374. mov ebx,DWORD PTR [edi-68]
  1375. mov ebp,ecx
  1376. shl ecx,15
  1377. mov esi,edx
  1378. shr esi,17
  1379. shl edx,15
  1380. or ecx,esi
  1381. mov esi,eax
  1382. shl eax,15
  1383. mov DWORD PTR [edi-80],ecx
  1384. shr esi,17
  1385. or edx,esi
  1386. shr ebp,17
  1387. mov esi,ebx
  1388. shr esi,17
  1389. mov DWORD PTR [edi-76],edx
  1390. shl ebx,15
  1391. or eax,esi
  1392. or ebx,ebp
  1393. mov DWORD PTR [edi-72],eax
  1394. mov DWORD PTR [edi-68],ebx
  1395. mov ebp,ecx
  1396. shl ecx,30
  1397. mov esi,edx
  1398. shr esi,2
  1399. shl edx,30
  1400. or ecx,esi
  1401. mov esi,eax
  1402. shl eax,30
  1403. mov DWORD PTR [edi-16],ecx
  1404. shr esi,2
  1405. or edx,esi
  1406. shr ebp,2
  1407. mov esi,ebx
  1408. shr esi,2
  1409. mov DWORD PTR [edi-12],edx
  1410. shl ebx,30
  1411. or eax,esi
  1412. or ebx,ebp
  1413. mov DWORD PTR [edi-8],eax
  1414. mov DWORD PTR [edi-4],ebx
  1415. mov DWORD PTR 64[edi],edx
  1416. mov DWORD PTR 68[edi],eax
  1417. mov DWORD PTR 72[edi],ebx
  1418. mov DWORD PTR 76[edi],ecx
  1419. mov ebp,edx
  1420. shl edx,17
  1421. mov esi,eax
  1422. shr esi,15
  1423. shl eax,17
  1424. or edx,esi
  1425. mov esi,ebx
  1426. shl ebx,17
  1427. mov DWORD PTR 96[edi],edx
  1428. shr esi,15
  1429. or eax,esi
  1430. shr ebp,15
  1431. mov esi,ecx
  1432. shr esi,15
  1433. mov DWORD PTR 100[edi],eax
  1434. shl ecx,17
  1435. or ebx,esi
  1436. or ecx,ebp
  1437. mov DWORD PTR 104[edi],ebx
  1438. mov DWORD PTR 108[edi],ecx
  1439. mov edx,DWORD PTR [edi-128]
  1440. mov eax,DWORD PTR [edi-124]
  1441. mov ebx,DWORD PTR [edi-120]
  1442. mov ecx,DWORD PTR [edi-116]
  1443. mov ebp,eax
  1444. shl eax,13
  1445. mov esi,ebx
  1446. shr esi,19
  1447. shl ebx,13
  1448. or eax,esi
  1449. mov esi,ecx
  1450. shl ecx,13
  1451. mov DWORD PTR [edi-32],eax
  1452. shr esi,19
  1453. or ebx,esi
  1454. shr ebp,19
  1455. mov esi,edx
  1456. shr esi,19
  1457. mov DWORD PTR [edi-28],ebx
  1458. shl edx,13
  1459. or ecx,esi
  1460. or edx,ebp
  1461. mov DWORD PTR [edi-24],ecx
  1462. mov DWORD PTR [edi-20],edx
  1463. mov ebp,eax
  1464. shl eax,15
  1465. mov esi,ebx
  1466. shr esi,17
  1467. shl ebx,15
  1468. or eax,esi
  1469. mov esi,ecx
  1470. shl ecx,15
  1471. mov DWORD PTR [edi],eax
  1472. shr esi,17
  1473. or ebx,esi
  1474. shr ebp,17
  1475. mov esi,edx
  1476. shr esi,17
  1477. mov DWORD PTR 4[edi],ebx
  1478. shl edx,15
  1479. or ecx,esi
  1480. or edx,ebp
  1481. mov DWORD PTR 8[edi],ecx
  1482. mov DWORD PTR 12[edi],edx
  1483. mov ebp,eax
  1484. shl eax,17
  1485. mov esi,ebx
  1486. shr esi,15
  1487. shl ebx,17
  1488. or eax,esi
  1489. mov esi,ecx
  1490. shl ecx,17
  1491. mov DWORD PTR 48[edi],eax
  1492. shr esi,15
  1493. or ebx,esi
  1494. shr ebp,15
  1495. mov esi,edx
  1496. shr esi,15
  1497. mov DWORD PTR 52[edi],ebx
  1498. shl edx,17
  1499. or ecx,esi
  1500. or edx,ebp
  1501. mov DWORD PTR 56[edi],ecx
  1502. mov DWORD PTR 60[edi],edx
  1503. mov ebp,ebx
  1504. shl ebx,2
  1505. mov esi,ecx
  1506. shr esi,30
  1507. shl ecx,2
  1508. or ebx,esi
  1509. mov esi,edx
  1510. shl edx,2
  1511. mov DWORD PTR 112[edi],ebx
  1512. shr esi,30
  1513. or ecx,esi
  1514. shr ebp,30
  1515. mov esi,eax
  1516. shr esi,30
  1517. mov DWORD PTR 116[edi],ecx
  1518. shl eax,2
  1519. or edx,esi
  1520. or eax,ebp
  1521. mov DWORD PTR 120[edi],edx
  1522. mov DWORD PTR 124[edi],eax
  1523. mov eax,4
  1524. $L013done:
  1525. lea edx,DWORD PTR 144[edi]
  1526. add esp,16
  1527. pop edi
  1528. pop esi
  1529. pop ebx
  1530. pop ebp
  1531. ret
  1532. _Camellia_Ekeygen ENDP
  1533. ALIGN 16
  1534. _Camellia_set_key PROC PUBLIC
  1535. $L_Camellia_set_key_begin::
  1536. push ebx
  1537. mov ecx,DWORD PTR 8[esp]
  1538. mov ebx,DWORD PTR 12[esp]
  1539. mov edx,DWORD PTR 16[esp]
  1540. mov eax,-1
  1541. test ecx,ecx
  1542. jz $L014done
  1543. test edx,edx
  1544. jz $L014done
  1545. mov eax,-2
  1546. cmp ebx,256
  1547. je $L015arg_ok
  1548. cmp ebx,192
  1549. je $L015arg_ok
  1550. cmp ebx,128
  1551. jne $L014done
  1552. ALIGN 4
  1553. $L015arg_ok:
  1554. push edx
  1555. push ecx
  1556. push ebx
  1557. call $L_Camellia_Ekeygen_begin
  1558. add esp,12
  1559. mov DWORD PTR [edx],eax
  1560. xor eax,eax
  1561. ALIGN 4
  1562. $L014done:
  1563. pop ebx
  1564. ret
  1565. _Camellia_set_key ENDP
  1566. ALIGN 64
  1567. $LCamellia_SIGMA::
  1568. DD 2694735487,1003262091,3061508184,1286239154
  1569. DD 3337565999,3914302142,1426019237,4057165596
  1570. DD 283453434,3731369245,2958461122,3018244605
  1571. DD 0,0,0,0
  1572. ALIGN 64
  1573. $LCamellia_SBOX::
  1574. DD 1886416896,1886388336
  1575. DD 2189591040,741081132
  1576. DD 741092352,3014852787
  1577. DD 3974949888,3233808576
  1578. DD 3014898432,3840147684
  1579. DD 656877312,1465319511
  1580. DD 3233857536,3941204202
  1581. DD 3857048832,2930639022
  1582. DD 3840205824,589496355
  1583. DD 2240120064,1802174571
  1584. DD 1465341696,1162149957
  1585. DD 892679424,2779054245
  1586. DD 3941263872,3991732461
  1587. DD 202116096,1330577487
  1588. DD 2930683392,488439837
  1589. DD 1094795520,2459041938
  1590. DD 589505280,2256928902
  1591. DD 4025478912,2947481775
  1592. DD 1802201856,2088501372
  1593. DD 2475922176,522125343
  1594. DD 1162167552,1044250686
  1595. DD 421075200,3705405660
  1596. DD 2779096320,1583218782
  1597. DD 555819264,185270283
  1598. DD 3991792896,2795896998
  1599. DD 235802112,960036921
  1600. DD 1330597632,3587506389
  1601. DD 1313754624,1566376029
  1602. DD 488447232,3654877401
  1603. DD 1701143808,1515847770
  1604. DD 2459079168,1364262993
  1605. DD 3183328512,1819017324
  1606. DD 2256963072,2341142667
  1607. DD 3099113472,2593783962
  1608. DD 2947526400,4227531003
  1609. DD 2408550144,2964324528
  1610. DD 2088532992,1953759348
  1611. DD 3958106880,724238379
  1612. DD 522133248,4042260720
  1613. DD 3469659648,2223243396
  1614. DD 1044266496,3755933919
  1615. DD 808464384,3419078859
  1616. DD 3705461760,875823156
  1617. DD 1600085760,1987444854
  1618. DD 1583242752,1835860077
  1619. DD 3318072576,2846425257
  1620. DD 185273088,3520135377
  1621. DD 437918208,67371012
  1622. DD 2795939328,336855060
  1623. DD 3789676800,976879674
  1624. DD 960051456,3739091166
  1625. DD 3402287616,286326801
  1626. DD 3587560704,842137650
  1627. DD 1195853568,2627469468
  1628. DD 1566399744,1397948499
  1629. DD 1027423488,4075946226
  1630. DD 3654932736,4278059262
  1631. DD 16843008,3486449871
  1632. DD 1515870720,3284336835
  1633. DD 3604403712,2054815866
  1634. DD 1364283648,606339108
  1635. DD 1448498688,3907518696
  1636. DD 1819044864,1616904288
  1637. DD 1296911616,1768489065
  1638. DD 2341178112,2863268010
  1639. DD 218959104,2694840480
  1640. DD 2593823232,2711683233
  1641. DD 1717986816,1650589794
  1642. DD 4227595008,1414791252
  1643. DD 3435973632,505282590
  1644. DD 2964369408,3772776672
  1645. DD 757935360,1684275300
  1646. DD 1953788928,269484048
  1647. DD 303174144,0
  1648. DD 724249344,2745368739
  1649. DD 538976256,1970602101
  1650. DD 4042321920,2324299914
  1651. DD 2981212416,3873833190
  1652. DD 2223277056,151584777
  1653. DD 2576980224,3722248413
  1654. DD 3755990784,2273771655
  1655. DD 1280068608,2206400643
  1656. DD 3419130624,3452764365
  1657. DD 3267543552,2425356432
  1658. DD 875836416,1936916595
  1659. DD 2122219008,4143317238
  1660. DD 1987474944,2644312221
  1661. DD 84215040,3216965823
  1662. DD 1835887872,1381105746
  1663. DD 3082270464,3638034648
  1664. DD 2846468352,3368550600
  1665. DD 825307392,3334865094
  1666. DD 3520188672,2172715137
  1667. DD 387389184,1869545583
  1668. DD 67372032,320012307
  1669. DD 3621246720,1667432547
  1670. DD 336860160,3924361449
  1671. DD 1482184704,2812739751
  1672. DD 976894464,2677997727
  1673. DD 1633771776,3166437564
  1674. DD 3739147776,690552873
  1675. DD 454761216,4193845497
  1676. DD 286331136,791609391
  1677. DD 471604224,3031695540
  1678. DD 842150400,2021130360
  1679. DD 252645120,101056518
  1680. DD 2627509248,3890675943
  1681. DD 370546176,1903231089
  1682. DD 1397969664,3570663636
  1683. DD 404232192,2880110763
  1684. DD 4076007936,2290614408
  1685. DD 572662272,2374828173
  1686. DD 4278124032,1920073842
  1687. DD 1145324544,3115909305
  1688. DD 3486502656,4177002744
  1689. DD 2998055424,2896953516
  1690. DD 3284386560,909508662
  1691. DD 3048584448,707395626
  1692. DD 2054846976,1010565180
  1693. DD 2442236160,4059103473
  1694. DD 606348288,1077936192
  1695. DD 134744064,3553820883
  1696. DD 3907577856,3149594811
  1697. DD 2829625344,1128464451
  1698. DD 1616928768,353697813
  1699. DD 4244438016,2913796269
  1700. DD 1768515840,2004287607
  1701. DD 1347440640,2155872384
  1702. DD 2863311360,2189557890
  1703. DD 3503345664,3974889708
  1704. DD 2694881280,656867367
  1705. DD 2105376000,3856990437
  1706. DD 2711724288,2240086149
  1707. DD 2307492096,892665909
  1708. DD 1650614784,202113036
  1709. DD 2543294208,1094778945
  1710. DD 1414812672,4025417967
  1711. DD 1532713728,2475884691
  1712. DD 505290240,421068825
  1713. DD 2509608192,555810849
  1714. DD 3772833792,235798542
  1715. DD 4294967040,1313734734
  1716. DD 1684300800,1701118053
  1717. DD 3537031680,3183280317
  1718. DD 269488128,3099066552
  1719. DD 3301229568,2408513679
  1720. DD 0,3958046955
  1721. DD 1212696576,3469607118
  1722. DD 2745410304,808452144
  1723. DD 4160222976,1600061535
  1724. DD 1970631936,3318022341
  1725. DD 3688618752,437911578
  1726. DD 2324335104,3789619425
  1727. DD 50529024,3402236106
  1728. DD 3873891840,1195835463
  1729. DD 3671775744,1027407933
  1730. DD 151587072,16842753
  1731. DD 1061109504,3604349142
  1732. DD 3722304768,1448476758
  1733. DD 2492765184,1296891981
  1734. DD 2273806080,218955789
  1735. DD 1549556736,1717960806
  1736. DD 2206434048,3435921612
  1737. DD 33686016,757923885
  1738. DD 3452816640,303169554
  1739. DD 1246382592,538968096
  1740. DD 2425393152,2981167281
  1741. DD 858993408,2576941209
  1742. DD 1936945920,1280049228
  1743. DD 1734829824,3267494082
  1744. DD 4143379968,2122186878
  1745. DD 4092850944,84213765
  1746. DD 2644352256,3082223799
  1747. DD 2139062016,825294897
  1748. DD 3217014528,387383319
  1749. DD 3806519808,3621191895
  1750. DD 1381126656,1482162264
  1751. DD 2610666240,1633747041
  1752. DD 3638089728,454754331
  1753. DD 640034304,471597084
  1754. DD 3368601600,252641295
  1755. DD 926365440,370540566
  1756. DD 3334915584,404226072
  1757. DD 993737472,572653602
  1758. DD 2172748032,1145307204
  1759. DD 2526451200,2998010034
  1760. DD 1869573888,3048538293
  1761. DD 1263225600,2442199185
  1762. DD 320017152,134742024
  1763. DD 3200171520,2829582504
  1764. DD 1667457792,4244373756
  1765. DD 774778368,1347420240
  1766. DD 3924420864,3503292624
  1767. DD 2038003968,2105344125
  1768. DD 2812782336,2307457161
  1769. DD 2358021120,2543255703
  1770. DD 2678038272,1532690523
  1771. DD 1852730880,2509570197
  1772. DD 3166485504,4294902015
  1773. DD 2391707136,3536978130
  1774. DD 690563328,3301179588
  1775. DD 4126536960,1212678216
  1776. DD 4193908992,4160159991
  1777. DD 3065427456,3688562907
  1778. DD 791621376,50528259
  1779. DD 4261281024,3671720154
  1780. DD 3031741440,1061093439
  1781. DD 1499027712,2492727444
  1782. DD 2021160960,1549533276
  1783. DD 2560137216,33685506
  1784. DD 101058048,1246363722
  1785. DD 1785358848,858980403
  1786. DD 3890734848,1734803559
  1787. DD 1179010560,4092788979
  1788. DD 1903259904,2139029631
  1789. DD 3132799488,3806462178
  1790. DD 3570717696,2610626715
  1791. DD 623191296,640024614
  1792. DD 2880154368,926351415
  1793. DD 1111638528,993722427
  1794. DD 2290649088,2526412950
  1795. DD 2728567296,1263206475
  1796. DD 2374864128,3200123070
  1797. DD 4210752000,774766638
  1798. DD 1920102912,2037973113
  1799. DD 117901056,2357985420
  1800. DD 3115956480,1852702830
  1801. DD 1431655680,2391670926
  1802. DD 4177065984,4126474485
  1803. DD 4008635904,3065381046
  1804. DD 2896997376,4261216509
  1805. DD 168430080,1499005017
  1806. DD 909522432,2560098456
  1807. DD 1229539584,1785331818
  1808. DD 707406336,1178992710
  1809. DD 1751672832,3132752058
  1810. DD 1010580480,623181861
  1811. DD 943208448,1111621698
  1812. DD 4059164928,2728525986
  1813. DD 2762253312,4210688250
  1814. DD 1077952512,117899271
  1815. DD 673720320,1431634005
  1816. DD 3553874688,4008575214
  1817. DD 2071689984,168427530
  1818. DD 3149642496,1229520969
  1819. DD 3385444608,1751646312
  1820. DD 1128481536,943194168
  1821. DD 3250700544,2762211492
  1822. DD 353703168,673710120
  1823. DD 3823362816,2071658619
  1824. DD 2913840384,3385393353
  1825. DD 4109693952,3250651329
  1826. DD 2004317952,3823304931
  1827. DD 3351758592,4109631732
  1828. DD 2155905024,3351707847
  1829. DD 2661195264,2661154974
  1830. DD 14737632,939538488
  1831. DD 328965,1090535745
  1832. DD 5789784,369104406
  1833. DD 14277081,1979741814
  1834. DD 6776679,3640711641
  1835. DD 5131854,2466288531
  1836. DD 8487297,1610637408
  1837. DD 13355979,4060148466
  1838. DD 13224393,1912631922
  1839. DD 723723,3254829762
  1840. DD 11447982,2868947883
  1841. DD 6974058,2583730842
  1842. DD 14013909,1962964341
  1843. DD 1579032,100664838
  1844. DD 6118749,1459640151
  1845. DD 8553090,2684395680
  1846. DD 4605510,2432733585
  1847. DD 14671839,4144035831
  1848. DD 14079702,3036722613
  1849. DD 2565927,3372272073
  1850. DD 9079434,2717950626
  1851. DD 3289650,2348846220
  1852. DD 4934475,3523269330
  1853. DD 4342338,2415956112
  1854. DD 14408667,4127258358
  1855. DD 1842204,117442311
  1856. DD 10395294,2801837991
  1857. DD 10263708,654321447
  1858. DD 3815994,2382401166
  1859. DD 13290186,2986390194
  1860. DD 2434341,1224755529
  1861. DD 8092539,3724599006
  1862. DD 855309,1124090691
  1863. DD 7434609,1543527516
  1864. DD 6250335,3607156695
  1865. DD 2039583,3338717127
  1866. DD 16316664,1040203326
  1867. DD 14145495,4110480885
  1868. DD 4079166,2399178639
  1869. DD 10329501,1728079719
  1870. DD 8158332,520101663
  1871. DD 6316128,402659352
  1872. DD 12171705,1845522030
  1873. DD 12500670,2936057775
  1874. DD 12369084,788541231
  1875. DD 9145227,3791708898
  1876. DD 1447446,2231403909
  1877. DD 3421236,218107149
  1878. DD 5066061,1392530259
  1879. DD 12829635,4026593520
  1880. DD 7500402,2617285788
  1881. DD 9803157,1694524773
  1882. DD 11250603,3925928682
  1883. DD 9342606,2734728099
  1884. DD 12237498,2919280302
  1885. DD 8026746,2650840734
  1886. DD 11776947,3959483628
  1887. DD 131586,2147516544
  1888. DD 11842740,754986285
  1889. DD 11382189,1795189611
  1890. DD 10658466,2818615464
  1891. DD 11316396,721431339
  1892. DD 14211288,905983542
  1893. DD 10132122,2785060518
  1894. DD 1513239,3305162181
  1895. DD 1710618,2248181382
  1896. DD 3487029,1291865421
  1897. DD 13421772,855651123
  1898. DD 16250871,4244700669
  1899. DD 10066329,1711302246
  1900. DD 6381921,1476417624
  1901. DD 5921370,2516620950
  1902. DD 15263976,973093434
  1903. DD 2368548,150997257
  1904. DD 5658198,2499843477
  1905. DD 4210752,268439568
  1906. DD 14803425,2013296760
  1907. DD 6513507,3623934168
  1908. DD 592137,1107313218
  1909. DD 3355443,3422604492
  1910. DD 12566463,4009816047
  1911. DD 10000536,637543974
  1912. DD 9934743,3842041317
  1913. DD 8750469,1627414881
  1914. DD 6842472,436214298
  1915. DD 16579836,1056980799
  1916. DD 15527148,989870907
  1917. DD 657930,2181071490
  1918. DD 14342874,3053500086
  1919. DD 7303023,3674266587
  1920. DD 5460819,3556824276
  1921. DD 6447714,2550175896
  1922. DD 10724259,3892373736
  1923. DD 3026478,2332068747
  1924. DD 526344,33554946
  1925. DD 11513775,3942706155
  1926. DD 2631720,167774730
  1927. DD 11579568,738208812
  1928. DD 7631988,486546717
  1929. DD 12763842,2952835248
  1930. DD 12434877,1862299503
  1931. DD 3552822,2365623693
  1932. DD 2236962,2281736328
  1933. DD 3684408,234884622
  1934. DD 6579300,419436825
  1935. DD 1973790,2264958855
  1936. DD 3750201,1308642894
  1937. DD 2894892,184552203
  1938. DD 10921638,2835392937
  1939. DD 3158064,201329676
  1940. DD 15066597,2030074233
  1941. DD 4473924,285217041
  1942. DD 16645629,2130739071
  1943. DD 8947848,570434082
  1944. DD 10461087,3875596263
  1945. DD 6645093,1493195097
  1946. DD 8882055,3774931425
  1947. DD 7039851,3657489114
  1948. DD 16053492,1023425853
  1949. DD 2302755,3355494600
  1950. DD 4737096,301994514
  1951. DD 1052688,67109892
  1952. DD 13750737,1946186868
  1953. DD 5329233,1409307732
  1954. DD 12632256,805318704
  1955. DD 16382457,2113961598
  1956. DD 13816530,3019945140
  1957. DD 10526880,671098920
  1958. DD 5592405,1426085205
  1959. DD 10592673,1744857192
  1960. DD 4276545,1342197840
  1961. DD 16448250,3187719870
  1962. DD 4408131,3489714384
  1963. DD 1250067,3288384708
  1964. DD 12895428,822096177
  1965. DD 3092271,3405827019
  1966. DD 11053224,704653866
  1967. DD 11974326,2902502829
  1968. DD 3947580,251662095
  1969. DD 2829099,3389049546
  1970. DD 12698049,1879076976
  1971. DD 16777215,4278255615
  1972. DD 13158600,838873650
  1973. DD 10855845,1761634665
  1974. DD 2105376,134219784
  1975. DD 9013641,1644192354
  1976. DD 0,0
  1977. DD 9474192,603989028
  1978. DD 4671303,3506491857
  1979. DD 15724527,4211145723
  1980. DD 15395562,3120609978
  1981. DD 12040119,3976261101
  1982. DD 1381653,1157645637
  1983. DD 394758,2164294017
  1984. DD 13487565,1929409395
  1985. DD 11908533,1828744557
  1986. DD 1184274,2214626436
  1987. DD 8289918,2667618207
  1988. DD 12303291,3993038574
  1989. DD 2697513,1241533002
  1990. DD 986895,3271607235
  1991. DD 12105912,771763758
  1992. DD 460551,3238052289
  1993. DD 263172,16777473
  1994. DD 10197915,3858818790
  1995. DD 9737364,620766501
  1996. DD 2171169,1207978056
  1997. DD 6710886,2566953369
  1998. DD 15132390,3103832505
  1999. DD 13553358,3003167667
  2000. DD 15592941,2063629179
  2001. DD 15198183,4177590777
  2002. DD 3881787,3456159438
  2003. DD 16711422,3204497343
  2004. DD 8355711,3741376479
  2005. DD 12961221,1895854449
  2006. DD 10790052,687876393
  2007. DD 3618615,3439381965
  2008. DD 11645361,1811967084
  2009. DD 5000268,318771987
  2010. DD 9539985,1677747300
  2011. DD 7237230,2600508315
  2012. DD 9276813,1660969827
  2013. DD 7763574,2634063261
  2014. DD 197379,3221274816
  2015. DD 2960685,1258310475
  2016. DD 14606046,3070277559
  2017. DD 9868950,2768283045
  2018. DD 2500134,2298513801
  2019. DD 8224125,1593859935
  2020. DD 13027014,2969612721
  2021. DD 6052956,385881879
  2022. DD 13882323,4093703412
  2023. DD 15921906,3154164924
  2024. DD 5197647,3540046803
  2025. DD 1644825,1174423110
  2026. DD 4144959,3472936911
  2027. DD 14474460,922761015
  2028. DD 7960953,1577082462
  2029. DD 1907997,1191200583
  2030. DD 5395026,2483066004
  2031. DD 15461355,4194368250
  2032. DD 15987699,4227923196
  2033. DD 7171437,1526750043
  2034. DD 6184542,2533398423
  2035. DD 16514043,4261478142
  2036. DD 6908265,1509972570
  2037. DD 11711154,2885725356
  2038. DD 15790320,1006648380
  2039. DD 3223857,1275087948
  2040. DD 789516,50332419
  2041. DD 13948116,889206069
  2042. DD 13619151,4076925939
  2043. DD 9211020,587211555
  2044. DD 14869218,3087055032
  2045. DD 7697781,1560304989
  2046. DD 11119017,1778412138
  2047. DD 4868682,2449511058
  2048. DD 5723991,3573601749
  2049. DD 8684676,553656609
  2050. DD 1118481,1140868164
  2051. DD 4539717,1358975313
  2052. DD 1776411,3321939654
  2053. DD 16119285,2097184125
  2054. DD 15000804,956315961
  2055. DD 921102,2197848963
  2056. DD 7566195,3691044060
  2057. DD 11184810,2852170410
  2058. DD 15856113,2080406652
  2059. DD 14540253,1996519287
  2060. DD 5855577,1442862678
  2061. DD 1315860,83887365
  2062. DD 7105644,452991771
  2063. DD 9605778,2751505572
  2064. DD 5526612,352326933
  2065. DD 13684944,872428596
  2066. DD 7895160,503324190
  2067. DD 7368816,469769244
  2068. DD 14935011,4160813304
  2069. DD 4802889,1375752786
  2070. DD 8421504,536879136
  2071. DD 5263440,335549460
  2072. DD 10987431,3909151209
  2073. DD 16185078,3170942397
  2074. DD 7829367,3707821533
  2075. DD 9671571,3825263844
  2076. DD 8816262,2701173153
  2077. DD 8618883,3758153952
  2078. DD 2763306,2315291274
  2079. DD 13092807,4043370993
  2080. DD 5987163,3590379222
  2081. DD 15329769,2046851706
  2082. DD 15658734,3137387451
  2083. DD 9408399,3808486371
  2084. DD 65793,1073758272
  2085. DD 4013373,1325420367
  2086. ALIGN 16
  2087. _Camellia_cbc_encrypt PROC PUBLIC
  2088. $L_Camellia_cbc_encrypt_begin::
  2089. push ebp
  2090. push ebx
  2091. push esi
  2092. push edi
  2093. mov ecx,DWORD PTR 28[esp]
  2094. cmp ecx,0
  2095. je $L016enc_out
  2096. pushfd
  2097. cld
  2098. mov eax,DWORD PTR 24[esp]
  2099. mov ebx,DWORD PTR 28[esp]
  2100. mov edx,DWORD PTR 36[esp]
  2101. mov ebp,DWORD PTR 40[esp]
  2102. lea esi,DWORD PTR [esp-64]
  2103. and esi,-64
  2104. lea edi,DWORD PTR [edx-127]
  2105. sub edi,esi
  2106. neg edi
  2107. and edi,960
  2108. sub esi,edi
  2109. mov edi,DWORD PTR 44[esp]
  2110. xchg esp,esi
  2111. add esp,4
  2112. mov DWORD PTR 20[esp],esi
  2113. mov DWORD PTR 24[esp],eax
  2114. mov DWORD PTR 28[esp],ebx
  2115. mov DWORD PTR 32[esp],ecx
  2116. mov DWORD PTR 36[esp],edx
  2117. mov DWORD PTR 40[esp],ebp
  2118. call $L017pic_point
  2119. $L017pic_point:
  2120. pop ebp
  2121. lea ebp,DWORD PTR ($LCamellia_SBOX-$L017pic_point)[ebp]
  2122. mov esi,32
  2123. ALIGN 4
  2124. $L018prefetch_sbox:
  2125. mov eax,DWORD PTR [ebp]
  2126. mov ebx,DWORD PTR 32[ebp]
  2127. mov ecx,DWORD PTR 64[ebp]
  2128. mov edx,DWORD PTR 96[ebp]
  2129. lea ebp,DWORD PTR 128[ebp]
  2130. dec esi
  2131. jnz $L018prefetch_sbox
  2132. mov eax,DWORD PTR 36[esp]
  2133. sub ebp,4096
  2134. mov esi,DWORD PTR 24[esp]
  2135. mov edx,DWORD PTR 272[eax]
  2136. cmp edi,0
  2137. je $L019DECRYPT
  2138. mov ecx,DWORD PTR 32[esp]
  2139. mov edi,DWORD PTR 40[esp]
  2140. shl edx,6
  2141. lea edx,DWORD PTR [edx*1+eax]
  2142. mov DWORD PTR 16[esp],edx
  2143. test ecx,4294967280
  2144. jz $L020enc_tail
  2145. mov eax,DWORD PTR [edi]
  2146. mov ebx,DWORD PTR 4[edi]
  2147. ALIGN 4
  2148. $L021enc_loop:
  2149. mov ecx,DWORD PTR 8[edi]
  2150. mov edx,DWORD PTR 12[edi]
  2151. xor eax,DWORD PTR [esi]
  2152. xor ebx,DWORD PTR 4[esi]
  2153. xor ecx,DWORD PTR 8[esi]
  2154. bswap eax
  2155. xor edx,DWORD PTR 12[esi]
  2156. bswap ebx
  2157. mov edi,DWORD PTR 36[esp]
  2158. bswap ecx
  2159. bswap edx
  2160. call __x86_Camellia_encrypt
  2161. mov esi,DWORD PTR 24[esp]
  2162. mov edi,DWORD PTR 28[esp]
  2163. bswap eax
  2164. bswap ebx
  2165. bswap ecx
  2166. mov DWORD PTR [edi],eax
  2167. bswap edx
  2168. mov DWORD PTR 4[edi],ebx
  2169. mov DWORD PTR 8[edi],ecx
  2170. mov DWORD PTR 12[edi],edx
  2171. mov ecx,DWORD PTR 32[esp]
  2172. lea esi,DWORD PTR 16[esi]
  2173. mov DWORD PTR 24[esp],esi
  2174. lea edx,DWORD PTR 16[edi]
  2175. mov DWORD PTR 28[esp],edx
  2176. sub ecx,16
  2177. test ecx,4294967280
  2178. mov DWORD PTR 32[esp],ecx
  2179. jnz $L021enc_loop
  2180. test ecx,15
  2181. jnz $L020enc_tail
  2182. mov esi,DWORD PTR 40[esp]
  2183. mov ecx,DWORD PTR 8[edi]
  2184. mov edx,DWORD PTR 12[edi]
  2185. mov DWORD PTR [esi],eax
  2186. mov DWORD PTR 4[esi],ebx
  2187. mov DWORD PTR 8[esi],ecx
  2188. mov DWORD PTR 12[esi],edx
  2189. mov esp,DWORD PTR 20[esp]
  2190. popfd
  2191. $L016enc_out:
  2192. pop edi
  2193. pop esi
  2194. pop ebx
  2195. pop ebp
  2196. ret
  2197. pushfd
  2198. ALIGN 4
  2199. $L020enc_tail:
  2200. mov eax,edi
  2201. mov edi,DWORD PTR 28[esp]
  2202. push eax
  2203. mov ebx,16
  2204. sub ebx,ecx
  2205. cmp edi,esi
  2206. je $L022enc_in_place
  2207. ALIGN 4
  2208. DD 2767451785
  2209. jmp $L023enc_skip_in_place
  2210. $L022enc_in_place:
  2211. lea edi,DWORD PTR [ecx*1+edi]
  2212. $L023enc_skip_in_place:
  2213. mov ecx,ebx
  2214. xor eax,eax
  2215. ALIGN 4
  2216. DD 2868115081
  2217. pop edi
  2218. mov esi,DWORD PTR 28[esp]
  2219. mov eax,DWORD PTR [edi]
  2220. mov ebx,DWORD PTR 4[edi]
  2221. mov DWORD PTR 32[esp],16
  2222. jmp $L021enc_loop
  2223. ALIGN 16
  2224. $L019DECRYPT:
  2225. shl edx,6
  2226. lea edx,DWORD PTR [edx*1+eax]
  2227. mov DWORD PTR 16[esp],eax
  2228. mov DWORD PTR 36[esp],edx
  2229. cmp esi,DWORD PTR 28[esp]
  2230. je $L024dec_in_place
  2231. mov edi,DWORD PTR 40[esp]
  2232. mov DWORD PTR 44[esp],edi
  2233. ALIGN 4
  2234. $L025dec_loop:
  2235. mov eax,DWORD PTR [esi]
  2236. mov ebx,DWORD PTR 4[esi]
  2237. mov ecx,DWORD PTR 8[esi]
  2238. bswap eax
  2239. mov edx,DWORD PTR 12[esi]
  2240. bswap ebx
  2241. mov edi,DWORD PTR 36[esp]
  2242. bswap ecx
  2243. bswap edx
  2244. call __x86_Camellia_decrypt
  2245. mov edi,DWORD PTR 44[esp]
  2246. mov esi,DWORD PTR 32[esp]
  2247. bswap eax
  2248. bswap ebx
  2249. bswap ecx
  2250. xor eax,DWORD PTR [edi]
  2251. bswap edx
  2252. xor ebx,DWORD PTR 4[edi]
  2253. xor ecx,DWORD PTR 8[edi]
  2254. xor edx,DWORD PTR 12[edi]
  2255. sub esi,16
  2256. jc $L026dec_partial
  2257. mov DWORD PTR 32[esp],esi
  2258. mov esi,DWORD PTR 24[esp]
  2259. mov edi,DWORD PTR 28[esp]
  2260. mov DWORD PTR [edi],eax
  2261. mov DWORD PTR 4[edi],ebx
  2262. mov DWORD PTR 8[edi],ecx
  2263. mov DWORD PTR 12[edi],edx
  2264. mov DWORD PTR 44[esp],esi
  2265. lea esi,DWORD PTR 16[esi]
  2266. mov DWORD PTR 24[esp],esi
  2267. lea edi,DWORD PTR 16[edi]
  2268. mov DWORD PTR 28[esp],edi
  2269. jnz $L025dec_loop
  2270. mov edi,DWORD PTR 44[esp]
  2271. $L027dec_end:
  2272. mov esi,DWORD PTR 40[esp]
  2273. mov eax,DWORD PTR [edi]
  2274. mov ebx,DWORD PTR 4[edi]
  2275. mov ecx,DWORD PTR 8[edi]
  2276. mov edx,DWORD PTR 12[edi]
  2277. mov DWORD PTR [esi],eax
  2278. mov DWORD PTR 4[esi],ebx
  2279. mov DWORD PTR 8[esi],ecx
  2280. mov DWORD PTR 12[esi],edx
  2281. jmp $L028dec_out
  2282. ALIGN 4
  2283. $L026dec_partial:
  2284. lea edi,DWORD PTR 44[esp]
  2285. mov DWORD PTR [edi],eax
  2286. mov DWORD PTR 4[edi],ebx
  2287. mov DWORD PTR 8[edi],ecx
  2288. mov DWORD PTR 12[edi],edx
  2289. lea ecx,DWORD PTR 16[esi]
  2290. mov esi,edi
  2291. mov edi,DWORD PTR 28[esp]
  2292. DD 2767451785
  2293. mov edi,DWORD PTR 24[esp]
  2294. jmp $L027dec_end
  2295. ALIGN 4
  2296. $L024dec_in_place:
  2297. $L029dec_in_place_loop:
  2298. lea edi,DWORD PTR 44[esp]
  2299. mov eax,DWORD PTR [esi]
  2300. mov ebx,DWORD PTR 4[esi]
  2301. mov ecx,DWORD PTR 8[esi]
  2302. mov edx,DWORD PTR 12[esi]
  2303. mov DWORD PTR [edi],eax
  2304. mov DWORD PTR 4[edi],ebx
  2305. mov DWORD PTR 8[edi],ecx
  2306. bswap eax
  2307. mov DWORD PTR 12[edi],edx
  2308. bswap ebx
  2309. mov edi,DWORD PTR 36[esp]
  2310. bswap ecx
  2311. bswap edx
  2312. call __x86_Camellia_decrypt
  2313. mov edi,DWORD PTR 40[esp]
  2314. mov esi,DWORD PTR 28[esp]
  2315. bswap eax
  2316. bswap ebx
  2317. bswap ecx
  2318. xor eax,DWORD PTR [edi]
  2319. bswap edx
  2320. xor ebx,DWORD PTR 4[edi]
  2321. xor ecx,DWORD PTR 8[edi]
  2322. xor edx,DWORD PTR 12[edi]
  2323. mov DWORD PTR [esi],eax
  2324. mov DWORD PTR 4[esi],ebx
  2325. mov DWORD PTR 8[esi],ecx
  2326. mov DWORD PTR 12[esi],edx
  2327. lea esi,DWORD PTR 16[esi]
  2328. mov DWORD PTR 28[esp],esi
  2329. lea esi,DWORD PTR 44[esp]
  2330. mov eax,DWORD PTR [esi]
  2331. mov ebx,DWORD PTR 4[esi]
  2332. mov ecx,DWORD PTR 8[esi]
  2333. mov edx,DWORD PTR 12[esi]
  2334. mov DWORD PTR [edi],eax
  2335. mov DWORD PTR 4[edi],ebx
  2336. mov DWORD PTR 8[edi],ecx
  2337. mov DWORD PTR 12[edi],edx
  2338. mov esi,DWORD PTR 24[esp]
  2339. lea esi,DWORD PTR 16[esi]
  2340. mov DWORD PTR 24[esp],esi
  2341. mov ecx,DWORD PTR 32[esp]
  2342. sub ecx,16
  2343. jc $L030dec_in_place_partial
  2344. mov DWORD PTR 32[esp],ecx
  2345. jnz $L029dec_in_place_loop
  2346. jmp $L028dec_out
  2347. ALIGN 4
  2348. $L030dec_in_place_partial:
  2349. mov edi,DWORD PTR 28[esp]
  2350. lea esi,DWORD PTR 44[esp]
  2351. lea edi,DWORD PTR [ecx*1+edi]
  2352. lea esi,DWORD PTR 16[ecx*1+esi]
  2353. neg ecx
  2354. DD 2767451785
  2355. ALIGN 4
  2356. $L028dec_out:
  2357. mov esp,DWORD PTR 20[esp]
  2358. popfd
  2359. pop edi
  2360. pop esi
  2361. pop ebx
  2362. pop ebp
  2363. ret
  2364. _Camellia_cbc_encrypt ENDP
  2365. DB 67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54
  2366. DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
  2367. DB 115,108,46,111,114,103,62,0
  2368. .text$ ENDS
  2369. END