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,115 @@
1
+ /**
2
+ * SHA256
3
+ *
4
+ * An ActionScript 3 implementation of Secure Hash Algorithm, SHA-256, as defined
5
+ * in FIPS PUB 180-2
6
+ * Copyright (c) 2007 Henri Torgemane
7
+ *
8
+ * Derived from:
9
+ * A JavaScript implementation of the Secure Hash Standard
10
+ * Version 0.3 Copyright Angel Marin 2003-2004 - http://anmar.eu.org/
11
+ * Derived from:
12
+ * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
13
+ * in FIPS PUB 180-1
14
+ * Version 2.1a Copyright Paul Johnston 2000 - 2002.
15
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
16
+ *
17
+ * See LICENSE.txt for full license information.
18
+ */
19
+ package com.hurlant.crypto.hash
20
+ {
21
+
22
+
23
+ public class SHA256 extends SHABase implements IHash
24
+ {
25
+
26
+ protected static const k:Array = [
27
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
28
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
29
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
30
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
31
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
32
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
33
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
34
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
35
+ protected var h:Array = [
36
+ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
37
+ ];
38
+
39
+ public function SHA256(){
40
+ }
41
+
42
+ public override function getHashSize():uint
43
+ {
44
+ return 32;
45
+ }
46
+
47
+ protected override function core(x:Array, len:uint):Array {
48
+ /* append padding */
49
+ x[len >> 5] |= 0x80 << (24 - len % 32);
50
+ x[((len + 64 >> 9) << 4) + 15] = len;
51
+
52
+ var w:Array = [];
53
+ var a:uint = h[0];
54
+ var b:uint = h[1];
55
+ var c:uint = h[2];
56
+ var d:uint = h[3];
57
+ var e:uint = h[4];
58
+ var f:uint = h[5];
59
+ var g:uint = h[6];
60
+ var h:uint = h[7];
61
+
62
+ for (var i:uint=0; i<x.length; i+=16) {
63
+ var olda:uint = a;
64
+ var oldb:uint = b;
65
+ var oldc:uint = c;
66
+ var oldd:uint = d;
67
+ var olde:uint = e;
68
+ var oldf:uint = f;
69
+ var oldg:uint = g;
70
+ var oldh:uint = h;
71
+
72
+ for (var j:uint=0; j<64; j++) {
73
+ if (j<16) {
74
+ w[j] = x[i+j] || 0;
75
+ } else {
76
+ var s0:uint = rrol(w[j-15],7)^rrol(w[j-15],18)^(w[j-15]>>>3);
77
+ var s1:uint = rrol(w[j-2], 17)^rrol(w[j-2],19)^(w[j-2]>>>10);
78
+ w[j] = w[j-16] + s0 + w[j-7] + s1;
79
+ }
80
+ var t2:uint = (rrol(a,2) ^ rrol(a,13) ^ rrol(a,22)) + ((a&b) ^ (a&c) ^ (b&c));
81
+ var t1:uint = h + (rrol(e,6) ^ rrol(e,11) ^ rrol(e,25)) + ((e&f)^(g&~e)) + k[j] + w[j]
82
+ h = g;
83
+ g = f;
84
+ f = e;
85
+ e = d + t1;
86
+ d = c;
87
+ c = b;
88
+ b = a;
89
+ a = t1 + t2;
90
+
91
+ }
92
+ a += olda;
93
+ b += oldb;
94
+ c += oldc;
95
+ d += oldd;
96
+ e += olde;
97
+ f += oldf;
98
+ g += oldg;
99
+ h += oldh;
100
+ }
101
+ return [ a,b,c,d,e,f,g,h ];
102
+ }
103
+
104
+ /*
105
+ * Bitwise rotate a 32-bit number to the right.
106
+ */
107
+ protected function rrol(num:uint, cnt:uint):uint {
108
+ return (num << (32-cnt)) | (num >>> cnt);
109
+ }
110
+
111
+ public override function toString():String {
112
+ return "sha256";
113
+ }
114
+ }
115
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * SHABase
3
+ *
4
+ * An ActionScript 3 abstract class for the SHA family of hash functions
5
+ * Copyright (c) 2007 Henri Torgemane
6
+ *
7
+ * See LICENSE.txt for full license information.
8
+ */
9
+ package com.hurlant.crypto.hash
10
+ {
11
+ import flash.utils.ByteArray;
12
+ import flash.utils.Endian;
13
+
14
+ public class SHABase implements IHash
15
+ {
16
+
17
+ public function SHABase() { }
18
+
19
+ public var pad_size:int = 40;
20
+ public function getInputSize():uint
21
+ {
22
+ return 64;
23
+ }
24
+
25
+ public function getHashSize():uint
26
+ {
27
+ return 0;
28
+ }
29
+
30
+ public function getPadSize():int
31
+ {
32
+ return pad_size;
33
+ }
34
+
35
+ public function hash(src:ByteArray):ByteArray
36
+ {
37
+ var savedLength:uint = src.length;
38
+ var savedEndian:String = src.endian;
39
+
40
+ src.endian = Endian.BIG_ENDIAN;
41
+ var len:uint = savedLength *8;
42
+ // pad to nearest int.
43
+ while (src.length%4!=0) {
44
+ src[src.length]=0;
45
+ }
46
+ // convert ByteArray to an array of uint
47
+ src.position=0;
48
+ var a:Array = [];
49
+ for (var i:uint=0;i<src.length;i+=4) {
50
+ a.push(src.readUnsignedInt());
51
+ }
52
+ var h:Array = core(a, len);
53
+ var out:ByteArray = new ByteArray;
54
+ var words:uint = getHashSize()/4;
55
+ for (i=0;i<words;i++) {
56
+ out.writeUnsignedInt(h[i]);
57
+ }
58
+ // unpad, to leave the source untouched.
59
+ src.length = savedLength;
60
+ src.endian = savedEndian;
61
+ return out;
62
+ }
63
+ protected function core(x:Array, len:uint):Array {
64
+ return null;
65
+ }
66
+
67
+ public function toString():String {
68
+ return "sha";
69
+ }
70
+ }
71
+ }
@@ -0,0 +1,90 @@
1
+ /**
2
+ * ARC4
3
+ *
4
+ * An ActionScript 3 implementation of RC4
5
+ * Copyright (c) 2007 Henri Torgemane
6
+ *
7
+ * Derived from:
8
+ * The jsbn library, Copyright (c) 2003-2005 Tom Wu
9
+ *
10
+ * See LICENSE.txt for full license information.
11
+ */
12
+ package com.hurlant.crypto.prng
13
+ {
14
+ import com.hurlant.crypto.symmetric.IStreamCipher;
15
+ import com.hurlant.util.Memory;
16
+
17
+ import flash.utils.ByteArray;
18
+
19
+ public class ARC4 implements IPRNG, IStreamCipher {
20
+ private var i:int = 0;
21
+ private var j:int = 0;
22
+ private var S:ByteArray;
23
+ private const psize:uint = 256;
24
+ public function ARC4(key:ByteArray = null){
25
+ S = new ByteArray;
26
+ if (key) {
27
+ init(key);
28
+ }
29
+ }
30
+ public function getPoolSize():uint {
31
+ return psize;
32
+ }
33
+ public function init(key:ByteArray):void {
34
+ var i:int;
35
+ var j:int;
36
+ var t:int;
37
+ for (i=0; i<256; ++i) {
38
+ S[i] = i;
39
+ }
40
+ j=0;
41
+ for (i=0; i<256; ++i) {
42
+ j = (j + S[i] + key[i%key.length]) & 255;
43
+ t = S[i];
44
+ S[i] = S[j];
45
+ S[j] = t;
46
+ }
47
+ this.i=0;
48
+ this.j=0;
49
+ }
50
+ public function next():uint {
51
+ var t:int;
52
+ i = (i+1)&255;
53
+ j = (j+S[i])&255;
54
+ t = S[i];
55
+ S[i] = S[j];
56
+ S[j] = t;
57
+ return S[(t+S[i])&255];
58
+ }
59
+
60
+ public function getBlockSize():uint {
61
+ return 1;
62
+ }
63
+
64
+ public function encrypt(block:ByteArray):void {
65
+ var i:uint = 0;
66
+ while (i<block.length) {
67
+ block[i++] ^= next();
68
+ }
69
+ }
70
+ public function decrypt(block:ByteArray):void {
71
+ encrypt(block); // the beauty of XOR.
72
+ }
73
+ public function dispose():void {
74
+ var i:uint = 0;
75
+ if (S!=null) {
76
+ for (i=0;i<S.length;i++) {
77
+ S[i] = Math.random()*256;
78
+ }
79
+ S.length=0;
80
+ S = null;
81
+ }
82
+ this.i = 0;
83
+ this.j = 0;
84
+ Memory.gc();
85
+ }
86
+ public function toString():String {
87
+ return "rc4";
88
+ }
89
+ }
90
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * IPRNG
3
+ *
4
+ * An interface for classes that can be used a pseudo-random number generators
5
+ * Copyright (c) 2007 Henri Torgemane
6
+ *
7
+ * See LICENSE.txt for full license information.
8
+ */
9
+ package com.hurlant.crypto.prng
10
+ {
11
+ import flash.utils.ByteArray;
12
+
13
+ public interface IPRNG {
14
+ function getPoolSize():uint;
15
+ function init(key:ByteArray):void;
16
+ function next():uint;
17
+ function dispose():void;
18
+ function toString():String;
19
+ }
20
+ }
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Random
3
+ *
4
+ * An ActionScript 3 implementation of a Random Number Generator
5
+ * Copyright (c) 2007 Henri Torgemane
6
+ *
7
+ * Derived from:
8
+ * The jsbn library, Copyright (c) 2003-2005 Tom Wu
9
+ *
10
+ * See LICENSE.txt for full license information.
11
+ */
12
+ package com.hurlant.crypto.prng
13
+ {
14
+ import flash.utils.ByteArray;
15
+ import com.hurlant.util.Memory;
16
+ import flash.system.System;
17
+ import flash.system.Capabilities;
18
+ import flash.accessibility.AccessibilityProperties;
19
+ import flash.display.SWFVersion;
20
+ import flash.display.Stage;
21
+ import flash.utils.getTimer;
22
+ import flash.text.Font;
23
+
24
+ public class Random
25
+ {
26
+ private var state:IPRNG;
27
+ private var ready:Boolean = false;
28
+ private var pool:ByteArray;
29
+ private var psize:int;
30
+ private var pptr:int;
31
+ private var seeded:Boolean = false;
32
+
33
+ public function Random(prng:Class = null) {
34
+ if (prng==null) prng = ARC4;
35
+ state = new prng as IPRNG;
36
+ psize= state.getPoolSize();
37
+ pool = new ByteArray;
38
+ pptr = 0;
39
+ while (pptr <psize) {
40
+ var t:uint = 65536*Math.random();
41
+ pool[pptr++] = t >>> 8;
42
+ pool[pptr++] = t&255;
43
+ }
44
+ pptr=0;
45
+ seed();
46
+ }
47
+
48
+ public function seed(x:int = 0):void {
49
+ if (x==0) {
50
+ x = new Date().getTime();
51
+ }
52
+ pool[pptr++] ^= x & 255;
53
+ pool[pptr++] ^= (x>>8)&255;
54
+ pool[pptr++] ^= (x>>16)&255;
55
+ pool[pptr++] ^= (x>>24)&255;
56
+ pptr %= psize;
57
+ seeded = true;
58
+ }
59
+
60
+ /**
61
+ * Gather anything we have that isn't entirely predictable:
62
+ * - memory used
63
+ * - system capabilities
64
+ * - timing stuff
65
+ * - installed fonts
66
+ */
67
+ public function autoSeed():void {
68
+ var b:ByteArray = new ByteArray;
69
+ b.writeUnsignedInt(System.totalMemory);
70
+ b.writeUTF(Capabilities.serverString);
71
+ b.writeUnsignedInt(getTimer());
72
+ b.writeUnsignedInt((new Date).getTime());
73
+ var a:Array = Font.enumerateFonts(true);
74
+ for each (var f:Font in a) {
75
+ b.writeUTF(f.fontName);
76
+ b.writeUTF(f.fontStyle);
77
+ b.writeUTF(f.fontType);
78
+ }
79
+ b.position=0;
80
+ while (b.bytesAvailable>=4) {
81
+ seed(b.readUnsignedInt());
82
+ }
83
+ }
84
+
85
+
86
+ public function nextBytes(buffer:ByteArray, length:int):void {
87
+ while (length--) {
88
+ buffer.writeByte(nextByte());
89
+ }
90
+ }
91
+ public function nextByte():int {
92
+ if (!ready) {
93
+ if (!seeded) {
94
+ autoSeed();
95
+ }
96
+ state.init(pool);
97
+ pool.length = 0;
98
+ pptr = 0;
99
+ ready = true;
100
+ }
101
+ return state.next();
102
+ }
103
+ public function dispose():void {
104
+ for (var i:uint=0;i<pool.length;i++) {
105
+ pool[i] = Math.random()*256;
106
+ }
107
+ pool.length=0;
108
+ pool = null;
109
+ state.dispose();
110
+ state = null;
111
+ psize = 0;
112
+ pptr = 0;
113
+ Memory.gc();
114
+ }
115
+ public function toString():String {
116
+ return "random-"+state.toString();
117
+ }
118
+ }
119
+ }
@@ -0,0 +1,142 @@
1
+ /**
2
+ * TLSPRF
3
+ *
4
+ * An ActionScript 3 implementation of a pseudo-random generator
5
+ * that follows the TLS specification
6
+ * Copyright (c) 2007 Henri Torgemane
7
+ *
8
+ * See LICENSE.txt for full license information.
9
+ */
10
+ package com.hurlant.crypto.prng
11
+ {
12
+ import flash.utils.ByteArray;
13
+ import com.hurlant.crypto.hash.HMAC;
14
+ import com.hurlant.crypto.hash.MD5;
15
+ import com.hurlant.crypto.hash.SHA1;
16
+ import com.hurlant.util.Memory;
17
+ import com.hurlant.util.Hex;
18
+ import flash.utils.IDataOutput;
19
+
20
+ /**
21
+ * There's "Random", and then there's TLS Random.
22
+ * .
23
+ * Still Pseudo-random, though.
24
+ */
25
+ public class TLSPRF
26
+ {
27
+ // XXX WAY TOO MANY STRUCTURES HERE
28
+
29
+ // seed
30
+ private var seed:ByteArray;
31
+ // P_MD5's secret
32
+ private var s1:ByteArray;
33
+ // P_SHA-1's secret
34
+ private var s2:ByteArray;
35
+ // HMAC_MD5's A
36
+ private var a1:ByteArray;
37
+ // HMAC_SHA1's A
38
+ private var a2:ByteArray;
39
+ // Pool for P_MD5
40
+ private var p1:ByteArray;
41
+ // Pool for P_SHA1
42
+ private var p2:ByteArray;
43
+ // Data for HMAC_MD5
44
+ private var d1:ByteArray;
45
+ // Data for HMAC_SHA1
46
+ private var d2:ByteArray;
47
+
48
+
49
+ private var hmac_md5:HMAC;
50
+ private var hmac_sha1:HMAC;
51
+
52
+ public function TLSPRF(secret:ByteArray, label:String, seed:ByteArray) {
53
+ var l:int = Math.ceil(secret.length/2);
54
+ var s1:ByteArray = new ByteArray;
55
+ var s2:ByteArray = new ByteArray;
56
+ s1.writeBytes(secret, 0, l);
57
+ s2.writeBytes(secret, secret.length-l, l);
58
+ var s:ByteArray = new ByteArray;
59
+ s.writeUTFBytes(label);
60
+ s.writeBytes(seed);
61
+ this.seed = s;
62
+ this.s1 = s1;
63
+ this.s2 = s2;
64
+ hmac_md5 = new HMAC(new MD5);
65
+ hmac_sha1 = new HMAC(new SHA1);
66
+
67
+ this.a1 = hmac_md5.compute(s1, this.seed);
68
+ this.a2 = hmac_sha1.compute(s2, this.seed);
69
+
70
+ p1 = new ByteArray;
71
+ p2 = new ByteArray;
72
+
73
+ d1 = new ByteArray;
74
+ d2 = new ByteArray;
75
+ d1.position = MD5.HASH_SIZE;
76
+ d1.writeBytes(this.seed);
77
+ d2.position = SHA1.HASH_SIZE;
78
+ d2.writeBytes(this.seed);
79
+ }
80
+
81
+ // XXX HORRIBLY SLOW. REWRITE.
82
+ public function nextBytes(buffer:IDataOutput, length:int):void {
83
+ while (length--) {
84
+ buffer.writeByte(nextByte());
85
+ }
86
+ }
87
+ public function nextByte():int {
88
+ if (p1.bytesAvailable==0) {
89
+ more_md5();
90
+ }
91
+ if (p2.bytesAvailable==0) {
92
+ more_sha1();
93
+ }
94
+ return p1.readUnsignedByte()^p2.readUnsignedByte();
95
+ }
96
+ public function dispose():void {
97
+ seed = dba(seed);
98
+ s1 = dba(s1);
99
+ s2 = dba(s2);
100
+ a1 = dba(a1);
101
+ a2 = dba(a2);
102
+ p1 = dba(p1);
103
+ p2 = dba(p2);
104
+ d1 = dba(d1);
105
+ d2 = dba(d2);
106
+ hmac_md5.dispose();
107
+ hmac_md5 = null;
108
+ hmac_sha1.dispose();
109
+ hmac_sha1 = null;
110
+ Memory.gc();
111
+ }
112
+ public function toString():String {
113
+ return "tls-prf";
114
+ }
115
+ private function dba(ba:ByteArray):ByteArray {
116
+ for (var i:uint=0;i<ba.length;i++) {
117
+ ba[i]=0;
118
+ }
119
+ ba.length=0;
120
+ return null;
121
+ }
122
+ private function more_md5():void {
123
+ d1.position=0;
124
+ d1.writeBytes(a1);
125
+ var p:int = p1.position;
126
+ var more:ByteArray = hmac_md5.compute(s1, d1);
127
+ a1 = hmac_md5.compute(s1, a1);
128
+ p1.writeBytes(more);
129
+ p1.position=p;
130
+ }
131
+ private function more_sha1():void {
132
+ d2.position=0;
133
+ d2.writeBytes(a2);
134
+ var p:int = p2.position;
135
+ var more:ByteArray = hmac_sha1.compute(s2, d2);
136
+ a2 = hmac_sha1.compute(s2, a2);
137
+ p2.writeBytes(more);
138
+ p2.position=p;
139
+ }
140
+
141
+ }
142
+ }