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.
- data/.gitignore +0 -11
- data/Rakefile +33 -47
- data/lib/rocket/js.rb +0 -2
- data/lib/rocket/js/builder.rb +2 -2
- data/lib/rocket/js/cli.rb +1 -1
- data/rocket-js.gemspec +23 -80
- data/src/vendor/web-socket-js/FABridge.js +604 -0
- data/src/vendor/web-socket-js/README.txt +109 -0
- data/src/vendor/web-socket-js/WebSocketMain.swf +0 -0
- data/src/vendor/web-socket-js/WebSocketMainInsecure.zip +0 -0
- data/src/vendor/web-socket-js/flash-src/WebSocket.as +473 -0
- data/src/vendor/web-socket-js/flash-src/WebSocketMain.as +88 -0
- data/src/vendor/web-socket-js/flash-src/WebSocketMainInsecure.as +19 -0
- data/src/vendor/web-socket-js/flash-src/WebSocketStateEvent.as +32 -0
- data/src/vendor/web-socket-js/flash-src/bridge/FABridge.as +943 -0
- data/src/vendor/web-socket-js/flash-src/build.sh +10 -0
- data/src/vendor/web-socket-js/flash-src/com/adobe/net/proxies/RFC2817Socket.as +204 -0
- data/src/vendor/web-socket-js/flash-src/com/gsolo/encryption/MD5.as +375 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/Crypto.as +287 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/MozillaRootCertificates.as +3235 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509Certificate.as +218 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509CertificateCollection.as +57 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/HMAC.as +82 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHMAC.as +27 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHash.as +21 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MAC.as +137 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD2.as +124 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD5.as +204 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA1.as +106 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA224.as +28 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA256.as +115 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHABase.as +71 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/ARC4.as +90 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/IPRNG.as +20 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/Random.as +119 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/TLSPRF.as +142 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/rsa/RSAKey.as +339 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/AESKey.as +2797 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/BlowFishKey.as +375 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CBCMode.as +55 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFB8Mode.as +61 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFBMode.as +64 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CTRMode.as +58 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/DESKey.as +365 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ECBMode.as +86 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ICipher.as +21 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IMode.as +15 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IPad.as +32 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IStreamCipher.as +21 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ISymmetricKey.as +35 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as +110 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/NullPad.as +34 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/OFBMode.as +52 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/PKCS5.as +44 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SSLPad.as +44 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SimpleIVMode.as +60 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TLSPad.as +42 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TripleDESKey.as +88 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/XTeaKey.as +94 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/aeskey.pl +29 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/dump.txt +2304 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/AESKeyTest.as +1220 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ARC4Test.as +58 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BigIntegerTest.as +39 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BlowFishKeyTest.as +148 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CBCModeTest.as +160 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFB8ModeTest.as +71 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFBModeTest.as +98 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CTRModeTest.as +109 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/DESKeyTest.as +112 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ECBModeTest.as +151 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/HMACTest.as +184 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ITestHarness.as +20 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD2Test.as +56 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD5Test.as +58 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/OFBModeTest.as +101 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/RSAKeyTest.as +92 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA1Test.as +198 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA224Test.as +58 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA256Test.as +60 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TLSPRFTest.as +51 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TestCase.as +42 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TripleDESKeyTest.as +59 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/XTeaKeyTest.as +66 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/BulkCiphers.as +102 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/CipherSuites.as +117 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/IConnectionState.as +14 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/ISecurityParameters.as +29 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/KeyExchanges.as +24 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/MACs.as +38 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLConnectionState.as +171 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLEvent.as +26 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLSecurityParameters.as +340 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConfig.as +70 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConnectionState.as +151 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEngine.as +895 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSError.as +39 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEvent.as +27 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSecurityParameters.as +197 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocket.as +370 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocketEvent.as +26 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as +180 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/BarrettReduction.as +90 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/BigInteger.as +1543 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/ClassicReduction.as +35 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/IReduction.as +11 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/MontgomeryReduction.as +85 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/NullReduction.as +34 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/bi_internal.as +11 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/ArrayUtil.as +25 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/Base64.as +189 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/Hex.as +66 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/Memory.as +28 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/ByteString.as +43 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/DER.as +210 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/IAsn1Type.as +21 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Integer.as +44 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/OID.as +35 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/ObjectIdentifier.as +112 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/PEM.as +118 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/PrintableString.as +49 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Sequence.as +90 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Set.as +27 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Type.as +94 -0
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/UTCTime.as +60 -0
- data/src/vendor/web-socket-js/sample.html +76 -0
- data/src/vendor/web-socket-js/swfobject.js +4 -0
- data/src/vendor/web-socket-js/web_socket.js +388 -0
- metadata +163 -30
- data/lib/rocket/js/version.rb +0 -14
- 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
|
+
}
|