cmll-x86_64.s 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924
  1. .text
  2. .globl Camellia_EncryptBlock
  3. .type Camellia_EncryptBlock,@function
  4. .align 16
  5. Camellia_EncryptBlock:
  6. .cfi_startproc
  7. movl $128,%eax
  8. subl %edi,%eax
  9. movl $3,%edi
  10. adcl $0,%edi
  11. jmp .Lenc_rounds
  12. .cfi_endproc
  13. .size Camellia_EncryptBlock,.-Camellia_EncryptBlock
  14. .globl Camellia_EncryptBlock_Rounds
  15. .type Camellia_EncryptBlock_Rounds,@function
  16. .align 16
  17. .Lenc_rounds:
  18. Camellia_EncryptBlock_Rounds:
  19. .cfi_startproc
  20. pushq %rbx
  21. .cfi_adjust_cfa_offset 8
  22. .cfi_offset %rbx,-16
  23. pushq %rbp
  24. .cfi_adjust_cfa_offset 8
  25. .cfi_offset %rbp,-24
  26. pushq %r13
  27. .cfi_adjust_cfa_offset 8
  28. .cfi_offset %r13,-32
  29. pushq %r14
  30. .cfi_adjust_cfa_offset 8
  31. .cfi_offset %r14,-40
  32. pushq %r15
  33. .cfi_adjust_cfa_offset 8
  34. .cfi_offset %r15,-48
  35. .Lenc_prologue:
  36. movq %rcx,%r13
  37. movq %rdx,%r14
  38. shll $6,%edi
  39. leaq .LCamellia_SBOX(%rip),%rbp
  40. leaq (%r14,%rdi,1),%r15
  41. movl 0(%rsi),%r8d
  42. movl 4(%rsi),%r9d
  43. movl 8(%rsi),%r10d
  44. bswapl %r8d
  45. movl 12(%rsi),%r11d
  46. bswapl %r9d
  47. bswapl %r10d
  48. bswapl %r11d
  49. call _x86_64_Camellia_encrypt
  50. bswapl %r8d
  51. bswapl %r9d
  52. bswapl %r10d
  53. movl %r8d,0(%r13)
  54. bswapl %r11d
  55. movl %r9d,4(%r13)
  56. movl %r10d,8(%r13)
  57. movl %r11d,12(%r13)
  58. movq 0(%rsp),%r15
  59. .cfi_restore %r15
  60. movq 8(%rsp),%r14
  61. .cfi_restore %r14
  62. movq 16(%rsp),%r13
  63. .cfi_restore %r13
  64. movq 24(%rsp),%rbp
  65. .cfi_restore %rbp
  66. movq 32(%rsp),%rbx
  67. .cfi_restore %rbx
  68. leaq 40(%rsp),%rsp
  69. .cfi_adjust_cfa_offset -40
  70. .Lenc_epilogue:
  71. .byte 0xf3,0xc3
  72. .cfi_endproc
  73. .size Camellia_EncryptBlock_Rounds,.-Camellia_EncryptBlock_Rounds
  74. .type _x86_64_Camellia_encrypt,@function
  75. .align 16
  76. _x86_64_Camellia_encrypt:
  77. .cfi_startproc
  78. xorl 0(%r14),%r9d
  79. xorl 4(%r14),%r8d
  80. xorl 8(%r14),%r11d
  81. xorl 12(%r14),%r10d
  82. .align 16
  83. .Leloop:
  84. movl 16(%r14),%ebx
  85. movl 20(%r14),%eax
  86. xorl %r8d,%eax
  87. xorl %r9d,%ebx
  88. movzbl %ah,%esi
  89. movzbl %bl,%edi
  90. movl 2052(%rbp,%rsi,8),%edx
  91. movl 0(%rbp,%rdi,8),%ecx
  92. movzbl %al,%esi
  93. shrl $16,%eax
  94. movzbl %bh,%edi
  95. xorl 4(%rbp,%rsi,8),%edx
  96. shrl $16,%ebx
  97. xorl 4(%rbp,%rdi,8),%ecx
  98. movzbl %ah,%esi
  99. movzbl %bl,%edi
  100. xorl 0(%rbp,%rsi,8),%edx
  101. xorl 2052(%rbp,%rdi,8),%ecx
  102. movzbl %al,%esi
  103. movzbl %bh,%edi
  104. xorl 2048(%rbp,%rsi,8),%edx
  105. xorl 2048(%rbp,%rdi,8),%ecx
  106. movl 24(%r14),%ebx
  107. movl 28(%r14),%eax
  108. xorl %edx,%ecx
  109. rorl $8,%edx
  110. xorl %ecx,%r10d
  111. xorl %ecx,%r11d
  112. xorl %edx,%r11d
  113. xorl %r10d,%eax
  114. xorl %r11d,%ebx
  115. movzbl %ah,%esi
  116. movzbl %bl,%edi
  117. movl 2052(%rbp,%rsi,8),%edx
  118. movl 0(%rbp,%rdi,8),%ecx
  119. movzbl %al,%esi
  120. shrl $16,%eax
  121. movzbl %bh,%edi
  122. xorl 4(%rbp,%rsi,8),%edx
  123. shrl $16,%ebx
  124. xorl 4(%rbp,%rdi,8),%ecx
  125. movzbl %ah,%esi
  126. movzbl %bl,%edi
  127. xorl 0(%rbp,%rsi,8),%edx
  128. xorl 2052(%rbp,%rdi,8),%ecx
  129. movzbl %al,%esi
  130. movzbl %bh,%edi
  131. xorl 2048(%rbp,%rsi,8),%edx
  132. xorl 2048(%rbp,%rdi,8),%ecx
  133. movl 32(%r14),%ebx
  134. movl 36(%r14),%eax
  135. xorl %edx,%ecx
  136. rorl $8,%edx
  137. xorl %ecx,%r8d
  138. xorl %ecx,%r9d
  139. xorl %edx,%r9d
  140. xorl %r8d,%eax
  141. xorl %r9d,%ebx
  142. movzbl %ah,%esi
  143. movzbl %bl,%edi
  144. movl 2052(%rbp,%rsi,8),%edx
  145. movl 0(%rbp,%rdi,8),%ecx
  146. movzbl %al,%esi
  147. shrl $16,%eax
  148. movzbl %bh,%edi
  149. xorl 4(%rbp,%rsi,8),%edx
  150. shrl $16,%ebx
  151. xorl 4(%rbp,%rdi,8),%ecx
  152. movzbl %ah,%esi
  153. movzbl %bl,%edi
  154. xorl 0(%rbp,%rsi,8),%edx
  155. xorl 2052(%rbp,%rdi,8),%ecx
  156. movzbl %al,%esi
  157. movzbl %bh,%edi
  158. xorl 2048(%rbp,%rsi,8),%edx
  159. xorl 2048(%rbp,%rdi,8),%ecx
  160. movl 40(%r14),%ebx
  161. movl 44(%r14),%eax
  162. xorl %edx,%ecx
  163. rorl $8,%edx
  164. xorl %ecx,%r10d
  165. xorl %ecx,%r11d
  166. xorl %edx,%r11d
  167. xorl %r10d,%eax
  168. xorl %r11d,%ebx
  169. movzbl %ah,%esi
  170. movzbl %bl,%edi
  171. movl 2052(%rbp,%rsi,8),%edx
  172. movl 0(%rbp,%rdi,8),%ecx
  173. movzbl %al,%esi
  174. shrl $16,%eax
  175. movzbl %bh,%edi
  176. xorl 4(%rbp,%rsi,8),%edx
  177. shrl $16,%ebx
  178. xorl 4(%rbp,%rdi,8),%ecx
  179. movzbl %ah,%esi
  180. movzbl %bl,%edi
  181. xorl 0(%rbp,%rsi,8),%edx
  182. xorl 2052(%rbp,%rdi,8),%ecx
  183. movzbl %al,%esi
  184. movzbl %bh,%edi
  185. xorl 2048(%rbp,%rsi,8),%edx
  186. xorl 2048(%rbp,%rdi,8),%ecx
  187. movl 48(%r14),%ebx
  188. movl 52(%r14),%eax
  189. xorl %edx,%ecx
  190. rorl $8,%edx
  191. xorl %ecx,%r8d
  192. xorl %ecx,%r9d
  193. xorl %edx,%r9d
  194. xorl %r8d,%eax
  195. xorl %r9d,%ebx
  196. movzbl %ah,%esi
  197. movzbl %bl,%edi
  198. movl 2052(%rbp,%rsi,8),%edx
  199. movl 0(%rbp,%rdi,8),%ecx
  200. movzbl %al,%esi
  201. shrl $16,%eax
  202. movzbl %bh,%edi
  203. xorl 4(%rbp,%rsi,8),%edx
  204. shrl $16,%ebx
  205. xorl 4(%rbp,%rdi,8),%ecx
  206. movzbl %ah,%esi
  207. movzbl %bl,%edi
  208. xorl 0(%rbp,%rsi,8),%edx
  209. xorl 2052(%rbp,%rdi,8),%ecx
  210. movzbl %al,%esi
  211. movzbl %bh,%edi
  212. xorl 2048(%rbp,%rsi,8),%edx
  213. xorl 2048(%rbp,%rdi,8),%ecx
  214. movl 56(%r14),%ebx
  215. movl 60(%r14),%eax
  216. xorl %edx,%ecx
  217. rorl $8,%edx
  218. xorl %ecx,%r10d
  219. xorl %ecx,%r11d
  220. xorl %edx,%r11d
  221. xorl %r10d,%eax
  222. xorl %r11d,%ebx
  223. movzbl %ah,%esi
  224. movzbl %bl,%edi
  225. movl 2052(%rbp,%rsi,8),%edx
  226. movl 0(%rbp,%rdi,8),%ecx
  227. movzbl %al,%esi
  228. shrl $16,%eax
  229. movzbl %bh,%edi
  230. xorl 4(%rbp,%rsi,8),%edx
  231. shrl $16,%ebx
  232. xorl 4(%rbp,%rdi,8),%ecx
  233. movzbl %ah,%esi
  234. movzbl %bl,%edi
  235. xorl 0(%rbp,%rsi,8),%edx
  236. xorl 2052(%rbp,%rdi,8),%ecx
  237. movzbl %al,%esi
  238. movzbl %bh,%edi
  239. xorl 2048(%rbp,%rsi,8),%edx
  240. xorl 2048(%rbp,%rdi,8),%ecx
  241. movl 64(%r14),%ebx
  242. movl 68(%r14),%eax
  243. xorl %edx,%ecx
  244. rorl $8,%edx
  245. xorl %ecx,%r8d
  246. xorl %ecx,%r9d
  247. xorl %edx,%r9d
  248. leaq 64(%r14),%r14
  249. cmpq %r15,%r14
  250. movl 8(%r14),%edx
  251. movl 12(%r14),%ecx
  252. je .Ledone
  253. andl %r8d,%eax
  254. orl %r11d,%edx
  255. roll $1,%eax
  256. xorl %edx,%r10d
  257. xorl %eax,%r9d
  258. andl %r10d,%ecx
  259. orl %r9d,%ebx
  260. roll $1,%ecx
  261. xorl %ebx,%r8d
  262. xorl %ecx,%r11d
  263. jmp .Leloop
  264. .align 16
  265. .Ledone:
  266. xorl %r10d,%eax
  267. xorl %r11d,%ebx
  268. xorl %r8d,%ecx
  269. xorl %r9d,%edx
  270. movl %eax,%r8d
  271. movl %ebx,%r9d
  272. movl %ecx,%r10d
  273. movl %edx,%r11d
  274. .byte 0xf3,0xc3
  275. .cfi_endproc
  276. .size _x86_64_Camellia_encrypt,.-_x86_64_Camellia_encrypt
  277. .globl Camellia_DecryptBlock
  278. .type Camellia_DecryptBlock,@function
  279. .align 16
  280. Camellia_DecryptBlock:
  281. .cfi_startproc
  282. movl $128,%eax
  283. subl %edi,%eax
  284. movl $3,%edi
  285. adcl $0,%edi
  286. jmp .Ldec_rounds
  287. .cfi_endproc
  288. .size Camellia_DecryptBlock,.-Camellia_DecryptBlock
  289. .globl Camellia_DecryptBlock_Rounds
  290. .type Camellia_DecryptBlock_Rounds,@function
  291. .align 16
  292. .Ldec_rounds:
  293. Camellia_DecryptBlock_Rounds:
  294. .cfi_startproc
  295. pushq %rbx
  296. .cfi_adjust_cfa_offset 8
  297. .cfi_offset %rbx,-16
  298. pushq %rbp
  299. .cfi_adjust_cfa_offset 8
  300. .cfi_offset %rbp,-24
  301. pushq %r13
  302. .cfi_adjust_cfa_offset 8
  303. .cfi_offset %r13,-32
  304. pushq %r14
  305. .cfi_adjust_cfa_offset 8
  306. .cfi_offset %r14,-40
  307. pushq %r15
  308. .cfi_adjust_cfa_offset 8
  309. .cfi_offset %r15,-48
  310. .Ldec_prologue:
  311. movq %rcx,%r13
  312. movq %rdx,%r15
  313. shll $6,%edi
  314. leaq .LCamellia_SBOX(%rip),%rbp
  315. leaq (%r15,%rdi,1),%r14
  316. movl 0(%rsi),%r8d
  317. movl 4(%rsi),%r9d
  318. movl 8(%rsi),%r10d
  319. bswapl %r8d
  320. movl 12(%rsi),%r11d
  321. bswapl %r9d
  322. bswapl %r10d
  323. bswapl %r11d
  324. call _x86_64_Camellia_decrypt
  325. bswapl %r8d
  326. bswapl %r9d
  327. bswapl %r10d
  328. movl %r8d,0(%r13)
  329. bswapl %r11d
  330. movl %r9d,4(%r13)
  331. movl %r10d,8(%r13)
  332. movl %r11d,12(%r13)
  333. movq 0(%rsp),%r15
  334. .cfi_restore %r15
  335. movq 8(%rsp),%r14
  336. .cfi_restore %r14
  337. movq 16(%rsp),%r13
  338. .cfi_restore %r13
  339. movq 24(%rsp),%rbp
  340. .cfi_restore %rbp
  341. movq 32(%rsp),%rbx
  342. .cfi_restore %rbx
  343. leaq 40(%rsp),%rsp
  344. .cfi_adjust_cfa_offset -40
  345. .Ldec_epilogue:
  346. .byte 0xf3,0xc3
  347. .cfi_endproc
  348. .size Camellia_DecryptBlock_Rounds,.-Camellia_DecryptBlock_Rounds
  349. .type _x86_64_Camellia_decrypt,@function
  350. .align 16
  351. _x86_64_Camellia_decrypt:
  352. .cfi_startproc
  353. xorl 0(%r14),%r9d
  354. xorl 4(%r14),%r8d
  355. xorl 8(%r14),%r11d
  356. xorl 12(%r14),%r10d
  357. .align 16
  358. .Ldloop:
  359. movl -8(%r14),%ebx
  360. movl -4(%r14),%eax
  361. xorl %r8d,%eax
  362. xorl %r9d,%ebx
  363. movzbl %ah,%esi
  364. movzbl %bl,%edi
  365. movl 2052(%rbp,%rsi,8),%edx
  366. movl 0(%rbp,%rdi,8),%ecx
  367. movzbl %al,%esi
  368. shrl $16,%eax
  369. movzbl %bh,%edi
  370. xorl 4(%rbp,%rsi,8),%edx
  371. shrl $16,%ebx
  372. xorl 4(%rbp,%rdi,8),%ecx
  373. movzbl %ah,%esi
  374. movzbl %bl,%edi
  375. xorl 0(%rbp,%rsi,8),%edx
  376. xorl 2052(%rbp,%rdi,8),%ecx
  377. movzbl %al,%esi
  378. movzbl %bh,%edi
  379. xorl 2048(%rbp,%rsi,8),%edx
  380. xorl 2048(%rbp,%rdi,8),%ecx
  381. movl -16(%r14),%ebx
  382. movl -12(%r14),%eax
  383. xorl %edx,%ecx
  384. rorl $8,%edx
  385. xorl %ecx,%r10d
  386. xorl %ecx,%r11d
  387. xorl %edx,%r11d
  388. xorl %r10d,%eax
  389. xorl %r11d,%ebx
  390. movzbl %ah,%esi
  391. movzbl %bl,%edi
  392. movl 2052(%rbp,%rsi,8),%edx
  393. movl 0(%rbp,%rdi,8),%ecx
  394. movzbl %al,%esi
  395. shrl $16,%eax
  396. movzbl %bh,%edi
  397. xorl 4(%rbp,%rsi,8),%edx
  398. shrl $16,%ebx
  399. xorl 4(%rbp,%rdi,8),%ecx
  400. movzbl %ah,%esi
  401. movzbl %bl,%edi
  402. xorl 0(%rbp,%rsi,8),%edx
  403. xorl 2052(%rbp,%rdi,8),%ecx
  404. movzbl %al,%esi
  405. movzbl %bh,%edi
  406. xorl 2048(%rbp,%rsi,8),%edx
  407. xorl 2048(%rbp,%rdi,8),%ecx
  408. movl -24(%r14),%ebx
  409. movl -20(%r14),%eax
  410. xorl %edx,%ecx
  411. rorl $8,%edx
  412. xorl %ecx,%r8d
  413. xorl %ecx,%r9d
  414. xorl %edx,%r9d
  415. xorl %r8d,%eax
  416. xorl %r9d,%ebx
  417. movzbl %ah,%esi
  418. movzbl %bl,%edi
  419. movl 2052(%rbp,%rsi,8),%edx
  420. movl 0(%rbp,%rdi,8),%ecx
  421. movzbl %al,%esi
  422. shrl $16,%eax
  423. movzbl %bh,%edi
  424. xorl 4(%rbp,%rsi,8),%edx
  425. shrl $16,%ebx
  426. xorl 4(%rbp,%rdi,8),%ecx
  427. movzbl %ah,%esi
  428. movzbl %bl,%edi
  429. xorl 0(%rbp,%rsi,8),%edx
  430. xorl 2052(%rbp,%rdi,8),%ecx
  431. movzbl %al,%esi
  432. movzbl %bh,%edi
  433. xorl 2048(%rbp,%rsi,8),%edx
  434. xorl 2048(%rbp,%rdi,8),%ecx
  435. movl -32(%r14),%ebx
  436. movl -28(%r14),%eax
  437. xorl %edx,%ecx
  438. rorl $8,%edx
  439. xorl %ecx,%r10d
  440. xorl %ecx,%r11d
  441. xorl %edx,%r11d
  442. xorl %r10d,%eax
  443. xorl %r11d,%ebx
  444. movzbl %ah,%esi
  445. movzbl %bl,%edi
  446. movl 2052(%rbp,%rsi,8),%edx
  447. movl 0(%rbp,%rdi,8),%ecx
  448. movzbl %al,%esi
  449. shrl $16,%eax
  450. movzbl %bh,%edi
  451. xorl 4(%rbp,%rsi,8),%edx
  452. shrl $16,%ebx
  453. xorl 4(%rbp,%rdi,8),%ecx
  454. movzbl %ah,%esi
  455. movzbl %bl,%edi
  456. xorl 0(%rbp,%rsi,8),%edx
  457. xorl 2052(%rbp,%rdi,8),%ecx
  458. movzbl %al,%esi
  459. movzbl %bh,%edi
  460. xorl 2048(%rbp,%rsi,8),%edx
  461. xorl 2048(%rbp,%rdi,8),%ecx
  462. movl -40(%r14),%ebx
  463. movl -36(%r14),%eax
  464. xorl %edx,%ecx
  465. rorl $8,%edx
  466. xorl %ecx,%r8d
  467. xorl %ecx,%r9d
  468. xorl %edx,%r9d
  469. xorl %r8d,%eax
  470. xorl %r9d,%ebx
  471. movzbl %ah,%esi
  472. movzbl %bl,%edi
  473. movl 2052(%rbp,%rsi,8),%edx
  474. movl 0(%rbp,%rdi,8),%ecx
  475. movzbl %al,%esi
  476. shrl $16,%eax
  477. movzbl %bh,%edi
  478. xorl 4(%rbp,%rsi,8),%edx
  479. shrl $16,%ebx
  480. xorl 4(%rbp,%rdi,8),%ecx
  481. movzbl %ah,%esi
  482. movzbl %bl,%edi
  483. xorl 0(%rbp,%rsi,8),%edx
  484. xorl 2052(%rbp,%rdi,8),%ecx
  485. movzbl %al,%esi
  486. movzbl %bh,%edi
  487. xorl 2048(%rbp,%rsi,8),%edx
  488. xorl 2048(%rbp,%rdi,8),%ecx
  489. movl -48(%r14),%ebx
  490. movl -44(%r14),%eax
  491. xorl %edx,%ecx
  492. rorl $8,%edx
  493. xorl %ecx,%r10d
  494. xorl %ecx,%r11d
  495. xorl %edx,%r11d
  496. xorl %r10d,%eax
  497. xorl %r11d,%ebx
  498. movzbl %ah,%esi
  499. movzbl %bl,%edi
  500. movl 2052(%rbp,%rsi,8),%edx
  501. movl 0(%rbp,%rdi,8),%ecx
  502. movzbl %al,%esi
  503. shrl $16,%eax
  504. movzbl %bh,%edi
  505. xorl 4(%rbp,%rsi,8),%edx
  506. shrl $16,%ebx
  507. xorl 4(%rbp,%rdi,8),%ecx
  508. movzbl %ah,%esi
  509. movzbl %bl,%edi
  510. xorl 0(%rbp,%rsi,8),%edx
  511. xorl 2052(%rbp,%rdi,8),%ecx
  512. movzbl %al,%esi
  513. movzbl %bh,%edi
  514. xorl 2048(%rbp,%rsi,8),%edx
  515. xorl 2048(%rbp,%rdi,8),%ecx
  516. movl -56(%r14),%ebx
  517. movl -52(%r14),%eax
  518. xorl %edx,%ecx
  519. rorl $8,%edx
  520. xorl %ecx,%r8d
  521. xorl %ecx,%r9d
  522. xorl %edx,%r9d
  523. leaq -64(%r14),%r14
  524. cmpq %r15,%r14
  525. movl 0(%r14),%edx
  526. movl 4(%r14),%ecx
  527. je .Lddone
  528. andl %r8d,%eax
  529. orl %r11d,%edx
  530. roll $1,%eax
  531. xorl %edx,%r10d
  532. xorl %eax,%r9d
  533. andl %r10d,%ecx
  534. orl %r9d,%ebx
  535. roll $1,%ecx
  536. xorl %ebx,%r8d
  537. xorl %ecx,%r11d
  538. jmp .Ldloop
  539. .align 16
  540. .Lddone:
  541. xorl %r10d,%ecx
  542. xorl %r11d,%edx
  543. xorl %r8d,%eax
  544. xorl %r9d,%ebx
  545. movl %ecx,%r8d
  546. movl %edx,%r9d
  547. movl %eax,%r10d
  548. movl %ebx,%r11d
  549. .byte 0xf3,0xc3
  550. .cfi_endproc
  551. .size _x86_64_Camellia_decrypt,.-_x86_64_Camellia_decrypt
  552. .globl Camellia_Ekeygen
  553. .type Camellia_Ekeygen,@function
  554. .align 16
  555. Camellia_Ekeygen:
  556. .cfi_startproc
  557. pushq %rbx
  558. .cfi_adjust_cfa_offset 8
  559. .cfi_offset %rbx,-16
  560. pushq %rbp
  561. .cfi_adjust_cfa_offset 8
  562. .cfi_offset %rbp,-24
  563. pushq %r13
  564. .cfi_adjust_cfa_offset 8
  565. .cfi_offset %r13,-32
  566. pushq %r14
  567. .cfi_adjust_cfa_offset 8
  568. .cfi_offset %r14,-40
  569. pushq %r15
  570. .cfi_adjust_cfa_offset 8
  571. .cfi_offset %r15,-48
  572. .Lkey_prologue:
  573. movl %edi,%r15d
  574. movq %rdx,%r13
  575. movl 0(%rsi),%r8d
  576. movl 4(%rsi),%r9d
  577. movl 8(%rsi),%r10d
  578. movl 12(%rsi),%r11d
  579. bswapl %r8d
  580. bswapl %r9d
  581. bswapl %r10d
  582. bswapl %r11d
  583. movl %r9d,0(%r13)
  584. movl %r8d,4(%r13)
  585. movl %r11d,8(%r13)
  586. movl %r10d,12(%r13)
  587. cmpq $128,%r15
  588. je .L1st128
  589. movl 16(%rsi),%r8d
  590. movl 20(%rsi),%r9d
  591. cmpq $192,%r15
  592. je .L1st192
  593. movl 24(%rsi),%r10d
  594. movl 28(%rsi),%r11d
  595. jmp .L1st256
  596. .L1st192:
  597. movl %r8d,%r10d
  598. movl %r9d,%r11d
  599. notl %r10d
  600. notl %r11d
  601. .L1st256:
  602. bswapl %r8d
  603. bswapl %r9d
  604. bswapl %r10d
  605. bswapl %r11d
  606. movl %r9d,32(%r13)
  607. movl %r8d,36(%r13)
  608. movl %r11d,40(%r13)
  609. movl %r10d,44(%r13)
  610. xorl 0(%r13),%r9d
  611. xorl 4(%r13),%r8d
  612. xorl 8(%r13),%r11d
  613. xorl 12(%r13),%r10d
  614. .L1st128:
  615. leaq .LCamellia_SIGMA(%rip),%r14
  616. leaq .LCamellia_SBOX(%rip),%rbp
  617. movl 0(%r14),%ebx
  618. movl 4(%r14),%eax
  619. xorl %r8d,%eax
  620. xorl %r9d,%ebx
  621. movzbl %ah,%esi
  622. movzbl %bl,%edi
  623. movl 2052(%rbp,%rsi,8),%edx
  624. movl 0(%rbp,%rdi,8),%ecx
  625. movzbl %al,%esi
  626. shrl $16,%eax
  627. movzbl %bh,%edi
  628. xorl 4(%rbp,%rsi,8),%edx
  629. shrl $16,%ebx
  630. xorl 4(%rbp,%rdi,8),%ecx
  631. movzbl %ah,%esi
  632. movzbl %bl,%edi
  633. xorl 0(%rbp,%rsi,8),%edx
  634. xorl 2052(%rbp,%rdi,8),%ecx
  635. movzbl %al,%esi
  636. movzbl %bh,%edi
  637. xorl 2048(%rbp,%rsi,8),%edx
  638. xorl 2048(%rbp,%rdi,8),%ecx
  639. movl 8(%r14),%ebx
  640. movl 12(%r14),%eax
  641. xorl %edx,%ecx
  642. rorl $8,%edx
  643. xorl %ecx,%r10d
  644. xorl %ecx,%r11d
  645. xorl %edx,%r11d
  646. xorl %r10d,%eax
  647. xorl %r11d,%ebx
  648. movzbl %ah,%esi
  649. movzbl %bl,%edi
  650. movl 2052(%rbp,%rsi,8),%edx
  651. movl 0(%rbp,%rdi,8),%ecx
  652. movzbl %al,%esi
  653. shrl $16,%eax
  654. movzbl %bh,%edi
  655. xorl 4(%rbp,%rsi,8),%edx
  656. shrl $16,%ebx
  657. xorl 4(%rbp,%rdi,8),%ecx
  658. movzbl %ah,%esi
  659. movzbl %bl,%edi
  660. xorl 0(%rbp,%rsi,8),%edx
  661. xorl 2052(%rbp,%rdi,8),%ecx
  662. movzbl %al,%esi
  663. movzbl %bh,%edi
  664. xorl 2048(%rbp,%rsi,8),%edx
  665. xorl 2048(%rbp,%rdi,8),%ecx
  666. movl 16(%r14),%ebx
  667. movl 20(%r14),%eax
  668. xorl %edx,%ecx
  669. rorl $8,%edx
  670. xorl %ecx,%r8d
  671. xorl %ecx,%r9d
  672. xorl %edx,%r9d
  673. xorl 0(%r13),%r9d
  674. xorl 4(%r13),%r8d
  675. xorl 8(%r13),%r11d
  676. xorl 12(%r13),%r10d
  677. xorl %r8d,%eax
  678. xorl %r9d,%ebx
  679. movzbl %ah,%esi
  680. movzbl %bl,%edi
  681. movl 2052(%rbp,%rsi,8),%edx
  682. movl 0(%rbp,%rdi,8),%ecx
  683. movzbl %al,%esi
  684. shrl $16,%eax
  685. movzbl %bh,%edi
  686. xorl 4(%rbp,%rsi,8),%edx
  687. shrl $16,%ebx
  688. xorl 4(%rbp,%rdi,8),%ecx
  689. movzbl %ah,%esi
  690. movzbl %bl,%edi
  691. xorl 0(%rbp,%rsi,8),%edx
  692. xorl 2052(%rbp,%rdi,8),%ecx
  693. movzbl %al,%esi
  694. movzbl %bh,%edi
  695. xorl 2048(%rbp,%rsi,8),%edx
  696. xorl 2048(%rbp,%rdi,8),%ecx
  697. movl 24(%r14),%ebx
  698. movl 28(%r14),%eax
  699. xorl %edx,%ecx
  700. rorl $8,%edx
  701. xorl %ecx,%r10d
  702. xorl %ecx,%r11d
  703. xorl %edx,%r11d
  704. xorl %r10d,%eax
  705. xorl %r11d,%ebx
  706. movzbl %ah,%esi
  707. movzbl %bl,%edi
  708. movl 2052(%rbp,%rsi,8),%edx
  709. movl 0(%rbp,%rdi,8),%ecx
  710. movzbl %al,%esi
  711. shrl $16,%eax
  712. movzbl %bh,%edi
  713. xorl 4(%rbp,%rsi,8),%edx
  714. shrl $16,%ebx
  715. xorl 4(%rbp,%rdi,8),%ecx
  716. movzbl %ah,%esi
  717. movzbl %bl,%edi
  718. xorl 0(%rbp,%rsi,8),%edx
  719. xorl 2052(%rbp,%rdi,8),%ecx
  720. movzbl %al,%esi
  721. movzbl %bh,%edi
  722. xorl 2048(%rbp,%rsi,8),%edx
  723. xorl 2048(%rbp,%rdi,8),%ecx
  724. movl 32(%r14),%ebx
  725. movl 36(%r14),%eax
  726. xorl %edx,%ecx
  727. rorl $8,%edx
  728. xorl %ecx,%r8d
  729. xorl %ecx,%r9d
  730. xorl %edx,%r9d
  731. cmpq $128,%r15
  732. jne .L2nd256
  733. leaq 128(%r13),%r13
  734. shlq $32,%r8
  735. shlq $32,%r10
  736. orq %r9,%r8
  737. orq %r11,%r10
  738. movq -128(%r13),%rax
  739. movq -120(%r13),%rbx
  740. movq %r8,-112(%r13)
  741. movq %r10,-104(%r13)
  742. movq %rax,%r11
  743. shlq $15,%rax
  744. movq %rbx,%r9
  745. shrq $49,%r9
  746. shrq $49,%r11
  747. orq %r9,%rax
  748. shlq $15,%rbx
  749. orq %r11,%rbx
  750. movq %rax,-96(%r13)
  751. movq %rbx,-88(%r13)
  752. movq %r8,%r11
  753. shlq $15,%r8
  754. movq %r10,%r9
  755. shrq $49,%r9
  756. shrq $49,%r11
  757. orq %r9,%r8
  758. shlq $15,%r10
  759. orq %r11,%r10
  760. movq %r8,-80(%r13)
  761. movq %r10,-72(%r13)
  762. movq %r8,%r11
  763. shlq $15,%r8
  764. movq %r10,%r9
  765. shrq $49,%r9
  766. shrq $49,%r11
  767. orq %r9,%r8
  768. shlq $15,%r10
  769. orq %r11,%r10
  770. movq %r8,-64(%r13)
  771. movq %r10,-56(%r13)
  772. movq %rax,%r11
  773. shlq $30,%rax
  774. movq %rbx,%r9
  775. shrq $34,%r9
  776. shrq $34,%r11
  777. orq %r9,%rax
  778. shlq $30,%rbx
  779. orq %r11,%rbx
  780. movq %rax,-48(%r13)
  781. movq %rbx,-40(%r13)
  782. movq %r8,%r11
  783. shlq $15,%r8
  784. movq %r10,%r9
  785. shrq $49,%r9
  786. shrq $49,%r11
  787. orq %r9,%r8
  788. shlq $15,%r10
  789. orq %r11,%r10
  790. movq %r8,-32(%r13)
  791. movq %rax,%r11
  792. shlq $15,%rax
  793. movq %rbx,%r9
  794. shrq $49,%r9
  795. shrq $49,%r11
  796. orq %r9,%rax
  797. shlq $15,%rbx
  798. orq %r11,%rbx
  799. movq %rbx,-24(%r13)
  800. movq %r8,%r11
  801. shlq $15,%r8
  802. movq %r10,%r9
  803. shrq $49,%r9
  804. shrq $49,%r11
  805. orq %r9,%r8
  806. shlq $15,%r10
  807. orq %r11,%r10
  808. movq %r8,-16(%r13)
  809. movq %r10,-8(%r13)
  810. movq %rax,%r11
  811. shlq $17,%rax
  812. movq %rbx,%r9
  813. shrq $47,%r9
  814. shrq $47,%r11
  815. orq %r9,%rax
  816. shlq $17,%rbx
  817. orq %r11,%rbx
  818. movq %rax,0(%r13)
  819. movq %rbx,8(%r13)
  820. movq %rax,%r11
  821. shlq $17,%rax
  822. movq %rbx,%r9
  823. shrq $47,%r9
  824. shrq $47,%r11
  825. orq %r9,%rax
  826. shlq $17,%rbx
  827. orq %r11,%rbx
  828. movq %rax,16(%r13)
  829. movq %rbx,24(%r13)
  830. movq %r8,%r11
  831. shlq $34,%r8
  832. movq %r10,%r9
  833. shrq $30,%r9
  834. shrq $30,%r11
  835. orq %r9,%r8
  836. shlq $34,%r10
  837. orq %r11,%r10
  838. movq %r8,32(%r13)
  839. movq %r10,40(%r13)
  840. movq %rax,%r11
  841. shlq $17,%rax
  842. movq %rbx,%r9
  843. shrq $47,%r9
  844. shrq $47,%r11
  845. orq %r9,%rax
  846. shlq $17,%rbx
  847. orq %r11,%rbx
  848. movq %rax,48(%r13)
  849. movq %rbx,56(%r13)
  850. movq %r8,%r11
  851. shlq $17,%r8
  852. movq %r10,%r9
  853. shrq $47,%r9
  854. shrq $47,%r11
  855. orq %r9,%r8
  856. shlq $17,%r10
  857. orq %r11,%r10
  858. movq %r8,64(%r13)
  859. movq %r10,72(%r13)
  860. movl $3,%eax
  861. jmp .Ldone
  862. .align 16
  863. .L2nd256:
  864. movl %r9d,48(%r13)
  865. movl %r8d,52(%r13)
  866. movl %r11d,56(%r13)
  867. movl %r10d,60(%r13)
  868. xorl 32(%r13),%r9d
  869. xorl 36(%r13),%r8d
  870. xorl 40(%r13),%r11d
  871. xorl 44(%r13),%r10d
  872. xorl %r8d,%eax
  873. xorl %r9d,%ebx
  874. movzbl %ah,%esi
  875. movzbl %bl,%edi
  876. movl 2052(%rbp,%rsi,8),%edx
  877. movl 0(%rbp,%rdi,8),%ecx
  878. movzbl %al,%esi
  879. shrl $16,%eax
  880. movzbl %bh,%edi
  881. xorl 4(%rbp,%rsi,8),%edx
  882. shrl $16,%ebx
  883. xorl 4(%rbp,%rdi,8),%ecx
  884. movzbl %ah,%esi
  885. movzbl %bl,%edi
  886. xorl 0(%rbp,%rsi,8),%edx
  887. xorl 2052(%rbp,%rdi,8),%ecx
  888. movzbl %al,%esi
  889. movzbl %bh,%edi
  890. xorl 2048(%rbp,%rsi,8),%edx
  891. xorl 2048(%rbp,%rdi,8),%ecx
  892. movl 40(%r14),%ebx
  893. movl 44(%r14),%eax
  894. xorl %edx,%ecx
  895. rorl $8,%edx
  896. xorl %ecx,%r10d
  897. xorl %ecx,%r11d
  898. xorl %edx,%r11d
  899. xorl %r10d,%eax
  900. xorl %r11d,%ebx
  901. movzbl %ah,%esi
  902. movzbl %bl,%edi
  903. movl 2052(%rbp,%rsi,8),%edx
  904. movl 0(%rbp,%rdi,8),%ecx
  905. movzbl %al,%esi
  906. shrl $16,%eax
  907. movzbl %bh,%edi
  908. xorl 4(%rbp,%rsi,8),%edx
  909. shrl $16,%ebx
  910. xorl 4(%rbp,%rdi,8),%ecx
  911. movzbl %ah,%esi
  912. movzbl %bl,%edi
  913. xorl 0(%rbp,%rsi,8),%edx
  914. xorl 2052(%rbp,%rdi,8),%ecx
  915. movzbl %al,%esi
  916. movzbl %bh,%edi
  917. xorl 2048(%rbp,%rsi,8),%edx
  918. xorl 2048(%rbp,%rdi,8),%ecx
  919. movl 48(%r14),%ebx
  920. movl 52(%r14),%eax
  921. xorl %edx,%ecx
  922. rorl $8,%edx
  923. xorl %ecx,%r8d
  924. xorl %ecx,%r9d
  925. xorl %edx,%r9d
  926. movq 0(%r13),%rax
  927. movq 8(%r13),%rbx
  928. movq 32(%r13),%rcx
  929. movq 40(%r13),%rdx
  930. movq 48(%r13),%r14
  931. movq 56(%r13),%r15
  932. leaq 128(%r13),%r13
  933. shlq $32,%r8
  934. shlq $32,%r10
  935. orq %r9,%r8
  936. orq %r11,%r10
  937. movq %r8,-112(%r13)
  938. movq %r10,-104(%r13)
  939. movq %rcx,%r11
  940. shlq $15,%rcx
  941. movq %rdx,%r9
  942. shrq $49,%r9
  943. shrq $49,%r11
  944. orq %r9,%rcx
  945. shlq $15,%rdx
  946. orq %r11,%rdx
  947. movq %rcx,-96(%r13)
  948. movq %rdx,-88(%r13)
  949. movq %r14,%r11
  950. shlq $15,%r14
  951. movq %r15,%r9
  952. shrq $49,%r9
  953. shrq $49,%r11
  954. orq %r9,%r14
  955. shlq $15,%r15
  956. orq %r11,%r15
  957. movq %r14,-80(%r13)
  958. movq %r15,-72(%r13)
  959. movq %rcx,%r11
  960. shlq $15,%rcx
  961. movq %rdx,%r9
  962. shrq $49,%r9
  963. shrq $49,%r11
  964. orq %r9,%rcx
  965. shlq $15,%rdx
  966. orq %r11,%rdx
  967. movq %rcx,-64(%r13)
  968. movq %rdx,-56(%r13)
  969. movq %r8,%r11
  970. shlq $30,%r8
  971. movq %r10,%r9
  972. shrq $34,%r9
  973. shrq $34,%r11
  974. orq %r9,%r8
  975. shlq $30,%r10
  976. orq %r11,%r10
  977. movq %r8,-48(%r13)
  978. movq %r10,-40(%r13)
  979. movq %rax,%r11
  980. shlq $45,%rax
  981. movq %rbx,%r9
  982. shrq $19,%r9
  983. shrq $19,%r11
  984. orq %r9,%rax
  985. shlq $45,%rbx
  986. orq %r11,%rbx
  987. movq %rax,-32(%r13)
  988. movq %rbx,-24(%r13)
  989. movq %r14,%r11
  990. shlq $30,%r14
  991. movq %r15,%r9
  992. shrq $34,%r9
  993. shrq $34,%r11
  994. orq %r9,%r14
  995. shlq $30,%r15
  996. orq %r11,%r15
  997. movq %r14,-16(%r13)
  998. movq %r15,-8(%r13)
  999. movq %rax,%r11
  1000. shlq $15,%rax
  1001. movq %rbx,%r9
  1002. shrq $49,%r9
  1003. shrq $49,%r11
  1004. orq %r9,%rax
  1005. shlq $15,%rbx
  1006. orq %r11,%rbx
  1007. movq %rax,0(%r13)
  1008. movq %rbx,8(%r13)
  1009. movq %rcx,%r11
  1010. shlq $30,%rcx
  1011. movq %rdx,%r9
  1012. shrq $34,%r9
  1013. shrq $34,%r11
  1014. orq %r9,%rcx
  1015. shlq $30,%rdx
  1016. orq %r11,%rdx
  1017. movq %rcx,16(%r13)
  1018. movq %rdx,24(%r13)
  1019. movq %r8,%r11
  1020. shlq $30,%r8
  1021. movq %r10,%r9
  1022. shrq $34,%r9
  1023. shrq $34,%r11
  1024. orq %r9,%r8
  1025. shlq $30,%r10
  1026. orq %r11,%r10
  1027. movq %r8,32(%r13)
  1028. movq %r10,40(%r13)
  1029. movq %rax,%r11
  1030. shlq $17,%rax
  1031. movq %rbx,%r9
  1032. shrq $47,%r9
  1033. shrq $47,%r11
  1034. orq %r9,%rax
  1035. shlq $17,%rbx
  1036. orq %r11,%rbx
  1037. movq %rax,48(%r13)
  1038. movq %rbx,56(%r13)
  1039. movq %r14,%r11
  1040. shlq $32,%r14
  1041. movq %r15,%r9
  1042. shrq $32,%r9
  1043. shrq $32,%r11
  1044. orq %r9,%r14
  1045. shlq $32,%r15
  1046. orq %r11,%r15
  1047. movq %r14,64(%r13)
  1048. movq %r15,72(%r13)
  1049. movq %rcx,%r11
  1050. shlq $34,%rcx
  1051. movq %rdx,%r9
  1052. shrq $30,%r9
  1053. shrq $30,%r11
  1054. orq %r9,%rcx
  1055. shlq $34,%rdx
  1056. orq %r11,%rdx
  1057. movq %rcx,80(%r13)
  1058. movq %rdx,88(%r13)
  1059. movq %r14,%r11
  1060. shlq $17,%r14
  1061. movq %r15,%r9
  1062. shrq $47,%r9
  1063. shrq $47,%r11
  1064. orq %r9,%r14
  1065. shlq $17,%r15
  1066. orq %r11,%r15
  1067. movq %r14,96(%r13)
  1068. movq %r15,104(%r13)
  1069. movq %rax,%r11
  1070. shlq $34,%rax
  1071. movq %rbx,%r9
  1072. shrq $30,%r9
  1073. shrq $30,%r11
  1074. orq %r9,%rax
  1075. shlq $34,%rbx
  1076. orq %r11,%rbx
  1077. movq %rax,112(%r13)
  1078. movq %rbx,120(%r13)
  1079. movq %r8,%r11
  1080. shlq $51,%r8
  1081. movq %r10,%r9
  1082. shrq $13,%r9
  1083. shrq $13,%r11
  1084. orq %r9,%r8
  1085. shlq $51,%r10
  1086. orq %r11,%r10
  1087. movq %r8,128(%r13)
  1088. movq %r10,136(%r13)
  1089. movl $4,%eax
  1090. .Ldone:
  1091. movq 0(%rsp),%r15
  1092. .cfi_restore %r15
  1093. movq 8(%rsp),%r14
  1094. .cfi_restore %r14
  1095. movq 16(%rsp),%r13
  1096. .cfi_restore %r13
  1097. movq 24(%rsp),%rbp
  1098. .cfi_restore %rbp
  1099. movq 32(%rsp),%rbx
  1100. .cfi_restore %rbx
  1101. leaq 40(%rsp),%rsp
  1102. .cfi_adjust_cfa_offset -40
  1103. .Lkey_epilogue:
  1104. .byte 0xf3,0xc3
  1105. .cfi_endproc
  1106. .size Camellia_Ekeygen,.-Camellia_Ekeygen
  1107. .align 64
  1108. .LCamellia_SIGMA:
  1109. .long 0x3bcc908b, 0xa09e667f, 0x4caa73b2, 0xb67ae858
  1110. .long 0xe94f82be, 0xc6ef372f, 0xf1d36f1c, 0x54ff53a5
  1111. .long 0xde682d1d, 0x10e527fa, 0xb3e6c1fd, 0xb05688c2
  1112. .long 0, 0, 0, 0
  1113. .LCamellia_SBOX:
  1114. .long 0x70707000,0x70700070
  1115. .long 0x82828200,0x2c2c002c
  1116. .long 0x2c2c2c00,0xb3b300b3
  1117. .long 0xececec00,0xc0c000c0
  1118. .long 0xb3b3b300,0xe4e400e4
  1119. .long 0x27272700,0x57570057
  1120. .long 0xc0c0c000,0xeaea00ea
  1121. .long 0xe5e5e500,0xaeae00ae
  1122. .long 0xe4e4e400,0x23230023
  1123. .long 0x85858500,0x6b6b006b
  1124. .long 0x57575700,0x45450045
  1125. .long 0x35353500,0xa5a500a5
  1126. .long 0xeaeaea00,0xeded00ed
  1127. .long 0x0c0c0c00,0x4f4f004f
  1128. .long 0xaeaeae00,0x1d1d001d
  1129. .long 0x41414100,0x92920092
  1130. .long 0x23232300,0x86860086
  1131. .long 0xefefef00,0xafaf00af
  1132. .long 0x6b6b6b00,0x7c7c007c
  1133. .long 0x93939300,0x1f1f001f
  1134. .long 0x45454500,0x3e3e003e
  1135. .long 0x19191900,0xdcdc00dc
  1136. .long 0xa5a5a500,0x5e5e005e
  1137. .long 0x21212100,0x0b0b000b
  1138. .long 0xededed00,0xa6a600a6
  1139. .long 0x0e0e0e00,0x39390039
  1140. .long 0x4f4f4f00,0xd5d500d5
  1141. .long 0x4e4e4e00,0x5d5d005d
  1142. .long 0x1d1d1d00,0xd9d900d9
  1143. .long 0x65656500,0x5a5a005a
  1144. .long 0x92929200,0x51510051
  1145. .long 0xbdbdbd00,0x6c6c006c
  1146. .long 0x86868600,0x8b8b008b
  1147. .long 0xb8b8b800,0x9a9a009a
  1148. .long 0xafafaf00,0xfbfb00fb
  1149. .long 0x8f8f8f00,0xb0b000b0
  1150. .long 0x7c7c7c00,0x74740074
  1151. .long 0xebebeb00,0x2b2b002b
  1152. .long 0x1f1f1f00,0xf0f000f0
  1153. .long 0xcecece00,0x84840084
  1154. .long 0x3e3e3e00,0xdfdf00df
  1155. .long 0x30303000,0xcbcb00cb
  1156. .long 0xdcdcdc00,0x34340034
  1157. .long 0x5f5f5f00,0x76760076
  1158. .long 0x5e5e5e00,0x6d6d006d
  1159. .long 0xc5c5c500,0xa9a900a9
  1160. .long 0x0b0b0b00,0xd1d100d1
  1161. .long 0x1a1a1a00,0x04040004
  1162. .long 0xa6a6a600,0x14140014
  1163. .long 0xe1e1e100,0x3a3a003a
  1164. .long 0x39393900,0xdede00de
  1165. .long 0xcacaca00,0x11110011
  1166. .long 0xd5d5d500,0x32320032
  1167. .long 0x47474700,0x9c9c009c
  1168. .long 0x5d5d5d00,0x53530053
  1169. .long 0x3d3d3d00,0xf2f200f2
  1170. .long 0xd9d9d900,0xfefe00fe
  1171. .long 0x01010100,0xcfcf00cf
  1172. .long 0x5a5a5a00,0xc3c300c3
  1173. .long 0xd6d6d600,0x7a7a007a
  1174. .long 0x51515100,0x24240024
  1175. .long 0x56565600,0xe8e800e8
  1176. .long 0x6c6c6c00,0x60600060
  1177. .long 0x4d4d4d00,0x69690069
  1178. .long 0x8b8b8b00,0xaaaa00aa
  1179. .long 0x0d0d0d00,0xa0a000a0
  1180. .long 0x9a9a9a00,0xa1a100a1
  1181. .long 0x66666600,0x62620062
  1182. .long 0xfbfbfb00,0x54540054
  1183. .long 0xcccccc00,0x1e1e001e
  1184. .long 0xb0b0b000,0xe0e000e0
  1185. .long 0x2d2d2d00,0x64640064
  1186. .long 0x74747400,0x10100010
  1187. .long 0x12121200,0x00000000
  1188. .long 0x2b2b2b00,0xa3a300a3
  1189. .long 0x20202000,0x75750075
  1190. .long 0xf0f0f000,0x8a8a008a
  1191. .long 0xb1b1b100,0xe6e600e6
  1192. .long 0x84848400,0x09090009
  1193. .long 0x99999900,0xdddd00dd
  1194. .long 0xdfdfdf00,0x87870087
  1195. .long 0x4c4c4c00,0x83830083
  1196. .long 0xcbcbcb00,0xcdcd00cd
  1197. .long 0xc2c2c200,0x90900090
  1198. .long 0x34343400,0x73730073
  1199. .long 0x7e7e7e00,0xf6f600f6
  1200. .long 0x76767600,0x9d9d009d
  1201. .long 0x05050500,0xbfbf00bf
  1202. .long 0x6d6d6d00,0x52520052
  1203. .long 0xb7b7b700,0xd8d800d8
  1204. .long 0xa9a9a900,0xc8c800c8
  1205. .long 0x31313100,0xc6c600c6
  1206. .long 0xd1d1d100,0x81810081
  1207. .long 0x17171700,0x6f6f006f
  1208. .long 0x04040400,0x13130013
  1209. .long 0xd7d7d700,0x63630063
  1210. .long 0x14141400,0xe9e900e9
  1211. .long 0x58585800,0xa7a700a7
  1212. .long 0x3a3a3a00,0x9f9f009f
  1213. .long 0x61616100,0xbcbc00bc
  1214. .long 0xdedede00,0x29290029
  1215. .long 0x1b1b1b00,0xf9f900f9
  1216. .long 0x11111100,0x2f2f002f
  1217. .long 0x1c1c1c00,0xb4b400b4
  1218. .long 0x32323200,0x78780078
  1219. .long 0x0f0f0f00,0x06060006
  1220. .long 0x9c9c9c00,0xe7e700e7
  1221. .long 0x16161600,0x71710071
  1222. .long 0x53535300,0xd4d400d4
  1223. .long 0x18181800,0xabab00ab
  1224. .long 0xf2f2f200,0x88880088
  1225. .long 0x22222200,0x8d8d008d
  1226. .long 0xfefefe00,0x72720072
  1227. .long 0x44444400,0xb9b900b9
  1228. .long 0xcfcfcf00,0xf8f800f8
  1229. .long 0xb2b2b200,0xacac00ac
  1230. .long 0xc3c3c300,0x36360036
  1231. .long 0xb5b5b500,0x2a2a002a
  1232. .long 0x7a7a7a00,0x3c3c003c
  1233. .long 0x91919100,0xf1f100f1
  1234. .long 0x24242400,0x40400040
  1235. .long 0x08080800,0xd3d300d3
  1236. .long 0xe8e8e800,0xbbbb00bb
  1237. .long 0xa8a8a800,0x43430043
  1238. .long 0x60606000,0x15150015
  1239. .long 0xfcfcfc00,0xadad00ad
  1240. .long 0x69696900,0x77770077
  1241. .long 0x50505000,0x80800080
  1242. .long 0xaaaaaa00,0x82820082
  1243. .long 0xd0d0d000,0xecec00ec
  1244. .long 0xa0a0a000,0x27270027
  1245. .long 0x7d7d7d00,0xe5e500e5
  1246. .long 0xa1a1a100,0x85850085
  1247. .long 0x89898900,0x35350035
  1248. .long 0x62626200,0x0c0c000c
  1249. .long 0x97979700,0x41410041
  1250. .long 0x54545400,0xefef00ef
  1251. .long 0x5b5b5b00,0x93930093
  1252. .long 0x1e1e1e00,0x19190019
  1253. .long 0x95959500,0x21210021
  1254. .long 0xe0e0e000,0x0e0e000e
  1255. .long 0xffffff00,0x4e4e004e
  1256. .long 0x64646400,0x65650065
  1257. .long 0xd2d2d200,0xbdbd00bd
  1258. .long 0x10101000,0xb8b800b8
  1259. .long 0xc4c4c400,0x8f8f008f
  1260. .long 0x00000000,0xebeb00eb
  1261. .long 0x48484800,0xcece00ce
  1262. .long 0xa3a3a300,0x30300030
  1263. .long 0xf7f7f700,0x5f5f005f
  1264. .long 0x75757500,0xc5c500c5
  1265. .long 0xdbdbdb00,0x1a1a001a
  1266. .long 0x8a8a8a00,0xe1e100e1
  1267. .long 0x03030300,0xcaca00ca
  1268. .long 0xe6e6e600,0x47470047
  1269. .long 0xdadada00,0x3d3d003d
  1270. .long 0x09090900,0x01010001
  1271. .long 0x3f3f3f00,0xd6d600d6
  1272. .long 0xdddddd00,0x56560056
  1273. .long 0x94949400,0x4d4d004d
  1274. .long 0x87878700,0x0d0d000d
  1275. .long 0x5c5c5c00,0x66660066
  1276. .long 0x83838300,0xcccc00cc
  1277. .long 0x02020200,0x2d2d002d
  1278. .long 0xcdcdcd00,0x12120012
  1279. .long 0x4a4a4a00,0x20200020
  1280. .long 0x90909000,0xb1b100b1
  1281. .long 0x33333300,0x99990099
  1282. .long 0x73737300,0x4c4c004c
  1283. .long 0x67676700,0xc2c200c2
  1284. .long 0xf6f6f600,0x7e7e007e
  1285. .long 0xf3f3f300,0x05050005
  1286. .long 0x9d9d9d00,0xb7b700b7
  1287. .long 0x7f7f7f00,0x31310031
  1288. .long 0xbfbfbf00,0x17170017
  1289. .long 0xe2e2e200,0xd7d700d7
  1290. .long 0x52525200,0x58580058
  1291. .long 0x9b9b9b00,0x61610061
  1292. .long 0xd8d8d800,0x1b1b001b
  1293. .long 0x26262600,0x1c1c001c
  1294. .long 0xc8c8c800,0x0f0f000f
  1295. .long 0x37373700,0x16160016
  1296. .long 0xc6c6c600,0x18180018
  1297. .long 0x3b3b3b00,0x22220022
  1298. .long 0x81818100,0x44440044
  1299. .long 0x96969600,0xb2b200b2
  1300. .long 0x6f6f6f00,0xb5b500b5
  1301. .long 0x4b4b4b00,0x91910091
  1302. .long 0x13131300,0x08080008
  1303. .long 0xbebebe00,0xa8a800a8
  1304. .long 0x63636300,0xfcfc00fc
  1305. .long 0x2e2e2e00,0x50500050
  1306. .long 0xe9e9e900,0xd0d000d0
  1307. .long 0x79797900,0x7d7d007d
  1308. .long 0xa7a7a700,0x89890089
  1309. .long 0x8c8c8c00,0x97970097
  1310. .long 0x9f9f9f00,0x5b5b005b
  1311. .long 0x6e6e6e00,0x95950095
  1312. .long 0xbcbcbc00,0xffff00ff
  1313. .long 0x8e8e8e00,0xd2d200d2
  1314. .long 0x29292900,0xc4c400c4
  1315. .long 0xf5f5f500,0x48480048
  1316. .long 0xf9f9f900,0xf7f700f7
  1317. .long 0xb6b6b600,0xdbdb00db
  1318. .long 0x2f2f2f00,0x03030003
  1319. .long 0xfdfdfd00,0xdada00da
  1320. .long 0xb4b4b400,0x3f3f003f
  1321. .long 0x59595900,0x94940094
  1322. .long 0x78787800,0x5c5c005c
  1323. .long 0x98989800,0x02020002
  1324. .long 0x06060600,0x4a4a004a
  1325. .long 0x6a6a6a00,0x33330033
  1326. .long 0xe7e7e700,0x67670067
  1327. .long 0x46464600,0xf3f300f3
  1328. .long 0x71717100,0x7f7f007f
  1329. .long 0xbababa00,0xe2e200e2
  1330. .long 0xd4d4d400,0x9b9b009b
  1331. .long 0x25252500,0x26260026
  1332. .long 0xababab00,0x37370037
  1333. .long 0x42424200,0x3b3b003b
  1334. .long 0x88888800,0x96960096
  1335. .long 0xa2a2a200,0x4b4b004b
  1336. .long 0x8d8d8d00,0xbebe00be
  1337. .long 0xfafafa00,0x2e2e002e
  1338. .long 0x72727200,0x79790079
  1339. .long 0x07070700,0x8c8c008c
  1340. .long 0xb9b9b900,0x6e6e006e
  1341. .long 0x55555500,0x8e8e008e
  1342. .long 0xf8f8f800,0xf5f500f5
  1343. .long 0xeeeeee00,0xb6b600b6
  1344. .long 0xacacac00,0xfdfd00fd
  1345. .long 0x0a0a0a00,0x59590059
  1346. .long 0x36363600,0x98980098
  1347. .long 0x49494900,0x6a6a006a
  1348. .long 0x2a2a2a00,0x46460046
  1349. .long 0x68686800,0xbaba00ba
  1350. .long 0x3c3c3c00,0x25250025
  1351. .long 0x38383800,0x42420042
  1352. .long 0xf1f1f100,0xa2a200a2
  1353. .long 0xa4a4a400,0xfafa00fa
  1354. .long 0x40404000,0x07070007
  1355. .long 0x28282800,0x55550055
  1356. .long 0xd3d3d300,0xeeee00ee
  1357. .long 0x7b7b7b00,0x0a0a000a
  1358. .long 0xbbbbbb00,0x49490049
  1359. .long 0xc9c9c900,0x68680068
  1360. .long 0x43434300,0x38380038
  1361. .long 0xc1c1c100,0xa4a400a4
  1362. .long 0x15151500,0x28280028
  1363. .long 0xe3e3e300,0x7b7b007b
  1364. .long 0xadadad00,0xc9c900c9
  1365. .long 0xf4f4f400,0xc1c100c1
  1366. .long 0x77777700,0xe3e300e3
  1367. .long 0xc7c7c700,0xf4f400f4
  1368. .long 0x80808000,0xc7c700c7
  1369. .long 0x9e9e9e00,0x9e9e009e
  1370. .long 0x00e0e0e0,0x38003838
  1371. .long 0x00050505,0x41004141
  1372. .long 0x00585858,0x16001616
  1373. .long 0x00d9d9d9,0x76007676
  1374. .long 0x00676767,0xd900d9d9
  1375. .long 0x004e4e4e,0x93009393
  1376. .long 0x00818181,0x60006060
  1377. .long 0x00cbcbcb,0xf200f2f2
  1378. .long 0x00c9c9c9,0x72007272
  1379. .long 0x000b0b0b,0xc200c2c2
  1380. .long 0x00aeaeae,0xab00abab
  1381. .long 0x006a6a6a,0x9a009a9a
  1382. .long 0x00d5d5d5,0x75007575
  1383. .long 0x00181818,0x06000606
  1384. .long 0x005d5d5d,0x57005757
  1385. .long 0x00828282,0xa000a0a0
  1386. .long 0x00464646,0x91009191
  1387. .long 0x00dfdfdf,0xf700f7f7
  1388. .long 0x00d6d6d6,0xb500b5b5
  1389. .long 0x00272727,0xc900c9c9
  1390. .long 0x008a8a8a,0xa200a2a2
  1391. .long 0x00323232,0x8c008c8c
  1392. .long 0x004b4b4b,0xd200d2d2
  1393. .long 0x00424242,0x90009090
  1394. .long 0x00dbdbdb,0xf600f6f6
  1395. .long 0x001c1c1c,0x07000707
  1396. .long 0x009e9e9e,0xa700a7a7
  1397. .long 0x009c9c9c,0x27002727
  1398. .long 0x003a3a3a,0x8e008e8e
  1399. .long 0x00cacaca,0xb200b2b2
  1400. .long 0x00252525,0x49004949
  1401. .long 0x007b7b7b,0xde00dede
  1402. .long 0x000d0d0d,0x43004343
  1403. .long 0x00717171,0x5c005c5c
  1404. .long 0x005f5f5f,0xd700d7d7
  1405. .long 0x001f1f1f,0xc700c7c7
  1406. .long 0x00f8f8f8,0x3e003e3e
  1407. .long 0x00d7d7d7,0xf500f5f5
  1408. .long 0x003e3e3e,0x8f008f8f
  1409. .long 0x009d9d9d,0x67006767
  1410. .long 0x007c7c7c,0x1f001f1f
  1411. .long 0x00606060,0x18001818
  1412. .long 0x00b9b9b9,0x6e006e6e
  1413. .long 0x00bebebe,0xaf00afaf
  1414. .long 0x00bcbcbc,0x2f002f2f
  1415. .long 0x008b8b8b,0xe200e2e2
  1416. .long 0x00161616,0x85008585
  1417. .long 0x00343434,0x0d000d0d
  1418. .long 0x004d4d4d,0x53005353
  1419. .long 0x00c3c3c3,0xf000f0f0
  1420. .long 0x00727272,0x9c009c9c
  1421. .long 0x00959595,0x65006565
  1422. .long 0x00ababab,0xea00eaea
  1423. .long 0x008e8e8e,0xa300a3a3
  1424. .long 0x00bababa,0xae00aeae
  1425. .long 0x007a7a7a,0x9e009e9e
  1426. .long 0x00b3b3b3,0xec00ecec
  1427. .long 0x00020202,0x80008080
  1428. .long 0x00b4b4b4,0x2d002d2d
  1429. .long 0x00adadad,0x6b006b6b
  1430. .long 0x00a2a2a2,0xa800a8a8
  1431. .long 0x00acacac,0x2b002b2b
  1432. .long 0x00d8d8d8,0x36003636
  1433. .long 0x009a9a9a,0xa600a6a6
  1434. .long 0x00171717,0xc500c5c5
  1435. .long 0x001a1a1a,0x86008686
  1436. .long 0x00353535,0x4d004d4d
  1437. .long 0x00cccccc,0x33003333
  1438. .long 0x00f7f7f7,0xfd00fdfd
  1439. .long 0x00999999,0x66006666
  1440. .long 0x00616161,0x58005858
  1441. .long 0x005a5a5a,0x96009696
  1442. .long 0x00e8e8e8,0x3a003a3a
  1443. .long 0x00242424,0x09000909
  1444. .long 0x00565656,0x95009595
  1445. .long 0x00404040,0x10001010
  1446. .long 0x00e1e1e1,0x78007878
  1447. .long 0x00636363,0xd800d8d8
  1448. .long 0x00090909,0x42004242
  1449. .long 0x00333333,0xcc00cccc
  1450. .long 0x00bfbfbf,0xef00efef
  1451. .long 0x00989898,0x26002626
  1452. .long 0x00979797,0xe500e5e5
  1453. .long 0x00858585,0x61006161
  1454. .long 0x00686868,0x1a001a1a
  1455. .long 0x00fcfcfc,0x3f003f3f
  1456. .long 0x00ececec,0x3b003b3b
  1457. .long 0x000a0a0a,0x82008282
  1458. .long 0x00dadada,0xb600b6b6
  1459. .long 0x006f6f6f,0xdb00dbdb
  1460. .long 0x00535353,0xd400d4d4
  1461. .long 0x00626262,0x98009898
  1462. .long 0x00a3a3a3,0xe800e8e8
  1463. .long 0x002e2e2e,0x8b008b8b
  1464. .long 0x00080808,0x02000202
  1465. .long 0x00afafaf,0xeb00ebeb
  1466. .long 0x00282828,0x0a000a0a
  1467. .long 0x00b0b0b0,0x2c002c2c
  1468. .long 0x00747474,0x1d001d1d
  1469. .long 0x00c2c2c2,0xb000b0b0
  1470. .long 0x00bdbdbd,0x6f006f6f
  1471. .long 0x00363636,0x8d008d8d
  1472. .long 0x00222222,0x88008888
  1473. .long 0x00383838,0x0e000e0e
  1474. .long 0x00646464,0x19001919
  1475. .long 0x001e1e1e,0x87008787
  1476. .long 0x00393939,0x4e004e4e
  1477. .long 0x002c2c2c,0x0b000b0b
  1478. .long 0x00a6a6a6,0xa900a9a9
  1479. .long 0x00303030,0x0c000c0c
  1480. .long 0x00e5e5e5,0x79007979
  1481. .long 0x00444444,0x11001111
  1482. .long 0x00fdfdfd,0x7f007f7f
  1483. .long 0x00888888,0x22002222
  1484. .long 0x009f9f9f,0xe700e7e7
  1485. .long 0x00656565,0x59005959
  1486. .long 0x00878787,0xe100e1e1
  1487. .long 0x006b6b6b,0xda00dada
  1488. .long 0x00f4f4f4,0x3d003d3d
  1489. .long 0x00232323,0xc800c8c8
  1490. .long 0x00484848,0x12001212
  1491. .long 0x00101010,0x04000404
  1492. .long 0x00d1d1d1,0x74007474
  1493. .long 0x00515151,0x54005454
  1494. .long 0x00c0c0c0,0x30003030
  1495. .long 0x00f9f9f9,0x7e007e7e
  1496. .long 0x00d2d2d2,0xb400b4b4
  1497. .long 0x00a0a0a0,0x28002828
  1498. .long 0x00555555,0x55005555
  1499. .long 0x00a1a1a1,0x68006868
  1500. .long 0x00414141,0x50005050
  1501. .long 0x00fafafa,0xbe00bebe
  1502. .long 0x00434343,0xd000d0d0
  1503. .long 0x00131313,0xc400c4c4
  1504. .long 0x00c4c4c4,0x31003131
  1505. .long 0x002f2f2f,0xcb00cbcb
  1506. .long 0x00a8a8a8,0x2a002a2a
  1507. .long 0x00b6b6b6,0xad00adad
  1508. .long 0x003c3c3c,0x0f000f0f
  1509. .long 0x002b2b2b,0xca00caca
  1510. .long 0x00c1c1c1,0x70007070
  1511. .long 0x00ffffff,0xff00ffff
  1512. .long 0x00c8c8c8,0x32003232
  1513. .long 0x00a5a5a5,0x69006969
  1514. .long 0x00202020,0x08000808
  1515. .long 0x00898989,0x62006262
  1516. .long 0x00000000,0x00000000
  1517. .long 0x00909090,0x24002424
  1518. .long 0x00474747,0xd100d1d1
  1519. .long 0x00efefef,0xfb00fbfb
  1520. .long 0x00eaeaea,0xba00baba
  1521. .long 0x00b7b7b7,0xed00eded
  1522. .long 0x00151515,0x45004545
  1523. .long 0x00060606,0x81008181
  1524. .long 0x00cdcdcd,0x73007373
  1525. .long 0x00b5b5b5,0x6d006d6d
  1526. .long 0x00121212,0x84008484
  1527. .long 0x007e7e7e,0x9f009f9f
  1528. .long 0x00bbbbbb,0xee00eeee
  1529. .long 0x00292929,0x4a004a4a
  1530. .long 0x000f0f0f,0xc300c3c3
  1531. .long 0x00b8b8b8,0x2e002e2e
  1532. .long 0x00070707,0xc100c1c1
  1533. .long 0x00040404,0x01000101
  1534. .long 0x009b9b9b,0xe600e6e6
  1535. .long 0x00949494,0x25002525
  1536. .long 0x00212121,0x48004848
  1537. .long 0x00666666,0x99009999
  1538. .long 0x00e6e6e6,0xb900b9b9
  1539. .long 0x00cecece,0xb300b3b3
  1540. .long 0x00ededed,0x7b007b7b
  1541. .long 0x00e7e7e7,0xf900f9f9
  1542. .long 0x003b3b3b,0xce00cece
  1543. .long 0x00fefefe,0xbf00bfbf
  1544. .long 0x007f7f7f,0xdf00dfdf
  1545. .long 0x00c5c5c5,0x71007171
  1546. .long 0x00a4a4a4,0x29002929
  1547. .long 0x00373737,0xcd00cdcd
  1548. .long 0x00b1b1b1,0x6c006c6c
  1549. .long 0x004c4c4c,0x13001313
  1550. .long 0x00919191,0x64006464
  1551. .long 0x006e6e6e,0x9b009b9b
  1552. .long 0x008d8d8d,0x63006363
  1553. .long 0x00767676,0x9d009d9d
  1554. .long 0x00030303,0xc000c0c0
  1555. .long 0x002d2d2d,0x4b004b4b
  1556. .long 0x00dedede,0xb700b7b7
  1557. .long 0x00969696,0xa500a5a5
  1558. .long 0x00262626,0x89008989
  1559. .long 0x007d7d7d,0x5f005f5f
  1560. .long 0x00c6c6c6,0xb100b1b1
  1561. .long 0x005c5c5c,0x17001717
  1562. .long 0x00d3d3d3,0xf400f4f4
  1563. .long 0x00f2f2f2,0xbc00bcbc
  1564. .long 0x004f4f4f,0xd300d3d3
  1565. .long 0x00191919,0x46004646
  1566. .long 0x003f3f3f,0xcf00cfcf
  1567. .long 0x00dcdcdc,0x37003737
  1568. .long 0x00797979,0x5e005e5e
  1569. .long 0x001d1d1d,0x47004747
  1570. .long 0x00525252,0x94009494
  1571. .long 0x00ebebeb,0xfa00fafa
  1572. .long 0x00f3f3f3,0xfc00fcfc
  1573. .long 0x006d6d6d,0x5b005b5b
  1574. .long 0x005e5e5e,0x97009797
  1575. .long 0x00fbfbfb,0xfe00fefe
  1576. .long 0x00696969,0x5a005a5a
  1577. .long 0x00b2b2b2,0xac00acac
  1578. .long 0x00f0f0f0,0x3c003c3c
  1579. .long 0x00313131,0x4c004c4c
  1580. .long 0x000c0c0c,0x03000303
  1581. .long 0x00d4d4d4,0x35003535
  1582. .long 0x00cfcfcf,0xf300f3f3
  1583. .long 0x008c8c8c,0x23002323
  1584. .long 0x00e2e2e2,0xb800b8b8
  1585. .long 0x00757575,0x5d005d5d
  1586. .long 0x00a9a9a9,0x6a006a6a
  1587. .long 0x004a4a4a,0x92009292
  1588. .long 0x00575757,0xd500d5d5
  1589. .long 0x00848484,0x21002121
  1590. .long 0x00111111,0x44004444
  1591. .long 0x00454545,0x51005151
  1592. .long 0x001b1b1b,0xc600c6c6
  1593. .long 0x00f5f5f5,0x7d007d7d
  1594. .long 0x00e4e4e4,0x39003939
  1595. .long 0x000e0e0e,0x83008383
  1596. .long 0x00737373,0xdc00dcdc
  1597. .long 0x00aaaaaa,0xaa00aaaa
  1598. .long 0x00f1f1f1,0x7c007c7c
  1599. .long 0x00dddddd,0x77007777
  1600. .long 0x00595959,0x56005656
  1601. .long 0x00141414,0x05000505
  1602. .long 0x006c6c6c,0x1b001b1b
  1603. .long 0x00929292,0xa400a4a4
  1604. .long 0x00545454,0x15001515
  1605. .long 0x00d0d0d0,0x34003434
  1606. .long 0x00787878,0x1e001e1e
  1607. .long 0x00707070,0x1c001c1c
  1608. .long 0x00e3e3e3,0xf800f8f8
  1609. .long 0x00494949,0x52005252
  1610. .long 0x00808080,0x20002020
  1611. .long 0x00505050,0x14001414
  1612. .long 0x00a7a7a7,0xe900e9e9
  1613. .long 0x00f6f6f6,0xbd00bdbd
  1614. .long 0x00777777,0xdd00dddd
  1615. .long 0x00939393,0xe400e4e4
  1616. .long 0x00868686,0xa100a1a1
  1617. .long 0x00838383,0xe000e0e0
  1618. .long 0x002a2a2a,0x8a008a8a
  1619. .long 0x00c7c7c7,0xf100f1f1
  1620. .long 0x005b5b5b,0xd600d6d6
  1621. .long 0x00e9e9e9,0x7a007a7a
  1622. .long 0x00eeeeee,0xbb00bbbb
  1623. .long 0x008f8f8f,0xe300e3e3
  1624. .long 0x00010101,0x40004040
  1625. .long 0x003d3d3d,0x4f004f4f
  1626. .globl Camellia_cbc_encrypt
  1627. .type Camellia_cbc_encrypt,@function
  1628. .align 16
  1629. Camellia_cbc_encrypt:
  1630. .cfi_startproc
  1631. cmpq $0,%rdx
  1632. je .Lcbc_abort
  1633. pushq %rbx
  1634. .cfi_adjust_cfa_offset 8
  1635. .cfi_offset %rbx,-16
  1636. pushq %rbp
  1637. .cfi_adjust_cfa_offset 8
  1638. .cfi_offset %rbp,-24
  1639. pushq %r12
  1640. .cfi_adjust_cfa_offset 8
  1641. .cfi_offset %r12,-32
  1642. pushq %r13
  1643. .cfi_adjust_cfa_offset 8
  1644. .cfi_offset %r13,-40
  1645. pushq %r14
  1646. .cfi_adjust_cfa_offset 8
  1647. .cfi_offset %r14,-48
  1648. pushq %r15
  1649. .cfi_adjust_cfa_offset 8
  1650. .cfi_offset %r15,-56
  1651. .Lcbc_prologue:
  1652. movq %rsp,%rbp
  1653. .cfi_def_cfa_register %rbp
  1654. subq $64,%rsp
  1655. andq $-64,%rsp
  1656. leaq -64-63(%rcx),%r10
  1657. subq %rsp,%r10
  1658. negq %r10
  1659. andq $0x3C0,%r10
  1660. subq %r10,%rsp
  1661. movq %rdi,%r12
  1662. movq %rsi,%r13
  1663. movq %r8,%rbx
  1664. movq %rcx,%r14
  1665. movl 272(%rcx),%r15d
  1666. movq %r8,40(%rsp)
  1667. movq %rbp,48(%rsp)
  1668. .cfi_escape 0x0f,0x05,0x77,0x30,0x06,0x23,0x38
  1669. .Lcbc_body:
  1670. leaq .LCamellia_SBOX(%rip),%rbp
  1671. movl $32,%ecx
  1672. .align 4
  1673. .Lcbc_prefetch_sbox:
  1674. movq 0(%rbp),%rax
  1675. movq 32(%rbp),%rsi
  1676. movq 64(%rbp),%rdi
  1677. movq 96(%rbp),%r11
  1678. leaq 128(%rbp),%rbp
  1679. loop .Lcbc_prefetch_sbox
  1680. subq $4096,%rbp
  1681. shlq $6,%r15
  1682. movq %rdx,%rcx
  1683. leaq (%r14,%r15,1),%r15
  1684. cmpl $0,%r9d
  1685. je .LCBC_DECRYPT
  1686. andq $-16,%rdx
  1687. andq $15,%rcx
  1688. leaq (%r12,%rdx,1),%rdx
  1689. movq %r14,0(%rsp)
  1690. movq %rdx,8(%rsp)
  1691. movq %rcx,16(%rsp)
  1692. cmpq %r12,%rdx
  1693. movl 0(%rbx),%r8d
  1694. movl 4(%rbx),%r9d
  1695. movl 8(%rbx),%r10d
  1696. movl 12(%rbx),%r11d
  1697. je .Lcbc_enc_tail
  1698. jmp .Lcbc_eloop
  1699. .align 16
  1700. .Lcbc_eloop:
  1701. xorl 0(%r12),%r8d
  1702. xorl 4(%r12),%r9d
  1703. xorl 8(%r12),%r10d
  1704. bswapl %r8d
  1705. xorl 12(%r12),%r11d
  1706. bswapl %r9d
  1707. bswapl %r10d
  1708. bswapl %r11d
  1709. call _x86_64_Camellia_encrypt
  1710. movq 0(%rsp),%r14
  1711. bswapl %r8d
  1712. movq 8(%rsp),%rdx
  1713. bswapl %r9d
  1714. movq 16(%rsp),%rcx
  1715. bswapl %r10d
  1716. movl %r8d,0(%r13)
  1717. bswapl %r11d
  1718. movl %r9d,4(%r13)
  1719. movl %r10d,8(%r13)
  1720. leaq 16(%r12),%r12
  1721. movl %r11d,12(%r13)
  1722. cmpq %rdx,%r12
  1723. leaq 16(%r13),%r13
  1724. jne .Lcbc_eloop
  1725. cmpq $0,%rcx
  1726. jne .Lcbc_enc_tail
  1727. movq 40(%rsp),%r13
  1728. movl %r8d,0(%r13)
  1729. movl %r9d,4(%r13)
  1730. movl %r10d,8(%r13)
  1731. movl %r11d,12(%r13)
  1732. jmp .Lcbc_done
  1733. .align 16
  1734. .Lcbc_enc_tail:
  1735. xorq %rax,%rax
  1736. movq %rax,0+24(%rsp)
  1737. movq %rax,8+24(%rsp)
  1738. movq %rax,16(%rsp)
  1739. .Lcbc_enc_pushf:
  1740. pushfq
  1741. cld
  1742. movq %r12,%rsi
  1743. leaq 8+24(%rsp),%rdi
  1744. .long 0x9066A4F3
  1745. popfq
  1746. .Lcbc_enc_popf:
  1747. leaq 24(%rsp),%r12
  1748. leaq 16+24(%rsp),%rax
  1749. movq %rax,8(%rsp)
  1750. jmp .Lcbc_eloop
  1751. .align 16
  1752. .LCBC_DECRYPT:
  1753. xchgq %r14,%r15
  1754. addq $15,%rdx
  1755. andq $15,%rcx
  1756. andq $-16,%rdx
  1757. movq %r14,0(%rsp)
  1758. leaq (%r12,%rdx,1),%rdx
  1759. movq %rdx,8(%rsp)
  1760. movq %rcx,16(%rsp)
  1761. movq (%rbx),%rax
  1762. movq 8(%rbx),%rbx
  1763. jmp .Lcbc_dloop
  1764. .align 16
  1765. .Lcbc_dloop:
  1766. movl 0(%r12),%r8d
  1767. movl 4(%r12),%r9d
  1768. movl 8(%r12),%r10d
  1769. bswapl %r8d
  1770. movl 12(%r12),%r11d
  1771. bswapl %r9d
  1772. movq %rax,0+24(%rsp)
  1773. bswapl %r10d
  1774. movq %rbx,8+24(%rsp)
  1775. bswapl %r11d
  1776. call _x86_64_Camellia_decrypt
  1777. movq 0(%rsp),%r14
  1778. movq 8(%rsp),%rdx
  1779. movq 16(%rsp),%rcx
  1780. bswapl %r8d
  1781. movq (%r12),%rax
  1782. bswapl %r9d
  1783. movq 8(%r12),%rbx
  1784. bswapl %r10d
  1785. xorl 0+24(%rsp),%r8d
  1786. bswapl %r11d
  1787. xorl 4+24(%rsp),%r9d
  1788. xorl 8+24(%rsp),%r10d
  1789. leaq 16(%r12),%r12
  1790. xorl 12+24(%rsp),%r11d
  1791. cmpq %rdx,%r12
  1792. je .Lcbc_ddone
  1793. movl %r8d,0(%r13)
  1794. movl %r9d,4(%r13)
  1795. movl %r10d,8(%r13)
  1796. movl %r11d,12(%r13)
  1797. leaq 16(%r13),%r13
  1798. jmp .Lcbc_dloop
  1799. .align 16
  1800. .Lcbc_ddone:
  1801. movq 40(%rsp),%rdx
  1802. cmpq $0,%rcx
  1803. jne .Lcbc_dec_tail
  1804. movl %r8d,0(%r13)
  1805. movl %r9d,4(%r13)
  1806. movl %r10d,8(%r13)
  1807. movl %r11d,12(%r13)
  1808. movq %rax,(%rdx)
  1809. movq %rbx,8(%rdx)
  1810. jmp .Lcbc_done
  1811. .align 16
  1812. .Lcbc_dec_tail:
  1813. movl %r8d,0+24(%rsp)
  1814. movl %r9d,4+24(%rsp)
  1815. movl %r10d,8+24(%rsp)
  1816. movl %r11d,12+24(%rsp)
  1817. .Lcbc_dec_pushf:
  1818. pushfq
  1819. cld
  1820. leaq 8+24(%rsp),%rsi
  1821. leaq (%r13),%rdi
  1822. .long 0x9066A4F3
  1823. popfq
  1824. .Lcbc_dec_popf:
  1825. movq %rax,(%rdx)
  1826. movq %rbx,8(%rdx)
  1827. jmp .Lcbc_done
  1828. .align 16
  1829. .Lcbc_done:
  1830. movq 48(%rsp),%rcx
  1831. .cfi_def_cfa %rcx,56
  1832. movq 0(%rcx),%r15
  1833. .cfi_restore %r15
  1834. movq 8(%rcx),%r14
  1835. .cfi_restore %r14
  1836. movq 16(%rcx),%r13
  1837. .cfi_restore %r13
  1838. movq 24(%rcx),%r12
  1839. .cfi_restore %r12
  1840. movq 32(%rcx),%rbp
  1841. .cfi_restore %rbp
  1842. movq 40(%rcx),%rbx
  1843. .cfi_restore %rbx
  1844. leaq 48(%rcx),%rsp
  1845. .cfi_def_cfa %rsp,8
  1846. .Lcbc_abort:
  1847. .byte 0xf3,0xc3
  1848. .cfi_endproc
  1849. .size Camellia_cbc_encrypt,.-Camellia_cbc_encrypt
  1850. .byte 67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54,95,54,52,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0