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,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
|
+
}
|