rocket-js 0.0.2 → 0.0.3
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/Rakefile +5 -52
- data/spec/ruby/spec_helper.rb +2 -1
- metadata +7 -129
- data/src/vendor/web-socket-js/FABridge.js +0 -604
- data/src/vendor/web-socket-js/README.txt +0 -109
- 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 +0 -473
- data/src/vendor/web-socket-js/flash-src/WebSocketMain.as +0 -88
- data/src/vendor/web-socket-js/flash-src/WebSocketMainInsecure.as +0 -19
- data/src/vendor/web-socket-js/flash-src/WebSocketStateEvent.as +0 -32
- data/src/vendor/web-socket-js/flash-src/bridge/FABridge.as +0 -943
- data/src/vendor/web-socket-js/flash-src/build.sh +0 -10
- data/src/vendor/web-socket-js/flash-src/com/adobe/net/proxies/RFC2817Socket.as +0 -204
- data/src/vendor/web-socket-js/flash-src/com/gsolo/encryption/MD5.as +0 -375
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/Crypto.as +0 -287
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/MozillaRootCertificates.as +0 -3235
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509Certificate.as +0 -218
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509CertificateCollection.as +0 -57
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/HMAC.as +0 -82
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHMAC.as +0 -27
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHash.as +0 -21
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MAC.as +0 -137
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD2.as +0 -124
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD5.as +0 -204
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA1.as +0 -106
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA224.as +0 -28
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA256.as +0 -115
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHABase.as +0 -71
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/ARC4.as +0 -90
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/IPRNG.as +0 -20
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/Random.as +0 -119
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/TLSPRF.as +0 -142
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/rsa/RSAKey.as +0 -339
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/AESKey.as +0 -2797
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/BlowFishKey.as +0 -375
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CBCMode.as +0 -55
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFB8Mode.as +0 -61
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFBMode.as +0 -64
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CTRMode.as +0 -58
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/DESKey.as +0 -365
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ECBMode.as +0 -86
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ICipher.as +0 -21
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IMode.as +0 -15
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IPad.as +0 -32
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IStreamCipher.as +0 -21
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ISymmetricKey.as +0 -35
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as +0 -110
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/NullPad.as +0 -34
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/OFBMode.as +0 -52
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/PKCS5.as +0 -44
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SSLPad.as +0 -44
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SimpleIVMode.as +0 -60
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TLSPad.as +0 -42
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TripleDESKey.as +0 -88
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/XTeaKey.as +0 -94
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/aeskey.pl +0 -29
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/dump.txt +0 -2304
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/AESKeyTest.as +0 -1220
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ARC4Test.as +0 -58
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BigIntegerTest.as +0 -39
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BlowFishKeyTest.as +0 -148
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CBCModeTest.as +0 -160
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFB8ModeTest.as +0 -71
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFBModeTest.as +0 -98
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CTRModeTest.as +0 -109
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/DESKeyTest.as +0 -112
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ECBModeTest.as +0 -151
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/HMACTest.as +0 -184
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ITestHarness.as +0 -20
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD2Test.as +0 -56
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD5Test.as +0 -58
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/OFBModeTest.as +0 -101
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/RSAKeyTest.as +0 -92
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA1Test.as +0 -198
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA224Test.as +0 -58
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA256Test.as +0 -60
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TLSPRFTest.as +0 -51
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TestCase.as +0 -42
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TripleDESKeyTest.as +0 -59
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/XTeaKeyTest.as +0 -66
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/BulkCiphers.as +0 -102
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/CipherSuites.as +0 -117
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/IConnectionState.as +0 -14
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/ISecurityParameters.as +0 -29
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/KeyExchanges.as +0 -24
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/MACs.as +0 -38
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLConnectionState.as +0 -171
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLEvent.as +0 -26
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLSecurityParameters.as +0 -340
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConfig.as +0 -70
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConnectionState.as +0 -151
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEngine.as +0 -895
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSError.as +0 -39
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEvent.as +0 -27
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSecurityParameters.as +0 -197
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocket.as +0 -370
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocketEvent.as +0 -26
- data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as +0 -180
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/BarrettReduction.as +0 -90
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/BigInteger.as +0 -1543
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/ClassicReduction.as +0 -35
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/IReduction.as +0 -11
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/MontgomeryReduction.as +0 -85
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/NullReduction.as +0 -34
- data/src/vendor/web-socket-js/flash-src/com/hurlant/math/bi_internal.as +0 -11
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/ArrayUtil.as +0 -25
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/Base64.as +0 -189
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/Hex.as +0 -66
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/Memory.as +0 -28
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/ByteString.as +0 -43
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/DER.as +0 -210
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/IAsn1Type.as +0 -21
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Integer.as +0 -44
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/OID.as +0 -35
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/ObjectIdentifier.as +0 -112
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/PEM.as +0 -118
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/PrintableString.as +0 -49
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Sequence.as +0 -90
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Set.as +0 -27
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Type.as +0 -94
- data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/UTCTime.as +0 -60
- data/src/vendor/web-socket-js/sample.html +0 -76
- data/src/vendor/web-socket-js/swfobject.js +0 -4
- data/src/vendor/web-socket-js/web_socket.js +0 -388
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ECBMode
|
|
3
|
-
*
|
|
4
|
-
* An ActionScript 3 implementation of the ECB 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
|
-
import com.hurlant.util.Memory;
|
|
13
|
-
import com.hurlant.util.Hex;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* ECB mode.
|
|
17
|
-
* This uses a padding and a symmetric key.
|
|
18
|
-
* If no padding is given, PKCS#5 is used.
|
|
19
|
-
*/
|
|
20
|
-
public class ECBMode implements IMode, ICipher
|
|
21
|
-
{
|
|
22
|
-
private var key:ISymmetricKey;
|
|
23
|
-
private var padding:IPad;
|
|
24
|
-
|
|
25
|
-
public function ECBMode(key:ISymmetricKey, padding:IPad = null) {
|
|
26
|
-
this.key = key;
|
|
27
|
-
if (padding == null) {
|
|
28
|
-
padding = new PKCS5(key.getBlockSize());
|
|
29
|
-
} else {
|
|
30
|
-
padding.setBlockSize(key.getBlockSize());
|
|
31
|
-
}
|
|
32
|
-
this.padding = padding;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
public function getBlockSize():uint {
|
|
36
|
-
return key.getBlockSize();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
public function encrypt(src:ByteArray):void {
|
|
40
|
-
padding.pad(src);
|
|
41
|
-
src.position = 0;
|
|
42
|
-
var blockSize:uint = key.getBlockSize();
|
|
43
|
-
var tmp:ByteArray = new ByteArray;
|
|
44
|
-
var dst:ByteArray = new ByteArray;
|
|
45
|
-
for (var i:uint=0;i<src.length;i+=blockSize) {
|
|
46
|
-
tmp.length=0;
|
|
47
|
-
src.readBytes(tmp, 0, blockSize);
|
|
48
|
-
key.encrypt(tmp);
|
|
49
|
-
dst.writeBytes(tmp);
|
|
50
|
-
}
|
|
51
|
-
src.length=0;
|
|
52
|
-
src.writeBytes(dst);
|
|
53
|
-
}
|
|
54
|
-
public function decrypt(src:ByteArray):void {
|
|
55
|
-
src.position = 0;
|
|
56
|
-
var blockSize:uint = key.getBlockSize();
|
|
57
|
-
|
|
58
|
-
// sanity check.
|
|
59
|
-
if (src.length%blockSize!=0) {
|
|
60
|
-
throw new Error("ECB mode cipher length must be a multiple of blocksize "+blockSize);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
var tmp:ByteArray = new ByteArray;
|
|
64
|
-
var dst:ByteArray = new ByteArray;
|
|
65
|
-
for (var i:uint=0;i<src.length;i+=blockSize) {
|
|
66
|
-
tmp.length=0;
|
|
67
|
-
src.readBytes(tmp, 0, blockSize);
|
|
68
|
-
|
|
69
|
-
key.decrypt(tmp);
|
|
70
|
-
dst.writeBytes(tmp);
|
|
71
|
-
}
|
|
72
|
-
padding.unpad(dst);
|
|
73
|
-
src.length=0;
|
|
74
|
-
src.writeBytes(dst);
|
|
75
|
-
}
|
|
76
|
-
public function dispose():void {
|
|
77
|
-
key.dispose();
|
|
78
|
-
key = null;
|
|
79
|
-
padding = null;
|
|
80
|
-
Memory.gc();
|
|
81
|
-
}
|
|
82
|
-
public function toString():String {
|
|
83
|
-
return key.toString()+"-ecb";
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ICipher
|
|
3
|
-
*
|
|
4
|
-
* A generic interface to use symmetric ciphers
|
|
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 interface ICipher
|
|
14
|
-
{
|
|
15
|
-
function getBlockSize():uint;
|
|
16
|
-
function encrypt(src:ByteArray):void;
|
|
17
|
-
function decrypt(src:ByteArray):void;
|
|
18
|
-
function dispose():void;
|
|
19
|
-
function toString():String;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IMode
|
|
3
|
-
*
|
|
4
|
-
* An interface for confidentiality modes to implement
|
|
5
|
-
* This could become deprecated at some point.
|
|
6
|
-
* Copyright (c) 2007 Henri Torgemane
|
|
7
|
-
*
|
|
8
|
-
* See LICENSE.txt for full license information.
|
|
9
|
-
*/
|
|
10
|
-
package com.hurlant.crypto.symmetric
|
|
11
|
-
{
|
|
12
|
-
public interface IMode extends ICipher
|
|
13
|
-
{
|
|
14
|
-
}
|
|
15
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IPad
|
|
3
|
-
*
|
|
4
|
-
* An interface for padding mechanisms to implement.
|
|
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
|
-
* Tiny interface that represents a padding mechanism.
|
|
15
|
-
*/
|
|
16
|
-
public interface IPad
|
|
17
|
-
{
|
|
18
|
-
/**
|
|
19
|
-
* Add padding to the array
|
|
20
|
-
*/
|
|
21
|
-
function pad(a:ByteArray):void;
|
|
22
|
-
/**
|
|
23
|
-
* Remove padding from the array.
|
|
24
|
-
* @throws Error if the padding is invalid.
|
|
25
|
-
*/
|
|
26
|
-
function unpad(a:ByteArray):void;
|
|
27
|
-
/**
|
|
28
|
-
* Set the blockSize to work on
|
|
29
|
-
*/
|
|
30
|
-
function setBlockSize(bs:uint):void;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IStreamCipher
|
|
3
|
-
*
|
|
4
|
-
* A "marker" interface for stream ciphers.
|
|
5
|
-
* Copyright (c) 2007 Henri Torgemane
|
|
6
|
-
*
|
|
7
|
-
* See LICENSE.txt for full license information.
|
|
8
|
-
*/
|
|
9
|
-
package com.hurlant.crypto.symmetric {
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* A marker to indicate how this cipher works.
|
|
13
|
-
* A stream cipher:
|
|
14
|
-
* - does not use initialization vector
|
|
15
|
-
* - keeps some internal state between calls to encrypt() and decrypt()
|
|
16
|
-
*
|
|
17
|
-
*/
|
|
18
|
-
public interface IStreamCipher extends ICipher {
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ISymmetricKey
|
|
3
|
-
*
|
|
4
|
-
* An interface for symmetric encryption keys to implement.
|
|
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 interface ISymmetricKey
|
|
14
|
-
{
|
|
15
|
-
/**
|
|
16
|
-
* Returns the block size used by this particular encryption algorithm
|
|
17
|
-
*/
|
|
18
|
-
function getBlockSize():uint;
|
|
19
|
-
/**
|
|
20
|
-
* Encrypt one block of data in "block", starting at "index", of length "getBlockSize()"
|
|
21
|
-
*/
|
|
22
|
-
function encrypt(block:ByteArray, index:uint=0):void;
|
|
23
|
-
/**
|
|
24
|
-
* Decrypt one block of data in "block", starting at "index", of length "getBlockSize()"
|
|
25
|
-
*/
|
|
26
|
-
function decrypt(block:ByteArray, index:uint=0):void;
|
|
27
|
-
/**
|
|
28
|
-
* Attempts to destroy sensitive information from memory, such as encryption keys.
|
|
29
|
-
* Note: This is not guaranteed to work given the Flash sandbox model.
|
|
30
|
-
*/
|
|
31
|
-
function dispose():void;
|
|
32
|
-
|
|
33
|
-
function toString():String;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IVMode
|
|
3
|
-
*
|
|
4
|
-
* An abstract class for confidentialy modes that rely on an initialization vector.
|
|
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 com.hurlant.crypto.prng.Random;
|
|
12
|
-
import com.hurlant.crypto.tests.TestCase;
|
|
13
|
-
import com.hurlant.util.Memory;
|
|
14
|
-
|
|
15
|
-
import flash.utils.ByteArray;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* An "abtract" class to avoid redundant code in subclasses
|
|
19
|
-
*/
|
|
20
|
-
public class IVMode
|
|
21
|
-
{
|
|
22
|
-
protected var key:ISymmetricKey;
|
|
23
|
-
protected var padding:IPad;
|
|
24
|
-
// random generator used to generate IVs
|
|
25
|
-
protected var prng:Random;
|
|
26
|
-
// optional static IV. used for testing only.
|
|
27
|
-
protected var iv:ByteArray;
|
|
28
|
-
// generated IV is stored here.
|
|
29
|
-
protected var lastIV:ByteArray;
|
|
30
|
-
protected var blockSize:uint;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
public function IVMode(key:ISymmetricKey, padding:IPad = null) {
|
|
34
|
-
this.key = key;
|
|
35
|
-
blockSize = key.getBlockSize();
|
|
36
|
-
if (padding == null) {
|
|
37
|
-
padding = new PKCS5(blockSize);
|
|
38
|
-
} else {
|
|
39
|
-
padding.setBlockSize(blockSize);
|
|
40
|
-
}
|
|
41
|
-
this.padding = padding;
|
|
42
|
-
|
|
43
|
-
prng = new Random;
|
|
44
|
-
iv = null;
|
|
45
|
-
lastIV = new ByteArray;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
public function getBlockSize():uint {
|
|
49
|
-
return key.getBlockSize();
|
|
50
|
-
}
|
|
51
|
-
public function dispose():void {
|
|
52
|
-
var i:uint;
|
|
53
|
-
if (iv != null) {
|
|
54
|
-
for (i=0;i<iv.length;i++) {
|
|
55
|
-
iv[i] = prng.nextByte();
|
|
56
|
-
}
|
|
57
|
-
iv.length=0;
|
|
58
|
-
iv = null;
|
|
59
|
-
}
|
|
60
|
-
if (lastIV != null) {
|
|
61
|
-
for (i=0;i<iv.length;i++) {
|
|
62
|
-
lastIV[i] = prng.nextByte();
|
|
63
|
-
}
|
|
64
|
-
lastIV.length=0;
|
|
65
|
-
lastIV=null;
|
|
66
|
-
}
|
|
67
|
-
key.dispose();
|
|
68
|
-
key = null;
|
|
69
|
-
padding = null;
|
|
70
|
-
prng.dispose();
|
|
71
|
-
prng = null;
|
|
72
|
-
Memory.gc();
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Optional function to force the IV value.
|
|
76
|
-
* Normally, an IV gets generated randomly at every encrypt() call.
|
|
77
|
-
* Also, use this to set the IV before calling decrypt()
|
|
78
|
-
* (if not set before decrypt(), the IV is read from the beginning of the stream.)
|
|
79
|
-
*/
|
|
80
|
-
public function set IV(value:ByteArray):void {
|
|
81
|
-
iv = value;
|
|
82
|
-
lastIV.length=0;
|
|
83
|
-
lastIV.writeBytes(iv);
|
|
84
|
-
}
|
|
85
|
-
public function get IV():ByteArray {
|
|
86
|
-
return lastIV;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
protected function getIV4e():ByteArray {
|
|
90
|
-
var vec:ByteArray = new ByteArray;
|
|
91
|
-
if (iv) {
|
|
92
|
-
vec.writeBytes(iv);
|
|
93
|
-
} else {
|
|
94
|
-
prng.nextBytes(vec, blockSize);
|
|
95
|
-
}
|
|
96
|
-
lastIV.length=0;
|
|
97
|
-
lastIV.writeBytes(vec);
|
|
98
|
-
return vec;
|
|
99
|
-
}
|
|
100
|
-
protected function getIV4d():ByteArray {
|
|
101
|
-
var vec:ByteArray = new ByteArray;
|
|
102
|
-
if (iv) {
|
|
103
|
-
vec.writeBytes(iv);
|
|
104
|
-
} else {
|
|
105
|
-
throw new Error("an IV must be set before calling decrypt()");
|
|
106
|
-
}
|
|
107
|
-
return vec;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NullPad
|
|
3
|
-
*
|
|
4
|
-
* A padding class that doesn't pad.
|
|
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
|
-
* A pad that does nothing.
|
|
15
|
-
* Useful when you don't want padding in your Mode.
|
|
16
|
-
*/
|
|
17
|
-
public class NullPad implements IPad
|
|
18
|
-
{
|
|
19
|
-
public function unpad(a:ByteArray):void
|
|
20
|
-
{
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
public function pad(a:ByteArray):void
|
|
25
|
-
{
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
public function setBlockSize(bs:uint):void {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OFBMode
|
|
3
|
-
*
|
|
4
|
-
* An ActionScript 3 implementation of the OFB 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 OFBMode extends IVMode implements IMode
|
|
14
|
-
{
|
|
15
|
-
public function OFBMode(key:ISymmetricKey, padding:IPad=null)
|
|
16
|
-
{
|
|
17
|
-
super(key, null);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
public function encrypt(src:ByteArray):void
|
|
21
|
-
{
|
|
22
|
-
var vector:ByteArray = getIV4e();
|
|
23
|
-
core(src, vector);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
public function decrypt(src:ByteArray):void
|
|
27
|
-
{
|
|
28
|
-
var vector:ByteArray = getIV4d();
|
|
29
|
-
core(src, vector);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
private function core(src:ByteArray, iv:ByteArray):void {
|
|
33
|
-
var l:uint = src.length;
|
|
34
|
-
var tmp:ByteArray = new ByteArray;
|
|
35
|
-
for (var i:uint=0;i<src.length;i+=blockSize) {
|
|
36
|
-
key.encrypt(iv);
|
|
37
|
-
tmp.position=0;
|
|
38
|
-
tmp.writeBytes(iv);
|
|
39
|
-
var chunk:uint = (i+blockSize<l)?blockSize:l-i;
|
|
40
|
-
for (var j:uint=0;j<chunk;j++) {
|
|
41
|
-
src[i+j] ^= iv[j];
|
|
42
|
-
}
|
|
43
|
-
iv.position=0;
|
|
44
|
-
iv.writeBytes(tmp);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
public function toString():String {
|
|
48
|
-
return key.toString()+"-ofb";
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PKCS5
|
|
3
|
-
*
|
|
4
|
-
* A padding implementation of PKCS5.
|
|
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 PKCS5 implements IPad
|
|
14
|
-
{
|
|
15
|
-
private var blockSize:uint;
|
|
16
|
-
|
|
17
|
-
public function PKCS5(blockSize:uint=0) {
|
|
18
|
-
this.blockSize = blockSize;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
public function pad(a:ByteArray):void {
|
|
22
|
-
var c:uint = blockSize-a.length%blockSize;
|
|
23
|
-
for (var i:uint=0;i<c;i++){
|
|
24
|
-
a[a.length] = c;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
public function unpad(a:ByteArray):void {
|
|
28
|
-
var c:uint = a.length%blockSize;
|
|
29
|
-
if (c!=0) throw new Error("PKCS#5::unpad: ByteArray.length isn't a multiple of the blockSize");
|
|
30
|
-
c = a[a.length-1];
|
|
31
|
-
for (var i:uint=c;i>0;i--) {
|
|
32
|
-
var v:uint = a[a.length-1];
|
|
33
|
-
a.length--;
|
|
34
|
-
if (c!=v) throw new Error("PKCS#5:unpad: Invalid padding value. expected ["+c+"], found ["+v+"]");
|
|
35
|
-
}
|
|
36
|
-
// that is all.
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
public function setBlockSize(bs:uint):void {
|
|
40
|
-
blockSize = bs;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
}
|