rocket-js 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
+ }