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,98 @@
1
+ /**
2
+ * CFBModeTest
3
+ *
4
+ * A test class for CFBMode
5
+ * Copyright (c) 2007 Henri Torgemane
6
+ *
7
+ * See LICENSE.txt for full license information.
8
+ */
9
+ package com.hurlant.crypto.tests
10
+ {
11
+ import com.hurlant.crypto.symmetric.AESKey;
12
+ import com.hurlant.crypto.symmetric.CFBMode;
13
+ import com.hurlant.crypto.symmetric.NullPad;
14
+ import com.hurlant.util.Hex;
15
+
16
+ import flash.utils.ByteArray;
17
+
18
+ public class CFBModeTest extends TestCase
19
+ {
20
+ public function CFBModeTest(h:ITestHarness)
21
+ {
22
+ super(h, "CFBMode Test");
23
+ runTest(testCFB_AES128, "CFB AES-128 Test Vectors");
24
+ runTest(testCFB_AES192, "CFB AES-192 Test Vectors");
25
+ runTest(testCFB_AES256, "CFB AES-256 Test Vectors");
26
+ h.endTestCase();
27
+ }
28
+
29
+ /**
30
+ * http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
31
+ */
32
+ public function testCFB_AES128():void {
33
+ var key:ByteArray = Hex.toArray("2b7e151628aed2a6abf7158809cf4f3c");
34
+ var pt:ByteArray = Hex.toArray(
35
+ "6bc1bee22e409f96e93d7e117393172a" +
36
+ "ae2d8a571e03ac9c9eb76fac45af8e51" +
37
+ "30c81c46a35ce411e5fbc1191a0a52ef" +
38
+ "f69f2445df4f9b17ad2b417be66c3710");
39
+ var ct:ByteArray = Hex.toArray(
40
+ "3b3fd92eb72dad20333449f8e83cfb4a" +
41
+ "c8a64537a0b3a93fcde3cdad9f1ce58b" +
42
+ "26751f67a3cbb140b1808cf187a4f4df" +
43
+ "c04b05357c5d1c0eeac4c66f9ff7f2e6");
44
+ var cfb:CFBMode = new CFBMode(new AESKey(key), new NullPad);
45
+ cfb.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");
46
+ var src:ByteArray = new ByteArray;
47
+ src.writeBytes(pt);
48
+ cfb.encrypt(src);
49
+ assert("CFB_AES128 test 1", Hex.fromArray(src)==Hex.fromArray(ct));
50
+ cfb.decrypt(src);
51
+ assert("CFB_AES128 test 2", Hex.fromArray(src)==Hex.fromArray(pt));
52
+ }
53
+ public function testCFB_AES192():void {
54
+ var key:ByteArray = Hex.toArray("8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b");
55
+ var pt:ByteArray = Hex.toArray(
56
+ "6bc1bee22e409f96e93d7e117393172a" +
57
+ "ae2d8a571e03ac9c9eb76fac45af8e51" +
58
+ "30c81c46a35ce411e5fbc1191a0a52ef" +
59
+ "f69f2445df4f9b17ad2b417be66c3710");
60
+ var ct:ByteArray = Hex.toArray(
61
+ "cdc80d6fddf18cab34c25909c99a4174" +
62
+ "67ce7f7f81173621961a2b70171d3d7a" +
63
+ "2e1e8a1dd59b88b1c8e60fed1efac4c9" +
64
+ "c05f9f9ca9834fa042ae8fba584b09ff");
65
+ var cfb:CFBMode = new CFBMode(new AESKey(key), new NullPad);
66
+ cfb.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");
67
+ var src:ByteArray = new ByteArray;
68
+ src.writeBytes(pt);
69
+ cfb.encrypt(src);
70
+ assert("CFB_AES192 test 1", Hex.fromArray(src)==Hex.fromArray(ct));
71
+ cfb.decrypt(src);
72
+ assert("CFB_AES192 test 2", Hex.fromArray(src)==Hex.fromArray(pt));
73
+ }
74
+ public function testCFB_AES256():void {
75
+ var key:ByteArray = Hex.toArray(
76
+ "603deb1015ca71be2b73aef0857d7781" +
77
+ "1f352c073b6108d72d9810a30914dff4");
78
+ var pt:ByteArray = Hex.toArray(
79
+ "6bc1bee22e409f96e93d7e117393172a" +
80
+ "ae2d8a571e03ac9c9eb76fac45af8e51" +
81
+ "30c81c46a35ce411e5fbc1191a0a52ef" +
82
+ "f69f2445df4f9b17ad2b417be66c3710");
83
+ var ct:ByteArray = Hex.toArray(
84
+ "dc7e84bfda79164b7ecd8486985d3860" +
85
+ "39ffed143b28b1c832113c6331e5407b" +
86
+ "df10132415e54b92a13ed0a8267ae2f9" +
87
+ "75a385741ab9cef82031623d55b1e471");
88
+ var cfb:CFBMode = new CFBMode(new AESKey(key), new NullPad);
89
+ cfb.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");
90
+ var src:ByteArray = new ByteArray;
91
+ src.writeBytes(pt);
92
+ cfb.encrypt(src);
93
+ assert("CFB_AES256 test 1", Hex.fromArray(src)==Hex.fromArray(ct));
94
+ cfb.decrypt(src);
95
+ assert("CFB_AES256 test 2", Hex.fromArray(src)==Hex.fromArray(pt));
96
+ }
97
+ }
98
+ }
@@ -0,0 +1,109 @@
1
+ /**
2
+ * CTRModeTest
3
+ *
4
+ * A test class for CTRMode
5
+ * Copyright (c) 2007 Henri Torgemane
6
+ *
7
+ * See LICENSE.txt for full license information.
8
+ */
9
+ package com.hurlant.crypto.tests
10
+ {
11
+ import flash.utils.ByteArray;
12
+ import com.hurlant.util.Hex;
13
+ import com.hurlant.crypto.symmetric.CTRMode;
14
+ import com.hurlant.crypto.symmetric.AESKey;
15
+ import com.hurlant.crypto.symmetric.NullPad;
16
+
17
+ public class CTRModeTest extends TestCase
18
+ {
19
+ public function CTRModeTest(h:ITestHarness)
20
+ {
21
+ super(h, "CTRMode Test");
22
+ runTest(testCTR_AES128, "CTR AES-128 Test Vectors");
23
+ runTest(testCTR_AES192, "CTR AES-192 Test Vectors");
24
+ runTest(testCTR_AES256, "CTR AES-256 Test Vectors");
25
+ h.endTestCase();
26
+ }
27
+
28
+ /**
29
+ * Vectors from http://csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38A.pdf
30
+ * Section F.5.1 and below.
31
+ */
32
+ public function testCTR_AES128():void {
33
+ var key:ByteArray = Hex.toArray("2b7e151628aed2a6abf7158809cf4f3c");
34
+ var pt:ByteArray = Hex.toArray(
35
+ "6bc1bee22e409f96e93d7e117393172a" +
36
+ "ae2d8a571e03ac9c9eb76fac45af8e51" +
37
+ "30c81c46a35ce411e5fbc1191a0a52ef" +
38
+ "f69f2445df4f9b17ad2b417be66c3710");
39
+ var ct:ByteArray = Hex.toArray(
40
+ "874d6191b620e3261bef6864990db6ce" +
41
+ "9806f66b7970fdff8617187bb9fffdff" +
42
+ "5ae4df3edbd5d35e5b4f09020db03eab" +
43
+ "1e031dda2fbe03d1792170a0f3009cee");
44
+ var ctr:CTRMode = new CTRMode(new AESKey(key), new NullPad);
45
+ ctr.IV = Hex.toArray("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff");
46
+ var src:ByteArray = new ByteArray;
47
+ src.writeBytes(pt);
48
+ ctr.encrypt(src);
49
+ var hsrc:String = Hex.fromArray(src);
50
+ var hct:String = Hex.fromArray(ct);
51
+ assert("CTR_AES128 test 1: "+hsrc+" != "+hct, hsrc==hct);
52
+ ctr.decrypt(src);
53
+ hsrc = Hex.fromArray(src);
54
+ var hpt:String = Hex.fromArray(pt);
55
+ assert("CTR_AES128 test 2: "+hsrc+" != "+hpt, hsrc==hpt);
56
+ }
57
+ public function testCTR_AES192():void {
58
+ var key:ByteArray = Hex.toArray("8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b");
59
+ var pt:ByteArray = Hex.toArray(
60
+ "6bc1bee22e409f96e93d7e117393172a" +
61
+ "ae2d8a571e03ac9c9eb76fac45af8e51" +
62
+ "30c81c46a35ce411e5fbc1191a0a52ef" +
63
+ "f69f2445df4f9b17ad2b417be66c3710");
64
+ var ct:ByteArray = Hex.toArray(
65
+ "1abc932417521ca24f2b0459fe7e6e0b" +
66
+ "090339ec0aa6faefd5ccc2c6f4ce8e94" +
67
+ "1e36b26bd1ebc670d1bd1d665620abf7" +
68
+ "4f78a7f6d29809585a97daec58c6b050");
69
+ var ctr:CTRMode = new CTRMode(new AESKey(key), new NullPad);
70
+ ctr.IV = Hex.toArray("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff");
71
+ var src:ByteArray = new ByteArray;
72
+ src.writeBytes(pt);
73
+ ctr.encrypt(src);
74
+ var hsrc:String = Hex.fromArray(src);
75
+ var hct:String = Hex.fromArray(ct);
76
+ assert("CTR_AES192 test 1: "+hsrc+" != "+hct, hsrc==hct);
77
+ ctr.decrypt(src);
78
+ hsrc = Hex.fromArray(src);
79
+ var hpt:String = Hex.fromArray(pt);
80
+ assert("CTR_AES192 test 2: "+hsrc+" != "+hpt, hsrc==hpt);
81
+ }
82
+ public function testCTR_AES256():void {
83
+ var key:ByteArray = Hex.toArray("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4");
84
+ var pt:ByteArray = Hex.toArray(
85
+ "6bc1bee22e409f96e93d7e117393172a" +
86
+ "ae2d8a571e03ac9c9eb76fac45af8e51" +
87
+ "30c81c46a35ce411e5fbc1191a0a52ef" +
88
+ "f69f2445df4f9b17ad2b417be66c3710");
89
+ var ct:ByteArray = Hex.toArray(
90
+ "601ec313775789a5b7a7f504bbf3d228" +
91
+ "f443e3ca4d62b59aca84e990cacaf5c5" +
92
+ "2b0930daa23de94ce87017ba2d84988d" +
93
+ "dfc9c58db67aada613c2dd08457941a6");
94
+ var ctr:CTRMode = new CTRMode(new AESKey(key), new NullPad);
95
+ ctr.IV = Hex.toArray("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff");
96
+ var src:ByteArray = new ByteArray;
97
+ src.writeBytes(pt);
98
+ ctr.encrypt(src);
99
+ var hsrc:String = Hex.fromArray(src);
100
+ var hct:String = Hex.fromArray(ct);
101
+ assert("CTR_AES256 test 1: "+hsrc+" != "+hct, hsrc==hct);
102
+ ctr.decrypt(src);
103
+ hsrc = Hex.fromArray(src);
104
+ var hpt:String = Hex.fromArray(pt);
105
+ assert("CTR_AES256 test 2: "+hsrc+" != "+hpt, hsrc==hpt);
106
+ }
107
+
108
+ }
109
+ }
@@ -0,0 +1,112 @@
1
+ /**
2
+ * DesKeyTest
3
+ *
4
+ * A test class for DesKey
5
+ * Copyright (c) 2007 Henri Torgemane
6
+ *
7
+ * See LICENSE.txt for full license information.
8
+ */
9
+ package com.hurlant.crypto.tests
10
+ {
11
+ import com.hurlant.crypto.symmetric.DESKey;
12
+ import com.hurlant.util.Hex;
13
+ import flash.utils.ByteArray;
14
+
15
+ public class DESKeyTest extends TestCase
16
+ {
17
+ public function DESKeyTest(h:ITestHarness)
18
+ {
19
+ super(h, "DESKey Test");
20
+ runTest(testECB,"DES ECB Test Vectors");
21
+ h.endTestCase();
22
+ }
23
+
24
+ /**
25
+ * Test vectors mostly grabbed from
26
+ * http://csrc.nist.gov/publications/nistpubs/800-17/800-17.pdf
27
+ * (Appendix A and B)
28
+ * incomplete.
29
+ */
30
+ public function testECB():void {
31
+ var keys:Array = [
32
+ "3b3898371520f75e", // grabbed from the output of some js implementation out there
33
+ "10316E028C8F3B4A", // appendix A vector
34
+ "0101010101010101", // appendix B Table 1, round 0
35
+ "0101010101010101", // round 1
36
+ "0101010101010101", // 2
37
+ "0101010101010101",
38
+ "0101010101010101",
39
+ "0101010101010101",
40
+ "0101010101010101",
41
+ "0101010101010101",
42
+ "0101010101010101", // round 8
43
+ "8001010101010101", // app B, tbl 2, round 0
44
+ "4001010101010101",
45
+ "2001010101010101",
46
+ "1001010101010101",
47
+ "0801010101010101",
48
+ "0401010101010101",
49
+ "0201010101010101",
50
+ "0180010101010101",
51
+ "0140010101010101", // round 8
52
+ ];
53
+ var pts:Array = [
54
+ "0000000000000000", // js
55
+ "0000000000000000", // App A
56
+ "8000000000000000", // App B, tbl 1, rnd0
57
+ "4000000000000000",
58
+ "2000000000000000",
59
+ "1000000000000000",
60
+ "0800000000000000", // rnd 4
61
+ "0400000000000000",
62
+ "0200000000000000",
63
+ "0100000000000000",
64
+ "0080000000000000", // round 8
65
+ "0000000000000000", // App B, tbl2, rnd0
66
+ "0000000000000000",
67
+ "0000000000000000",
68
+ "0000000000000000",
69
+ "0000000000000000",
70
+ "0000000000000000",
71
+ "0000000000000000",
72
+ "0000000000000000",
73
+ "0000000000000000", // rnd 8
74
+ ];
75
+ var cts:Array = [
76
+ "83A1E814889253E0", // js
77
+ "82DCBAFBDEAB6602", // App A
78
+ "95F8A5E5DD31D900", // App b, tbl 1, rnd 0
79
+ "DD7F121CA5015619",
80
+ "2E8653104F3834EA",
81
+ "4BD388FF6CD81D4F",
82
+ "20B9E767B2FB1456",
83
+ "55579380D77138EF",
84
+ "6CC5DEFAAF04512F",
85
+ "0D9F279BA5D87260",
86
+ "D9031B0271BD5A0A", // rnd 8
87
+ "95A8D72813DAA94D", // App B, tbl 2, rnd 0
88
+ "0EEC1487DD8C26D5",
89
+ "7AD16FFB79C45926",
90
+ "D3746294CA6A6CF3",
91
+ "809F5F873C1FD761",
92
+ "C02FAFFEC989D1FC",
93
+ "4615AA1D33E72F10",
94
+ "2055123350C00858",
95
+ "DF3B99D6577397C8", // rnd 8
96
+ ];
97
+
98
+ for (var i:uint=0;i<keys.length;i++) {
99
+ var key:ByteArray = Hex.toArray(keys[i]);
100
+ var pt:ByteArray = Hex.toArray(pts[i]);
101
+ var des:DESKey = new DESKey(key);
102
+ des.encrypt(pt);
103
+ var out:String = Hex.fromArray(pt).toUpperCase();
104
+ assert("comparing "+cts[i]+" to "+out, cts[i]==out);
105
+ // now go back to plaintext
106
+ des.decrypt(pt);
107
+ out = Hex.fromArray(pt).toUpperCase();
108
+ assert("comparing "+pts[i]+" to "+out, pts[i]==out);
109
+ }
110
+ }
111
+ }
112
+ }
@@ -0,0 +1,151 @@
1
+ /**
2
+ * ECBModeTest
3
+ *
4
+ * A test class for ECBMode
5
+ * Copyright (c) 2007 Henri Torgemane
6
+ *
7
+ * See LICENSE.txt for full license information.
8
+ */
9
+ package com.hurlant.crypto.tests
10
+ {
11
+ import com.hurlant.crypto.symmetric.AESKey;
12
+ import com.hurlant.crypto.symmetric.ECBMode;
13
+ import com.hurlant.crypto.symmetric.NullPad;
14
+ import com.hurlant.crypto.symmetric.XTeaKey;
15
+ import com.hurlant.util.Hex;
16
+
17
+ import flash.utils.ByteArray;
18
+
19
+ public class ECBModeTest extends TestCase
20
+ {
21
+ public function ECBModeTest(h:ITestHarness) {
22
+ super(h, "ECBMode Test");
23
+ runTest(testAES,"ECB AES Test Vectors");
24
+ runTest(testXTea,"ECB XTea Test Vectors");
25
+ runTest(testECB_AES128,"ECB AES-128 Test Vectors");
26
+ runTest(testECB_AES192,"ECB AES-192 Test Vectors");
27
+ runTest(testECB_AES256,"ECB AES-256 Test Vectors");
28
+ h.endTestCase();
29
+ }
30
+ /**
31
+ * For now the main goal is to show we can decrypt what we encrypt in this mode.
32
+ * Eventually, this should get correlated with some well known vectors.
33
+ * yay. found hawt test vectors: http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
34
+ */
35
+ public function testECB_AES128():void {
36
+ var key:ByteArray = Hex.toArray("2b7e151628aed2a6abf7158809cf4f3c");
37
+ var pt:ByteArray = Hex.toArray(
38
+ "6bc1bee22e409f96e93d7e117393172a" +
39
+ "ae2d8a571e03ac9c9eb76fac45af8e51" +
40
+ "30c81c46a35ce411e5fbc1191a0a52ef" +
41
+ "f69f2445df4f9b17ad2b417be66c3710");
42
+ var ct:ByteArray = Hex.toArray(
43
+ "3ad77bb40d7a3660a89ecaf32466ef97" +
44
+ "f5d3d58503b9699de785895a96fdbaaf" +
45
+ "43b1cd7f598ece23881b00e3ed030688" +
46
+ "7b0c785e27e8ad3f8223207104725dd4");
47
+ var ecb:ECBMode = new ECBMode(new AESKey(key), new NullPad);
48
+ var src:ByteArray = new ByteArray;
49
+ src.writeBytes(pt);
50
+ ecb.encrypt(src);
51
+ assert("ECB_AES128 test 1", Hex.fromArray(src)==Hex.fromArray(ct));
52
+ ecb.decrypt(src);
53
+ assert("ECB_AES128 test 2", Hex.fromArray(src)==Hex.fromArray(pt));
54
+ }
55
+ public function testECB_AES192():void {
56
+ var key:ByteArray = Hex.toArray("8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b");
57
+ var pt:ByteArray = Hex.toArray(
58
+ "6bc1bee22e409f96e93d7e117393172a" +
59
+ "ae2d8a571e03ac9c9eb76fac45af8e51" +
60
+ "30c81c46a35ce411e5fbc1191a0a52ef" +
61
+ "f69f2445df4f9b17ad2b417be66c3710");
62
+ var ct:ByteArray = Hex.toArray(
63
+ "bd334f1d6e45f25ff712a214571fa5cc" +
64
+ "974104846d0ad3ad7734ecb3ecee4eef" +
65
+ "ef7afd2270e2e60adce0ba2face6444e" +
66
+ "9a4b41ba738d6c72fb16691603c18e0e");
67
+ var ecb:ECBMode = new ECBMode(new AESKey(key), new NullPad);
68
+ var src:ByteArray = new ByteArray;
69
+ src.writeBytes(pt);
70
+ ecb.encrypt(src);
71
+ assert("ECB_AES192 test 1", Hex.fromArray(src)==Hex.fromArray(ct));
72
+ ecb.decrypt(src);
73
+ assert("ECB_AES192 test 2", Hex.fromArray(src)==Hex.fromArray(pt));
74
+ }
75
+ public function testECB_AES256():void {
76
+ var key:ByteArray = Hex.toArray(
77
+ "603deb1015ca71be2b73aef0857d7781" +
78
+ "1f352c073b6108d72d9810a30914dff4");
79
+ var pt:ByteArray = Hex.toArray(
80
+ "6bc1bee22e409f96e93d7e117393172a" +
81
+ "ae2d8a571e03ac9c9eb76fac45af8e51" +
82
+ "30c81c46a35ce411e5fbc1191a0a52ef" +
83
+ "f69f2445df4f9b17ad2b417be66c3710");
84
+ var ct:ByteArray = Hex.toArray(
85
+ "f3eed1bdb5d2a03c064b5a7e3db181f8" +
86
+ "591ccb10d410ed26dc5ba74a31362870" +
87
+ "b6ed21b99ca6f4f9f153e7b1beafed1d" +
88
+ "23304b7a39f9f3ff067d8d8f9e24ecc7");
89
+ var ecb:ECBMode = new ECBMode(new AESKey(key), new NullPad);
90
+ var src:ByteArray = new ByteArray;
91
+ src.writeBytes(pt);
92
+ ecb.encrypt(src);
93
+ assert("ECB_AES256 test 1", Hex.fromArray(src)==Hex.fromArray(ct));
94
+ ecb.decrypt(src);
95
+ assert("ECB_AES256 test 2", Hex.fromArray(src)==Hex.fromArray(pt));
96
+ }
97
+ // crappier, older testing. keeping around for no good reason.
98
+ public function testAES():void {
99
+ var keys:Array = [
100
+ "00010203050607080A0B0C0D0F101112",
101
+ "14151617191A1B1C1E1F202123242526"];
102
+ var pts:Array = [
103
+ "506812A45F08C889B97F5980038B8359506812A45F08C889B97F5980038B8359506812A45F08C889B97F5980038B8359",
104
+ "5C6D71CA30DE8B8B00549984D2EC7D4B5C6D71CA30DE8B8B00549984D2EC7D4B5C6D71CA30DE8B8B00549984D2EC7D4B"];
105
+ var cts:Array = [
106
+ "D8F532538289EF7D06B506A4FD5BE9C9D8F532538289EF7D06B506A4FD5BE9C9D8F532538289EF7D06B506A4FD5BE9C96DE5F607AB7EB8202F3957703B04E8B5",
107
+ "59AB30F4D4EE6E4FF9907EF65B1FB68C59AB30F4D4EE6E4FF9907EF65B1FB68C59AB30F4D4EE6E4FF9907EF65B1FB68C2993487785CB1CFDA6BB4F0F345F76C7"];
108
+
109
+ for (var i:uint=0;i<keys.length;i++) {
110
+ var key:ByteArray = Hex.toArray(keys[i]);
111
+ var pt:ByteArray = Hex.toArray(pts[i]);
112
+ var aes:AESKey = new AESKey(key);
113
+ var ecb:ECBMode = new ECBMode(aes);
114
+ ecb.encrypt(pt);
115
+ var str:String = Hex.fromArray(pt).toUpperCase();
116
+ assert("comparing "+cts[i]+" to "+str, cts[i]==str);
117
+ // back to pt
118
+ ecb.decrypt(pt);
119
+ str = Hex.fromArray(pt).toUpperCase();
120
+ assert("comparing "+pts[i]+" to "+str, pts[i]==str);
121
+ }
122
+ }
123
+ public function testXTea():void {
124
+ var keys:Array=[
125
+ "00000000000000000000000000000000",
126
+ "2b02056806144976775d0e266c287843"];
127
+ var pts:Array=[
128
+ "0000000000000000000000000000000000000000000000000000000000000000",
129
+ "74657374206d652e74657374206d652e74657374206d652e74657374206d652e"];
130
+ var cts:Array=[
131
+ "2dc7e8d3695b05382dc7e8d3695b05382dc7e8d3695b05382dc7e8d3695b053820578a874233632d",
132
+ "79095821381987837909582138198783790958213819878379095821381987830e4dc3c48b2edf32"];
133
+ // self-fullfilling vectors.
134
+ // oh well, at least I can decrypt what I produce. :(
135
+
136
+ for (var i:uint=0;i<keys.length;i++) {
137
+ var key:ByteArray = Hex.toArray(keys[i]);
138
+ var pt:ByteArray = Hex.toArray(pts[i]);
139
+ var tea:XTeaKey = new XTeaKey(key);
140
+ var ecb:ECBMode = new ECBMode(tea);
141
+ ecb.encrypt(pt);
142
+ var str:String = Hex.fromArray(pt);
143
+ assert("comparing "+cts[i]+" to "+str, cts[i]==str);
144
+ // now go back to plaintext.
145
+ ecb.decrypt(pt);
146
+ str = Hex.fromArray(pt);
147
+ assert("comparing "+pts[i]+" to "+str, pts[i]==str);
148
+ }
149
+ }
150
+ }
151
+ }