Guest User

encrypt decompiled /w Hex-Rays

a guest
Feb 8th, 2023
379
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 101.41 KB | None | 0 0
  1. /* This file was generated by the Hex-Rays decompiler version 8.2.0.221215.
  2. Copyright (c) 2007-2021 Hex-Rays <[email protected]>
  3.  
  4. Detected compiler: GNU C++
  5. */
  6.  
  7. #include <defs.h>
  8.  
  9.  
  10. //-------------------------------------------------------------------------
  11. // Function declarations
  12.  
  13. void (*init_proc())(void);
  14. __int64 __fastcall sub_400968(); // weak
  15. // int printf(const char *format, ...);
  16. // void *memset(void *s, int c, size_t n);
  17. // int close(int fd);
  18. // int puts(const char *s);
  19. // void __noreturn exit(int status);
  20. // int putchar(int c);
  21. // ssize_t read(int fd, void *buf, size_t nbytes);
  22. // void *malloc(size_t size);
  23. // int __fastcall __libc_start_main(int (__fastcall *main)(int, char **, char **), int argc, char **ubp_av, void (*init)(void), void (*fini)(void), void (*rtld_fini)(void), void *stack_end);
  24. // void free(void *ptr);
  25. // int sprintf(char *s, const char *format, ...);
  26. // __off_t lseek(int fd, __off_t offset, int whence);
  27. // int atoi(const char *nptr);
  28. // void *memcpy(void *dest, const void *src, size_t n);
  29. // int *__errno_location(void);
  30. // void *calloc(size_t nmemb, size_t size);
  31. // void *dlopen(const char *file, int mode);
  32. // void *dlsym(void *handle, const char *name);
  33. // int fprintf(FILE *stream, const char *format, ...);
  34. // ssize_t write(int fd, const void *buf, size_t n);
  35. // int open(const char *file, int oflag, ...);
  36. void __fastcall __noreturn start(__int64 a1, __int64 a2, void (*a3)(void));
  37. __int64 (**call_gmon_start())(void);
  38. __int64 *_do_global_dtors_aux();
  39. void frame_dummy();
  40. __int64 init_libssl();
  41. int __fastcall print_error(const char *a1, int a2);
  42. unsigned __int64 __fastcall print_error_ex(const char *a1, int a2);
  43. __int64 __fastcall open_read(const char *a1);
  44. __int64 __fastcall open_write(const char *a1);
  45. __int64 __fastcall open_read_write(const char *a1);
  46. __int64 __fastcall get_file_curr_size(int a1, __off_t *a2);
  47. __int64 __fastcall get_pk_data(const char *a1, void **a2);
  48. __int64 __fastcall create_rsa_obj(__int64 a1, _QWORD *a2);
  49. __int64 __fastcall gen_stream_key(__int64 a1, unsigned int a2);
  50. __int64 __fastcall rsa_encrypt(__int64 a1, __int64 a2, int a3, void **a4, _DWORD *a5);
  51. __int64 __fastcall dump_data(const char *a1, const void *a2, int a3);
  52. __int64 __fastcall encrypt_simple(int a1, __int64 a2, __int64 a3, const void *a4, int a5, unsigned __int64 a6);
  53. __int64 __fastcall encrypt_file(const char *a1, __int64 a2, __int64 a3, __int64 a4, unsigned __int64 a5);
  54. int __cdecl main(int argc, const char **argv, const char **envp);
  55. unsigned __int64 __fastcall sosemanuk_schedule(int *a1, const void *a2, size_t a3);
  56. __int64 __fastcall decode32le(unsigned __int16 *a1);
  57. unsigned __int64 __fastcall sosemanuk_init(int *a1, _DWORD *a2, const void *a3, size_t a4);
  58. __int64 __fastcall sosemanuk_internal(unsigned int *a1);
  59. __int64 __fastcall encode32le(__int64 a1, unsigned int a2);
  60. void *__fastcall sosemanuk_prng(unsigned int *a1, char *a2, unsigned __int64 a3);
  61. _BYTE *__fastcall sosemanuk_encrypt(__int64 a1, _BYTE *a2, _BYTE *a3, unsigned __int64 a4);
  62. _BYTE *__fastcall xorbuf(_BYTE *a1, _BYTE *a2, _BYTE *a3, __int64 a4);
  63. void _libc_csu_fini(void); // idb
  64. void _libc_csu_init(void); // idb
  65. void (*_do_global_ctors_aux())(void);
  66. __int64 *term_proc();
  67. // __int64 _gmon_start__(void); weak
  68.  
  69. //-------------------------------------------------------------------------
  70. // Data declarations
  71.  
  72. __int64 _CTOR_LIST__ = -1LL; // weak
  73. __int64 (*qword_6091F0)(void) = NULL; // weak
  74. __int64 *p_6181 = &_DTOR_END__; // weak
  75. int mul_a[256] =
  76. {
  77. 0,
  78. -509620461,
  79. 1805072166,
  80. -1979123659,
  81. -695767476,
  82. 924361055,
  83. -1123002006,
  84. 1552914041,
  85. 94887064,
  86. -466087029,
  87. 1848699838,
  88. -1884347219,
  89. -752831788,
  90. 851410375,
  91. -1195932174,
  92. 1495812833,
  93. 182915481,
  94. -344400246,
  95. 1634739903,
  96. -2131760724,
  97. -597655595,
  98. 1040167110,
  99. -1208530701,
  100. 1449691104,
  101. 255905025,
  102. -287374830,
  103. 1691875879,
  104. -2058865356,
  105. -641227955,
  106. 945319006,
  107. -1303341973,
  108. 1406098296,
  109. 342303387,
  110. -168235640,
  111. 2146440637,
  112. -1636836690,
  113. -1025487657,
  114. 595559364,
  115. -1451787279,
  116. 1223210210,
  117. 297860611,
  118. -262196976,
  119. 2052573477,
  120. -1681390026,
  121. -951611313,
  122. 651714396,
  123. -1395611799,
  124. 1297049722,
  125. 511718146,
  126. -14681071,
  127. 1964442660,
  128. -1802974409,
  129. -939041458,
  130. 697864797,
  131. -1550816664,
  132. 1108321659,
  133. 455602074,
  134. -88596343,
  135. 1890638012,
  136. -1859184721,
  137. -845119018,
  138. 742346437,
  139. -1506298128,
  140. 1202223587,
  141. 684606623,
  142. -917402740,
  143. 1129935801,
  144. -1564033878,
  145. -28759341,
  146. 534177216,
  147. -1780605451,
  148. 1950470886,
  149. 761894919,
  150. -856271084,
  151. 1191096097,
  152. -1486790606,
  153. -68225461,
  154. 443627864,
  155. -1871068819,
  156. 1910902398,
  157. 573134086,
  158. -1011443179,
  159. 1237213728,
  160. -1474187981,
  161. -189908150,
  162. 355595353,
  163. -1623651220,
  164. 2124858239,
  165. 663652766,
  166. -971946355,
  167. 1276755640,
  168. -1383698005,
  169. -251009070,
  170. 278276289,
  171. -1700867852,
  172. 2063671271,
  173. 1017734660,
  174. -583620329,
  175. 1463701794,
  176. -1230922191,
  177. -366081976,
  178. 196200283,
  179. -2118566034,
  180. 1613164669,
  181. 957266588,
  182. -661555825,
  183. 1385795002,
  184. -1291435351,
  185. -276179760,
  186. 236329923,
  187. -2078350346,
  188. 1702964453,
  189. 911112093,
  190. -674121586,
  191. 1574518971,
  192. -1136226392,
  193. -523691567,
  194. 22468290,
  195. -1956761865,
  196. 1791091172,
  197. 870951685,
  198. -763993066,
  199. 1484692515,
  200. -1176415440,
  201. -445725367,
  202. 82905690,
  203. -1896222097,
  204. 1868971388,
  205. 1345685655,
  206. -1314240636,
  207. 1000521649,
  208. -633507678,
  209. -2035095845,
  210. 1731013064,
  211. -316288515,
  212. 213524206,
  213. 1435653135,
  214. -1274176740,
  215. 1040540457,
  216. -543511494,
  217. -2095760829,
  218. 1653273936,
  219. -394130075,
  220. 152945270,
  221. 1523751182,
  222. -1152559587,
  223. 826650152,
  224. -790994629,
  225. -1940523198,
  226. 1841969233,
  227. -406667164,
  228. 106762103,
  229. 1601521046,
  230. -1091925371,
  231. 887255728,
  232. -713179741,
  233. -1980617766,
  234. 1752032457,
  235. -496689924,
  236. 66769903,
  237. 1146268172,
  238. -1513265889,
  239. 801479978,
  240. -832941511,
  241. -1831484352,
  242. 1934232403,
  243. -113052826,
  244. 417152117,
  245. 1106605716,
  246. -1603618425,
  247. 711082418,
  248. -872575327,
  249. -1754130216,
  250. 1995298763,
  251. -52088834,
  252. 494592237,
  253. 1320532885,
  254. -1356172154,
  255. 623021235,
  256. -994229344,
  257. -1741498919,
  258. 2041387722,
  259. -207232257,
  260. 305802732,
  261. 1259497229,
  262. -1433556962,
  263. 545607723,
  264. -1055219912,
  265. -1651177151,
  266. 2081080914,
  267. -167625113,
  268. 396226932,
  269. 2029767688,
  270. -1721498853,
  271. 325909294,
  272. -218942403,
  273. -1367563708,
  274. 1340304727,
  275. -974416542,
  276. 611605105,
  277. 2103185552,
  278. -1664884861,
  279. 382412726,
  280. -145430363,
  281. -1411678500,
  282. 1246015951,
  283. -1068742150,
  284. 567510761,
  285. 1914494353,
  286. -1820126590,
  287. 428599991,
  288. -132897372,
  289. -1533299747,
  290. 1157921998,
  291. -821263109,
  292. 781405160,
  293. 2008744201,
  294. -1775972838,
  295. 472659503,
  296. -38536900,
  297. -1589874875,
  298. 1084465238,
  299. -894740381,
  300. 724866928,
  301. 1822224019,
  302. -1929174656,
  303. 118217141,
  304. -426502490,
  305. -1172602657,
  306. 1535397836,
  307. -779307015,
  308. 806582506,
  309. 1765487115,
  310. -2002453224,
  311. 44827949,
  312. -483145154,
  313. -1078174649,
  314. 1579389780,
  315. -735351967,
  316. 901031026,
  317. 1719402250,
  318. -2015088615,
  319. 233621548,
  320. -328005825,
  321. -1325625018,
  322. 1365466709,
  323. -613702048,
  324. 989096307,
  325. 1675371410,
  326. -2109477759,
  327. 139138228,
  328. -371926105,
  329. -1252307490,
  330. 1422164685,
  331. -557024520,
  332. 1062450667
  333. }; // weak
  334. int mul_ia[256] =
  335. {
  336. 0,
  337. 403652813,
  338. 807305267,
  339. 672252158,
  340. 1614588262,
  341. 2016668075,
  342. 1344416085,
  343. 1210935704,
  344. -1065813044,
  345. -663241983,
  346. -261719041,
  347. -395756750,
  348. -1606135126,
  349. -1203039641,
  350. -1873096039,
  351. -2007657900,
  352. 703618865,
  353. 838803452,
  354. 435085058,
  355. 31563727,
  356. 1238169175,
  357. 1371780762,
  358. 2043836004,
  359. 1641887401,
  360. -376920835,
  361. -242752464,
  362. -644471602,
  363. -1046911997,
  364. -1984688741,
  365. -1849995946,
  366. -1180004952,
  367. -1582969499,
  368. 1380564578,
  369. 1246166703,
  370. 1649884753,
  371. 2052619932,
  372. 846534404,
  373. 712660937,
  374. 40605495,
  375. 442816506,
  376. -1842264658,
  377. -1975646877,
  378. -1573927523,
  379. -1172273840,
  380. -233968440,
  381. -368923643,
  382. -1038914309,
  383. -635687882,
  384. 2075779411,
  385. 1672913310,
  386. 1269260640,
  387. 1403527597,
  388. 461719605,
  389. 59377912,
  390. 731629574,
  391. 865372363,
  392. -1144972641,
  393. -1546757550,
  394. -1948280148,
  395. -1815029151,
  396. -604130311,
  397. -1007488204,
  398. -337431606,
  399. -202607865,
  400. -1533880892,
  401. -1130523383,
  402. -1802742281,
  403. -1937566406,
  404. -995197790,
  405. -593413009,
  406. -189727599,
  407. -322978724,
  408. 1693068808,
  409. 2095410885,
  410. 1425321531,
  411. 1291579126,
  412. 81168238,
  413. 484034467,
  414. 885524317,
  415. 751257488,
  416. -1922921739,
  417. -1787966920,
  418. -1115944250,
  419. -1519171061,
  420. -312597613,
  421. -179215522,
  422. -582966368,
  423. -984620179,
  424. 1293578553,
  425. 1427452404,
  426. 2097475850,
  427. 1695265223,
  428. 757520479,
  429. 891918482,
  430. 490231916,
  431. 87496865,
  432. -153392218,
  433. -288085141,
  434. -960107627,
  435. -557143208,
  436. -1763196224,
  437. -1897364979,
  438. -1493613837,
  439. -1091173826,
  440. 916689002,
  441. 783077543,
  442. 113053785,
  443. 515002516,
  444. 1453275404,
  445. 1318091201,
  446. 1719777599,
  447. 2123299314,
  448. -550816617,
  449. -953912230,
  450. -281693020,
  451. -147131287,
  452. -1088971279,
  453. -1491542724,
  454. -1895227966,
  455. -1761190641,
  456. 525586267,
  457. 123506582,
  458. 793595752,
  459. 927076261,
  460. 2138007101,
  461. 1734354672,
  462. 1332864526,
  463. 1467918019,
  464. -510852319,
  465. -108903444,
  466. -778861806,
  467. -912473121,
  468. -2119062969,
  469. -1715541366,
  470. -1313920396,
  471. -1449104711,
  472. 569768173,
  473. 972732448,
  474. 300644574,
  475. 165951507,
  476. 1103712651,
  477. 1506152774,
  478. 1909969336,
  479. 1775800693,
  480. -931308528,
  481. -797827875,
  482. -127673309,
  483. -529752850,
  484. -1472072330,
  485. -1337018949,
  486. -1738574523,
  487. -2142227064,
  488. 134588380,
  489. 269149969,
  490. 941303791,
  491. 538208034,
  492. 1748569786,
  493. 1882607223,
  494. 1478987401,
  495. 1076416068,
  496. -1278952125,
  497. -1412694642,
  498. -2082849424,
  499. -1680507459,
  500. -738716635,
  501. -872983320,
  502. -471428074,
  503. -68561701,
  504. 1941718671,
  505. 1806894658,
  506. 1134741180,
  507. 1538098801,
  508. 327217129,
  509. 193965860,
  510. 597585882,
  511. 999370519,
  512. -1707810190,
  513. -2110020929,
  514. -1440062911,
  515. -1306189172,
  516. -100119788,
  517. -502854695,
  518. -904475865,
  519. -770077718,
  520. 1514936766,
  521. 1111710067,
  522. 1783798157,
  523. 1918753088,
  524. 980463832,
  525. 578809877,
  526. 174993643,
  527. 308375590,
  528. 1159714533,
  529. 1561368104,
  530. 1963022038,
  531. 1829639707,
  532. 623083395,
  533. 1026309966,
  534. 356384688,
  535. 221429629,
  536. -2056835799,
  537. -1654100508,
  538. -1250317030,
  539. -1384714793,
  540. -446987185,
  541. -44776318,
  542. -716897156,
  543. -850770767,
  544. 1827637716,
  545. 1960888601,
  546. 1559300583,
  547. 1157515562,
  548. 215163058,
  549. 349986943,
  550. 1020108929,
  551. 616751180,
  552. -1399361000,
  553. -1265093931,
  554. -1668681173,
  555. -2071547162,
  556. -861152386,
  557. -727409741,
  558. -55223475,
  559. -457565312,
  560. 391538823,
  561. 257501258,
  562. 659089588,
  563. 1061660793,
  564. 2003485153,
  565. 1868923180,
  566. 1198801362,
  567. 1601896735,
  568. -684813493,
  569. -819866746,
  570. -416279688,
  571. -12627019,
  572. -1223542227,
  573. -1357022496,
  574. -2029209058,
  575. -1627129133,
  576. 1051080630,
  577. 648640379,
  578. 246986629,
  579. 381155144,
  580. 1587191504,
  581. 1184226845,
  582. 1854152419,
  583. 1988845102,
  584. -18953094,
  585. -422474569,
  586. -826258359,
  587. -691073916,
  588. -1629330148,
  589. -2031278639,
  590. -1359157969,
  591. -1225546270
  592. }; // weak
  593. FILE *stderr; // idb
  594. char completed_6183; // weak
  595. void *plibssl; // idb
  596. __int64 (__fastcall *lRAND_pseudo_bytes)(_QWORD, _QWORD); // weak
  597. __int64 (__fastcall *lRSA_size)(_QWORD); // weak
  598. __int64 lPEM_read_bio_RSAPrivateKey; // weak
  599. __int64 (__fastcall *lRSA_public_encrypt)(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD); // weak
  600. __int64 (__fastcall *lERR_error_string)(_QWORD, _QWORD); // weak
  601. __int64 lRSA_private_decrypt; // weak
  602. __int64 (*lERR_get_error)(void); // weak
  603. __int64 (__fastcall *lPEM_read_bio_RSA_PUBKEY)(_QWORD, _QWORD, _QWORD, _QWORD); // weak
  604. __int64 (__fastcall *lBIO_new_mem_buf)(_QWORD, _QWORD); // weak
  605.  
  606.  
  607. //----- (0000000000400950) ----------------------------------------------------
  608. void (*init_proc())(void)
  609. {
  610. call_gmon_start();
  611. frame_dummy();
  612. return _do_global_ctors_aux();
  613. }
  614.  
  615. //----- (0000000000400968) ----------------------------------------------------
  616. __int64 sub_400968()
  617. {
  618. return qword_6091F0();
  619. }
  620. // 400968: using guessed type __int64 __fastcall sub_400968();
  621. // 6091F0: using guessed type __int64 (*qword_6091F0)(void);
  622.  
  623. //----- (0000000000400AE0) ----------------------------------------------------
  624. // positive sp value has been detected, the output may be wrong!
  625. void __fastcall __noreturn start(__int64 a1, __int64 a2, void (*a3)(void))
  626. {
  627. __int64 v3; // rax
  628. int v4; // esi
  629. __int64 v5; // [rsp-8h] [rbp-8h] BYREF
  630. char *retaddr; // [rsp+0h] [rbp+0h] BYREF
  631.  
  632. v4 = v5;
  633. v5 = v3;
  634. __libc_start_main(
  635. (int (__fastcall *)(int, char **, char **))main,
  636. v4,
  637. &retaddr,
  638. _libc_csu_init,
  639. _libc_csu_fini,
  640. a3,
  641. &v5);
  642. __halt();
  643. }
  644. // 400AE6: positive sp value 8 has been found
  645. // 400AED: variable 'v3' is possibly undefined
  646.  
  647. //----- (0000000000400B0C) ----------------------------------------------------
  648. __int64 (**call_gmon_start())(void)
  649. {
  650. __int64 (**result)(void); // rax
  651.  
  652. result = &_gmon_start__;
  653. if ( &_gmon_start__ )
  654. return (__int64 (**)(void))_gmon_start__();
  655. return result;
  656. }
  657. // 609BF8: using guessed type __int64 _gmon_start__(void);
  658.  
  659. //----- (0000000000400B30) ----------------------------------------------------
  660. __int64 *_do_global_dtors_aux()
  661. {
  662. __int64 *result; // rax
  663. void (*v1)(void); // rdx
  664.  
  665. if ( !completed_6183 )
  666. {
  667. while ( 1 )
  668. {
  669. result = p_6181;
  670. v1 = (void (*)(void))*p_6181;
  671. if ( !*p_6181 )
  672. break;
  673. ++p_6181;
  674. v1();
  675. }
  676. completed_6183 = 1;
  677. }
  678. return result;
  679. }
  680. // 6092D0: using guessed type __int64 *p_6181;
  681. // 609AE8: using guessed type char completed_6183;
  682.  
  683. //----- (0000000000400B70) ----------------------------------------------------
  684. void frame_dummy()
  685. {
  686. ;
  687. }
  688.  
  689. //----- (0000000000400B98) ----------------------------------------------------
  690. __int64 init_libssl()
  691. {
  692. int i; // [rsp+1Ch] [rbp-34h]
  693. char s[40]; // [rsp+20h] [rbp-30h] BYREF
  694. unsigned __int64 v4; // [rsp+48h] [rbp-8h]
  695.  
  696. v4 = __readfsqword(0x28u);
  697. plibssl = dlopen("libssl.so", 2);
  698. if ( plibssl )
  699. goto LABEL_8;
  700. for ( i = 0; i <= 15; ++i )
  701. {
  702. sprintf(s, "libssl.so.%d", (unsigned int)i);
  703. plibssl = dlopen(s, 2);
  704. if ( plibssl )
  705. break;
  706. }
  707. if ( plibssl )
  708. {
  709. LABEL_8:
  710. lBIO_new_mem_buf = (__int64 (__fastcall *)(_QWORD, _QWORD))dlsym(plibssl, "BIO_new_mem_buf");
  711. if ( lBIO_new_mem_buf )
  712. {
  713. lERR_get_error = (__int64 (*)(void))dlsym(plibssl, "ERR_get_error");
  714. if ( lERR_get_error )
  715. {
  716. lERR_error_string = (__int64 (__fastcall *)(_QWORD, _QWORD))dlsym(plibssl, "ERR_error_string");
  717. if ( lERR_error_string )
  718. {
  719. lPEM_read_bio_RSA_PUBKEY = (__int64 (__fastcall *)(_QWORD, _QWORD, _QWORD, _QWORD))dlsym(
  720. plibssl,
  721. "PEM_read_bio_RSA_PUBKEY");
  722. if ( lPEM_read_bio_RSA_PUBKEY )
  723. {
  724. lPEM_read_bio_RSAPrivateKey = (__int64)dlsym(plibssl, "PEM_read_bio_RSAPrivateKey");
  725. if ( lPEM_read_bio_RSAPrivateKey )
  726. {
  727. lRAND_pseudo_bytes = (__int64 (__fastcall *)(_QWORD, _QWORD))dlsym(plibssl, "RAND_pseudo_bytes");
  728. if ( lRAND_pseudo_bytes )
  729. {
  730. lRSA_public_encrypt = (__int64 (__fastcall *)(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD))dlsym(plibssl, "RSA_public_encrypt");
  731. if ( lRSA_public_encrypt )
  732. {
  733. lRSA_private_decrypt = (__int64)dlsym(plibssl, "RSA_private_decrypt");
  734. if ( lRSA_private_decrypt )
  735. {
  736. lRSA_size = (__int64 (__fastcall *)(_QWORD))dlsym(plibssl, "RSA_size");
  737. if ( lRSA_size )
  738. return 0;
  739. else
  740. return 10;
  741. }
  742. else
  743. {
  744. return 9;
  745. }
  746. }
  747. else
  748. {
  749. return 8;
  750. }
  751. }
  752. else
  753. {
  754. return 7;
  755. }
  756. }
  757. else
  758. {
  759. return 6;
  760. }
  761. }
  762. else
  763. {
  764. return 5;
  765. }
  766. }
  767. else
  768. {
  769. return 4;
  770. }
  771. }
  772. else
  773. {
  774. return 3;
  775. }
  776. }
  777. else
  778. {
  779. return 2;
  780. }
  781. }
  782. else
  783. {
  784. return 1;
  785. }
  786. }
  787. // 609AF8: using guessed type __int64 (__fastcall *lRAND_pseudo_bytes)(_QWORD, _QWORD);
  788. // 609B00: using guessed type __int64 (__fastcall *lRSA_size)(_QWORD);
  789. // 609B08: using guessed type __int64 lPEM_read_bio_RSAPrivateKey;
  790. // 609B10: using guessed type __int64 (__fastcall *lRSA_public_encrypt)(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD);
  791. // 609B18: using guessed type __int64 (__fastcall *lERR_error_string)(_QWORD, _QWORD);
  792. // 609B20: using guessed type __int64 lRSA_private_decrypt;
  793. // 609B28: using guessed type __int64 (*lERR_get_error)(void);
  794. // 609B30: using guessed type __int64 (__fastcall *lPEM_read_bio_RSA_PUBKEY)(_QWORD, _QWORD, _QWORD, _QWORD);
  795. // 609B38: using guessed type __int64 (__fastcall *lBIO_new_mem_buf)(_QWORD, _QWORD);
  796.  
  797. //----- (0000000000400DFA) ----------------------------------------------------
  798. int __fastcall print_error(const char *a1, int a2)
  799. {
  800. int *v2; // rax
  801.  
  802. if ( !a2 )
  803. return printf("[ %s ] - FAIL\n", a1);
  804. v2 = __errno_location();
  805. return printf("[ %s ] - FAIL { Errno: %d }\n", a1, (unsigned int)*v2);
  806. }
  807.  
  808. //----- (0000000000400E40) ----------------------------------------------------
  809. unsigned __int64 __fastcall print_error_ex(const char *a1, int a2)
  810. {
  811. __int64 error; // [rsp+18h] [rbp-98h]
  812. char v4[136]; // [rsp+20h] [rbp-90h] BYREF
  813. unsigned __int64 v5; // [rsp+A8h] [rbp-8h]
  814.  
  815. v5 = __readfsqword(0x28u);
  816. if ( a2 )
  817. {
  818. error = lERR_get_error();
  819. lERR_error_string(error, v4);
  820. printf("[ %s ] - FAIL { %s }\n", a1, v4);
  821. }
  822. else
  823. {
  824. printf("[ %s ] - FAIL\n", a1);
  825. }
  826. return __readfsqword(0x28u) ^ v5;
  827. }
  828. // 609B28: invalid function type has been ignored
  829. // 609B18: invalid function type has been ignored
  830. // 609B18: using guessed type __int64 (__fastcall *lERR_error_string)(_QWORD, _QWORD);
  831. // 609B28: using guessed type __int64 (*lERR_get_error)(void);
  832.  
  833. //----- (0000000000400EE2) ----------------------------------------------------
  834. __int64 __fastcall open_read(const char *a1)
  835. {
  836. unsigned int v2; // [rsp+1Ch] [rbp-4h]
  837.  
  838. v2 = open(a1, 0);
  839. if ( v2 == -1 )
  840. print_error("open", 1);
  841. return v2;
  842. }
  843.  
  844. //----- (0000000000400F1E) ----------------------------------------------------
  845. __int64 __fastcall open_write(const char *a1)
  846. {
  847. unsigned int v2; // [rsp+1Ch] [rbp-4h]
  848.  
  849. v2 = open(a1, 578, 384LL);
  850. if ( v2 == -1 )
  851. print_error("open", 1);
  852. return v2;
  853. }
  854.  
  855. //----- (0000000000400F5F) ----------------------------------------------------
  856. __int64 __fastcall open_read_write(const char *a1)
  857. {
  858. unsigned int v2; // [rsp+1Ch] [rbp-4h]
  859.  
  860. v2 = open(a1, 2, 384LL);
  861. if ( v2 == -1 )
  862. print_error("open", 1);
  863. return v2;
  864. }
  865.  
  866. //----- (0000000000400FA0) ----------------------------------------------------
  867. __int64 __fastcall get_file_curr_size(int a1, __off_t *a2)
  868. {
  869. __off_t v4; // [rsp+28h] [rbp-8h]
  870.  
  871. v4 = lseek(a1, 0LL, 2);
  872. if ( v4 == -1 )
  873. {
  874. print_error("lseek [end]", 1);
  875. return 1;
  876. }
  877. else
  878. {
  879. *a2 = v4;
  880. return 0;
  881. }
  882. }
  883.  
  884. //----- (0000000000400FFB) ----------------------------------------------------
  885. __int64 __fastcall get_pk_data(const char *a1, void **a2)
  886. {
  887. __off_t nbytes; // [rsp+30h] [rbp-10h]
  888. int fd; // [rsp+3Ch] [rbp-4h]
  889.  
  890. fd = open_read(a1);
  891. if ( fd == -1 )
  892. {
  893. print_error("open_pk_file", 0);
  894. return 1;
  895. }
  896. else
  897. {
  898. nbytes = lseek(fd, 0LL, 2);
  899. if ( nbytes == -1 )
  900. {
  901. print_error("lseek [end]", 1);
  902. return 2;
  903. }
  904. else if ( nbytes )
  905. {
  906. *a2 = calloc(nbytes + 1, 1uLL);
  907. if ( lseek(fd, 0LL, 0) == -1 )
  908. {
  909. print_error("lseek [start]", 1);
  910. return 4;
  911. }
  912. else if ( read(fd, *a2, nbytes) == -1 )
  913. {
  914. print_error("read", 1);
  915. return 5;
  916. }
  917. else
  918. {
  919. close(fd);
  920. return 0;
  921. }
  922. }
  923. else
  924. {
  925. puts("get_pk_data: key file is empty!");
  926. return 3;
  927. }
  928. }
  929. }
  930.  
  931. //----- (0000000000401128) ----------------------------------------------------
  932. __int64 __fastcall create_rsa_obj(__int64 a1, _QWORD *a2)
  933. {
  934. __int64 v4; // [rsp+28h] [rbp-8h]
  935.  
  936. v4 = lBIO_new_mem_buf(a1, 0xFFFFFFFFLL);
  937. if ( v4 )
  938. {
  939. *a2 = 0LL;
  940. if ( lPEM_read_bio_RSA_PUBKEY(v4, a2, 0LL, 0LL) )
  941. {
  942. return 0;
  943. }
  944. else
  945. {
  946. print_error_ex("PEM_read_bio_RSA_PUBKEY", 1);
  947. return 2;
  948. }
  949. }
  950. else
  951. {
  952. print_error_ex("BIO_new_mem_buf", 1);
  953. return 1;
  954. }
  955. }
  956. // 609B38: invalid function type has been ignored
  957. // 609B30: invalid function type has been ignored
  958. // 609B30: using guessed type __int64 (__fastcall *lPEM_read_bio_RSA_PUBKEY)(_QWORD, _QWORD, _QWORD, _QWORD);
  959. // 609B38: using guessed type __int64 (__fastcall *lBIO_new_mem_buf)(_QWORD, _QWORD);
  960.  
  961. //----- (00000000004011C2) ----------------------------------------------------
  962. __int64 __fastcall gen_stream_key(__int64 a1, unsigned int a2)
  963. {
  964. if ( (unsigned int)lRAND_pseudo_bytes(a1, a2) )
  965. {
  966. return 0;
  967. }
  968. else
  969. {
  970. print_error_ex("RAND_pseudo_bytes", 1);
  971. return 1;
  972. }
  973. }
  974. // 609AF8: invalid function type has been ignored
  975. // 609AF8: using guessed type __int64 (__fastcall *lRAND_pseudo_bytes)(_QWORD, _QWORD);
  976.  
  977. //----- (0000000000401209) ----------------------------------------------------
  978. __int64 __fastcall rsa_encrypt(__int64 a1, __int64 a2, int a3, void **a4, _DWORD *a5)
  979. {
  980. int v5; // eax
  981. int v11; // [rsp+3Ch] [rbp-4h]
  982.  
  983. if ( (int)lRSA_size(a1) > a3 )
  984. {
  985. v5 = lRSA_size(a1);
  986. *a4 = calloc(v5, 1uLL);
  987. v11 = lRSA_public_encrypt((unsigned int)a3, a2, *a4, a1, 1LL);
  988. if ( v11 == -1 )
  989. {
  990. print_error_ex("RSA_public_encrypt", 1);
  991. return 2;
  992. }
  993. else
  994. {
  995. *a5 = v11;
  996. return 0;
  997. }
  998. }
  999. else
  1000. {
  1001. puts("encrypt_bytes: too big data");
  1002. return 1;
  1003. }
  1004. }
  1005. // 609B00: invalid function type has been ignored
  1006. // 609B10: invalid function type has been ignored
  1007. // 609B00: using guessed type __int64 (__fastcall *lRSA_size)(_QWORD);
  1008. // 609B10: using guessed type __int64 (__fastcall *lRSA_public_encrypt)(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD);
  1009.  
  1010. //----- (00000000004012C5) ----------------------------------------------------
  1011. __int64 __fastcall dump_data(const char *a1, const void *a2, int a3)
  1012. {
  1013. int fd; // [rsp+2Ch] [rbp-4h]
  1014.  
  1015. fd = open_write(a1);
  1016. if ( fd == -1 )
  1017. {
  1018. print_error("open_write", 0);
  1019. return 1;
  1020. }
  1021. else if ( write(fd, a2, a3) == -1 )
  1022. {
  1023. print_error("write", 1);
  1024. return 2;
  1025. }
  1026. else
  1027. {
  1028. close(fd);
  1029. return 0;
  1030. }
  1031. }
  1032.  
  1033. //----- (0000000000401346) ----------------------------------------------------
  1034. __int64 __fastcall encrypt_simple(int a1, __int64 a2, __int64 a3, const void *a4, int a5, unsigned __int64 a6)
  1035. {
  1036. double v8; // [rsp+28h] [rbp-2B8h]
  1037. double v9; // [rsp+38h] [rbp-2A8h]
  1038. unsigned __int64 v12; // [rsp+58h] [rbp-288h]
  1039. __off_t offset; // [rsp+60h] [rbp-280h]
  1040. int v14[100]; // [rsp+70h] [rbp-270h] BYREF
  1041. size_t n; // [rsp+200h] [rbp-E0h]
  1042. double v16; // [rsp+208h] [rbp-D8h]
  1043. unsigned __int64 v17; // [rsp+210h] [rbp-D0h]
  1044. __int64 v18; // [rsp+218h] [rbp-C8h]
  1045. __off_t v19; // [rsp+220h] [rbp-C0h]
  1046. unsigned __int64 v20; // [rsp+228h] [rbp-B8h] BYREF
  1047. unsigned __int64 v21; // [rsp+230h] [rbp-B0h]
  1048. void *buf; // [rsp+238h] [rbp-A8h]
  1049. int v23[34]; // [rsp+240h] [rbp-A0h] BYREF
  1050. unsigned __int64 v24; // [rsp+2C8h] [rbp-18h]
  1051.  
  1052. v24 = __readfsqword(0x28u);
  1053. sosemanuk_schedule(v14, a4, a5);
  1054. sosemanuk_init(v23, v14, 0LL, 0LL);
  1055. if ( (unsigned int)get_file_curr_size(a1, (__off_t *)&v20) )
  1056. {
  1057. print_error("fstat", 1);
  1058. return 1;
  1059. }
  1060. else
  1061. {
  1062. if ( a6 < v20 )
  1063. v20 = a6;
  1064. if ( v20 )
  1065. {
  1066. buf = malloc(0x100000uLL);
  1067. if ( buf )
  1068. {
  1069. v19 = lseek(a1, 0LL, 0);
  1070. if ( v19 == -1 )
  1071. {
  1072. print_error("lseek [start]", 1);
  1073. return 10;
  1074. }
  1075. else
  1076. {
  1077. v12 = a3 << 20;
  1078. offset = a2 << 20;
  1079. v18 = 0LL;
  1080. v21 = 0LL;
  1081. do
  1082. {
  1083. v17 = 0LL;
  1084. do
  1085. {
  1086. if ( v17 >= v12 )
  1087. break;
  1088. n = read(a1, buf, 0x100000uLL);
  1089. if ( n == -1LL )
  1090. {
  1091. print_error("fstat", 1);
  1092. return 3;
  1093. }
  1094. sosemanuk_encrypt((__int64)v23, buf, buf, n);
  1095. if ( lseek(a1, -(__int64)n, 1) == -1 )
  1096. {
  1097. print_error("lseek", 1);
  1098. return 4;
  1099. }
  1100. if ( write(a1, buf, n) == -1 )
  1101. {
  1102. print_error("write", 1);
  1103. return 5;
  1104. }
  1105. v17 += n;
  1106. }
  1107. while ( n > 0xFFFFF );
  1108. v21 += v17;
  1109. if ( v21 + offset >= v20 )
  1110. break;
  1111. if ( lseek(a1, offset, 1) == -1 )
  1112. {
  1113. print_error("lseek", 1);
  1114. return 6;
  1115. }
  1116. v21 += offset;
  1117. if ( v18 == 10 * (v18 / 10) )
  1118. {
  1119. if ( (v21 & 0x8000000000000000LL) != 0LL )
  1120. v8 = (double)(int)(v21 & 1 | (v21 >> 1)) + (double)(int)(v21 & 1 | (v21 >> 1));
  1121. else
  1122. v8 = (double)(int)v21;
  1123. v16 = 100.0 * v8;
  1124. if ( (v20 & 0x8000000000000000LL) != 0LL )
  1125. v9 = (double)(int)(v20 & 1 | (v20 >> 1)) + (double)(int)(v20 & 1 | (v20 >> 1));
  1126. else
  1127. v9 = (double)(int)v20;
  1128. v16 = v16 / v9;
  1129. if ( v16 > 100.0 )
  1130. v16 = 100.0;
  1131. if ( v18 )
  1132. putchar(13);
  1133. printf("Progress: %f", v16);
  1134. }
  1135. ++v18;
  1136. }
  1137. while ( v21 < v20 );
  1138. putchar(10);
  1139. free(buf);
  1140. return 0;
  1141. }
  1142. }
  1143. else
  1144. {
  1145. print_error("malloc", 1);
  1146. return 2;
  1147. }
  1148. }
  1149. else
  1150. {
  1151. return 0;
  1152. }
  1153. }
  1154. }
  1155. // 401346: using guessed type int var_270[100];
  1156. // 401346: using guessed type int var_A0[34];
  1157.  
  1158. //----- (000000000040186A) ----------------------------------------------------
  1159. __int64 __fastcall encrypt_file(const char *a1, __int64 a2, __int64 a3, __int64 a4, unsigned __int64 a5)
  1160. {
  1161. void *buf; // [rsp+30h] [rbp-40h] BYREF
  1162. int v11; // [rsp+38h] [rbp-38h] BYREF
  1163. int fd; // [rsp+3Ch] [rbp-34h]
  1164. char v13[40]; // [rsp+40h] [rbp-30h] BYREF
  1165. unsigned __int64 v14; // [rsp+68h] [rbp-8h]
  1166.  
  1167. v14 = __readfsqword(0x28u);
  1168. fd = open_read_write(a1);
  1169. if ( fd == -1 )
  1170. {
  1171. print_error("open_read", 1);
  1172. return 1;
  1173. }
  1174. else if ( (unsigned int)gen_stream_key((__int64)v13, 0x20u) )
  1175. {
  1176. print_error("get_pk_data", 0);
  1177. return 2;
  1178. }
  1179. else if ( (unsigned int)rsa_encrypt(a2, (__int64)v13, 32, &buf, &v11) )
  1180. {
  1181. print_error("rsa_encrypt", 0);
  1182. return 3;
  1183. }
  1184. else if ( (unsigned int)encrypt_simple(fd, a3, a4, v13, 32, a5) )
  1185. {
  1186. print_error("encrypt_simple", 0);
  1187. return 4;
  1188. }
  1189. else if ( lseek(fd, 0LL, 2) == -1 )
  1190. {
  1191. print_error("lseek", 1);
  1192. return 5;
  1193. }
  1194. else if ( write(fd, buf, v11) == -1 )
  1195. {
  1196. print_error("write", 1);
  1197. return 6;
  1198. }
  1199. else
  1200. {
  1201. return 0;
  1202. }
  1203. }
  1204.  
  1205. //----- (00000000004019E8) ----------------------------------------------------
  1206. int __cdecl main(int argc, const char **argv, const char **envp)
  1207. {
  1208. unsigned __int64 v5; // [rsp+20h] [rbp-30h]
  1209. __int64 v6; // [rsp+28h] [rbp-28h]
  1210. __int64 v7; // [rsp+30h] [rbp-20h]
  1211. __int64 v8; // [rsp+38h] [rbp-18h] BYREF
  1212. __int64 v9; // [rsp+40h] [rbp-10h] BYREF
  1213. unsigned int inited; // [rsp+4Ch] [rbp-4h]
  1214.  
  1215. if ( argc > 2 )
  1216. {
  1217. v7 = 0LL;
  1218. v6 = 1LL;
  1219. v5 = 0LL;
  1220. if ( argc > 3 )
  1221. v7 = atoi(argv[3]);
  1222. if ( argc > 4 )
  1223. v6 = atoi(argv[4]);
  1224. if ( argc > 5 )
  1225. v5 = atoi(argv[5]);
  1226. inited = init_libssl();
  1227. if ( inited )
  1228. {
  1229. printf("init_libssl returned %d\n", inited);
  1230. return 2;
  1231. }
  1232. else if ( (unsigned int)get_pk_data(argv[1], (void **)&v9) )
  1233. {
  1234. print_error("get_pk_data", 0);
  1235. return 3;
  1236. }
  1237. else if ( (unsigned int)create_rsa_obj(v9, &v8) )
  1238. {
  1239. print_error("create_rsa_obj", 0);
  1240. return 4;
  1241. }
  1242. else if ( (unsigned int)encrypt_file(argv[2], v8, v7, v6, v5) )
  1243. {
  1244. print_error("encrypt_file", 0);
  1245. return 5;
  1246. }
  1247. else
  1248. {
  1249. return 0;
  1250. }
  1251. }
  1252. else
  1253. {
  1254. puts("usage: encrypt <public_key> <file_to_encrypt> [<enc_step>] [<enc_size>] [<file_size>]");
  1255. puts(" enc_step - number of MB to skip while encryption");
  1256. puts(" enc_size - number of MB in encryption block");
  1257. puts(" file_size - file size in bytes (for sparse files)\n");
  1258. return 1;
  1259. }
  1260. }
  1261.  
  1262. //----- (0000000000401B70) ----------------------------------------------------
  1263. unsigned __int64 __fastcall sosemanuk_schedule(int *a1, const void *a2, size_t a3)
  1264. {
  1265. int v3; // eax
  1266. int v5; // [rsp+8h] [rbp-3F8h]
  1267. int v6; // [rsp+8h] [rbp-3F8h]
  1268. int v7; // [rsp+8h] [rbp-3F8h]
  1269. int v8; // [rsp+8h] [rbp-3F8h]
  1270. int v9; // [rsp+8h] [rbp-3F8h]
  1271. int v10; // [rsp+8h] [rbp-3F8h]
  1272. int v11; // [rsp+8h] [rbp-3F8h]
  1273. int v12; // [rsp+8h] [rbp-3F8h]
  1274. int v13; // [rsp+8h] [rbp-3F8h]
  1275. int v14; // [rsp+8h] [rbp-3F8h]
  1276. int v15; // [rsp+8h] [rbp-3F8h]
  1277. int v16; // [rsp+8h] [rbp-3F8h]
  1278. int v17; // [rsp+8h] [rbp-3F8h]
  1279. int v18; // [rsp+8h] [rbp-3F8h]
  1280. int v19; // [rsp+Ch] [rbp-3F4h]
  1281. int v20; // [rsp+Ch] [rbp-3F4h]
  1282. int v21; // [rsp+Ch] [rbp-3F4h]
  1283. int v22; // [rsp+Ch] [rbp-3F4h]
  1284. int v23; // [rsp+Ch] [rbp-3F4h]
  1285. int v24; // [rsp+Ch] [rbp-3F4h]
  1286. int v25; // [rsp+Ch] [rbp-3F4h]
  1287. int v26; // [rsp+Ch] [rbp-3F4h]
  1288. int v27; // [rsp+Ch] [rbp-3F4h]
  1289. int v28; // [rsp+Ch] [rbp-3F4h]
  1290. int v29; // [rsp+Ch] [rbp-3F4h]
  1291. int v30; // [rsp+Ch] [rbp-3F4h]
  1292. int v31; // [rsp+Ch] [rbp-3F4h]
  1293. int v32; // [rsp+Ch] [rbp-3F4h]
  1294. int v33; // [rsp+10h] [rbp-3F0h]
  1295. int v34; // [rsp+10h] [rbp-3F0h]
  1296. int v35; // [rsp+10h] [rbp-3F0h]
  1297. int v36; // [rsp+10h] [rbp-3F0h]
  1298. int v37; // [rsp+10h] [rbp-3F0h]
  1299. int v38; // [rsp+10h] [rbp-3F0h]
  1300. int v39; // [rsp+10h] [rbp-3F0h]
  1301. int v40; // [rsp+10h] [rbp-3F0h]
  1302. int v41; // [rsp+10h] [rbp-3F0h]
  1303. int v42; // [rsp+10h] [rbp-3F0h]
  1304. int v43; // [rsp+10h] [rbp-3F0h]
  1305. int v44; // [rsp+10h] [rbp-3F0h]
  1306. int v45; // [rsp+10h] [rbp-3F0h]
  1307. int v46; // [rsp+10h] [rbp-3F0h]
  1308. int v47; // [rsp+14h] [rbp-3ECh]
  1309. int v48; // [rsp+14h] [rbp-3ECh]
  1310. int v49; // [rsp+14h] [rbp-3ECh]
  1311. int v50; // [rsp+14h] [rbp-3ECh]
  1312. int v51; // [rsp+14h] [rbp-3ECh]
  1313. int v52; // [rsp+14h] [rbp-3ECh]
  1314. int v53; // [rsp+14h] [rbp-3ECh]
  1315. int v54; // [rsp+14h] [rbp-3ECh]
  1316. int v55; // [rsp+14h] [rbp-3ECh]
  1317. int v56; // [rsp+14h] [rbp-3ECh]
  1318. int v57; // [rsp+14h] [rbp-3ECh]
  1319. int v58; // [rsp+14h] [rbp-3ECh]
  1320. int v59; // [rsp+14h] [rbp-3ECh]
  1321. int v60; // [rsp+14h] [rbp-3ECh]
  1322. int v61; // [rsp+18h] [rbp-3E8h]
  1323. int v62; // [rsp+18h] [rbp-3E8h]
  1324. int v63; // [rsp+18h] [rbp-3E8h]
  1325. int v64; // [rsp+18h] [rbp-3E8h]
  1326. int v65; // [rsp+18h] [rbp-3E8h]
  1327. int v66; // [rsp+18h] [rbp-3E8h]
  1328. int v67; // [rsp+18h] [rbp-3E8h]
  1329. int v68; // [rsp+18h] [rbp-3E8h]
  1330. int v69; // [rsp+18h] [rbp-3E8h]
  1331. int v70; // [rsp+18h] [rbp-3E8h]
  1332. int v71; // [rsp+18h] [rbp-3E8h]
  1333. int v72; // [rsp+18h] [rbp-3E8h]
  1334. int v73; // [rsp+18h] [rbp-3E8h]
  1335. int v74; // [rsp+1Ch] [rbp-3E4h]
  1336. int v75; // [rsp+1Ch] [rbp-3E4h]
  1337. int v76; // [rsp+1Ch] [rbp-3E4h]
  1338. int v77; // [rsp+1Ch] [rbp-3E4h]
  1339. int v78; // [rsp+1Ch] [rbp-3E4h]
  1340. int v79; // [rsp+1Ch] [rbp-3E4h]
  1341. int v80; // [rsp+1Ch] [rbp-3E4h]
  1342. int v81; // [rsp+1Ch] [rbp-3E4h]
  1343. int v82; // [rsp+1Ch] [rbp-3E4h]
  1344. int v83; // [rsp+1Ch] [rbp-3E4h]
  1345. int v84; // [rsp+1Ch] [rbp-3E4h]
  1346. int v85; // [rsp+1Ch] [rbp-3E4h]
  1347. int v86; // [rsp+1Ch] [rbp-3E4h]
  1348. int v87; // [rsp+20h] [rbp-3E0h]
  1349. int v88; // [rsp+20h] [rbp-3E0h]
  1350. int v89; // [rsp+20h] [rbp-3E0h]
  1351. int v90; // [rsp+20h] [rbp-3E0h]
  1352. int v91; // [rsp+20h] [rbp-3E0h]
  1353. int v92; // [rsp+20h] [rbp-3E0h]
  1354. int v93; // [rsp+20h] [rbp-3E0h]
  1355. int v94; // [rsp+20h] [rbp-3E0h]
  1356. int v95; // [rsp+20h] [rbp-3E0h]
  1357. int v96; // [rsp+20h] [rbp-3E0h]
  1358. int v97; // [rsp+20h] [rbp-3E0h]
  1359. int v98; // [rsp+20h] [rbp-3E0h]
  1360. int v99; // [rsp+20h] [rbp-3E0h]
  1361. int v100; // [rsp+24h] [rbp-3DCh]
  1362. int v101; // [rsp+24h] [rbp-3DCh]
  1363. int v102; // [rsp+24h] [rbp-3DCh]
  1364. int v103; // [rsp+24h] [rbp-3DCh]
  1365. int v104; // [rsp+24h] [rbp-3DCh]
  1366. int v105; // [rsp+24h] [rbp-3DCh]
  1367. int v106; // [rsp+24h] [rbp-3DCh]
  1368. int v107; // [rsp+24h] [rbp-3DCh]
  1369. int v108; // [rsp+24h] [rbp-3DCh]
  1370. int v109; // [rsp+24h] [rbp-3DCh]
  1371. int v110; // [rsp+24h] [rbp-3DCh]
  1372. int v111; // [rsp+24h] [rbp-3DCh]
  1373. int v113; // [rsp+4Ch] [rbp-3B4h]
  1374. int v114; // [rsp+50h] [rbp-3B0h]
  1375. int v115; // [rsp+70h] [rbp-390h]
  1376. int v116; // [rsp+74h] [rbp-38Ch]
  1377. int v117; // [rsp+78h] [rbp-388h]
  1378. int v118; // [rsp+7Ch] [rbp-384h]
  1379. int v119; // [rsp+90h] [rbp-370h]
  1380. int v120; // [rsp+94h] [rbp-36Ch]
  1381. int v121; // [rsp+98h] [rbp-368h]
  1382. int v122; // [rsp+9Ch] [rbp-364h]
  1383. int v123; // [rsp+B4h] [rbp-34Ch]
  1384. int v124; // [rsp+BCh] [rbp-344h]
  1385. int v125; // [rsp+C4h] [rbp-33Ch]
  1386. int v126; // [rsp+E4h] [rbp-31Ch]
  1387. int v127; // [rsp+E8h] [rbp-318h]
  1388. int v128; // [rsp+FCh] [rbp-304h]
  1389. int v129; // [rsp+100h] [rbp-300h]
  1390. int v130; // [rsp+108h] [rbp-2F8h]
  1391. int v131; // [rsp+10Ch] [rbp-2F4h]
  1392. int v132; // [rsp+120h] [rbp-2E0h]
  1393. int v133; // [rsp+128h] [rbp-2D8h]
  1394. int v134; // [rsp+12Ch] [rbp-2D4h]
  1395. int v135; // [rsp+12Ch] [rbp-2D4h]
  1396. int v136; // [rsp+130h] [rbp-2D0h]
  1397. int v137; // [rsp+130h] [rbp-2D0h]
  1398. int v138; // [rsp+130h] [rbp-2D0h]
  1399. int v139; // [rsp+144h] [rbp-2BCh]
  1400. int v140; // [rsp+148h] [rbp-2B8h]
  1401. int v141; // [rsp+16Ch] [rbp-294h]
  1402. int v142; // [rsp+170h] [rbp-290h]
  1403. int v143; // [rsp+190h] [rbp-270h]
  1404. int v144; // [rsp+194h] [rbp-26Ch]
  1405. int v145; // [rsp+198h] [rbp-268h]
  1406. int v146; // [rsp+19Ch] [rbp-264h]
  1407. int v147; // [rsp+1B0h] [rbp-250h]
  1408. int v148; // [rsp+1B4h] [rbp-24Ch]
  1409. int v149; // [rsp+1B8h] [rbp-248h]
  1410. int v150; // [rsp+1BCh] [rbp-244h]
  1411. int v151; // [rsp+1D4h] [rbp-22Ch]
  1412. int v152; // [rsp+1DCh] [rbp-224h]
  1413. int v153; // [rsp+1E4h] [rbp-21Ch]
  1414. int v154; // [rsp+204h] [rbp-1FCh]
  1415. int v155; // [rsp+208h] [rbp-1F8h]
  1416. int v156; // [rsp+21Ch] [rbp-1E4h]
  1417. int v157; // [rsp+220h] [rbp-1E0h]
  1418. int v158; // [rsp+228h] [rbp-1D8h]
  1419. int v159; // [rsp+22Ch] [rbp-1D4h]
  1420. int v160; // [rsp+240h] [rbp-1C0h]
  1421. int v161; // [rsp+248h] [rbp-1B8h]
  1422. int v162; // [rsp+24Ch] [rbp-1B4h]
  1423. int v163; // [rsp+24Ch] [rbp-1B4h]
  1424. int v164; // [rsp+250h] [rbp-1B0h]
  1425. int v165; // [rsp+250h] [rbp-1B0h]
  1426. int v166; // [rsp+250h] [rbp-1B0h]
  1427. int v167; // [rsp+264h] [rbp-19Ch]
  1428. int v168; // [rsp+268h] [rbp-198h]
  1429. int v169; // [rsp+28Ch] [rbp-174h]
  1430. int v170; // [rsp+290h] [rbp-170h]
  1431. int v171; // [rsp+2B0h] [rbp-150h]
  1432. int v172; // [rsp+2B4h] [rbp-14Ch]
  1433. int v173; // [rsp+2B8h] [rbp-148h]
  1434. int v174; // [rsp+2BCh] [rbp-144h]
  1435. int v175; // [rsp+2D0h] [rbp-130h]
  1436. int v176; // [rsp+2D4h] [rbp-12Ch]
  1437. int v177; // [rsp+2D8h] [rbp-128h]
  1438. int v178; // [rsp+2DCh] [rbp-124h]
  1439. int v179; // [rsp+2F4h] [rbp-10Ch]
  1440. int v180; // [rsp+2FCh] [rbp-104h]
  1441. int v181; // [rsp+304h] [rbp-FCh]
  1442. int v182; // [rsp+324h] [rbp-DCh]
  1443. int v183; // [rsp+328h] [rbp-D8h]
  1444. int v184; // [rsp+33Ch] [rbp-C4h]
  1445. int v185; // [rsp+340h] [rbp-C0h]
  1446. int v186; // [rsp+348h] [rbp-B8h]
  1447. int v187; // [rsp+34Ch] [rbp-B4h]
  1448. int v188; // [rsp+360h] [rbp-A0h]
  1449. int v189; // [rsp+368h] [rbp-98h]
  1450. int v190; // [rsp+36Ch] [rbp-94h]
  1451. int v191; // [rsp+36Ch] [rbp-94h]
  1452. int v192; // [rsp+370h] [rbp-90h]
  1453. int v193; // [rsp+370h] [rbp-90h]
  1454. int v194; // [rsp+370h] [rbp-90h]
  1455. int v195; // [rsp+384h] [rbp-7Ch]
  1456. int v196; // [rsp+388h] [rbp-78h]
  1457. int v197; // [rsp+3ACh] [rbp-54h]
  1458. int v198; // [rsp+3B0h] [rbp-50h]
  1459. unsigned __int16 dest[2]; // [rsp+3D0h] [rbp-30h] BYREF
  1460. unsigned __int16 v200; // [rsp+3D4h] [rbp-2Ch] BYREF
  1461. unsigned __int16 v201[2]; // [rsp+3D8h] [rbp-28h] BYREF
  1462. unsigned __int16 v202; // [rsp+3DCh] [rbp-24h] BYREF
  1463. unsigned __int16 v203[2]; // [rsp+3E0h] [rbp-20h] BYREF
  1464. unsigned __int16 v204; // [rsp+3E4h] [rbp-1Ch] BYREF
  1465. unsigned __int16 v205[2]; // [rsp+3E8h] [rbp-18h] BYREF
  1466. unsigned __int16 v206[6]; // [rsp+3ECh] [rbp-14h] BYREF
  1467. unsigned __int64 v207; // [rsp+3F8h] [rbp-8h]
  1468.  
  1469. v207 = __readfsqword(0x28u);
  1470. if ( !a3 || a3 > 0x20 )
  1471. {
  1472. fprintf(stderr, "invalid key size: %lu\n", a3);
  1473. exit(1);
  1474. }
  1475. memcpy(dest, a2, a3);
  1476. if ( a3 <= 0x1F )
  1477. {
  1478. *((_BYTE *)dest + a3) = 1;
  1479. if ( a3 <= 0x1E )
  1480. memset((char *)dest + a3 + 1, 0, 31 - a3);
  1481. }
  1482. v5 = decode32le(dest);
  1483. v19 = decode32le(&v200);
  1484. v33 = decode32le(v201);
  1485. v47 = decode32le(&v202);
  1486. v61 = decode32le(v203);
  1487. v74 = decode32le(&v204);
  1488. v87 = decode32le(v205);
  1489. v3 = decode32le(v206);
  1490. v6 = __ROR4__(v3 ^ v74 ^ v47 ^ v5 ^ 0x9E3779B9, 21);
  1491. v20 = __ROR4__(v6 ^ v87 ^ v61 ^ v19 ^ 0x9E3779B8, 21);
  1492. v34 = __ROR4__(v20 ^ v3 ^ v74 ^ v33 ^ 0x9E3779BB, 21);
  1493. v48 = __ROR4__(v34 ^ v6 ^ v87 ^ v47 ^ 0x9E3779BA, 21);
  1494. v197 = (v6 & v20 | v34 ^ v6) ^ (v48 | v6) & (v20 ^ v48);
  1495. v198 = v20 ^ v48 ^ v34 ^ (v6 & v20 ^ (v48 | v6) | v197 ^ v6 & v20);
  1496. *a1 = v197 ^ v6 & v20 ^ (v48 | v6) ^ (v197 | v198);
  1497. a1[1] = v198;
  1498. a1[2] = v197;
  1499. a1[3] = v20 ^ v48 ^ v34 ^ (v6 & v20 ^ (v48 | v6)) & (v6 & v20 | v34 ^ v6);
  1500. v62 = __ROR4__(v48 ^ v20 ^ v3 ^ v61 ^ 0x9E3779BD, 21);
  1501. v75 = __ROR4__(v62 ^ v34 ^ v6 ^ v74 ^ 0x9E3779BC, 21);
  1502. v88 = __ROR4__(v75 ^ v48 ^ v20 ^ v87 ^ 0x9E3779BF, 21);
  1503. v100 = __ROR4__(v88 ^ v62 ^ v34 ^ v3 ^ 0x9E3779BE, 21);
  1504. v196 = v100 ^ v88 & v62 ^ (v100 ^ v88 & v62 ^ v75 ^ v88 ^ v62 | v75 ^ (v62 | v100));
  1505. v195 = (v75 ^ (v62 | v100)) & (v100 ^ v88 & v62) ^ v100 ^ v88 & v62 ^ v75 ^ v88 ^ v62;
  1506. a1[4] = v100 ^ v88 & v62 ^ v75 ^ v88;
  1507. a1[5] = v196;
  1508. a1[6] = v195 ^ v196 ^ v75 ^ (v62 | v100);
  1509. a1[7] = ~v195;
  1510. v7 = __ROR4__(v100 ^ v75 ^ v48 ^ v6 ^ 0x9E3779B1, 21);
  1511. v21 = __ROR4__(v7 ^ v88 ^ v62 ^ v20 ^ 0x9E3779B0, 21);
  1512. v35 = __ROR4__(v21 ^ v100 ^ v75 ^ v34 ^ 0x9E3779B3, 21);
  1513. v49 = __ROR4__(v35 ^ v7 ^ v88 ^ v48 ^ 0x9E3779B2, 21);
  1514. v192 = v49 | v21 & ~v7;
  1515. v190 = v192 ^ v21;
  1516. v193 = ~v7 ^ v192;
  1517. v188 = v190 | ~v7;
  1518. v191 = v21 & ~v7 ^ ~v35 ^ v49 ^ v190;
  1519. v189 = v188 & (v193 | v21 & ~v7 ^ ~v35);
  1520. v194 = v191 ^ v193;
  1521. a1[8] = v189;
  1522. a1[9] = v188 ^ v189 & v194;
  1523. a1[10] = v21 & ~v7 ^ ~v35 ^ v49;
  1524. a1[11] = v194 ^ v189 & v191;
  1525. v63 = __ROR4__(v49 ^ v21 ^ v100 ^ v62 ^ 0x9E3779B5, 21);
  1526. v76 = __ROR4__(v63 ^ v35 ^ v7 ^ v75 ^ 0x9E3779B4, 21);
  1527. v89 = __ROR4__(v76 ^ v49 ^ v21 ^ v88 ^ 0x9E3779B7, 21);
  1528. v101 = __ROR4__(v89 ^ v63 ^ v35 ^ v100 ^ 0x9E3779B6, 21);
  1529. v186 = v63 ^ (v63 ^ v101) & v76;
  1530. v187 = v89 ^ v76 ^ (v63 ^ v101 | v63);
  1531. v184 = v186 | ~(v63 ^ v101 ^ v89 ^ v76);
  1532. v185 = v187 | v89 ^ v63 ^ v101;
  1533. a1[12] = v185 ^ v184 ^ v89 ^ v63 ^ v101 ^ v186;
  1534. a1[13] = v185 ^ v184;
  1535. a1[14] = v63 ^ v101 ^ v89 ^ v76 ^ (v186 | v89);
  1536. a1[15] = v187;
  1537. v8 = __ROR4__(v101 ^ v76 ^ v49 ^ v7 ^ 0x9E3779A9, 21);
  1538. v22 = __ROR4__(v8 ^ v89 ^ v63 ^ v21 ^ 0x9E3779A8, 21);
  1539. v36 = __ROR4__(v22 ^ v101 ^ v76 ^ v35 ^ 0x9E3779AB, 21);
  1540. v50 = __ROR4__(v36 ^ v8 ^ v89 ^ v49 ^ 0x9E3779AA, 21);
  1541. v183 = v50 ^ (v36 | v22) ^ v36 ^ (v50 ^ (v36 | v22) ^ v36 ^ v36 ^ v22 | v8);
  1542. v182 = v50 ^ (v36 | v22) ^ v36 ^ v36 ^ v22 ^ v8 ^ (v50 ^ (v36 | v22) ^ v36 ^ v36 ^ v22 | v50 ^ (v36 | v22));
  1543. a1[16] = (v183 | ~(v182 ^ v50 ^ (v36 | v22) ^ v36)) ^ v50 ^ (v36 | v22) ^ v36 ^ v36 ^ v22;
  1544. a1[17] = v50 ^ (v36 | v22) ^ v8 & (v36 ^ v22 | v50);
  1545. a1[18] = v50 ^ (v36 | v22) ^ v36 ^ v36 ^ v22 ^ v183 & v182;
  1546. a1[19] = v183;
  1547. v64 = __ROR4__(v50 ^ v22 ^ v101 ^ v63 ^ 0x9E3779AD, 21);
  1548. v77 = __ROR4__(v64 ^ v36 ^ v8 ^ v76 ^ 0x9E3779AC, 21);
  1549. v90 = __ROR4__(v77 ^ v50 ^ v22 ^ v89 ^ 0x9E3779AF, 21);
  1550. v102 = __ROR4__(v90 ^ v64 ^ v36 ^ v101 ^ 0x9E3779AE, 21);
  1551. v180 = ~v90 ^ v64 & v102 ^ v77 ^ v102 ^ v64 ^ (v102 | ~v90);
  1552. v181 = v180 ^ (~v90 ^ v64 & v102 | ~v90 ^ v64 & v102 ^ v77 | v102 ^ v64);
  1553. v179 = v181 ^ ~v90 ^ v64 & v102 ^ (~v90 ^ v64 & v102 ^ v77 | v102 ^ v64) ^ v102;
  1554. a1[20] = v181;
  1555. a1[21] = ~v90 ^ v64 & v102 ^ v77;
  1556. a1[22] = v179;
  1557. a1[23] = ~(~v90 ^ v64 & v102) ^ v179 & v180;
  1558. v9 = __ROR4__(v102 ^ v77 ^ v50 ^ v8 ^ 0x9E3779A1, 21);
  1559. v23 = __ROR4__(v9 ^ v90 ^ v64 ^ v22 ^ 0x9E3779A0, 21);
  1560. v37 = __ROR4__(v23 ^ v102 ^ v77 ^ v36 ^ 0x9E3779A3, 21);
  1561. v51 = __ROR4__(v37 ^ v9 ^ v90 ^ v50 ^ 0x9E3779A2, 21);
  1562. v178 = ~v51 ^ v37 ^ (v23 ^ v9) & (v51 ^ v23);
  1563. v177 = v51 ^ v23 | ~v51 ^ v37;
  1564. v176 = v23 ^ v9 ^ v178 & ~v51;
  1565. v175 = v177 ^ v178 ^ ~v51 ^ v51 ^ v23;
  1566. a1[24] = v178;
  1567. a1[25] = v176;
  1568. a1[26] = v175 ^ v176 & (v23 ^ v9);
  1569. a1[27] = (v176 | v175) ^ ~(v23 ^ v9 ^ v177);
  1570. v65 = __ROR4__(v51 ^ v23 ^ v102 ^ v64 ^ 0x9E3779A5, 21);
  1571. v78 = __ROR4__(v65 ^ v37 ^ v9 ^ v77 ^ 0x9E3779A4, 21);
  1572. v91 = __ROR4__(v78 ^ v51 ^ v23 ^ v90 ^ 0x9E3779A7, 21);
  1573. v103 = __ROR4__(v91 ^ v65 ^ v37 ^ v102 ^ 0x9E3779A6, 21);
  1574. v173 = ~v103 ^ v91 ^ (v65 ^ ~v103) & (v103 ^ v78);
  1575. v172 = v65 ^ ~v103 ^ v103 ^ v78 ^ v65 ^ (v65 ^ ~v103 ^ v103 ^ v78) & (~v103 ^ v91);
  1576. v174 = v173 & (v65 ^ ~v103 ^ v103 ^ v78 ^ v65);
  1577. v171 = v174 ^ v65 ^ ~v103;
  1578. a1[28] = v173;
  1579. a1[29] = v171 & v172 ^ v174 ^ (v173 | v65 ^ ~v103 ^ v103 ^ v78);
  1580. a1[30] = ~(v172 ^ (v171 | v174));
  1581. a1[31] = v171;
  1582. v10 = __ROR4__(v103 ^ v78 ^ v51 ^ v9 ^ 0x9E377999, 21);
  1583. v24 = __ROR4__(v10 ^ v91 ^ v65 ^ v23 ^ 0x9E377998, 21);
  1584. v38 = __ROR4__(v24 ^ v103 ^ v78 ^ v37 ^ 0x9E37799B, 21);
  1585. v52 = __ROR4__(v38 ^ v10 ^ v91 ^ v51 ^ 0x9E37799A, 21);
  1586. v169 = (v10 & v24 | v38 ^ v10) ^ (v52 | v10) & (v24 ^ v52);
  1587. v170 = v24 ^ v52 ^ v38 ^ (v10 & v24 ^ (v52 | v10) | v169 ^ v10 & v24);
  1588. a1[32] = v169 ^ v10 & v24 ^ (v52 | v10) ^ (v169 | v170);
  1589. a1[33] = v170;
  1590. a1[34] = v169;
  1591. a1[35] = v24 ^ v52 ^ v38 ^ (v10 & v24 ^ (v52 | v10)) & (v10 & v24 | v38 ^ v10);
  1592. v66 = __ROR4__(v52 ^ v24 ^ v103 ^ v65 ^ 0x9E37799D, 21);
  1593. v79 = __ROR4__(v66 ^ v38 ^ v10 ^ v78 ^ 0x9E37799C, 21);
  1594. v92 = __ROR4__(v79 ^ v52 ^ v24 ^ v91 ^ 0x9E37799F, 21);
  1595. v104 = __ROR4__(v92 ^ v66 ^ v38 ^ v103 ^ 0x9E37799E, 21);
  1596. v168 = v104 ^ v92 & v66 ^ (v104 ^ v92 & v66 ^ v79 ^ v92 ^ v66 | v79 ^ (v66 | v104));
  1597. v167 = (v79 ^ (v66 | v104)) & (v104 ^ v92 & v66) ^ v104 ^ v92 & v66 ^ v79 ^ v92 ^ v66;
  1598. a1[36] = v104 ^ v92 & v66 ^ v79 ^ v92;
  1599. a1[37] = v168;
  1600. a1[38] = v167 ^ v168 ^ v79 ^ (v66 | v104);
  1601. a1[39] = ~v167;
  1602. v11 = __ROR4__(v104 ^ v79 ^ v52 ^ v10 ^ 0x9E377991, 21);
  1603. v25 = __ROR4__(v11 ^ v92 ^ v66 ^ v24 ^ 0x9E377990, 21);
  1604. v39 = __ROR4__(v25 ^ v104 ^ v79 ^ v38 ^ 0x9E377993, 21);
  1605. v53 = __ROR4__(v39 ^ v11 ^ v92 ^ v52 ^ 0x9E377992, 21);
  1606. v164 = v53 | v25 & ~v11;
  1607. v162 = v164 ^ v25;
  1608. v165 = ~v11 ^ v164;
  1609. v160 = v162 | ~v11;
  1610. v163 = v25 & ~v11 ^ ~v39 ^ v53 ^ v162;
  1611. v161 = v160 & (v165 | v25 & ~v11 ^ ~v39);
  1612. v166 = v163 ^ v165;
  1613. a1[40] = v161;
  1614. a1[41] = v160 ^ v161 & v166;
  1615. a1[42] = v25 & ~v11 ^ ~v39 ^ v53;
  1616. a1[43] = v166 ^ v161 & v163;
  1617. v67 = __ROR4__(v53 ^ v25 ^ v104 ^ v66 ^ 0x9E377995, 21);
  1618. v80 = __ROR4__(v67 ^ v39 ^ v11 ^ v79 ^ 0x9E377994, 21);
  1619. v93 = __ROR4__(v80 ^ v53 ^ v25 ^ v92 ^ 0x9E377997, 21);
  1620. v105 = __ROR4__(v93 ^ v67 ^ v39 ^ v104 ^ 0x9E377996, 21);
  1621. v158 = v67 ^ (v67 ^ v105) & v80;
  1622. v159 = v93 ^ v80 ^ (v67 ^ v105 | v67);
  1623. v156 = v158 | ~(v67 ^ v105 ^ v93 ^ v80);
  1624. v157 = v159 | v93 ^ v67 ^ v105;
  1625. a1[44] = v157 ^ v156 ^ v93 ^ v67 ^ v105 ^ v158;
  1626. a1[45] = v157 ^ v156;
  1627. a1[46] = v67 ^ v105 ^ v93 ^ v80 ^ (v158 | v93);
  1628. a1[47] = v159;
  1629. v12 = __ROR4__(v105 ^ v80 ^ v53 ^ v11 ^ 0x9E377989, 21);
  1630. v26 = __ROR4__(v12 ^ v93 ^ v67 ^ v25 ^ 0x9E377988, 21);
  1631. v40 = __ROR4__(v26 ^ v105 ^ v80 ^ v39 ^ 0x9E37798B, 21);
  1632. v54 = __ROR4__(v40 ^ v12 ^ v93 ^ v53 ^ 0x9E37798A, 21);
  1633. v155 = v54 ^ (v40 | v26) ^ v40 ^ (v54 ^ (v40 | v26) ^ v40 ^ v40 ^ v26 | v12);
  1634. v154 = v54 ^ (v40 | v26) ^ v40 ^ v40 ^ v26 ^ v12 ^ (v54 ^ (v40 | v26) ^ v40 ^ v40 ^ v26 | v54 ^ (v40 | v26));
  1635. a1[48] = (v155 | ~(v154 ^ v54 ^ (v40 | v26) ^ v40)) ^ v54 ^ (v40 | v26) ^ v40 ^ v40 ^ v26;
  1636. a1[49] = v54 ^ (v40 | v26) ^ v12 & (v40 ^ v26 | v54);
  1637. a1[50] = v54 ^ (v40 | v26) ^ v40 ^ v40 ^ v26 ^ v155 & v154;
  1638. a1[51] = v155;
  1639. v68 = __ROR4__(v54 ^ v26 ^ v105 ^ v67 ^ 0x9E37798D, 21);
  1640. v81 = __ROR4__(v68 ^ v40 ^ v12 ^ v80 ^ 0x9E37798C, 21);
  1641. v94 = __ROR4__(v81 ^ v54 ^ v26 ^ v93 ^ 0x9E37798F, 21);
  1642. v106 = __ROR4__(v94 ^ v68 ^ v40 ^ v105 ^ 0x9E37798E, 21);
  1643. v152 = ~v94 ^ v68 & v106 ^ v81 ^ v106 ^ v68 ^ (v106 | ~v94);
  1644. v153 = v152 ^ (~v94 ^ v68 & v106 | ~v94 ^ v68 & v106 ^ v81 | v106 ^ v68);
  1645. v151 = v153 ^ ~v94 ^ v68 & v106 ^ (~v94 ^ v68 & v106 ^ v81 | v106 ^ v68) ^ v106;
  1646. a1[52] = v153;
  1647. a1[53] = ~v94 ^ v68 & v106 ^ v81;
  1648. a1[54] = v151;
  1649. a1[55] = ~(~v94 ^ v68 & v106) ^ v151 & v152;
  1650. v13 = __ROR4__(v106 ^ v81 ^ v54 ^ v12 ^ 0x9E377981, 21);
  1651. v27 = __ROR4__(v13 ^ v94 ^ v68 ^ v26 ^ 0x9E377980, 21);
  1652. v41 = __ROR4__(v27 ^ v106 ^ v81 ^ v40 ^ 0x9E377983, 21);
  1653. v55 = __ROR4__(v41 ^ v13 ^ v94 ^ v54 ^ 0x9E377982, 21);
  1654. v150 = ~v55 ^ v41 ^ (v27 ^ v13) & (v55 ^ v27);
  1655. v149 = v55 ^ v27 | ~v55 ^ v41;
  1656. v148 = v27 ^ v13 ^ v150 & ~v55;
  1657. v147 = v149 ^ v150 ^ ~v55 ^ v55 ^ v27;
  1658. a1[56] = v150;
  1659. a1[57] = v148;
  1660. a1[58] = v147 ^ v148 & (v27 ^ v13);
  1661. a1[59] = (v148 | v147) ^ ~(v27 ^ v13 ^ v149);
  1662. v69 = __ROR4__(v55 ^ v27 ^ v106 ^ v68 ^ 0x9E377985, 21);
  1663. v82 = __ROR4__(v69 ^ v41 ^ v13 ^ v81 ^ 0x9E377984, 21);
  1664. v95 = __ROR4__(v82 ^ v55 ^ v27 ^ v94 ^ 0x9E377987, 21);
  1665. v107 = __ROR4__(v95 ^ v69 ^ v41 ^ v106 ^ 0x9E377986, 21);
  1666. v145 = ~v107 ^ v95 ^ (v69 ^ ~v107) & (v107 ^ v82);
  1667. v144 = v69 ^ ~v107 ^ v107 ^ v82 ^ v69 ^ (v69 ^ ~v107 ^ v107 ^ v82) & (~v107 ^ v95);
  1668. v146 = v145 & (v69 ^ ~v107 ^ v107 ^ v82 ^ v69);
  1669. v143 = v146 ^ v69 ^ ~v107;
  1670. a1[60] = v145;
  1671. a1[61] = v143 & v144 ^ v146 ^ (v145 | v69 ^ ~v107 ^ v107 ^ v82);
  1672. a1[62] = ~(v144 ^ (v143 | v146));
  1673. a1[63] = v143;
  1674. v14 = __ROR4__(v107 ^ v82 ^ v55 ^ v13 ^ 0x9E3779F9, 21);
  1675. v28 = __ROR4__(v14 ^ v95 ^ v69 ^ v27 ^ 0x9E3779F8, 21);
  1676. v42 = __ROR4__(v28 ^ v107 ^ v82 ^ v41 ^ 0x9E3779FB, 21);
  1677. v56 = __ROR4__(v42 ^ v14 ^ v95 ^ v55 ^ 0x9E3779FA, 21);
  1678. v141 = (v14 & v28 | v42 ^ v14) ^ (v56 | v14) & (v28 ^ v56);
  1679. v142 = v28 ^ v56 ^ v42 ^ (v14 & v28 ^ (v56 | v14) | v141 ^ v14 & v28);
  1680. a1[64] = v141 ^ v14 & v28 ^ (v56 | v14) ^ (v141 | v142);
  1681. a1[65] = v142;
  1682. a1[66] = v141;
  1683. a1[67] = v28 ^ v56 ^ v42 ^ (v14 & v28 ^ (v56 | v14)) & (v14 & v28 | v42 ^ v14);
  1684. v70 = __ROR4__(v56 ^ v28 ^ v107 ^ v69 ^ 0x9E3779FD, 21);
  1685. v83 = __ROR4__(v70 ^ v42 ^ v14 ^ v82 ^ 0x9E3779FC, 21);
  1686. v96 = __ROR4__(v83 ^ v56 ^ v28 ^ v95 ^ 0x9E3779FF, 21);
  1687. v108 = __ROR4__(v96 ^ v70 ^ v42 ^ v107 ^ 0x9E3779FE, 21);
  1688. v140 = v108 ^ v96 & v70 ^ (v108 ^ v96 & v70 ^ v83 ^ v96 ^ v70 | v83 ^ (v70 | v108));
  1689. v139 = (v83 ^ (v70 | v108)) & (v108 ^ v96 & v70) ^ v108 ^ v96 & v70 ^ v83 ^ v96 ^ v70;
  1690. a1[68] = v108 ^ v96 & v70 ^ v83 ^ v96;
  1691. a1[69] = v140;
  1692. a1[70] = v139 ^ v140 ^ v83 ^ (v70 | v108);
  1693. a1[71] = ~v139;
  1694. v15 = __ROR4__(v108 ^ v83 ^ v56 ^ v14 ^ 0x9E3779F1, 21);
  1695. v29 = __ROR4__(v15 ^ v96 ^ v70 ^ v28 ^ 0x9E3779F0, 21);
  1696. v43 = __ROR4__(v29 ^ v108 ^ v83 ^ v42 ^ 0x9E3779F3, 21);
  1697. v57 = __ROR4__(v43 ^ v15 ^ v96 ^ v56 ^ 0x9E3779F2, 21);
  1698. v136 = v57 | v29 & ~v15;
  1699. v134 = v136 ^ v29;
  1700. v137 = ~v15 ^ v136;
  1701. v132 = v134 | ~v15;
  1702. v135 = v29 & ~v15 ^ ~v43 ^ v57 ^ v134;
  1703. v133 = v132 & (v137 | v29 & ~v15 ^ ~v43);
  1704. v138 = v135 ^ v137;
  1705. a1[72] = v133;
  1706. a1[73] = v132 ^ v133 & v138;
  1707. a1[74] = v29 & ~v15 ^ ~v43 ^ v57;
  1708. a1[75] = v138 ^ v133 & v135;
  1709. v71 = __ROR4__(v57 ^ v29 ^ v108 ^ v70 ^ 0x9E3779F5, 21);
  1710. v84 = __ROR4__(v71 ^ v43 ^ v15 ^ v83 ^ 0x9E3779F4, 21);
  1711. v97 = __ROR4__(v84 ^ v57 ^ v29 ^ v96 ^ 0x9E3779F7, 21);
  1712. v109 = __ROR4__(v97 ^ v71 ^ v43 ^ v108 ^ 0x9E3779F6, 21);
  1713. v130 = v71 ^ (v71 ^ v109) & v84;
  1714. v131 = v97 ^ v84 ^ (v71 ^ v109 | v71);
  1715. v128 = v130 | ~(v71 ^ v109 ^ v97 ^ v84);
  1716. v129 = v131 | v97 ^ v71 ^ v109;
  1717. a1[76] = v129 ^ v128 ^ v97 ^ v71 ^ v109 ^ v130;
  1718. a1[77] = v129 ^ v128;
  1719. a1[78] = v71 ^ v109 ^ v97 ^ v84 ^ (v130 | v97);
  1720. a1[79] = v131;
  1721. v16 = __ROR4__(v109 ^ v84 ^ v57 ^ v15 ^ 0x9E3779E9, 21);
  1722. v30 = __ROR4__(v16 ^ v97 ^ v71 ^ v29 ^ 0x9E3779E8, 21);
  1723. v44 = __ROR4__(v30 ^ v109 ^ v84 ^ v43 ^ 0x9E3779EB, 21);
  1724. v58 = __ROR4__(v44 ^ v16 ^ v97 ^ v57 ^ 0x9E3779EA, 21);
  1725. v127 = v58 ^ (v44 | v30) ^ v44 ^ (v58 ^ (v44 | v30) ^ v44 ^ v44 ^ v30 | v16);
  1726. v126 = v58 ^ (v44 | v30) ^ v44 ^ v44 ^ v30 ^ v16 ^ (v58 ^ (v44 | v30) ^ v44 ^ v44 ^ v30 | v58 ^ (v44 | v30));
  1727. a1[80] = (v127 | ~(v126 ^ v58 ^ (v44 | v30) ^ v44)) ^ v58 ^ (v44 | v30) ^ v44 ^ v44 ^ v30;
  1728. a1[81] = v58 ^ (v44 | v30) ^ v16 & (v44 ^ v30 | v58);
  1729. a1[82] = v58 ^ (v44 | v30) ^ v44 ^ v44 ^ v30 ^ v127 & v126;
  1730. a1[83] = v127;
  1731. v72 = __ROR4__(v58 ^ v30 ^ v109 ^ v71 ^ 0x9E3779ED, 21);
  1732. v85 = __ROR4__(v72 ^ v44 ^ v16 ^ v84 ^ 0x9E3779EC, 21);
  1733. v98 = __ROR4__(v85 ^ v58 ^ v30 ^ v97 ^ 0x9E3779EF, 21);
  1734. v110 = __ROR4__(v98 ^ v72 ^ v44 ^ v109 ^ 0x9E3779EE, 21);
  1735. v124 = ~v98 ^ v72 & v110 ^ v85 ^ v110 ^ v72 ^ (v110 | ~v98);
  1736. v125 = v124 ^ (~v98 ^ v72 & v110 | ~v98 ^ v72 & v110 ^ v85 | v110 ^ v72);
  1737. v123 = v125 ^ ~v98 ^ v72 & v110 ^ (~v98 ^ v72 & v110 ^ v85 | v110 ^ v72) ^ v110;
  1738. a1[84] = v125;
  1739. a1[85] = ~v98 ^ v72 & v110 ^ v85;
  1740. a1[86] = v123;
  1741. a1[87] = ~(~v98 ^ v72 & v110) ^ v123 & v124;
  1742. v17 = __ROR4__(v110 ^ v85 ^ v58 ^ v16 ^ 0x9E3779E1, 21);
  1743. v31 = __ROR4__(v17 ^ v98 ^ v72 ^ v30 ^ 0x9E3779E0, 21);
  1744. v45 = __ROR4__(v31 ^ v110 ^ v85 ^ v44 ^ 0x9E3779E3, 21);
  1745. v59 = __ROR4__(v45 ^ v17 ^ v98 ^ v58 ^ 0x9E3779E2, 21);
  1746. v122 = ~v59 ^ v45 ^ (v31 ^ v17) & (v59 ^ v31);
  1747. v121 = v59 ^ v31 | ~v59 ^ v45;
  1748. v120 = v31 ^ v17 ^ v122 & ~v59;
  1749. v119 = v121 ^ v122 ^ ~v59 ^ v59 ^ v31;
  1750. a1[88] = v122;
  1751. a1[89] = v120;
  1752. a1[90] = v119 ^ v120 & (v31 ^ v17);
  1753. a1[91] = (v120 | v119) ^ ~(v31 ^ v17 ^ v121);
  1754. v73 = __ROR4__(v59 ^ v31 ^ v110 ^ v72 ^ 0x9E3779E5, 21);
  1755. v86 = __ROR4__(v73 ^ v45 ^ v17 ^ v85 ^ 0x9E3779E4, 21);
  1756. v99 = __ROR4__(v86 ^ v59 ^ v31 ^ v98 ^ 0x9E3779E7, 21);
  1757. v111 = __ROR4__(v99 ^ v73 ^ v45 ^ v110 ^ 0x9E3779E6, 21);
  1758. v117 = ~v111 ^ v99 ^ (v73 ^ ~v111) & (v111 ^ v86);
  1759. v116 = v73 ^ ~v111 ^ v111 ^ v86 ^ v73 ^ (v73 ^ ~v111 ^ v111 ^ v86) & (~v111 ^ v99);
  1760. v118 = v117 & (v73 ^ ~v111 ^ v111 ^ v86 ^ v73);
  1761. v115 = v118 ^ v73 ^ ~v111;
  1762. a1[92] = v117;
  1763. a1[93] = v115 & v116 ^ v118 ^ (v117 | v73 ^ ~v111 ^ v111 ^ v86);
  1764. a1[94] = ~(v116 ^ (v115 | v118));
  1765. a1[95] = v115;
  1766. v18 = __ROR4__(v111 ^ v86 ^ v59 ^ v17 ^ 0x9E3779D9, 21);
  1767. v32 = __ROR4__(v18 ^ v99 ^ v73 ^ v31 ^ 0x9E3779D8, 21);
  1768. v46 = __ROR4__(v32 ^ v111 ^ v86 ^ v45 ^ 0x9E3779DB, 21);
  1769. v60 = __ROR4__(v46 ^ v18 ^ v99 ^ v59 ^ 0x9E3779DA, 21);
  1770. v113 = (v18 & v32 | v46 ^ v18) ^ (v60 | v18) & (v32 ^ v60);
  1771. v114 = v32 ^ v60 ^ v46 ^ (v18 & v32 ^ (v60 | v18) | v113 ^ v18 & v32);
  1772. a1[96] = v113 ^ v18 & v32 ^ (v60 | v18) ^ (v113 | v114);
  1773. a1[97] = v114;
  1774. a1[98] = v113;
  1775. a1[99] = v32 ^ v60 ^ v46 ^ (v18 & v32 ^ (v60 | v18)) & (v18 & v32 | v46 ^ v18);
  1776. return __readfsqword(0x28u) ^ v207;
  1777. }
  1778. // 401B70: using guessed type unsigned __int16 anonymous_1[2];
  1779. // 401B70: using guessed type unsigned __int16 anonymous_3[2];
  1780. // 401B70: using guessed type unsigned __int16 anonymous_5[2];
  1781. // 401B70: using guessed type unsigned __int16 anonymous_6[6];
  1782.  
  1783. //----- (00000000004053D1) ----------------------------------------------------
  1784. __int64 __fastcall decode32le(unsigned __int16 *a1)
  1785. {
  1786. return (*((unsigned __int8 *)a1 + 2) << 16) | *a1 | (*((unsigned __int8 *)a1 + 3) << 24);
  1787. }
  1788.  
  1789. //----- (000000000040541E) ----------------------------------------------------
  1790. unsigned __int64 __fastcall sosemanuk_init(int *a1, _DWORD *a2, const void *a3, size_t a4)
  1791. {
  1792. int v4; // eax
  1793. int v5; // et0
  1794. int v6; // et0
  1795. int v7; // et0
  1796. int v8; // et0
  1797. int v9; // et0
  1798. int v10; // et0
  1799. int v11; // et0
  1800. int v12; // et0
  1801. int v13; // et0
  1802. int v14; // et0
  1803. int v15; // et0
  1804. int v16; // et0
  1805. int v17; // et0
  1806. int v18; // et0
  1807. int v20; // [rsp+Ch] [rbp-54h]
  1808. int v21; // [rsp+Ch] [rbp-54h]
  1809. int v22; // [rsp+Ch] [rbp-54h]
  1810. int v23; // [rsp+Ch] [rbp-54h]
  1811. int v24; // [rsp+Ch] [rbp-54h]
  1812. int v25; // [rsp+Ch] [rbp-54h]
  1813. int v26; // [rsp+Ch] [rbp-54h]
  1814. int v27; // [rsp+Ch] [rbp-54h]
  1815. int v28; // [rsp+Ch] [rbp-54h]
  1816. int v29; // [rsp+Ch] [rbp-54h]
  1817. int v30; // [rsp+Ch] [rbp-54h]
  1818. int v31; // [rsp+Ch] [rbp-54h]
  1819. int v32; // [rsp+Ch] [rbp-54h]
  1820. int v33; // [rsp+Ch] [rbp-54h]
  1821. int v34; // [rsp+Ch] [rbp-54h]
  1822. int v35; // [rsp+Ch] [rbp-54h]
  1823. int v36; // [rsp+Ch] [rbp-54h]
  1824. int v37; // [rsp+Ch] [rbp-54h]
  1825. int v38; // [rsp+Ch] [rbp-54h]
  1826. int v39; // [rsp+Ch] [rbp-54h]
  1827. int v40; // [rsp+Ch] [rbp-54h]
  1828. int v41; // [rsp+Ch] [rbp-54h]
  1829. int v42; // [rsp+Ch] [rbp-54h]
  1830. int v43; // [rsp+Ch] [rbp-54h]
  1831. int v44; // [rsp+Ch] [rbp-54h]
  1832. int v45; // [rsp+Ch] [rbp-54h]
  1833. int v46; // [rsp+Ch] [rbp-54h]
  1834. int v47; // [rsp+Ch] [rbp-54h]
  1835. int v48; // [rsp+Ch] [rbp-54h]
  1836. int v49; // [rsp+Ch] [rbp-54h]
  1837. int v50; // [rsp+Ch] [rbp-54h]
  1838. int v51; // [rsp+Ch] [rbp-54h]
  1839. int v52; // [rsp+Ch] [rbp-54h]
  1840. int v53; // [rsp+Ch] [rbp-54h]
  1841. int v54; // [rsp+Ch] [rbp-54h]
  1842. int v55; // [rsp+Ch] [rbp-54h]
  1843. int v56; // [rsp+Ch] [rbp-54h]
  1844. int v57; // [rsp+Ch] [rbp-54h]
  1845. int v58; // [rsp+Ch] [rbp-54h]
  1846. int v59; // [rsp+Ch] [rbp-54h]
  1847. int v60; // [rsp+Ch] [rbp-54h]
  1848. int v61; // [rsp+Ch] [rbp-54h]
  1849. int v62; // [rsp+Ch] [rbp-54h]
  1850. int v63; // [rsp+Ch] [rbp-54h]
  1851. int v64; // [rsp+Ch] [rbp-54h]
  1852. int v65; // [rsp+Ch] [rbp-54h]
  1853. int v66; // [rsp+Ch] [rbp-54h]
  1854. int v67; // [rsp+Ch] [rbp-54h]
  1855. int v68; // [rsp+Ch] [rbp-54h]
  1856. int v69; // [rsp+Ch] [rbp-54h]
  1857. int v70; // [rsp+Ch] [rbp-54h]
  1858. int v71; // [rsp+Ch] [rbp-54h]
  1859. int v72; // [rsp+Ch] [rbp-54h]
  1860. int v73; // [rsp+Ch] [rbp-54h]
  1861. int v74; // [rsp+Ch] [rbp-54h]
  1862. int v75; // [rsp+Ch] [rbp-54h]
  1863. int v76; // [rsp+Ch] [rbp-54h]
  1864. int v77; // [rsp+Ch] [rbp-54h]
  1865. int v78; // [rsp+Ch] [rbp-54h]
  1866. int v79; // [rsp+Ch] [rbp-54h]
  1867. int v80; // [rsp+Ch] [rbp-54h]
  1868. int v81; // [rsp+Ch] [rbp-54h]
  1869. int v82; // [rsp+Ch] [rbp-54h]
  1870. int v83; // [rsp+Ch] [rbp-54h]
  1871. int v84; // [rsp+Ch] [rbp-54h]
  1872. int v85; // [rsp+Ch] [rbp-54h]
  1873. int v86; // [rsp+Ch] [rbp-54h]
  1874. int v87; // [rsp+Ch] [rbp-54h]
  1875. int v88; // [rsp+Ch] [rbp-54h]
  1876. int v89; // [rsp+Ch] [rbp-54h]
  1877. int v90; // [rsp+Ch] [rbp-54h]
  1878. int v91; // [rsp+Ch] [rbp-54h]
  1879. int v92; // [rsp+Ch] [rbp-54h]
  1880. int v93; // [rsp+Ch] [rbp-54h]
  1881. int v94; // [rsp+Ch] [rbp-54h]
  1882. int v95; // [rsp+Ch] [rbp-54h]
  1883. int v96; // [rsp+Ch] [rbp-54h]
  1884. int v97; // [rsp+Ch] [rbp-54h]
  1885. int v98; // [rsp+Ch] [rbp-54h]
  1886. int v99; // [rsp+Ch] [rbp-54h]
  1887. int v100; // [rsp+Ch] [rbp-54h]
  1888. int v101; // [rsp+Ch] [rbp-54h]
  1889. int v102; // [rsp+Ch] [rbp-54h]
  1890. int v103; // [rsp+Ch] [rbp-54h]
  1891. int v104; // [rsp+Ch] [rbp-54h]
  1892. int v105; // [rsp+Ch] [rbp-54h]
  1893. int v106; // [rsp+Ch] [rbp-54h]
  1894. int v107; // [rsp+10h] [rbp-50h]
  1895. int v108; // [rsp+10h] [rbp-50h]
  1896. int v109; // [rsp+10h] [rbp-50h]
  1897. int v110; // [rsp+10h] [rbp-50h]
  1898. int v111; // [rsp+10h] [rbp-50h]
  1899. int v112; // [rsp+10h] [rbp-50h]
  1900. int v113; // [rsp+10h] [rbp-50h]
  1901. int v114; // [rsp+10h] [rbp-50h]
  1902. int v115; // [rsp+10h] [rbp-50h]
  1903. int v116; // [rsp+10h] [rbp-50h]
  1904. int v117; // [rsp+10h] [rbp-50h]
  1905. int v118; // [rsp+10h] [rbp-50h]
  1906. int v119; // [rsp+10h] [rbp-50h]
  1907. int v120; // [rsp+10h] [rbp-50h]
  1908. int v121; // [rsp+10h] [rbp-50h]
  1909. int v122; // [rsp+10h] [rbp-50h]
  1910. int v123; // [rsp+10h] [rbp-50h]
  1911. int v124; // [rsp+10h] [rbp-50h]
  1912. int v125; // [rsp+10h] [rbp-50h]
  1913. int v126; // [rsp+10h] [rbp-50h]
  1914. int v127; // [rsp+10h] [rbp-50h]
  1915. int v128; // [rsp+10h] [rbp-50h]
  1916. int v129; // [rsp+10h] [rbp-50h]
  1917. int v130; // [rsp+10h] [rbp-50h]
  1918. int v131; // [rsp+10h] [rbp-50h]
  1919. int v132; // [rsp+10h] [rbp-50h]
  1920. int v133; // [rsp+10h] [rbp-50h]
  1921. int v134; // [rsp+10h] [rbp-50h]
  1922. int v135; // [rsp+10h] [rbp-50h]
  1923. int v136; // [rsp+10h] [rbp-50h]
  1924. int v137; // [rsp+10h] [rbp-50h]
  1925. int v138; // [rsp+10h] [rbp-50h]
  1926. int v139; // [rsp+10h] [rbp-50h]
  1927. int v140; // [rsp+10h] [rbp-50h]
  1928. int v141; // [rsp+10h] [rbp-50h]
  1929. int v142; // [rsp+10h] [rbp-50h]
  1930. int v143; // [rsp+10h] [rbp-50h]
  1931. int v144; // [rsp+10h] [rbp-50h]
  1932. int v145; // [rsp+10h] [rbp-50h]
  1933. int v146; // [rsp+10h] [rbp-50h]
  1934. int v147; // [rsp+10h] [rbp-50h]
  1935. int v148; // [rsp+10h] [rbp-50h]
  1936. int v149; // [rsp+10h] [rbp-50h]
  1937. int v150; // [rsp+10h] [rbp-50h]
  1938. int v151; // [rsp+10h] [rbp-50h]
  1939. int v152; // [rsp+10h] [rbp-50h]
  1940. int v153; // [rsp+10h] [rbp-50h]
  1941. int v154; // [rsp+10h] [rbp-50h]
  1942. int v155; // [rsp+10h] [rbp-50h]
  1943. int v156; // [rsp+10h] [rbp-50h]
  1944. int v157; // [rsp+10h] [rbp-50h]
  1945. int v158; // [rsp+10h] [rbp-50h]
  1946. int v159; // [rsp+10h] [rbp-50h]
  1947. int v160; // [rsp+10h] [rbp-50h]
  1948. int v161; // [rsp+10h] [rbp-50h]
  1949. int v162; // [rsp+10h] [rbp-50h]
  1950. int v163; // [rsp+10h] [rbp-50h]
  1951. int v164; // [rsp+10h] [rbp-50h]
  1952. int v165; // [rsp+10h] [rbp-50h]
  1953. int v166; // [rsp+10h] [rbp-50h]
  1954. int v167; // [rsp+10h] [rbp-50h]
  1955. int v168; // [rsp+10h] [rbp-50h]
  1956. int v169; // [rsp+10h] [rbp-50h]
  1957. int v170; // [rsp+10h] [rbp-50h]
  1958. int v171; // [rsp+10h] [rbp-50h]
  1959. int v172; // [rsp+10h] [rbp-50h]
  1960. int v173; // [rsp+10h] [rbp-50h]
  1961. int v174; // [rsp+10h] [rbp-50h]
  1962. int v175; // [rsp+10h] [rbp-50h]
  1963. int v176; // [rsp+10h] [rbp-50h]
  1964. int v177; // [rsp+10h] [rbp-50h]
  1965. int v178; // [rsp+10h] [rbp-50h]
  1966. int v179; // [rsp+10h] [rbp-50h]
  1967. int v180; // [rsp+10h] [rbp-50h]
  1968. int v181; // [rsp+10h] [rbp-50h]
  1969. int v182; // [rsp+10h] [rbp-50h]
  1970. int v183; // [rsp+10h] [rbp-50h]
  1971. int v184; // [rsp+10h] [rbp-50h]
  1972. int v185; // [rsp+10h] [rbp-50h]
  1973. int v186; // [rsp+10h] [rbp-50h]
  1974. int v187; // [rsp+10h] [rbp-50h]
  1975. int v188; // [rsp+10h] [rbp-50h]
  1976. int v189; // [rsp+10h] [rbp-50h]
  1977. int v190; // [rsp+10h] [rbp-50h]
  1978. int v191; // [rsp+10h] [rbp-50h]
  1979. int v192; // [rsp+10h] [rbp-50h]
  1980. int v193; // [rsp+10h] [rbp-50h]
  1981. int v194; // [rsp+10h] [rbp-50h]
  1982. int v195; // [rsp+10h] [rbp-50h]
  1983. int v196; // [rsp+10h] [rbp-50h]
  1984. int v197; // [rsp+10h] [rbp-50h]
  1985. int v198; // [rsp+10h] [rbp-50h]
  1986. int v199; // [rsp+10h] [rbp-50h]
  1987. int v200; // [rsp+10h] [rbp-50h]
  1988. int v201; // [rsp+10h] [rbp-50h]
  1989. int v202; // [rsp+10h] [rbp-50h]
  1990. int v203; // [rsp+10h] [rbp-50h]
  1991. int v204; // [rsp+10h] [rbp-50h]
  1992. int v205; // [rsp+10h] [rbp-50h]
  1993. int v206; // [rsp+10h] [rbp-50h]
  1994. int v207; // [rsp+10h] [rbp-50h]
  1995. int v208; // [rsp+14h] [rbp-4Ch]
  1996. int v209; // [rsp+14h] [rbp-4Ch]
  1997. int v210; // [rsp+14h] [rbp-4Ch]
  1998. int v211; // [rsp+14h] [rbp-4Ch]
  1999. int v212; // [rsp+14h] [rbp-4Ch]
  2000. int v213; // [rsp+14h] [rbp-4Ch]
  2001. int v214; // [rsp+14h] [rbp-4Ch]
  2002. int v215; // [rsp+14h] [rbp-4Ch]
  2003. int v216; // [rsp+14h] [rbp-4Ch]
  2004. int v217; // [rsp+14h] [rbp-4Ch]
  2005. int v218; // [rsp+14h] [rbp-4Ch]
  2006. int v219; // [rsp+14h] [rbp-4Ch]
  2007. int v220; // [rsp+14h] [rbp-4Ch]
  2008. int v221; // [rsp+14h] [rbp-4Ch]
  2009. int v222; // [rsp+14h] [rbp-4Ch]
  2010. int v223; // [rsp+14h] [rbp-4Ch]
  2011. int v224; // [rsp+14h] [rbp-4Ch]
  2012. int v225; // [rsp+14h] [rbp-4Ch]
  2013. int v226; // [rsp+14h] [rbp-4Ch]
  2014. int v227; // [rsp+14h] [rbp-4Ch]
  2015. int v228; // [rsp+14h] [rbp-4Ch]
  2016. int v229; // [rsp+14h] [rbp-4Ch]
  2017. int v230; // [rsp+14h] [rbp-4Ch]
  2018. int v231; // [rsp+14h] [rbp-4Ch]
  2019. int v232; // [rsp+14h] [rbp-4Ch]
  2020. int v233; // [rsp+14h] [rbp-4Ch]
  2021. int v234; // [rsp+14h] [rbp-4Ch]
  2022. int v235; // [rsp+14h] [rbp-4Ch]
  2023. int v236; // [rsp+14h] [rbp-4Ch]
  2024. int v237; // [rsp+14h] [rbp-4Ch]
  2025. int v238; // [rsp+14h] [rbp-4Ch]
  2026. int v239; // [rsp+14h] [rbp-4Ch]
  2027. int v240; // [rsp+14h] [rbp-4Ch]
  2028. int v241; // [rsp+14h] [rbp-4Ch]
  2029. int v242; // [rsp+14h] [rbp-4Ch]
  2030. int v243; // [rsp+14h] [rbp-4Ch]
  2031. int v244; // [rsp+14h] [rbp-4Ch]
  2032. int v245; // [rsp+14h] [rbp-4Ch]
  2033. int v246; // [rsp+14h] [rbp-4Ch]
  2034. int v247; // [rsp+14h] [rbp-4Ch]
  2035. int v248; // [rsp+14h] [rbp-4Ch]
  2036. int v249; // [rsp+14h] [rbp-4Ch]
  2037. int v250; // [rsp+14h] [rbp-4Ch]
  2038. int v251; // [rsp+14h] [rbp-4Ch]
  2039. int v252; // [rsp+14h] [rbp-4Ch]
  2040. int v253; // [rsp+14h] [rbp-4Ch]
  2041. int v254; // [rsp+14h] [rbp-4Ch]
  2042. int v255; // [rsp+14h] [rbp-4Ch]
  2043. int v256; // [rsp+14h] [rbp-4Ch]
  2044. int v257; // [rsp+14h] [rbp-4Ch]
  2045. int v258; // [rsp+14h] [rbp-4Ch]
  2046. int v259; // [rsp+14h] [rbp-4Ch]
  2047. int v260; // [rsp+14h] [rbp-4Ch]
  2048. int v261; // [rsp+14h] [rbp-4Ch]
  2049. int v262; // [rsp+14h] [rbp-4Ch]
  2050. int v263; // [rsp+14h] [rbp-4Ch]
  2051. int v264; // [rsp+14h] [rbp-4Ch]
  2052. int v265; // [rsp+14h] [rbp-4Ch]
  2053. int v266; // [rsp+14h] [rbp-4Ch]
  2054. int v267; // [rsp+14h] [rbp-4Ch]
  2055. int v268; // [rsp+14h] [rbp-4Ch]
  2056. int v269; // [rsp+14h] [rbp-4Ch]
  2057. int v270; // [rsp+14h] [rbp-4Ch]
  2058. int v271; // [rsp+14h] [rbp-4Ch]
  2059. int v272; // [rsp+14h] [rbp-4Ch]
  2060. int v273; // [rsp+14h] [rbp-4Ch]
  2061. int v274; // [rsp+14h] [rbp-4Ch]
  2062. int v275; // [rsp+14h] [rbp-4Ch]
  2063. int v276; // [rsp+14h] [rbp-4Ch]
  2064. int v277; // [rsp+14h] [rbp-4Ch]
  2065. int v278; // [rsp+14h] [rbp-4Ch]
  2066. int v279; // [rsp+14h] [rbp-4Ch]
  2067. int v280; // [rsp+14h] [rbp-4Ch]
  2068. int v281; // [rsp+14h] [rbp-4Ch]
  2069. int v282; // [rsp+14h] [rbp-4Ch]
  2070. int v283; // [rsp+14h] [rbp-4Ch]
  2071. int v284; // [rsp+14h] [rbp-4Ch]
  2072. int v285; // [rsp+14h] [rbp-4Ch]
  2073. int v286; // [rsp+14h] [rbp-4Ch]
  2074. int v287; // [rsp+14h] [rbp-4Ch]
  2075. int v288; // [rsp+14h] [rbp-4Ch]
  2076. int v289; // [rsp+14h] [rbp-4Ch]
  2077. int v290; // [rsp+14h] [rbp-4Ch]
  2078. int v291; // [rsp+14h] [rbp-4Ch]
  2079. int v292; // [rsp+14h] [rbp-4Ch]
  2080. int v293; // [rsp+14h] [rbp-4Ch]
  2081. int v294; // [rsp+14h] [rbp-4Ch]
  2082. int v295; // [rsp+14h] [rbp-4Ch]
  2083. int v296; // [rsp+14h] [rbp-4Ch]
  2084. int v297; // [rsp+18h] [rbp-48h]
  2085. int v298; // [rsp+18h] [rbp-48h]
  2086. int v299; // [rsp+18h] [rbp-48h]
  2087. int v300; // [rsp+18h] [rbp-48h]
  2088. int v301; // [rsp+18h] [rbp-48h]
  2089. int v302; // [rsp+18h] [rbp-48h]
  2090. int v303; // [rsp+18h] [rbp-48h]
  2091. int v304; // [rsp+18h] [rbp-48h]
  2092. int v305; // [rsp+18h] [rbp-48h]
  2093. int v306; // [rsp+18h] [rbp-48h]
  2094. int v307; // [rsp+18h] [rbp-48h]
  2095. int v308; // [rsp+18h] [rbp-48h]
  2096. int v309; // [rsp+18h] [rbp-48h]
  2097. int v310; // [rsp+18h] [rbp-48h]
  2098. int v311; // [rsp+18h] [rbp-48h]
  2099. int v312; // [rsp+18h] [rbp-48h]
  2100. int v313; // [rsp+18h] [rbp-48h]
  2101. int v314; // [rsp+18h] [rbp-48h]
  2102. int v315; // [rsp+18h] [rbp-48h]
  2103. int v316; // [rsp+18h] [rbp-48h]
  2104. int v317; // [rsp+18h] [rbp-48h]
  2105. int v318; // [rsp+18h] [rbp-48h]
  2106. int v319; // [rsp+18h] [rbp-48h]
  2107. int v320; // [rsp+18h] [rbp-48h]
  2108. int v321; // [rsp+18h] [rbp-48h]
  2109. int v322; // [rsp+18h] [rbp-48h]
  2110. int v323; // [rsp+18h] [rbp-48h]
  2111. int v324; // [rsp+18h] [rbp-48h]
  2112. int v325; // [rsp+18h] [rbp-48h]
  2113. int v326; // [rsp+18h] [rbp-48h]
  2114. int v327; // [rsp+18h] [rbp-48h]
  2115. int v328; // [rsp+18h] [rbp-48h]
  2116. int v329; // [rsp+18h] [rbp-48h]
  2117. int v330; // [rsp+18h] [rbp-48h]
  2118. int v331; // [rsp+18h] [rbp-48h]
  2119. int v332; // [rsp+18h] [rbp-48h]
  2120. int v333; // [rsp+18h] [rbp-48h]
  2121. int v334; // [rsp+18h] [rbp-48h]
  2122. int v335; // [rsp+18h] [rbp-48h]
  2123. int v336; // [rsp+18h] [rbp-48h]
  2124. int v337; // [rsp+18h] [rbp-48h]
  2125. int v338; // [rsp+18h] [rbp-48h]
  2126. int v339; // [rsp+18h] [rbp-48h]
  2127. int v340; // [rsp+18h] [rbp-48h]
  2128. int v341; // [rsp+18h] [rbp-48h]
  2129. int v342; // [rsp+18h] [rbp-48h]
  2130. int v343; // [rsp+18h] [rbp-48h]
  2131. int v344; // [rsp+18h] [rbp-48h]
  2132. int v345; // [rsp+18h] [rbp-48h]
  2133. int v346; // [rsp+18h] [rbp-48h]
  2134. int v347; // [rsp+18h] [rbp-48h]
  2135. int v348; // [rsp+18h] [rbp-48h]
  2136. int v349; // [rsp+18h] [rbp-48h]
  2137. int v350; // [rsp+18h] [rbp-48h]
  2138. int v351; // [rsp+18h] [rbp-48h]
  2139. int v352; // [rsp+18h] [rbp-48h]
  2140. int v353; // [rsp+18h] [rbp-48h]
  2141. int v354; // [rsp+18h] [rbp-48h]
  2142. int v355; // [rsp+18h] [rbp-48h]
  2143. int v356; // [rsp+18h] [rbp-48h]
  2144. int v357; // [rsp+18h] [rbp-48h]
  2145. int v358; // [rsp+18h] [rbp-48h]
  2146. int v359; // [rsp+18h] [rbp-48h]
  2147. int v360; // [rsp+18h] [rbp-48h]
  2148. int v361; // [rsp+18h] [rbp-48h]
  2149. int v362; // [rsp+18h] [rbp-48h]
  2150. int v363; // [rsp+18h] [rbp-48h]
  2151. int v364; // [rsp+18h] [rbp-48h]
  2152. int v365; // [rsp+18h] [rbp-48h]
  2153. int v366; // [rsp+18h] [rbp-48h]
  2154. int v367; // [rsp+18h] [rbp-48h]
  2155. int v368; // [rsp+18h] [rbp-48h]
  2156. int v369; // [rsp+18h] [rbp-48h]
  2157. int v370; // [rsp+18h] [rbp-48h]
  2158. int v371; // [rsp+18h] [rbp-48h]
  2159. int v372; // [rsp+18h] [rbp-48h]
  2160. int v373; // [rsp+18h] [rbp-48h]
  2161. int v374; // [rsp+18h] [rbp-48h]
  2162. int v375; // [rsp+18h] [rbp-48h]
  2163. int v376; // [rsp+18h] [rbp-48h]
  2164. int v377; // [rsp+18h] [rbp-48h]
  2165. int v378; // [rsp+18h] [rbp-48h]
  2166. int v379; // [rsp+18h] [rbp-48h]
  2167. int v380; // [rsp+18h] [rbp-48h]
  2168. int v381; // [rsp+18h] [rbp-48h]
  2169. int v382; // [rsp+18h] [rbp-48h]
  2170. int v383; // [rsp+18h] [rbp-48h]
  2171. int v384; // [rsp+1Ch] [rbp-44h]
  2172. int v385; // [rsp+1Ch] [rbp-44h]
  2173. int v386; // [rsp+1Ch] [rbp-44h]
  2174. int v387; // [rsp+1Ch] [rbp-44h]
  2175. int v388; // [rsp+1Ch] [rbp-44h]
  2176. int v389; // [rsp+1Ch] [rbp-44h]
  2177. int v390; // [rsp+1Ch] [rbp-44h]
  2178. int v391; // [rsp+1Ch] [rbp-44h]
  2179. int v392; // [rsp+1Ch] [rbp-44h]
  2180. int v393; // [rsp+1Ch] [rbp-44h]
  2181. int v394; // [rsp+1Ch] [rbp-44h]
  2182. int v395; // [rsp+1Ch] [rbp-44h]
  2183. int v396; // [rsp+1Ch] [rbp-44h]
  2184. int v397; // [rsp+1Ch] [rbp-44h]
  2185. int v398; // [rsp+1Ch] [rbp-44h]
  2186. int v399; // [rsp+1Ch] [rbp-44h]
  2187. int v400; // [rsp+1Ch] [rbp-44h]
  2188. int v401; // [rsp+1Ch] [rbp-44h]
  2189. int v402; // [rsp+1Ch] [rbp-44h]
  2190. int v403; // [rsp+1Ch] [rbp-44h]
  2191. int v404; // [rsp+1Ch] [rbp-44h]
  2192. int v405; // [rsp+1Ch] [rbp-44h]
  2193. int v406; // [rsp+1Ch] [rbp-44h]
  2194. int v407; // [rsp+1Ch] [rbp-44h]
  2195. int v408; // [rsp+1Ch] [rbp-44h]
  2196. int v409; // [rsp+1Ch] [rbp-44h]
  2197. int v410; // [rsp+1Ch] [rbp-44h]
  2198. int v411; // [rsp+1Ch] [rbp-44h]
  2199. int v412; // [rsp+1Ch] [rbp-44h]
  2200. int v413; // [rsp+1Ch] [rbp-44h]
  2201. int v414; // [rsp+1Ch] [rbp-44h]
  2202. int v415; // [rsp+1Ch] [rbp-44h]
  2203. int v416; // [rsp+1Ch] [rbp-44h]
  2204. int v417; // [rsp+1Ch] [rbp-44h]
  2205. int v418; // [rsp+1Ch] [rbp-44h]
  2206. int v419; // [rsp+1Ch] [rbp-44h]
  2207. int v420; // [rsp+1Ch] [rbp-44h]
  2208. int v421; // [rsp+1Ch] [rbp-44h]
  2209. int v422; // [rsp+1Ch] [rbp-44h]
  2210. int v423; // [rsp+1Ch] [rbp-44h]
  2211. int v424; // [rsp+1Ch] [rbp-44h]
  2212. int v425; // [rsp+1Ch] [rbp-44h]
  2213. int v426; // [rsp+1Ch] [rbp-44h]
  2214. int v427; // [rsp+1Ch] [rbp-44h]
  2215. int v428; // [rsp+1Ch] [rbp-44h]
  2216. int v429; // [rsp+1Ch] [rbp-44h]
  2217. int v430; // [rsp+1Ch] [rbp-44h]
  2218. int v431; // [rsp+1Ch] [rbp-44h]
  2219. int v432; // [rsp+1Ch] [rbp-44h]
  2220. int v433; // [rsp+1Ch] [rbp-44h]
  2221. int v434; // [rsp+1Ch] [rbp-44h]
  2222. int v435; // [rsp+1Ch] [rbp-44h]
  2223. int v436; // [rsp+1Ch] [rbp-44h]
  2224. int v437; // [rsp+1Ch] [rbp-44h]
  2225. int v438; // [rsp+1Ch] [rbp-44h]
  2226. int v439; // [rsp+1Ch] [rbp-44h]
  2227. int v440; // [rsp+1Ch] [rbp-44h]
  2228. int v441; // [rsp+1Ch] [rbp-44h]
  2229. int v442; // [rsp+1Ch] [rbp-44h]
  2230. int v443; // [rsp+1Ch] [rbp-44h]
  2231. int v444; // [rsp+1Ch] [rbp-44h]
  2232. int v445; // [rsp+1Ch] [rbp-44h]
  2233. int v446; // [rsp+1Ch] [rbp-44h]
  2234. int v447; // [rsp+1Ch] [rbp-44h]
  2235. int v448; // [rsp+1Ch] [rbp-44h]
  2236. int v449; // [rsp+1Ch] [rbp-44h]
  2237. int v450; // [rsp+1Ch] [rbp-44h]
  2238. int v451; // [rsp+1Ch] [rbp-44h]
  2239. int v452; // [rsp+1Ch] [rbp-44h]
  2240. int v453; // [rsp+1Ch] [rbp-44h]
  2241. int v454; // [rsp+1Ch] [rbp-44h]
  2242. int v455; // [rsp+1Ch] [rbp-44h]
  2243. int v456; // [rsp+1Ch] [rbp-44h]
  2244. int v457; // [rsp+1Ch] [rbp-44h]
  2245. int v458; // [rsp+1Ch] [rbp-44h]
  2246. int v459; // [rsp+1Ch] [rbp-44h]
  2247. int v460; // [rsp+1Ch] [rbp-44h]
  2248. int v461; // [rsp+1Ch] [rbp-44h]
  2249. int v462; // [rsp+1Ch] [rbp-44h]
  2250. int v463; // [rsp+1Ch] [rbp-44h]
  2251. int v464; // [rsp+1Ch] [rbp-44h]
  2252. int v465; // [rsp+1Ch] [rbp-44h]
  2253. int v466; // [rsp+1Ch] [rbp-44h]
  2254. int v467; // [rsp+1Ch] [rbp-44h]
  2255. unsigned __int16 dest[2]; // [rsp+40h] [rbp-20h] BYREF
  2256. unsigned __int16 v470; // [rsp+44h] [rbp-1Ch] BYREF
  2257. unsigned __int16 v471[2]; // [rsp+48h] [rbp-18h] BYREF
  2258. unsigned __int16 v472[6]; // [rsp+4Ch] [rbp-14h] BYREF
  2259. unsigned __int64 v473; // [rsp+58h] [rbp-8h]
  2260.  
  2261. v473 = __readfsqword(0x28u);
  2262. if ( a4 <= 0xF )
  2263. {
  2264. if ( a4 )
  2265. memcpy(dest, a3, a4);
  2266. memset((char *)dest + a4, 0, 16 - a4);
  2267. }
  2268. else
  2269. {
  2270. memcpy(dest, a3, 0x10uLL);
  2271. }
  2272. v20 = decode32le(dest);
  2273. v107 = decode32le(&v470);
  2274. v208 = decode32le(v471);
  2275. v4 = decode32le(v472);
  2276. v21 = *a2 ^ v20;
  2277. v209 = a2[2] ^ v208;
  2278. v297 = v21 ^ a2[3] ^ v4;
  2279. v384 = a2[1] ^ v107;
  2280. v108 = v297 & v384;
  2281. v385 = v209 ^ v384;
  2282. v109 = v21 ^ v108;
  2283. v22 = v385 ^ (v297 | v21);
  2284. v386 = v297 ^ v385;
  2285. v298 = v209 ^ v297;
  2286. v210 = v386 ^ (v109 | v209);
  2287. v387 = v109 | ~v386;
  2288. v110 = v387 ^ v298 ^ v109;
  2289. v299 = v22 | v298;
  2290. v111 = __ROR4__(v299 ^ v110, 19);
  2291. v211 = __ROR4__(v210, 29);
  2292. v388 = __ROR4__(v111 ^ v299 ^ v387 ^ v211, 31);
  2293. v23 = __ROR4__((8 * v111) ^ v211 ^ v22, 25);
  2294. v5 = __ROR4__((v388 << 7) ^ v23 ^ v211, 10);
  2295. v112 = a2[4] ^ __ROR4__(v388 ^ v111 ^ v23, 27);
  2296. v389 = a2[5] ^ v388;
  2297. v24 = a2[7] ^ v23;
  2298. v300 = ~v112;
  2299. v113 = v389 & ~v112;
  2300. v212 = v113 ^ ~(a2[6] ^ v5);
  2301. v114 = v24 | v113;
  2302. v25 = v212 ^ v24;
  2303. v390 = v114 ^ v389;
  2304. v115 = v300 ^ v114;
  2305. v301 = v390 | v300;
  2306. v391 = v25 ^ v390;
  2307. v213 = v301 & (v115 | v212);
  2308. v116 = v391 ^ v115;
  2309. v392 = v116 ^ v213 & v391;
  2310. v117 = v301 ^ v213 & v116;
  2311. v214 = __ROR4__(v213, 19);
  2312. v26 = __ROR4__(v25, 29);
  2313. v118 = __ROR4__(v214 ^ v117 ^ v26, 31);
  2314. v393 = __ROR4__((8 * v214) ^ v26 ^ v392, 25);
  2315. v6 = __ROR4__((v118 << 7) ^ v393 ^ v26, 10);
  2316. v215 = a2[8] ^ __ROR4__(v118 ^ v214 ^ v393, 27);
  2317. v119 = a2[9] ^ v118;
  2318. v27 = a2[10] ^ v6;
  2319. v394 = a2[11] ^ v393;
  2320. v302 = v215;
  2321. v216 = v394 ^ v27 & v215;
  2322. v28 = v216 ^ v119 ^ v27;
  2323. v395 = v119 ^ (v302 | v394);
  2324. v303 = v28 ^ v302;
  2325. v120 = v395;
  2326. v396 = v216 ^ (v303 | v395);
  2327. v304 = v120 & v216 ^ v303;
  2328. v29 = __ROR4__(v28, 19);
  2329. v121 = __ROR4__(v304 ^ v396 ^ v120, 29);
  2330. v397 = __ROR4__(v29 ^ v396 ^ v121, 31);
  2331. v305 = __ROR4__((8 * v29) ^ v121 ^ ~v304, 25);
  2332. v7 = __ROR4__((v397 << 7) ^ v305 ^ v121, 10);
  2333. v30 = a2[12] ^ __ROR4__(v397 ^ v29 ^ v305, 27);
  2334. v398 = a2[13] ^ v397;
  2335. v122 = a2[14] ^ v7;
  2336. v306 = a2[15] ^ v305;
  2337. v217 = v30;
  2338. v31 = v306 | v30;
  2339. v307 = v398 ^ v306;
  2340. v399 = v217 & v398;
  2341. v218 = v122 ^ v217;
  2342. v123 = v307 ^ v122;
  2343. v219 = v399 | v218;
  2344. v308 = v219 ^ v31 & v307;
  2345. v32 = v399 ^ v31;
  2346. v220 = v123 ^ v32 & v219;
  2347. v124 = v123 ^ (v32 | v308 ^ v399);
  2348. v400 = __ROR4__(v308 ^ v32 ^ (v308 | v124), 19);
  2349. v309 = __ROR4__(v308, 29);
  2350. v125 = __ROR4__(v400 ^ v124 ^ v309, 31);
  2351. v221 = __ROR4__((8 * v400) ^ v309 ^ v220, 25);
  2352. v8 = __ROR4__((v125 << 7) ^ v221 ^ v309, 10);
  2353. v401 = a2[16] ^ __ROR4__(v125 ^ v400 ^ v221, 27);
  2354. v222 = a2[19] ^ v221;
  2355. v126 = v222 ^ a2[17] ^ v125;
  2356. v223 = ~v222;
  2357. v310 = v223 ^ a2[18] ^ v8;
  2358. v224 = v401 ^ v223;
  2359. v33 = v126;
  2360. v127 = v310 ^ v224 & v126;
  2361. v34 = v224 ^ v33;
  2362. v402 = v34 ^ v401;
  2363. v311 = v402 ^ v34 & v310;
  2364. v403 = v127 & v402;
  2365. v225 = v403 ^ v224;
  2366. v35 = v403 ^ (v127 | v34);
  2367. v128 = __ROR4__(v127, 19);
  2368. v404 = __ROR4__(~(v311 ^ (v225 | v403)), 29);
  2369. v36 = __ROR4__(v128 ^ v225 & v311 ^ v35 ^ v404, 31);
  2370. v226 = __ROR4__((8 * v128) ^ v404 ^ v225, 25);
  2371. v9 = __ROR4__((v36 << 7) ^ v226 ^ v404, 10);
  2372. v129 = a2[20] ^ __ROR4__(v36 ^ v128 ^ v226, 27);
  2373. v37 = a2[21] ^ v36;
  2374. v227 = a2[23] ^ v226;
  2375. v130 = v37 ^ v129;
  2376. v38 = v227 ^ v37;
  2377. v228 = ~v227;
  2378. v312 = v38;
  2379. v405 = v228 ^ a2[22] ^ v9;
  2380. v39 = v405 ^ v130 & v38;
  2381. v406 = v312 | v405;
  2382. v313 = v228 ^ v312;
  2383. v229 = v130 ^ v39 & v228;
  2384. v314 = v406 ^ v39 ^ v313;
  2385. v407 = (v229 | v314) ^ ~(v130 ^ v406);
  2386. v40 = __ROR4__(v39, 19);
  2387. v131 = __ROR4__(v314 ^ v229 & v130, 29);
  2388. v230 = __ROR4__(v40 ^ v229 ^ v131, 31);
  2389. v408 = __ROR4__((8 * v40) ^ v131 ^ v407, 25);
  2390. v41 = a2[24] ^ __ROR4__(v230 ^ v40 ^ v408, 27);
  2391. v132 = ~(a2[26] ^ __ROR4__((v230 << 7) ^ v408 ^ v131, 10));
  2392. v315 = a2[27] ^ v408;
  2393. v409 = v41 & v315;
  2394. v42 = v315 ^ v41;
  2395. v410 = v132 ^ v409;
  2396. v231 = v410 ^ a2[25] ^ v230;
  2397. v133 = v42 ^ (v315 | v132);
  2398. v43 = v231 | v42;
  2399. v134 = v231 ^ v133;
  2400. v316 = v43 ^ v315;
  2401. v44 = v134 ^ (v410 | v43);
  2402. v317 = v44 ^ v410 ^ v316;
  2403. v135 = ~v410 ^ v317 & v134;
  2404. v45 = __ROR4__(v44, 19);
  2405. v318 = __ROR4__(v317, 29);
  2406. v232 = __ROR4__(v45 ^ v231 ^ v318, 31);
  2407. v136 = __ROR4__((8 * v45) ^ v318 ^ v135, 25);
  2408. v46 = a2[28] ^ __ROR4__(v232 ^ v45 ^ v136, 27);
  2409. v319 = a2[30] ^ __ROR4__((v232 << 7) ^ v136 ^ v318, 10);
  2410. v137 = a2[31] ^ v136;
  2411. v411 = a2[29] ^ v232;
  2412. v233 = v137 ^ (v319 | v411);
  2413. v412 = v319 ^ v411;
  2414. v320 = v233 ^ v319;
  2415. v138 = v46 & (v412 | v137);
  2416. v413 = v320 ^ v412;
  2417. v139 = v233 ^ v138;
  2418. v234 = v46 ^ (v413 | v233);
  2419. v47 = v320 ^ (v413 | v46);
  2420. v235 = v413 ^ v234;
  2421. v321 = v235 ^ v320;
  2422. v236 = v413 ^ v47 & v235;
  2423. v414 = __ROR4__((v47 | ~v321) ^ v413, 19);
  2424. v237 = __ROR4__(v236, 29);
  2425. v140 = __ROR4__(v414 ^ v139 ^ v237, 31);
  2426. v48 = __ROR4__((8 * v414) ^ v237 ^ v47, 25);
  2427. v415 = a2[32] ^ __ROR4__(v140 ^ v414 ^ v48, 27);
  2428. v238 = a2[34] ^ __ROR4__((v140 << 7) ^ v48 ^ v237, 10);
  2429. v49 = v415 ^ a2[35] ^ v48;
  2430. v322 = a2[33] ^ v140;
  2431. v141 = v49 & v322;
  2432. v323 = v238 ^ v322;
  2433. v142 = v415 ^ v141;
  2434. v416 = v323 ^ (v49 | v415);
  2435. v324 = v49 ^ v323;
  2436. v50 = v238 ^ v49;
  2437. v239 = v324 ^ (v142 | v238);
  2438. v325 = v142 | ~v324;
  2439. v143 = v325 ^ v50 ^ v142;
  2440. v51 = v416 | v50;
  2441. v144 = __ROR4__(v51 ^ v143, 19);
  2442. v240 = __ROR4__(v239, 29);
  2443. v326 = __ROR4__(v144 ^ v51 ^ v325 ^ v240, 31);
  2444. v417 = __ROR4__((8 * v144) ^ v240 ^ v416, 25);
  2445. v10 = __ROR4__((v326 << 7) ^ v417 ^ v240, 10);
  2446. v145 = a2[36] ^ __ROR4__(v326 ^ v144 ^ v417, 27);
  2447. v327 = a2[37] ^ v326;
  2448. v418 = a2[39] ^ v417;
  2449. v52 = ~v145;
  2450. v146 = v327 & ~v145;
  2451. v241 = v146 ^ ~(a2[38] ^ v10);
  2452. v147 = v418 | v146;
  2453. v419 = v241 ^ v418;
  2454. v328 = v147 ^ v327;
  2455. v148 = v52 ^ v147;
  2456. v53 = v328 | v52;
  2457. v329 = v419 ^ v328;
  2458. v242 = v53 & (v148 | v241);
  2459. v149 = v329 ^ v148;
  2460. v330 = v149 ^ v242 & v329;
  2461. v150 = v53 ^ v242 & v149;
  2462. v243 = __ROR4__(v242, 19);
  2463. v420 = __ROR4__(v419, 29);
  2464. v151 = __ROR4__(v243 ^ v150 ^ v420, 31);
  2465. v331 = __ROR4__((8 * v243) ^ v420 ^ v330, 25);
  2466. v11 = __ROR4__((v151 << 7) ^ v331 ^ v420, 10);
  2467. v244 = a2[40] ^ __ROR4__(v151 ^ v243 ^ v331, 27);
  2468. v152 = a2[41] ^ v151;
  2469. v421 = a2[42] ^ v11;
  2470. v332 = a2[43] ^ v331;
  2471. v54 = v244;
  2472. v245 = v332 ^ v421 & v244;
  2473. v422 = v245 ^ v152 ^ v421;
  2474. v333 = v152 ^ (v54 | v332);
  2475. v55 = v422 ^ v54;
  2476. v153 = v333;
  2477. v334 = v245 ^ (v55 | v333);
  2478. v56 = v153 & v245 ^ v55;
  2479. v423 = __ROR4__(v422, 19);
  2480. v154 = __ROR4__(v56 ^ v334 ^ v153, 29);
  2481. v335 = __ROR4__(v423 ^ v334 ^ v154, 31);
  2482. v57 = __ROR4__((8 * v423) ^ v154 ^ ~v56, 25);
  2483. v12 = __ROR4__((v335 << 7) ^ v57 ^ v154, 10);
  2484. v424 = a2[44] ^ __ROR4__(v335 ^ v423 ^ v57, 27);
  2485. v336 = a2[45] ^ v335;
  2486. v155 = a2[46] ^ v12;
  2487. v58 = a2[47] ^ v57;
  2488. v246 = v424;
  2489. v425 = v58 | v424;
  2490. v59 = v336 ^ v58;
  2491. v337 = v246 & v336;
  2492. v247 = v155 ^ v246;
  2493. v156 = v59 ^ v155;
  2494. v248 = v337 | v247;
  2495. v60 = v248 ^ v425 & v59;
  2496. v426 = v337 ^ v425;
  2497. v249 = v156 ^ v426 & v248;
  2498. v157 = v156 ^ (v426 | v60 ^ v337);
  2499. v338 = __ROR4__(v60 ^ v426 ^ (v60 | v157), 19);
  2500. v61 = __ROR4__(v60, 29);
  2501. v158 = __ROR4__(v338 ^ v157 ^ v61, 31);
  2502. v250 = __ROR4__((8 * v338) ^ v61 ^ v249, 25);
  2503. v339 = __ROR4__(v158 ^ v338 ^ v250, 27);
  2504. v62 = __ROR4__((v158 << 7) ^ v250 ^ v61, 10);
  2505. a1[9] = v339;
  2506. a1[8] = v158;
  2507. a1[7] = v62;
  2508. a1[6] = v250;
  2509. v340 = a2[48] ^ v339;
  2510. v251 = a2[51] ^ v250;
  2511. v159 = v251 ^ a2[49] ^ v158;
  2512. v252 = ~v251;
  2513. v63 = v252 ^ a2[50] ^ v62;
  2514. v253 = v340 ^ v252;
  2515. v427 = v159;
  2516. v160 = v63 ^ v253 & v159;
  2517. v428 = v253 ^ v427;
  2518. v341 = v428 ^ v340;
  2519. v64 = v341 ^ v428 & v63;
  2520. v342 = v160 & v341;
  2521. v254 = v342 ^ v253;
  2522. v429 = v342 ^ (v160 | v428);
  2523. v161 = __ROR4__(v160, 19);
  2524. v343 = __ROR4__(~(v64 ^ (v254 | v342)), 29);
  2525. v430 = __ROR4__(v161 ^ v254 & v64 ^ v429 ^ v343, 31);
  2526. v255 = __ROR4__((8 * v161) ^ v343 ^ v254, 25);
  2527. v13 = __ROR4__((v430 << 7) ^ v255 ^ v343, 10);
  2528. v162 = a2[52] ^ __ROR4__(v430 ^ v161 ^ v255, 27);
  2529. v431 = a2[53] ^ v430;
  2530. v256 = a2[55] ^ v255;
  2531. v163 = v431 ^ v162;
  2532. v432 = v256 ^ v431;
  2533. v257 = ~v256;
  2534. v65 = v432;
  2535. v344 = v257 ^ a2[54] ^ v13;
  2536. v433 = v344 ^ v163 & v432;
  2537. v345 = v65 | v344;
  2538. v66 = v257 ^ v65;
  2539. v258 = v163 ^ v433 & v257;
  2540. v67 = v345 ^ v433 ^ v66;
  2541. v346 = (v258 | v67) ^ ~(v163 ^ v345);
  2542. v434 = __ROR4__(v433, 19);
  2543. v164 = __ROR4__(v67 ^ v258 & v163, 29);
  2544. v259 = __ROR4__(v434 ^ v258 ^ v164, 31);
  2545. v347 = __ROR4__((8 * v434) ^ v164 ^ v346, 25);
  2546. v435 = a2[56] ^ __ROR4__(v259 ^ v434 ^ v347, 27);
  2547. v165 = ~(a2[58] ^ __ROR4__((v259 << 7) ^ v347 ^ v164, 10));
  2548. v68 = a2[59] ^ v347;
  2549. v348 = v435 & v68;
  2550. v436 = v68 ^ v435;
  2551. v349 = v165 ^ v348;
  2552. v260 = v349 ^ a2[57] ^ v259;
  2553. v166 = v436 ^ (v68 | v165);
  2554. v437 = v260 | v436;
  2555. v167 = v260 ^ v166;
  2556. v69 = v437 ^ v68;
  2557. v438 = v167 ^ (v349 | v437);
  2558. v70 = v438 ^ v349 ^ v69;
  2559. v168 = ~v349 ^ v70 & v167;
  2560. v439 = __ROR4__(v438, 19);
  2561. v71 = __ROR4__(v70, 29);
  2562. v261 = __ROR4__(v439 ^ v260 ^ v71, 31);
  2563. v169 = __ROR4__((8 * v439) ^ v71 ^ v168, 25);
  2564. v440 = a2[60] ^ __ROR4__(v261 ^ v439 ^ v169, 27);
  2565. v72 = a2[62] ^ __ROR4__((v261 << 7) ^ v169 ^ v71, 10);
  2566. v170 = a2[63] ^ v169;
  2567. v350 = a2[61] ^ v261;
  2568. v262 = v170 ^ (v72 | v350);
  2569. v351 = v72 ^ v350;
  2570. v73 = v262 ^ v72;
  2571. v171 = v440 & (v351 | v170);
  2572. v352 = v73 ^ v351;
  2573. v172 = v262 ^ v171;
  2574. v263 = v440 ^ (v352 | v262);
  2575. v441 = v73 ^ (v352 | v440);
  2576. v264 = v352 ^ v263;
  2577. v74 = v264 ^ v73;
  2578. v265 = v352 ^ v441 & v264;
  2579. v353 = __ROR4__((v441 | ~v74) ^ v352, 19);
  2580. v266 = __ROR4__(v265, 29);
  2581. v173 = __ROR4__(v353 ^ v172 ^ v266, 31);
  2582. v442 = __ROR4__((8 * v353) ^ v266 ^ v441, 25);
  2583. v354 = a2[64] ^ __ROR4__(v173 ^ v353 ^ v442, 27);
  2584. v267 = a2[66] ^ __ROR4__((v173 << 7) ^ v442 ^ v266, 10);
  2585. v443 = v354 ^ a2[67] ^ v442;
  2586. v75 = a2[65] ^ v173;
  2587. v174 = v443 & v75;
  2588. v76 = v267 ^ v75;
  2589. v175 = v354 ^ v174;
  2590. v355 = v76 ^ (v443 | v354);
  2591. v77 = v443 ^ v76;
  2592. v444 = v267 ^ v443;
  2593. v268 = v77 ^ (v175 | v267);
  2594. v78 = v175 | ~v77;
  2595. v176 = v78 ^ v444 ^ v175;
  2596. v445 = v355 | v444;
  2597. v177 = __ROR4__(v445 ^ v176, 19);
  2598. v269 = __ROR4__(v268, 29);
  2599. v79 = __ROR4__(v177 ^ v445 ^ v78 ^ v269, 31);
  2600. v356 = __ROR4__((8 * v177) ^ v269 ^ v355, 25);
  2601. v14 = __ROR4__((v79 << 7) ^ v356 ^ v269, 10);
  2602. v178 = a2[68] ^ __ROR4__(v79 ^ v177 ^ v356, 27);
  2603. v80 = a2[69] ^ v79;
  2604. v357 = a2[71] ^ v356;
  2605. v446 = ~v178;
  2606. v179 = v80 & ~v178;
  2607. v270 = v179 ^ ~(a2[70] ^ v14);
  2608. v180 = v357 | v179;
  2609. v358 = v270 ^ v357;
  2610. v81 = v180 ^ v80;
  2611. v181 = v446 ^ v180;
  2612. v447 = v81 | v446;
  2613. v82 = v358 ^ v81;
  2614. v271 = v447 & (v181 | v270);
  2615. v182 = v82 ^ v181;
  2616. v83 = v182 ^ v271 & v82;
  2617. v183 = v447 ^ v271 & v182;
  2618. v272 = __ROR4__(v271, 19);
  2619. v359 = __ROR4__(v358, 29);
  2620. v184 = __ROR4__(v272 ^ v183 ^ v359, 31);
  2621. v84 = __ROR4__((8 * v272) ^ v359 ^ v83, 25);
  2622. v273 = __ROR4__(v184 ^ v272 ^ v84, 27);
  2623. v360 = __ROR4__((v184 << 7) ^ v84 ^ v359, 10);
  2624. a1[10] = v273;
  2625. a1[4] = v184;
  2626. a1[11] = v360;
  2627. a1[5] = v84;
  2628. v185 = a2[73] ^ v184;
  2629. v361 = a2[74] ^ v360;
  2630. v85 = a2[75] ^ v84;
  2631. v448 = a2[72] ^ v273;
  2632. v274 = v85 ^ v361 & v448;
  2633. v362 = v274 ^ v185 ^ v361;
  2634. v86 = v185 ^ (v448 | v85);
  2635. v449 = v362 ^ v448;
  2636. v186 = v86;
  2637. v87 = v274 ^ (v449 | v86);
  2638. v450 = v186 & v274 ^ v449;
  2639. v363 = __ROR4__(v362, 19);
  2640. v187 = __ROR4__(v450 ^ v87 ^ v186, 29);
  2641. v88 = __ROR4__(v363 ^ v87 ^ v187, 31);
  2642. v451 = __ROR4__((8 * v363) ^ v187 ^ ~v450, 25);
  2643. v15 = __ROR4__((v88 << 7) ^ v451 ^ v187, 10);
  2644. v364 = a2[76] ^ __ROR4__(v88 ^ v363 ^ v451, 27);
  2645. v89 = a2[77] ^ v88;
  2646. v188 = a2[78] ^ v15;
  2647. v452 = a2[79] ^ v451;
  2648. v275 = v364;
  2649. v365 = v452 | v364;
  2650. v453 = v89 ^ v452;
  2651. v90 = v275 & v89;
  2652. v276 = v188 ^ v275;
  2653. v189 = v453 ^ v188;
  2654. v277 = v90 | v276;
  2655. v454 = v277 ^ v365 & v453;
  2656. v366 = v90 ^ v365;
  2657. v278 = v189 ^ v366 & v277;
  2658. v190 = v189 ^ (v366 | v454 ^ v90);
  2659. v91 = __ROR4__(v454 ^ v366 ^ (v454 | v190), 19);
  2660. v455 = __ROR4__(v454, 29);
  2661. v191 = __ROR4__(v91 ^ v190 ^ v455, 31);
  2662. v279 = __ROR4__((8 * v91) ^ v455 ^ v278, 25);
  2663. v16 = __ROR4__((v191 << 7) ^ v279 ^ v455, 10);
  2664. v92 = a2[80] ^ __ROR4__(v191 ^ v91 ^ v279, 27);
  2665. v280 = a2[83] ^ v279;
  2666. v192 = v280 ^ a2[81] ^ v191;
  2667. v281 = ~v280;
  2668. v456 = v281 ^ a2[82] ^ v16;
  2669. v282 = v92 ^ v281;
  2670. v367 = v192;
  2671. v193 = v456 ^ v282 & v192;
  2672. v368 = v282 ^ v367;
  2673. v93 = v368 ^ v92;
  2674. v457 = v93 ^ v368 & v456;
  2675. v94 = v193 & v93;
  2676. v283 = v94 ^ v282;
  2677. v369 = v94 ^ (v193 | v368);
  2678. v194 = __ROR4__(v193, 19);
  2679. v95 = __ROR4__(~(v457 ^ (v283 | v94)), 29);
  2680. v370 = __ROR4__(v194 ^ v283 & v457 ^ v369 ^ v95, 31);
  2681. v284 = __ROR4__((8 * v194) ^ v95 ^ v283, 25);
  2682. v17 = __ROR4__((v370 << 7) ^ v284 ^ v95, 10);
  2683. v195 = a2[84] ^ __ROR4__(v370 ^ v194 ^ v284, 27);
  2684. v371 = a2[85] ^ v370;
  2685. v285 = a2[87] ^ v284;
  2686. v196 = v371 ^ v195;
  2687. v372 = v285 ^ v371;
  2688. v286 = ~v285;
  2689. v458 = v372;
  2690. v96 = v286 ^ a2[86] ^ v17;
  2691. v373 = v96 ^ v196 & v372;
  2692. v97 = v458 | v96;
  2693. v459 = v286 ^ v458;
  2694. v287 = v196 ^ v373 & v286;
  2695. v460 = v97 ^ v373 ^ v459;
  2696. v98 = (v287 | v460) ^ ~(v196 ^ v97);
  2697. v374 = __ROR4__(v373, 19);
  2698. v197 = __ROR4__(v460 ^ v287 & v196, 29);
  2699. v288 = __ROR4__(v374 ^ v287 ^ v197, 31);
  2700. v99 = __ROR4__((8 * v374) ^ v197 ^ v98, 25);
  2701. v375 = a2[88] ^ __ROR4__(v288 ^ v374 ^ v99, 27);
  2702. v198 = ~(a2[90] ^ __ROR4__((v288 << 7) ^ v99 ^ v197, 10));
  2703. v461 = a2[91] ^ v99;
  2704. v100 = v375 & v461;
  2705. v376 = v461 ^ v375;
  2706. v101 = v198 ^ v100;
  2707. v289 = v101 ^ a2[89] ^ v288;
  2708. v199 = v376 ^ (v461 | v198);
  2709. v377 = v289 | v376;
  2710. v200 = v289 ^ v199;
  2711. v462 = v377 ^ v461;
  2712. v378 = v200 ^ (v101 | v377);
  2713. v463 = v378 ^ v101 ^ v462;
  2714. v201 = ~v101 ^ v463 & v200;
  2715. v379 = __ROR4__(v378, 19);
  2716. v464 = __ROR4__(v463, 29);
  2717. v290 = __ROR4__(v379 ^ v289 ^ v464, 31);
  2718. v202 = __ROR4__((8 * v379) ^ v464 ^ v201, 25);
  2719. v380 = a2[92] ^ __ROR4__(v290 ^ v379 ^ v202, 27);
  2720. v465 = a2[94] ^ __ROR4__((v290 << 7) ^ v202 ^ v464, 10);
  2721. v203 = a2[95] ^ v202;
  2722. v102 = a2[93] ^ v290;
  2723. v291 = v203 ^ (v465 | v102);
  2724. v103 = v465 ^ v102;
  2725. v466 = v291 ^ v465;
  2726. v204 = v380 & (v103 | v203);
  2727. v104 = v466 ^ v103;
  2728. v205 = v291 ^ v204;
  2729. v292 = v380 ^ (v104 | v291);
  2730. v381 = v466 ^ (v104 | v380);
  2731. v293 = v104 ^ v292;
  2732. v467 = v293 ^ v466;
  2733. v294 = v104 ^ v381 & v293;
  2734. v105 = __ROR4__((v381 | ~v467) ^ v104, 19);
  2735. v295 = __ROR4__(v294, 29);
  2736. v206 = __ROR4__(v105 ^ v205 ^ v295, 31);
  2737. v382 = __ROR4__((8 * v105) ^ v295 ^ v381, 25);
  2738. v18 = __ROR4__((v206 << 7) ^ v382 ^ v295, 10);
  2739. v106 = a2[96] ^ __ROR4__(v206 ^ v105 ^ v382, 27);
  2740. v207 = a2[97] ^ v206;
  2741. v296 = a2[98] ^ v18;
  2742. v383 = a2[99] ^ v382;
  2743. a1[3] = v106;
  2744. a1[2] = v207;
  2745. a1[1] = v296;
  2746. *a1 = v383;
  2747. a1[32] = 80;
  2748. return __readfsqword(0x28u) ^ v473;
  2749. }
  2750. // 40541E: using guessed type unsigned __int16 dest[2];
  2751. // 40541E: using guessed type unsigned __int16 anonymous_1[2];
  2752. // 40541E: using guessed type unsigned __int16 anonymous_2[6];
  2753.  
  2754. //----- (0000000000406C98) ----------------------------------------------------
  2755. __int64 __fastcall sosemanuk_internal(unsigned int *a1)
  2756. {
  2757. __int64 result; // rax
  2758. int v2; // [rsp+8h] [rbp-158h]
  2759. int v3; // [rsp+Ch] [rbp-154h]
  2760. int v4; // [rsp+10h] [rbp-150h]
  2761. int v5; // [rsp+14h] [rbp-14Ch]
  2762. int v6; // [rsp+18h] [rbp-148h]
  2763. int v7; // [rsp+1Ch] [rbp-144h]
  2764. int v8; // [rsp+20h] [rbp-140h]
  2765. int v9; // [rsp+24h] [rbp-13Ch]
  2766. int v10; // [rsp+28h] [rbp-138h]
  2767. int v11; // [rsp+2Ch] [rbp-134h]
  2768. int v12; // [rsp+30h] [rbp-130h]
  2769. int v13; // [rsp+34h] [rbp-12Ch]
  2770. int v14; // [rsp+38h] [rbp-128h]
  2771. int v15; // [rsp+3Ch] [rbp-124h]
  2772. int v16; // [rsp+40h] [rbp-120h]
  2773. int v17; // [rsp+44h] [rbp-11Ch]
  2774. int v18; // [rsp+48h] [rbp-118h]
  2775. int v19; // [rsp+4Ch] [rbp-114h]
  2776. int v20; // [rsp+50h] [rbp-110h]
  2777. int v21; // [rsp+54h] [rbp-10Ch]
  2778. int v22; // [rsp+6Ch] [rbp-F4h]
  2779. int v23; // [rsp+74h] [rbp-ECh]
  2780. int v24; // [rsp+7Ch] [rbp-E4h]
  2781. int v25; // [rsp+84h] [rbp-DCh]
  2782. int v26; // [rsp+8Ch] [rbp-D4h]
  2783. int v27; // [rsp+94h] [rbp-CCh]
  2784. int v28; // [rsp+9Ch] [rbp-C4h]
  2785. int v29; // [rsp+A4h] [rbp-BCh]
  2786. int v30; // [rsp+ACh] [rbp-B4h]
  2787. int v31; // [rsp+B4h] [rbp-ACh]
  2788. int v32; // [rsp+BCh] [rbp-A4h]
  2789. int v33; // [rsp+C4h] [rbp-9Ch]
  2790. int v34; // [rsp+CCh] [rbp-94h]
  2791. int v35; // [rsp+D4h] [rbp-8Ch]
  2792. int v36; // [rsp+DCh] [rbp-84h]
  2793. int v37; // [rsp+E4h] [rbp-7Ch]
  2794. int v38; // [rsp+ECh] [rbp-74h]
  2795. int v39; // [rsp+F4h] [rbp-6Ch]
  2796. unsigned int v40; // [rsp+10Ch] [rbp-54h]
  2797. unsigned int v41; // [rsp+10Ch] [rbp-54h]
  2798. unsigned int v42; // [rsp+10Ch] [rbp-54h]
  2799. unsigned int v43; // [rsp+10Ch] [rbp-54h]
  2800. unsigned int v44; // [rsp+10Ch] [rbp-54h]
  2801. unsigned int v45; // [rsp+110h] [rbp-50h]
  2802. unsigned int v46; // [rsp+110h] [rbp-50h]
  2803. unsigned int v47; // [rsp+110h] [rbp-50h]
  2804. unsigned int v48; // [rsp+110h] [rbp-50h]
  2805. unsigned int v49; // [rsp+110h] [rbp-50h]
  2806. unsigned int v50; // [rsp+114h] [rbp-4Ch]
  2807. unsigned int v51; // [rsp+114h] [rbp-4Ch]
  2808. unsigned int v52; // [rsp+114h] [rbp-4Ch]
  2809. unsigned int v53; // [rsp+114h] [rbp-4Ch]
  2810. unsigned int v54; // [rsp+114h] [rbp-4Ch]
  2811. unsigned int v55; // [rsp+118h] [rbp-48h]
  2812. unsigned int v56; // [rsp+118h] [rbp-48h]
  2813. unsigned int v57; // [rsp+118h] [rbp-48h]
  2814. unsigned int v58; // [rsp+118h] [rbp-48h]
  2815. int v59; // [rsp+11Ch] [rbp-44h]
  2816. int v60; // [rsp+11Ch] [rbp-44h]
  2817. int v61; // [rsp+11Ch] [rbp-44h]
  2818. int v62; // [rsp+11Ch] [rbp-44h]
  2819. int v63; // [rsp+11Ch] [rbp-44h]
  2820. int v64; // [rsp+11Ch] [rbp-44h]
  2821. int v65; // [rsp+11Ch] [rbp-44h]
  2822. int v66; // [rsp+11Ch] [rbp-44h]
  2823. int v67; // [rsp+11Ch] [rbp-44h]
  2824. int v68; // [rsp+11Ch] [rbp-44h]
  2825. int v69; // [rsp+11Ch] [rbp-44h]
  2826. int v70; // [rsp+11Ch] [rbp-44h]
  2827. int v71; // [rsp+11Ch] [rbp-44h]
  2828. int v72; // [rsp+11Ch] [rbp-44h]
  2829. int v73; // [rsp+11Ch] [rbp-44h]
  2830. int v74; // [rsp+120h] [rbp-40h]
  2831. int v75; // [rsp+120h] [rbp-40h]
  2832. int v76; // [rsp+120h] [rbp-40h]
  2833. int v77; // [rsp+120h] [rbp-40h]
  2834. int v78; // [rsp+120h] [rbp-40h]
  2835. int v79; // [rsp+120h] [rbp-40h]
  2836. int v80; // [rsp+120h] [rbp-40h]
  2837. int v81; // [rsp+120h] [rbp-40h]
  2838. int v82; // [rsp+120h] [rbp-40h]
  2839. int v83; // [rsp+120h] [rbp-40h]
  2840. int v84; // [rsp+124h] [rbp-3Ch]
  2841. int v85; // [rsp+124h] [rbp-3Ch]
  2842. int v86; // [rsp+124h] [rbp-3Ch]
  2843. int v87; // [rsp+124h] [rbp-3Ch]
  2844. int v88; // [rsp+124h] [rbp-3Ch]
  2845. int v89; // [rsp+124h] [rbp-3Ch]
  2846. int v90; // [rsp+124h] [rbp-3Ch]
  2847. int v91; // [rsp+124h] [rbp-3Ch]
  2848. int v92; // [rsp+124h] [rbp-3Ch]
  2849. int v93; // [rsp+124h] [rbp-3Ch]
  2850. int v94; // [rsp+128h] [rbp-38h]
  2851. int v95; // [rsp+128h] [rbp-38h]
  2852. int v96; // [rsp+128h] [rbp-38h]
  2853. int v97; // [rsp+128h] [rbp-38h]
  2854. int v98; // [rsp+128h] [rbp-38h]
  2855. int v99; // [rsp+128h] [rbp-38h]
  2856. int v100; // [rsp+128h] [rbp-38h]
  2857. int v101; // [rsp+128h] [rbp-38h]
  2858. int v102; // [rsp+128h] [rbp-38h]
  2859. int v103; // [rsp+128h] [rbp-38h]
  2860. int v104; // [rsp+12Ch] [rbp-34h]
  2861. int v105; // [rsp+12Ch] [rbp-34h]
  2862. int v106; // [rsp+12Ch] [rbp-34h]
  2863. int v107; // [rsp+12Ch] [rbp-34h]
  2864. int v108; // [rsp+12Ch] [rbp-34h]
  2865. int v109; // [rsp+12Ch] [rbp-34h]
  2866. int v110; // [rsp+12Ch] [rbp-34h]
  2867. int v111; // [rsp+12Ch] [rbp-34h]
  2868. int v112; // [rsp+12Ch] [rbp-34h]
  2869. int v113; // [rsp+12Ch] [rbp-34h]
  2870. int v114; // [rsp+130h] [rbp-30h]
  2871. int v115; // [rsp+130h] [rbp-30h]
  2872. int v116; // [rsp+130h] [rbp-30h]
  2873. int v117; // [rsp+130h] [rbp-30h]
  2874. int v118; // [rsp+130h] [rbp-30h]
  2875. int v119; // [rsp+130h] [rbp-30h]
  2876. int v120; // [rsp+130h] [rbp-30h]
  2877. int v121; // [rsp+130h] [rbp-30h]
  2878. int v122; // [rsp+130h] [rbp-30h]
  2879. int v123; // [rsp+130h] [rbp-30h]
  2880. int v124; // [rsp+130h] [rbp-30h]
  2881. int v125; // [rsp+130h] [rbp-30h]
  2882. int v126; // [rsp+130h] [rbp-30h]
  2883. int v127; // [rsp+130h] [rbp-30h]
  2884. int v128; // [rsp+130h] [rbp-30h]
  2885. int v129; // [rsp+130h] [rbp-30h]
  2886. int v130; // [rsp+130h] [rbp-30h]
  2887. int v131; // [rsp+130h] [rbp-30h]
  2888. int v132; // [rsp+130h] [rbp-30h]
  2889. unsigned int v133; // [rsp+130h] [rbp-30h]
  2890. int v134; // [rsp+134h] [rbp-2Ch]
  2891. int v135; // [rsp+134h] [rbp-2Ch]
  2892. int v136; // [rsp+134h] [rbp-2Ch]
  2893. int v137; // [rsp+134h] [rbp-2Ch]
  2894. int v138; // [rsp+134h] [rbp-2Ch]
  2895. int v139; // [rsp+134h] [rbp-2Ch]
  2896. int v140; // [rsp+134h] [rbp-2Ch]
  2897. int v141; // [rsp+134h] [rbp-2Ch]
  2898. int v142; // [rsp+134h] [rbp-2Ch]
  2899. int v143; // [rsp+134h] [rbp-2Ch]
  2900. int v144; // [rsp+134h] [rbp-2Ch]
  2901. int v145; // [rsp+134h] [rbp-2Ch]
  2902. int v146; // [rsp+134h] [rbp-2Ch]
  2903. int v147; // [rsp+134h] [rbp-2Ch]
  2904. int v148; // [rsp+134h] [rbp-2Ch]
  2905. int v149; // [rsp+134h] [rbp-2Ch]
  2906. int v150; // [rsp+134h] [rbp-2Ch]
  2907. int v151; // [rsp+134h] [rbp-2Ch]
  2908. int v152; // [rsp+134h] [rbp-2Ch]
  2909. unsigned int v153; // [rsp+134h] [rbp-2Ch]
  2910. unsigned int v154; // [rsp+138h] [rbp-28h]
  2911. unsigned int v155; // [rsp+138h] [rbp-28h]
  2912. int v156; // [rsp+138h] [rbp-28h]
  2913. unsigned int v157; // [rsp+13Ch] [rbp-24h]
  2914. unsigned int v158; // [rsp+13Ch] [rbp-24h]
  2915. int v159; // [rsp+13Ch] [rbp-24h]
  2916. unsigned int v160; // [rsp+140h] [rbp-20h]
  2917. unsigned int v161; // [rsp+140h] [rbp-20h]
  2918. int v162; // [rsp+140h] [rbp-20h]
  2919. unsigned int v163; // [rsp+144h] [rbp-1Ch]
  2920. unsigned int v164; // [rsp+144h] [rbp-1Ch]
  2921. int v165; // [rsp+144h] [rbp-1Ch]
  2922. unsigned int v166; // [rsp+148h] [rbp-18h]
  2923. unsigned int v167; // [rsp+148h] [rbp-18h]
  2924. int v168; // [rsp+148h] [rbp-18h]
  2925. unsigned int v169; // [rsp+14Ch] [rbp-14h]
  2926. unsigned int v170; // [rsp+14Ch] [rbp-14h]
  2927. int v171; // [rsp+14Ch] [rbp-14h]
  2928. unsigned int v172; // [rsp+150h] [rbp-10h]
  2929. unsigned int v173; // [rsp+150h] [rbp-10h]
  2930. int v174; // [rsp+150h] [rbp-10h]
  2931. unsigned int v175; // [rsp+154h] [rbp-Ch]
  2932. unsigned int v176; // [rsp+154h] [rbp-Ch]
  2933. unsigned int v177; // [rsp+154h] [rbp-Ch]
  2934. unsigned int v178; // [rsp+158h] [rbp-8h]
  2935. unsigned int v179; // [rsp+158h] [rbp-8h]
  2936. unsigned int v180; // [rsp+158h] [rbp-8h]
  2937. unsigned int v181; // [rsp+15Ch] [rbp-4h]
  2938. unsigned int v182; // [rsp+15Ch] [rbp-4h]
  2939.  
  2940. v178 = a1[1];
  2941. v175 = a1[2];
  2942. v172 = a1[3];
  2943. v169 = a1[4];
  2944. v166 = a1[5];
  2945. v163 = a1[6];
  2946. v160 = a1[7];
  2947. v157 = a1[8];
  2948. v154 = a1[9];
  2949. if ( (a1[10] & 1) != 0 )
  2950. v2 = v157 ^ v178;
  2951. else
  2952. v2 = a1[1];
  2953. v134 = a1[11] + v2;
  2954. v114 = __ROR4__(1415926535 * a1[10], 25);
  2955. v181 = v154 ^ mul_a[HIBYTE(*a1)] ^ (*a1 << 8) ^ (v172 >> 8) ^ mul_ia[(unsigned __int8)v172];
  2956. v104 = v114 ^ (v154 + v134);
  2957. if ( (v134 & 1) != 0 )
  2958. v3 = v154 ^ v175;
  2959. else
  2960. v3 = a1[2];
  2961. v135 = v114 + v3;
  2962. v115 = __ROR4__(1415926535 * (a1[11] + v2), 25);
  2963. v50 = a1[1];
  2964. v179 = v181 ^ mul_a[HIBYTE(v178)] ^ (v178 << 8) ^ (v169 >> 8) ^ mul_ia[(unsigned __int8)v169];
  2965. v94 = v115 ^ (v181 + v135);
  2966. if ( (v135 & 1) != 0 )
  2967. v4 = v181 ^ v172;
  2968. else
  2969. v4 = a1[3];
  2970. v39 = v135;
  2971. v136 = v115 + v4;
  2972. v116 = __ROR4__(1415926535 * v39, 25);
  2973. v45 = a1[2];
  2974. v176 = v179 ^ mul_a[HIBYTE(v175)] ^ (v175 << 8) ^ (v166 >> 8) ^ mul_ia[(unsigned __int8)v166];
  2975. v84 = v116 ^ (v179 + v136);
  2976. if ( (v136 & 1) != 0 )
  2977. v5 = v179 ^ v169;
  2978. else
  2979. v5 = a1[4];
  2980. v38 = v136;
  2981. v137 = v116 + v5;
  2982. v117 = __ROR4__(1415926535 * v38, 25);
  2983. v40 = a1[3];
  2984. v173 = v176 ^ mul_a[HIBYTE(v172)] ^ (v172 << 8) ^ (v163 >> 8) ^ mul_ia[(unsigned __int8)v163];
  2985. v59 = v104;
  2986. v105 = v117 ^ (v176 + v137) ^ v84 & v104;
  2987. v85 = v105 ^ v94 ^ v84;
  2988. v74 = v94 ^ (v59 | v117 ^ (v176 + v137));
  2989. v60 = v85 ^ v59;
  2990. v95 = v74;
  2991. v75 = v105 ^ (v60 | v74);
  2992. v61 = v95 & v105 ^ v60;
  2993. encode32le((__int64)(a1 + 12), *a1 ^ v85);
  2994. encode32le((__int64)(a1 + 13), v50 ^ v75);
  2995. encode32le((__int64)(a1 + 14), v45 ^ v61 ^ v75 ^ v95);
  2996. encode32le((__int64)(a1 + 15), v40 ^ ~v61);
  2997. if ( (v137 & 1) != 0 )
  2998. v6 = v176 ^ v166;
  2999. else
  3000. v6 = v166;
  3001. v37 = v137;
  3002. v138 = v117 + v6;
  3003. v118 = __ROR4__(1415926535 * v37, 25);
  3004. v55 = v169;
  3005. v170 = v173 ^ mul_a[HIBYTE(v169)] ^ (v169 << 8) ^ (v160 >> 8) ^ mul_ia[(unsigned __int8)v160];
  3006. v106 = v118 ^ (v173 + v138);
  3007. if ( (v138 & 1) != 0 )
  3008. v7 = v173 ^ v163;
  3009. else
  3010. v7 = v163;
  3011. v36 = v138;
  3012. v139 = v118 + v7;
  3013. v119 = __ROR4__(1415926535 * v36, 25);
  3014. v51 = v166;
  3015. v167 = v170 ^ mul_a[HIBYTE(v166)] ^ (v166 << 8) ^ (v157 >> 8) ^ mul_ia[(unsigned __int8)v157];
  3016. v96 = v119 ^ (v170 + v139);
  3017. if ( (v139 & 1) != 0 )
  3018. v8 = v170 ^ v160;
  3019. else
  3020. v8 = v160;
  3021. v35 = v139;
  3022. v140 = v119 + v8;
  3023. v120 = __ROR4__(1415926535 * v35, 25);
  3024. v46 = v163;
  3025. v164 = v167 ^ mul_a[HIBYTE(v163)] ^ (v163 << 8) ^ (v154 >> 8) ^ mul_ia[(unsigned __int8)v154];
  3026. v86 = v120 ^ (v167 + v140);
  3027. if ( (v140 & 1) != 0 )
  3028. v9 = v167 ^ v157;
  3029. else
  3030. v9 = v157;
  3031. v34 = v140;
  3032. v141 = v120 + v9;
  3033. v121 = __ROR4__(1415926535 * v34, 25);
  3034. v41 = v160;
  3035. v161 = v164 ^ mul_a[HIBYTE(v160)] ^ (v160 << 8) ^ (v181 >> 8) ^ mul_ia[(unsigned __int8)v181];
  3036. v62 = v106;
  3037. v107 = v121 ^ (v164 + v141) ^ v86 & v106;
  3038. v87 = v107 ^ v96 ^ v86;
  3039. v76 = v96 ^ (v62 | v121 ^ (v164 + v141));
  3040. v63 = v87 ^ v62;
  3041. v97 = v76;
  3042. v77 = v107 ^ (v63 | v76);
  3043. v64 = v97 & v107 ^ v63;
  3044. encode32le((__int64)(a1 + 16), v55 ^ v87);
  3045. encode32le((__int64)(a1 + 17), v51 ^ v77);
  3046. encode32le((__int64)(a1 + 18), v46 ^ v64 ^ v77 ^ v97);
  3047. encode32le((__int64)(a1 + 19), v41 ^ ~v64);
  3048. if ( (v141 & 1) != 0 )
  3049. v10 = v164 ^ v154;
  3050. else
  3051. v10 = v154;
  3052. v33 = v141;
  3053. v142 = v121 + v10;
  3054. v122 = __ROR4__(1415926535 * v33, 25);
  3055. v56 = v157;
  3056. v158 = v161 ^ mul_a[HIBYTE(v157)] ^ (v157 << 8) ^ (v179 >> 8) ^ mul_ia[(unsigned __int8)v179];
  3057. v108 = v122 ^ (v161 + v142);
  3058. if ( (v142 & 1) != 0 )
  3059. v11 = v161 ^ v181;
  3060. else
  3061. v11 = v181;
  3062. v32 = v142;
  3063. v143 = v122 + v11;
  3064. v123 = __ROR4__(1415926535 * v32, 25);
  3065. v52 = v154;
  3066. v155 = v158 ^ mul_a[HIBYTE(v154)] ^ (v154 << 8) ^ (v176 >> 8) ^ mul_ia[(unsigned __int8)v176];
  3067. v98 = v123 ^ (v158 + v143);
  3068. if ( (v143 & 1) != 0 )
  3069. v12 = v158 ^ v179;
  3070. else
  3071. v12 = v179;
  3072. v31 = v143;
  3073. v144 = v123 + v12;
  3074. v124 = __ROR4__(1415926535 * v31, 25);
  3075. v47 = v181;
  3076. v182 = v155 ^ mul_a[HIBYTE(v181)] ^ (v181 << 8) ^ (v173 >> 8) ^ mul_ia[(unsigned __int8)v173];
  3077. v88 = v124 ^ (v155 + v144);
  3078. if ( (v144 & 1) != 0 )
  3079. v13 = v155 ^ v176;
  3080. else
  3081. v13 = v176;
  3082. v30 = v144;
  3083. v145 = v124 + v13;
  3084. v125 = __ROR4__(1415926535 * v30, 25);
  3085. v42 = v179;
  3086. v180 = v182 ^ mul_a[HIBYTE(v179)] ^ (v179 << 8) ^ (v170 >> 8) ^ mul_ia[(unsigned __int8)v170];
  3087. v65 = v108;
  3088. v109 = v125 ^ (v182 + v145) ^ v88 & v108;
  3089. v89 = v109 ^ v98 ^ v88;
  3090. v78 = v98 ^ (v65 | v125 ^ (v182 + v145));
  3091. v66 = v89 ^ v65;
  3092. v99 = v78;
  3093. v79 = v109 ^ (v66 | v78);
  3094. v67 = v99 & v109 ^ v66;
  3095. encode32le((__int64)(a1 + 20), v56 ^ v89);
  3096. encode32le((__int64)(a1 + 21), v52 ^ v79);
  3097. encode32le((__int64)(a1 + 22), v47 ^ v67 ^ v79 ^ v99);
  3098. encode32le((__int64)(a1 + 23), v42 ^ ~v67);
  3099. if ( (v145 & 1) != 0 )
  3100. v14 = v182 ^ v173;
  3101. else
  3102. v14 = v173;
  3103. v29 = v145;
  3104. v146 = v125 + v14;
  3105. v126 = __ROR4__(1415926535 * v29, 25);
  3106. v57 = v176;
  3107. v177 = v180 ^ mul_a[HIBYTE(v176)] ^ (v176 << 8) ^ (v167 >> 8) ^ mul_ia[(unsigned __int8)v167];
  3108. v110 = v126 ^ (v180 + v146);
  3109. if ( (v146 & 1) != 0 )
  3110. v15 = v180 ^ v170;
  3111. else
  3112. v15 = v170;
  3113. v28 = v146;
  3114. v147 = v126 + v15;
  3115. v127 = __ROR4__(1415926535 * v28, 25);
  3116. v53 = v173;
  3117. v174 = v177 ^ mul_a[HIBYTE(v173)] ^ (v173 << 8) ^ (v164 >> 8) ^ mul_ia[(unsigned __int8)v164];
  3118. v100 = v127 ^ (v177 + v147);
  3119. if ( (v147 & 1) != 0 )
  3120. v16 = v177 ^ v167;
  3121. else
  3122. v16 = v167;
  3123. v27 = v147;
  3124. v148 = v127 + v16;
  3125. v128 = __ROR4__(1415926535 * v27, 25);
  3126. v48 = v170;
  3127. v171 = v174 ^ mul_a[HIBYTE(v170)] ^ (v170 << 8) ^ (v161 >> 8) ^ mul_ia[(unsigned __int8)v161];
  3128. v90 = v128 ^ (v174 + v148);
  3129. if ( (v148 & 1) != 0 )
  3130. v17 = v174 ^ v164;
  3131. else
  3132. v17 = v164;
  3133. v26 = v148;
  3134. v149 = v128 + v17;
  3135. v129 = __ROR4__(1415926535 * v26, 25);
  3136. v43 = v167;
  3137. v168 = v171 ^ mul_a[HIBYTE(v167)] ^ (v167 << 8) ^ (v158 >> 8) ^ mul_ia[(unsigned __int8)v158];
  3138. v68 = v110;
  3139. v111 = v129 ^ (v171 + v149) ^ v90 & v110;
  3140. v91 = v111 ^ v100 ^ v90;
  3141. v80 = v100 ^ (v68 | v129 ^ (v171 + v149));
  3142. v69 = v91 ^ v68;
  3143. v101 = v80;
  3144. v81 = v111 ^ (v69 | v80);
  3145. v70 = v101 & v111 ^ v69;
  3146. encode32le((__int64)(a1 + 24), v57 ^ v91);
  3147. encode32le((__int64)(a1 + 25), v53 ^ v81);
  3148. encode32le((__int64)(a1 + 26), v48 ^ v70 ^ v81 ^ v101);
  3149. encode32le((__int64)(a1 + 27), v43 ^ ~v70);
  3150. if ( (v149 & 1) != 0 )
  3151. v18 = v171 ^ v161;
  3152. else
  3153. v18 = v161;
  3154. v25 = v149;
  3155. v150 = v129 + v18;
  3156. v130 = __ROR4__(1415926535 * v25, 25);
  3157. v58 = v164;
  3158. v165 = v168 ^ mul_a[HIBYTE(v164)] ^ (v164 << 8) ^ (v155 >> 8) ^ mul_ia[(unsigned __int8)v155];
  3159. v112 = v130 ^ (v168 + v150);
  3160. if ( (v150 & 1) != 0 )
  3161. v19 = v168 ^ v158;
  3162. else
  3163. v19 = v158;
  3164. v24 = v150;
  3165. v151 = v130 + v19;
  3166. v131 = __ROR4__(1415926535 * v24, 25);
  3167. v54 = v161;
  3168. v162 = v165 ^ mul_a[HIBYTE(v161)] ^ (v161 << 8) ^ (v182 >> 8) ^ mul_ia[(unsigned __int8)v182];
  3169. v102 = v131 ^ (v165 + v151);
  3170. if ( (v151 & 1) != 0 )
  3171. v20 = v165 ^ v155;
  3172. else
  3173. v20 = v155;
  3174. v23 = v151;
  3175. v152 = v131 + v20;
  3176. v132 = __ROR4__(1415926535 * v23, 25);
  3177. v49 = v158;
  3178. v159 = v162 ^ mul_a[HIBYTE(v158)] ^ (v158 << 8) ^ (v180 >> 8) ^ mul_ia[(unsigned __int8)v180];
  3179. v92 = v132 ^ (v162 + v152);
  3180. if ( (v152 & 1) != 0 )
  3181. v21 = v162 ^ v182;
  3182. else
  3183. v21 = v182;
  3184. v22 = v152;
  3185. v153 = v132 + v21;
  3186. v133 = __ROR4__(1415926535 * v22, 25);
  3187. v44 = v155;
  3188. v156 = v159 ^ mul_a[HIBYTE(v155)] ^ (v155 << 8) ^ (v177 >> 8) ^ mul_ia[(unsigned __int8)v177];
  3189. v71 = v112;
  3190. v113 = v133 ^ (v159 + v153) ^ v92 & v112;
  3191. v93 = v113 ^ v102 ^ v92;
  3192. v82 = v102 ^ (v71 | v133 ^ (v159 + v153));
  3193. v72 = v93 ^ v71;
  3194. v103 = v82;
  3195. v83 = v113 ^ (v72 | v82);
  3196. v73 = v103 & v113 ^ v72;
  3197. encode32le((__int64)(a1 + 28), v58 ^ v93);
  3198. encode32le((__int64)(a1 + 29), v54 ^ v83);
  3199. encode32le((__int64)(a1 + 30), v49 ^ v73 ^ v83 ^ v103);
  3200. encode32le((__int64)(a1 + 31), v44 ^ ~v73);
  3201. *a1 = v182;
  3202. a1[1] = v180;
  3203. a1[2] = v177;
  3204. a1[3] = v174;
  3205. a1[4] = v171;
  3206. a1[5] = v168;
  3207. a1[6] = v165;
  3208. a1[7] = v162;
  3209. a1[8] = v159;
  3210. a1[9] = v156;
  3211. a1[10] = v153;
  3212. result = v133;
  3213. a1[11] = v133;
  3214. return result;
  3215. }
  3216. // 6092E0: using guessed type int mul_a[256];
  3217. // 6096E0: using guessed type int mul_ia[256];
  3218.  
  3219. //----- (0000000000407F11) ----------------------------------------------------
  3220. __int64 __fastcall encode32le(__int64 a1, unsigned int a2)
  3221. {
  3222. __int64 result; // rax
  3223.  
  3224. *(_BYTE *)a1 = a2;
  3225. *(_WORD *)(a1 + 1) = a2 >> 8;
  3226. result = HIBYTE(a2);
  3227. *(_BYTE *)(a1 + 3) = HIBYTE(a2);
  3228. return result;
  3229. }
  3230.  
  3231. //----- (0000000000407F59) ----------------------------------------------------
  3232. void *__fastcall sosemanuk_prng(unsigned int *a1, char *a2, unsigned __int64 a3)
  3233. {
  3234. void *result; // rax
  3235. size_t v4; // [rsp+8h] [rbp-28h]
  3236. char *dest; // [rsp+10h] [rbp-20h]
  3237. unsigned __int64 n; // [rsp+28h] [rbp-8h]
  3238.  
  3239. dest = a2;
  3240. v4 = a3;
  3241. result = (void *)a1[32];
  3242. if ( (unsigned int)result <= 0x4F )
  3243. {
  3244. n = 80LL - a1[32];
  3245. if ( n > a3 )
  3246. n = a3;
  3247. memcpy(a2, (char *)a1 + a1[32] + 48, n);
  3248. dest = &a2[n];
  3249. v4 -= n;
  3250. result = a1;
  3251. a1[32] += n;
  3252. }
  3253. while ( v4 )
  3254. {
  3255. sosemanuk_internal(a1);
  3256. if ( v4 <= 0x4F )
  3257. {
  3258. memcpy(dest, a1 + 12, v4);
  3259. result = a1;
  3260. a1[32] = v4;
  3261. v4 = 0LL;
  3262. }
  3263. else
  3264. {
  3265. result = memcpy(dest, a1 + 12, 0x50uLL);
  3266. dest += 80;
  3267. v4 -= 80LL;
  3268. }
  3269. }
  3270. return result;
  3271. }
  3272.  
  3273. //----- (0000000000408063) ----------------------------------------------------
  3274. _BYTE *__fastcall sosemanuk_encrypt(__int64 a1, _BYTE *a2, _BYTE *a3, unsigned __int64 a4)
  3275. {
  3276. _BYTE *result; // rax
  3277. unsigned __int64 v5; // [rsp+0h] [rbp-30h]
  3278. _BYTE *v6; // [rsp+8h] [rbp-28h]
  3279. _BYTE *v7; // [rsp+10h] [rbp-20h]
  3280. unsigned __int64 v8; // [rsp+28h] [rbp-8h]
  3281.  
  3282. v7 = a2;
  3283. v6 = a3;
  3284. v5 = a4;
  3285. result = (_BYTE *)*(unsigned int *)(a1 + 128);
  3286. if ( (unsigned int)result <= 0x4F )
  3287. {
  3288. v8 = 80LL - *(unsigned int *)(a1 + 128);
  3289. if ( v8 > a4 )
  3290. v8 = a4;
  3291. xorbuf((_BYTE *)(a1 + 48 + *(unsigned int *)(a1 + 128)), a2, a3, v8);
  3292. v7 = &a2[v8];
  3293. v6 += v8;
  3294. v5 -= v8;
  3295. result = (_BYTE *)a1;
  3296. *(_DWORD *)(a1 + 128) += v8;
  3297. }
  3298. while ( v5 )
  3299. {
  3300. sosemanuk_internal((unsigned int *)a1);
  3301. if ( v5 <= 0x4F )
  3302. {
  3303. xorbuf((_BYTE *)(a1 + 48), v7, v6, v5);
  3304. result = (_BYTE *)a1;
  3305. *(_DWORD *)(a1 + 128) = v5;
  3306. v5 = 0LL;
  3307. }
  3308. else
  3309. {
  3310. result = xorbuf((_BYTE *)(a1 + 48), v7, v6, 80LL);
  3311. v7 += 80;
  3312. v6 += 80;
  3313. v5 -= 80LL;
  3314. }
  3315. }
  3316. return result;
  3317. }
  3318.  
  3319. //----- (000000000040818A) ----------------------------------------------------
  3320. _BYTE *__fastcall xorbuf(_BYTE *a1, _BYTE *a2, _BYTE *a3, __int64 a4)
  3321. {
  3322. _BYTE *result; // rax
  3323.  
  3324. while ( --a4 != -1 )
  3325. {
  3326. result = a3;
  3327. *a3++ = *a2++ ^ *a1++;
  3328. }
  3329. return result;
  3330. }
  3331.  
  3332. //----- (00000000004081F0) ----------------------------------------------------
  3333. void _libc_csu_init(void)
  3334. {
  3335. init_proc();
  3336. }
  3337.  
  3338. //----- (0000000000408280) ----------------------------------------------------
  3339. void (*_do_global_ctors_aux())(void)
  3340. {
  3341. void (*result)(void); // rax
  3342. __int64 v1; // rbx
  3343.  
  3344. result = (void (*)(void))_CTOR_LIST__;
  3345. if ( _CTOR_LIST__ != -1 )
  3346. {
  3347. v1 = 0LL;
  3348. do
  3349. {
  3350. result();
  3351. result = *(void (**)(void))(v1 + 6328312);
  3352. v1 -= 8LL;
  3353. }
  3354. while ( result != (void (*)(void))-1LL );
  3355. }
  3356. return result;
  3357. }
  3358. // 609000: using guessed type __int64 _CTOR_LIST__;
  3359.  
  3360. //----- (00000000004082B4) ----------------------------------------------------
  3361. __int64 *term_proc()
  3362. {
  3363. return _do_global_dtors_aux();
  3364. }
  3365.  
  3366. // nfuncs=78 queued=32 decompiled=32 lumina nreq=0 worse=0 better=0
  3367. // ALL OK, 32 function(s) have been successfully decompiled
  3368.  
Advertisement
Add Comment
Please, Sign In to add comment