rocket-js 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. data/.gitignore +0 -11
  2. data/Rakefile +33 -47
  3. data/lib/rocket/js.rb +0 -2
  4. data/lib/rocket/js/builder.rb +2 -2
  5. data/lib/rocket/js/cli.rb +1 -1
  6. data/rocket-js.gemspec +23 -80
  7. data/src/vendor/web-socket-js/FABridge.js +604 -0
  8. data/src/vendor/web-socket-js/README.txt +109 -0
  9. data/src/vendor/web-socket-js/WebSocketMain.swf +0 -0
  10. data/src/vendor/web-socket-js/WebSocketMainInsecure.zip +0 -0
  11. data/src/vendor/web-socket-js/flash-src/WebSocket.as +473 -0
  12. data/src/vendor/web-socket-js/flash-src/WebSocketMain.as +88 -0
  13. data/src/vendor/web-socket-js/flash-src/WebSocketMainInsecure.as +19 -0
  14. data/src/vendor/web-socket-js/flash-src/WebSocketStateEvent.as +32 -0
  15. data/src/vendor/web-socket-js/flash-src/bridge/FABridge.as +943 -0
  16. data/src/vendor/web-socket-js/flash-src/build.sh +10 -0
  17. data/src/vendor/web-socket-js/flash-src/com/adobe/net/proxies/RFC2817Socket.as +204 -0
  18. data/src/vendor/web-socket-js/flash-src/com/gsolo/encryption/MD5.as +375 -0
  19. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/Crypto.as +287 -0
  20. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/MozillaRootCertificates.as +3235 -0
  21. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509Certificate.as +218 -0
  22. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509CertificateCollection.as +57 -0
  23. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/HMAC.as +82 -0
  24. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHMAC.as +27 -0
  25. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHash.as +21 -0
  26. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MAC.as +137 -0
  27. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD2.as +124 -0
  28. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD5.as +204 -0
  29. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA1.as +106 -0
  30. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA224.as +28 -0
  31. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA256.as +115 -0
  32. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHABase.as +71 -0
  33. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/ARC4.as +90 -0
  34. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/IPRNG.as +20 -0
  35. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/Random.as +119 -0
  36. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/TLSPRF.as +142 -0
  37. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/rsa/RSAKey.as +339 -0
  38. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/AESKey.as +2797 -0
  39. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/BlowFishKey.as +375 -0
  40. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CBCMode.as +55 -0
  41. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFB8Mode.as +61 -0
  42. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFBMode.as +64 -0
  43. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CTRMode.as +58 -0
  44. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/DESKey.as +365 -0
  45. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ECBMode.as +86 -0
  46. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ICipher.as +21 -0
  47. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IMode.as +15 -0
  48. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IPad.as +32 -0
  49. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IStreamCipher.as +21 -0
  50. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ISymmetricKey.as +35 -0
  51. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as +110 -0
  52. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/NullPad.as +34 -0
  53. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/OFBMode.as +52 -0
  54. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/PKCS5.as +44 -0
  55. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SSLPad.as +44 -0
  56. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SimpleIVMode.as +60 -0
  57. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TLSPad.as +42 -0
  58. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TripleDESKey.as +88 -0
  59. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/XTeaKey.as +94 -0
  60. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/aeskey.pl +29 -0
  61. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/dump.txt +2304 -0
  62. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/AESKeyTest.as +1220 -0
  63. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ARC4Test.as +58 -0
  64. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BigIntegerTest.as +39 -0
  65. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BlowFishKeyTest.as +148 -0
  66. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CBCModeTest.as +160 -0
  67. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFB8ModeTest.as +71 -0
  68. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFBModeTest.as +98 -0
  69. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CTRModeTest.as +109 -0
  70. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/DESKeyTest.as +112 -0
  71. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ECBModeTest.as +151 -0
  72. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/HMACTest.as +184 -0
  73. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ITestHarness.as +20 -0
  74. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD2Test.as +56 -0
  75. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD5Test.as +58 -0
  76. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/OFBModeTest.as +101 -0
  77. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/RSAKeyTest.as +92 -0
  78. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA1Test.as +198 -0
  79. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA224Test.as +58 -0
  80. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA256Test.as +60 -0
  81. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TLSPRFTest.as +51 -0
  82. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TestCase.as +42 -0
  83. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TripleDESKeyTest.as +59 -0
  84. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/XTeaKeyTest.as +66 -0
  85. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/BulkCiphers.as +102 -0
  86. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/CipherSuites.as +117 -0
  87. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/IConnectionState.as +14 -0
  88. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/ISecurityParameters.as +29 -0
  89. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/KeyExchanges.as +24 -0
  90. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/MACs.as +38 -0
  91. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLConnectionState.as +171 -0
  92. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLEvent.as +26 -0
  93. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLSecurityParameters.as +340 -0
  94. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConfig.as +70 -0
  95. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConnectionState.as +151 -0
  96. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEngine.as +895 -0
  97. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSError.as +39 -0
  98. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEvent.as +27 -0
  99. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSecurityParameters.as +197 -0
  100. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocket.as +370 -0
  101. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocketEvent.as +26 -0
  102. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as +180 -0
  103. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/BarrettReduction.as +90 -0
  104. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/BigInteger.as +1543 -0
  105. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/ClassicReduction.as +35 -0
  106. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/IReduction.as +11 -0
  107. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/MontgomeryReduction.as +85 -0
  108. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/NullReduction.as +34 -0
  109. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/bi_internal.as +11 -0
  110. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/ArrayUtil.as +25 -0
  111. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/Base64.as +189 -0
  112. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/Hex.as +66 -0
  113. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/Memory.as +28 -0
  114. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/ByteString.as +43 -0
  115. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/DER.as +210 -0
  116. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/IAsn1Type.as +21 -0
  117. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Integer.as +44 -0
  118. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/OID.as +35 -0
  119. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/ObjectIdentifier.as +112 -0
  120. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/PEM.as +118 -0
  121. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/PrintableString.as +49 -0
  122. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Sequence.as +90 -0
  123. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Set.as +27 -0
  124. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Type.as +94 -0
  125. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/UTCTime.as +60 -0
  126. data/src/vendor/web-socket-js/sample.html +76 -0
  127. data/src/vendor/web-socket-js/swfobject.js +4 -0
  128. data/src/vendor/web-socket-js/web_socket.js +388 -0
  129. metadata +163 -30
  130. data/lib/rocket/js/version.rb +0 -14
  131. data/rocket-0.0.1.min.js +0 -45
@@ -0,0 +1,64 @@
1
+ /**
2
+ * CFBMode
3
+ *
4
+ * An ActionScript 3 implementation of the CFB confidentiality mode
5
+ * Copyright (c) 2007 Henri Torgemane
6
+ *
7
+ * See LICENSE.txt for full license information.
8
+ */
9
+ package com.hurlant.crypto.symmetric
10
+ {
11
+ import flash.utils.ByteArray;
12
+
13
+ /**
14
+ * This is the "full" CFB.
15
+ * CFB1 and CFB8 are hiding somewhere else.
16
+ *
17
+ * Note: The constructor accepts an optional padding argument, but ignores it otherwise.
18
+ */
19
+ public class CFBMode extends IVMode implements IMode
20
+ {
21
+
22
+ public function CFBMode(key:ISymmetricKey, padding:IPad = null) {
23
+ super(key,null);
24
+ }
25
+
26
+ public function encrypt(src:ByteArray):void
27
+ {
28
+ var l:uint = src.length;
29
+ var vector:ByteArray = getIV4e();
30
+ for (var i:uint=0;i<src.length;i+=blockSize) {
31
+ key.encrypt(vector);
32
+ var chunk:uint = (i+blockSize<l)?blockSize:l-i;
33
+ for (var j:uint=0;j<chunk;j++) {
34
+ src[i+j] ^= vector[j];
35
+ }
36
+ vector.position=0;
37
+ vector.writeBytes(src, i, chunk);
38
+ }
39
+ }
40
+
41
+ public function decrypt(src:ByteArray):void
42
+ {
43
+ var l:uint = src.length;
44
+ var vector:ByteArray = getIV4d();
45
+ var tmp:ByteArray = new ByteArray;
46
+ for (var i:uint=0;i<src.length;i+=blockSize) {
47
+ key.encrypt(vector);
48
+ var chunk:uint = (i+blockSize<l)?blockSize:l-i;
49
+ tmp.position=0;
50
+ tmp.writeBytes(src, i, chunk);
51
+ for (var j:uint=0;j<chunk;j++) {
52
+ src[i+j] ^= vector[j];
53
+ }
54
+ vector.position=0;
55
+ vector.writeBytes(tmp);
56
+ }
57
+ }
58
+
59
+ public function toString():String {
60
+ return key.toString()+"-cfb";
61
+ }
62
+
63
+ }
64
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * CTRMode
3
+ *
4
+ * An ActionScript 3 implementation of the counter confidentiality mode
5
+ * Copyright (c) 2007 Henri Torgemane
6
+ *
7
+ * See LICENSE.txt for full license information.
8
+ */
9
+ package com.hurlant.crypto.symmetric
10
+ {
11
+ import flash.utils.ByteArray;
12
+
13
+ public class CTRMode extends IVMode implements IMode
14
+ {
15
+
16
+ public function CTRMode(key:ISymmetricKey, padding:IPad = null) {
17
+ super(key, padding);
18
+ }
19
+
20
+ public function encrypt(src:ByteArray):void
21
+ {
22
+ padding.pad(src);
23
+ var vector:ByteArray = getIV4e();
24
+ core(src, vector);
25
+ }
26
+
27
+ public function decrypt(src:ByteArray):void
28
+ {
29
+ var vector:ByteArray = getIV4d();
30
+ core(src, vector);
31
+ padding.unpad(src);
32
+ }
33
+
34
+ private function core(src:ByteArray, iv:ByteArray):void {
35
+ var X:ByteArray = new ByteArray;
36
+ var Xenc:ByteArray = new ByteArray;
37
+ X.writeBytes(iv);
38
+ for (var i:uint=0;i<src.length;i+=blockSize) {
39
+ Xenc.position=0;
40
+ Xenc.writeBytes(X);
41
+ key.encrypt(Xenc);
42
+ for (var j:uint=0;j<blockSize;j++) {
43
+ src[i+j] ^= Xenc[j];
44
+ }
45
+
46
+ for (j=blockSize-1;j>=0;--j) {
47
+ X[j]++;
48
+ if (X[j]!=0)
49
+ break;
50
+ }
51
+ }
52
+ }
53
+ public function toString():String {
54
+ return key.toString()+"-ctr";
55
+ }
56
+
57
+ }
58
+ }
@@ -0,0 +1,365 @@
1
+ /**
2
+ * DESKey
3
+ *
4
+ * An Actionscript 3 implementation of the Data Encryption Standard (DES)
5
+ * Copyright (c) 2007 Henri Torgemane
6
+ *
7
+ * Derived from:
8
+ * The Bouncy Castle Crypto package,
9
+ * Copyright (c) 2000-2004 The Legion Of The Bouncy Castle
10
+ * (http://www.bouncycastle.org)
11
+ *
12
+ * See LICENSE.txt for full license information.
13
+ */
14
+ package com.hurlant.crypto.symmetric
15
+ {
16
+ import flash.utils.ByteArray;
17
+ import com.hurlant.util.Hex;
18
+ import com.hurlant.util.Memory;
19
+
20
+ public class DESKey implements ISymmetricKey
21
+ {
22
+ /**
23
+ * what follows is mainly taken from "Applied Cryptography", by Bruce
24
+ * Schneier, however it also bears great resemblance to Richard
25
+ * Outerbridge's D3DES...
26
+ */
27
+
28
+ private static const Df_Key:Array = [ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32,
29
+ 0x10, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67 ];
30
+
31
+ private static const bytebit:Array = [ 128, 64, 32, 16, 8, 4, 2, 1 ];
32
+
33
+ private static const bigbyte:Array = [ 0x800000, 0x400000, 0x200000, 0x100000, 0x80000, 0x40000, 0x20000, 0x10000, 0x8000,
34
+ 0x4000, 0x2000, 0x1000, 0x800, 0x400, 0x200, 0x100, 0x80, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1 ];
35
+
36
+ /*
37
+ * Use the key schedule specified in the Standard (ANSI X3.92-1981).
38
+ */
39
+
40
+ 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,
41
+ 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,
42
+ 4, 27, 19, 11, 3 ];
43
+
44
+ private static const totrot:Array = [ 1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28 ];
45
+
46
+ 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,
47
+ 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 ];
48
+
49
+ private static const SP1:Array = [ 0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, 0x00000004,
50
+ 0x00010000, 0x00000400, 0x01010400, 0x01010404, 0x00000400, 0x01000404, 0x01010004, 0x01000000, 0x00000004,
51
+ 0x00000404, 0x01000400, 0x01000400, 0x00010400, 0x00010400, 0x01010000, 0x01010000, 0x01000404, 0x00010004,
52
+ 0x01000004, 0x01000004, 0x00010004, 0x00000000, 0x00000404, 0x00010404, 0x01000000, 0x00010000, 0x01010404,
53
+ 0x00000004, 0x01010000, 0x01010400, 0x01000000, 0x01000000, 0x00000400, 0x01010004, 0x00010000, 0x00010400,
54
+ 0x01000004, 0x00000400, 0x00000004, 0x01000404, 0x00010404, 0x01010404, 0x00010004, 0x01010000, 0x01000404,
55
+ 0x01000004, 0x00000404, 0x00010404, 0x01010400, 0x00000404, 0x01000400, 0x01000400, 0x00000000, 0x00010004,
56
+ 0x00010400, 0x00000000, 0x01010004 ];
57
+
58
+ private static const SP2:Array = [ 0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, 0x80100020,
59
+ 0x80008020, 0x80000020, 0x80108020, 0x80108000, 0x80000000, 0x80008000, 0x00100000, 0x00000020, 0x80100020,
60
+ 0x00108000, 0x00100020, 0x80008020, 0x00000000, 0x80000000, 0x00008000, 0x00108020, 0x80100000, 0x00100020,
61
+ 0x80000020, 0x00000000, 0x00108000, 0x00008020, 0x80108000, 0x80100000, 0x00008020, 0x00000000, 0x00108020,
62
+ 0x80100020, 0x00100000, 0x80008020, 0x80100000, 0x80108000, 0x00008000, 0x80100000, 0x80008000, 0x00000020,
63
+ 0x80108020, 0x00108020, 0x00000020, 0x00008000, 0x80000000, 0x00008020, 0x80108000, 0x00100000, 0x80000020,
64
+ 0x00100020, 0x80008020, 0x80000020, 0x00100020, 0x00108000, 0x00000000, 0x80008000, 0x00008020, 0x80000000,
65
+ 0x80100020, 0x80108020, 0x00108000 ];
66
+
67
+ private static const SP3:Array = [ 0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, 0x00020208,
68
+ 0x08000200, 0x00020008, 0x08000008, 0x08000008, 0x00020000, 0x08020208, 0x00020008, 0x08020000, 0x00000208,
69
+ 0x08000000, 0x00000008, 0x08020200, 0x00000200, 0x00020200, 0x08020000, 0x08020008, 0x00020208, 0x08000208,
70
+ 0x00020200, 0x00020000, 0x08000208, 0x00000008, 0x08020208, 0x00000200, 0x08000000, 0x08020200, 0x08000000,
71
+ 0x00020008, 0x00000208, 0x00020000, 0x08020200, 0x08000200, 0x00000000, 0x00000200, 0x00020008, 0x08020208,
72
+ 0x08000200, 0x08000008, 0x00000200, 0x00000000, 0x08020008, 0x08000208, 0x00020000, 0x08000000, 0x08020208,
73
+ 0x00000008, 0x00020208, 0x00020200, 0x08000008, 0x08020000, 0x08000208, 0x00000208, 0x08020000, 0x00020208,
74
+ 0x00000008, 0x08020008, 0x00020200 ];
75
+
76
+ private static const SP4:Array = [ 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, 0x00800001,
77
+ 0x00002001, 0x00000000, 0x00802000, 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00800080, 0x00800001,
78
+ 0x00000001, 0x00002000, 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002001, 0x00002080, 0x00800081,
79
+ 0x00000001, 0x00002080, 0x00800080, 0x00002000, 0x00802080, 0x00802081, 0x00000081, 0x00800080, 0x00800001,
80
+ 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00000000, 0x00802000, 0x00002080, 0x00800080, 0x00800081,
81
+ 0x00000001, 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802081, 0x00000081, 0x00000001, 0x00002000,
82
+ 0x00800001, 0x00002001, 0x00802080, 0x00800081, 0x00002001, 0x00002080, 0x00800000, 0x00802001, 0x00000080,
83
+ 0x00800000, 0x00002000, 0x00802080 ];
84
+
85
+ private static const SP5:Array = [ 0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, 0x40000000,
86
+ 0x02080000, 0x40080100, 0x00080000, 0x02000100, 0x40080100, 0x42000100, 0x42080000, 0x00080100, 0x40000000,
87
+ 0x02000000, 0x40080000, 0x40080000, 0x00000000, 0x40000100, 0x42080100, 0x42080100, 0x02000100, 0x42080000,
88
+ 0x40000100, 0x00000000, 0x42000000, 0x02080100, 0x02000000, 0x42000000, 0x00080100, 0x00080000, 0x42000100,
89
+ 0x00000100, 0x02000000, 0x40000000, 0x02080000, 0x42000100, 0x40080100, 0x02000100, 0x40000000, 0x42080000,
90
+ 0x02080100, 0x40080100, 0x00000100, 0x02000000, 0x42080000, 0x42080100, 0x00080100, 0x42000000, 0x42080100,
91
+ 0x02080000, 0x00000000, 0x40080000, 0x42000000, 0x00080100, 0x02000100, 0x40000100, 0x00080000, 0x00000000,
92
+ 0x40080000, 0x02080100, 0x40000100 ];
93
+
94
+ private static const SP6:Array = [ 0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, 0x20404010,
95
+ 0x00400000, 0x20004000, 0x00404010, 0x00400000, 0x20000010, 0x00400010, 0x20004000, 0x20000000, 0x00004010,
96
+ 0x00000000, 0x00400010, 0x20004010, 0x00004000, 0x00404000, 0x20004010, 0x00000010, 0x20400010, 0x20400010,
97
+ 0x00000000, 0x00404010, 0x20404000, 0x00004010, 0x00404000, 0x20404000, 0x20000000, 0x20004000, 0x00000010,
98
+ 0x20400010, 0x00404000, 0x20404010, 0x00400000, 0x00004010, 0x20000010, 0x00400000, 0x20004000, 0x20000000,
99
+ 0x00004010, 0x20000010, 0x20404010, 0x00404000, 0x20400000, 0x00404010, 0x20404000, 0x00000000, 0x20400010,
100
+ 0x00000010, 0x00004000, 0x20400000, 0x00404010, 0x00004000, 0x00400010, 0x20004010, 0x00000000, 0x20404000,
101
+ 0x20000000, 0x00400010, 0x20004010 ];
102
+
103
+ private static const SP7:Array = [ 0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, 0x00200802,
104
+ 0x04200800, 0x04200802, 0x00200000, 0x00000000, 0x04000002, 0x00000002, 0x04000000, 0x04200002, 0x00000802,
105
+ 0x04000800, 0x00200802, 0x00200002, 0x04000800, 0x04000002, 0x04200000, 0x04200800, 0x00200002, 0x04200000,
106
+ 0x00000800, 0x00000802, 0x04200802, 0x00200800, 0x00000002, 0x04000000, 0x00200800, 0x04000000, 0x00200800,
107
+ 0x00200000, 0x04000802, 0x04000802, 0x04200002, 0x04200002, 0x00000002, 0x00200002, 0x04000000, 0x04000800,
108
+ 0x00200000, 0x04200800, 0x00000802, 0x00200802, 0x04200800, 0x00000802, 0x04000002, 0x04200802, 0x04200000,
109
+ 0x00200800, 0x00000000, 0x00000002, 0x04200802, 0x00000000, 0x00200802, 0x04200000, 0x00000800, 0x04000002,
110
+ 0x04000800, 0x00000800, 0x00200002 ];
111
+
112
+ private static const SP8:Array = [ 0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, 0x00000040,
113
+ 0x10000000, 0x00040040, 0x10040000, 0x10041040, 0x00041000, 0x10041000, 0x00041040, 0x00001000, 0x00000040,
114
+ 0x10040000, 0x10000040, 0x10001000, 0x00001040, 0x00041000, 0x00040040, 0x10040040, 0x10041000, 0x00001040,
115
+ 0x00000000, 0x00000000, 0x10040040, 0x10000040, 0x10001000, 0x00041040, 0x00040000, 0x00041040, 0x00040000,
116
+ 0x10041000, 0x00001000, 0x00000040, 0x10040040, 0x00001000, 0x00041040, 0x10001000, 0x00000040, 0x10000040,
117
+ 0x10040000, 0x10040040, 0x10000000, 0x00040000, 0x10001040, 0x00000000, 0x10041040, 0x00040040, 0x10000040,
118
+ 0x10040000, 0x10001000, 0x10001040, 0x00000000, 0x10041040, 0x00041000, 0x00041000, 0x00001040, 0x00001040,
119
+ 0x00040040, 0x10000000, 0x10041000 ];
120
+
121
+
122
+ protected var key:ByteArray;
123
+ protected var encKey:Array;
124
+ protected var decKey:Array;
125
+
126
+
127
+ public function DESKey(key:ByteArray) {
128
+ this.key = key;
129
+ this.encKey = generateWorkingKey(true, key, 0);
130
+ this.decKey = generateWorkingKey(false, key, 0);
131
+ }
132
+
133
+ public function getBlockSize():uint
134
+ {
135
+ return 8;
136
+ }
137
+
138
+ public function decrypt(block:ByteArray, index:uint=0):void
139
+ {
140
+ desFunc(decKey, block, index, block, index);
141
+ }
142
+
143
+ public function dispose():void
144
+ {
145
+ var i:uint=0;
146
+ for (i=0;i<encKey.length;i++) { encKey[i]=0; }
147
+ for (i=0;i<decKey.length;i++) { decKey[i]=0; }
148
+ encKey=null;
149
+ decKey=null;
150
+ for (i=0;i<key.length;i++) { key[i]=0; }
151
+ key.length = 0;
152
+ key = null;
153
+ Memory.gc();
154
+ }
155
+
156
+ public function encrypt(block:ByteArray, index:uint=0):void
157
+ {
158
+ desFunc(encKey, block, index, block, index);
159
+ }
160
+
161
+
162
+ /**
163
+ * generate an integer based working key based on our secret key and what we
164
+ * processing we are planning to do.
165
+ *
166
+ * Acknowledgements for this routine go to James Gillogly & Phil Karn.
167
+ */
168
+ protected function generateWorkingKey(encrypting:Boolean, key:ByteArray, off:uint):Array
169
+ {
170
+ //int[] newKey = new int[32];
171
+ var newKey:Array = [];
172
+ //boolean[] pc1m = new boolean[56], pcr = new boolean[56];
173
+ var pc1m:ByteArray = new ByteArray;
174
+ var pcr:ByteArray = new ByteArray;
175
+
176
+ var l:uint;
177
+
178
+ for (var j:uint = 0; j < 56; j++)
179
+ {
180
+ l = pc1[j];
181
+
182
+ pc1m[j] = ((key[off + (l >>> 3)] & bytebit[l & 07]) != 0);
183
+ }
184
+
185
+ for (var i:uint = 0; i < 16; i++)
186
+ {
187
+ var m:uint;
188
+ var n:uint;
189
+
190
+ if (encrypting)
191
+ {
192
+ m = i << 1;
193
+ }
194
+ else
195
+ {
196
+ m = (15 - i) << 1;
197
+ }
198
+
199
+ n = m + 1;
200
+ newKey[m] = newKey[n] = 0;
201
+
202
+ for (j = 0; j < 28; j++)
203
+ {
204
+ l = j + totrot[i];
205
+ if (l < 28)
206
+ {
207
+ pcr[j] = pc1m[l];
208
+ }
209
+ else
210
+ {
211
+ pcr[j] = pc1m[l - 28];
212
+ }
213
+ }
214
+
215
+ for (j = 28; j < 56; j++)
216
+ {
217
+ l = j + totrot[i];
218
+ if (l < 56)
219
+ {
220
+ pcr[j] = pc1m[l];
221
+ }
222
+ else
223
+ {
224
+ pcr[j] = pc1m[l - 28];
225
+ }
226
+ }
227
+
228
+ for (j = 0; j < 24; j++)
229
+ {
230
+ if (pcr[pc2[j]])
231
+ {
232
+ newKey[m] |= bigbyte[j];
233
+ }
234
+
235
+ if (pcr[pc2[j + 24]])
236
+ {
237
+ newKey[n] |= bigbyte[j];
238
+ }
239
+ }
240
+ }
241
+
242
+ //
243
+ // store the processed key
244
+ //
245
+ for (i = 0; i != 32; i += 2)
246
+ {
247
+ var i1:uint;
248
+ var i2:uint;
249
+
250
+ i1 = newKey[i];
251
+ i2 = newKey[i + 1];
252
+
253
+ newKey[i] = ((i1 & 0x00fc0000) << 6) | ((i1 & 0x00000fc0) << 10) | ((i2 & 0x00fc0000) >>> 10)
254
+ | ((i2 & 0x00000fc0) >>> 6);
255
+
256
+ newKey[i + 1] = ((i1 & 0x0003f000) << 12) | ((i1 & 0x0000003f) << 16) | ((i2 & 0x0003f000) >>> 4)
257
+ | (i2 & 0x0000003f);
258
+ }
259
+ return newKey;
260
+ }
261
+
262
+ /**
263
+ * the DES engine.
264
+ */
265
+ protected function desFunc(wKey:Array, inp:ByteArray, inOff:uint, out:ByteArray, outOff:uint):void
266
+ {
267
+ var work:uint;
268
+ var right:uint;
269
+ var left:uint;
270
+
271
+ left = (inp[inOff + 0] & 0xff) << 24;
272
+ left |= (inp[inOff + 1] & 0xff) << 16;
273
+ left |= (inp[inOff + 2] & 0xff) << 8;
274
+ left |= (inp[inOff + 3] & 0xff);
275
+
276
+ right = (inp[inOff + 4] & 0xff) << 24;
277
+ right |= (inp[inOff + 5] & 0xff) << 16;
278
+ right |= (inp[inOff + 6] & 0xff) << 8;
279
+ right |= (inp[inOff + 7] & 0xff);
280
+
281
+ work = ((left >>> 4) ^ right) & 0x0f0f0f0f;
282
+ right ^= work;
283
+ left ^= (work << 4);
284
+ work = ((left >>> 16) ^ right) & 0x0000ffff;
285
+ right ^= work;
286
+ left ^= (work << 16);
287
+ work = ((right >>> 2) ^ left) & 0x33333333;
288
+ left ^= work;
289
+ right ^= (work << 2);
290
+ work = ((right >>> 8) ^ left) & 0x00ff00ff;
291
+ left ^= work;
292
+ right ^= (work << 8);
293
+ right = ((right << 1) | ((right >>> 31) & 1)) & 0xffffffff;
294
+ work = (left ^ right) & 0xaaaaaaaa;
295
+ left ^= work;
296
+ right ^= work;
297
+ left = ((left << 1) | ((left >>> 31) & 1)) & 0xffffffff;
298
+
299
+ for (var round:uint = 0; round < 8; round++)
300
+ {
301
+ var fval:uint;
302
+
303
+ work = (right << 28) | (right >>> 4);
304
+ work ^= wKey[round * 4 + 0];
305
+ fval = SP7[work & 0x3f];
306
+ fval |= SP5[(work >>> 8) & 0x3f];
307
+ fval |= SP3[(work >>> 16) & 0x3f];
308
+ fval |= SP1[(work >>> 24) & 0x3f];
309
+ work = right ^ wKey[round * 4 + 1];
310
+ fval |= SP8[work & 0x3f];
311
+ fval |= SP6[(work >>> 8) & 0x3f];
312
+ fval |= SP4[(work >>> 16) & 0x3f];
313
+ fval |= SP2[(work >>> 24) & 0x3f];
314
+ left ^= fval;
315
+ work = (left << 28) | (left >>> 4);
316
+ work ^= wKey[round * 4 + 2];
317
+ fval = SP7[work & 0x3f];
318
+ fval |= SP5[(work >>> 8) & 0x3f];
319
+ fval |= SP3[(work >>> 16) & 0x3f];
320
+ fval |= SP1[(work >>> 24) & 0x3f];
321
+ work = left ^ wKey[round * 4 + 3];
322
+ fval |= SP8[work & 0x3f];
323
+ fval |= SP6[(work >>> 8) & 0x3f];
324
+ fval |= SP4[(work >>> 16) & 0x3f];
325
+ fval |= SP2[(work >>> 24) & 0x3f];
326
+ right ^= fval;
327
+ }
328
+
329
+ right = (right << 31) | (right >>> 1);
330
+ work = (left ^ right) & 0xaaaaaaaa;
331
+ left ^= work;
332
+ right ^= work;
333
+ left = (left << 31) | (left >>> 1);
334
+ work = ((left >>> 8) ^ right) & 0x00ff00ff;
335
+ right ^= work;
336
+ left ^= (work << 8);
337
+ work = ((left >>> 2) ^ right) & 0x33333333;
338
+ right ^= work;
339
+ left ^= (work << 2);
340
+ work = ((right >>> 16) ^ left) & 0x0000ffff;
341
+ left ^= work;
342
+ right ^= (work << 16);
343
+ work = ((right >>> 4) ^ left) & 0x0f0f0f0f;
344
+ left ^= work;
345
+ right ^= (work << 4);
346
+
347
+ out[outOff + 0] = ((right >>> 24) & 0xff);
348
+ out[outOff + 1] = ((right >>> 16) & 0xff);
349
+ out[outOff + 2] = ((right >>> 8) & 0xff);
350
+ out[outOff + 3] = (right & 0xff);
351
+ out[outOff + 4] = ((left >>> 24) & 0xff);
352
+ out[outOff + 5] = ((left >>> 16) & 0xff);
353
+ out[outOff + 6] = ((left >>> 8) & 0xff);
354
+ out[outOff + 7] = (left & 0xff);
355
+ }
356
+
357
+
358
+ public function toString():String {
359
+ return "des";
360
+ }
361
+
362
+
363
+
364
+ }
365
+ }