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.
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,58 @@
1
+ /**
2
+ * ARC4Test
3
+ *
4
+ * A test class for ARC4
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.util.Hex;
12
+ import flash.utils.ByteArray;
13
+ import com.hurlant.crypto.prng.ARC4;
14
+
15
+ public class ARC4Test extends TestCase
16
+ {
17
+ public function ARC4Test(h:ITestHarness)
18
+ {
19
+ super(h, "ARC4 Test");
20
+ runTest(testLameVectors,"ARC4 Test Vectors");
21
+ h.endTestCase();
22
+ }
23
+
24
+ /**
25
+ * Sad test vectors pilfered from
26
+ * http://en.wikipedia.org/wiki/RC4
27
+ */
28
+ public function testLameVectors():void {
29
+ var keys:Array = [
30
+ Hex.fromString("Key"),
31
+ Hex.fromString("Wiki"),
32
+ Hex.fromString("Secret")];
33
+ var pts:Array = [
34
+ Hex.fromString("Plaintext"),
35
+ Hex.fromString("pedia"),
36
+ Hex.fromString("Attack at dawn")];
37
+ var cts:Array = [
38
+ "BBF316E8D940AF0AD3",
39
+ "1021BF0420",
40
+ "45A01F645FC35B383552544B9BF5"];
41
+
42
+ for (var i:uint=0;i<keys.length;i++) {
43
+ var key:ByteArray = Hex.toArray(keys[i]);
44
+ var pt:ByteArray = Hex.toArray(pts[i]);
45
+ var rc4:ARC4 = new ARC4(key);
46
+ rc4.encrypt(pt);
47
+ var out:String = Hex.fromArray(pt).toUpperCase();
48
+ assert("comparing "+cts[i]+" to "+out, cts[i]==out);
49
+ // now go back to plaintext
50
+ rc4.init(key);
51
+ rc4.decrypt(pt);
52
+ out = Hex.fromArray(pt);
53
+ assert("comparing "+pts[i]+" to "+out, pts[i]==out);
54
+ }
55
+ }
56
+
57
+ }
58
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * BigIntegerTest
3
+ *
4
+ * A test class for BigInteger
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.math.BigInteger;
12
+ import com.hurlant.util.Hex;
13
+
14
+ public class BigIntegerTest extends TestCase
15
+ {
16
+ public function BigIntegerTest(h:ITestHarness)
17
+ {
18
+ super(h, "BigInteger Tests");
19
+ runTest(testAdd, "BigInteger Addition");
20
+ h.endTestCase();
21
+ }
22
+
23
+ public function testAdd():void {
24
+ var n1:BigInteger = BigInteger.nbv(25);
25
+ var n2:BigInteger = BigInteger.nbv(1002);
26
+ var n3:BigInteger = n1.add(n2);
27
+ var v:int = n3.valueOf();
28
+ assert("25+1002 = "+v, 25+1002==v);
29
+
30
+ var p:BigInteger = new BigInteger(Hex.toArray("e564d8b801a61f47"));
31
+ var xp:BigInteger = new BigInteger(Hex.toArray("99246db2a3507fa"));
32
+
33
+ xp = xp.add(p);
34
+
35
+ assert("xp==eef71f932bdb2741", xp.toString(16)=="eef71f932bdb2741");
36
+ }
37
+
38
+ }
39
+ }
@@ -0,0 +1,148 @@
1
+ /**
2
+ * BlowFishKeyTest
3
+ *
4
+ * A test class for BlowFishKey
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.BlowFishKey;
12
+ import com.hurlant.util.Hex;
13
+ import flash.utils.ByteArray;
14
+
15
+ public class BlowFishKeyTest extends TestCase
16
+ {
17
+ public function BlowFishKeyTest(h:ITestHarness)
18
+ {
19
+ super(h, "BlowFishKey Test");
20
+ runTest(testECB,"BlowFish ECB Test Vectors");
21
+ h.endTestCase();
22
+ }
23
+
24
+ /**
25
+ * Test vectors from http://www.schneier.com/code/vectors.txt
26
+ */
27
+ public function testECB():void {
28
+ var keys:Array = [
29
+ "0000000000000000",
30
+ "FFFFFFFFFFFFFFFF",
31
+ "3000000000000000",
32
+ "1111111111111111",
33
+ "0123456789ABCDEF",
34
+ "1111111111111111",
35
+ "0000000000000000",
36
+ "FEDCBA9876543210",
37
+ "7CA110454A1A6E57",
38
+ "0131D9619DC1376E",
39
+ "07A1133E4A0B2686",
40
+ "3849674C2602319E",
41
+ "04B915BA43FEB5B6",
42
+ "0113B970FD34F2CE",
43
+ "0170F175468FB5E6",
44
+ "43297FAD38E373FE",
45
+ "07A7137045DA2A16",
46
+ "04689104C2FD3B2F",
47
+ "37D06BB516CB7546",
48
+ "1F08260D1AC2465E",
49
+ "584023641ABA6176",
50
+ "025816164629B007",
51
+ "49793EBC79B3258F",
52
+ "4FB05E1515AB73A7",
53
+ "49E95D6D4CA229BF",
54
+ "018310DC409B26D6",
55
+ "1C587F1C13924FEF",
56
+ "0101010101010101",
57
+ "1F1F1F1F0E0E0E0E",
58
+ "E0FEE0FEF1FEF1FE",
59
+ "0000000000000000",
60
+ "FFFFFFFFFFFFFFFF",
61
+ "0123456789ABCDEF",
62
+ "FEDCBA9876543210" ];
63
+ var pts:Array = [
64
+ "0000000000000000",
65
+ "FFFFFFFFFFFFFFFF",
66
+ "1000000000000001",
67
+ "1111111111111111",
68
+ "1111111111111111",
69
+ "0123456789ABCDEF",
70
+ "0000000000000000",
71
+ "0123456789ABCDEF",
72
+ "01A1D6D039776742",
73
+ "5CD54CA83DEF57DA",
74
+ "0248D43806F67172",
75
+ "51454B582DDF440A",
76
+ "42FD443059577FA2",
77
+ "059B5E0851CF143A",
78
+ "0756D8E0774761D2",
79
+ "762514B829BF486A",
80
+ "3BDD119049372802",
81
+ "26955F6835AF609A",
82
+ "164D5E404F275232",
83
+ "6B056E18759F5CCA",
84
+ "004BD6EF09176062",
85
+ "480D39006EE762F2",
86
+ "437540C8698F3CFA",
87
+ "072D43A077075292",
88
+ "02FE55778117F12A",
89
+ "1D9D5C5018F728C2",
90
+ "305532286D6F295A",
91
+ "0123456789ABCDEF",
92
+ "0123456789ABCDEF",
93
+ "0123456789ABCDEF",
94
+ "FFFFFFFFFFFFFFFF",
95
+ "0000000000000000",
96
+ "0000000000000000",
97
+ "FFFFFFFFFFFFFFFF" ];
98
+ var cts:Array = [
99
+ "4EF997456198DD78",
100
+ "51866FD5B85ECB8A",
101
+ "7D856F9A613063F2",
102
+ "2466DD878B963C9D",
103
+ "61F9C3802281B096",
104
+ "7D0CC630AFDA1EC7",
105
+ "4EF997456198DD78",
106
+ "0ACEAB0FC6A0A28D",
107
+ "59C68245EB05282B",
108
+ "B1B8CC0B250F09A0",
109
+ "1730E5778BEA1DA4",
110
+ "A25E7856CF2651EB",
111
+ "353882B109CE8F1A",
112
+ "48F4D0884C379918",
113
+ "432193B78951FC98",
114
+ "13F04154D69D1AE5",
115
+ "2EEDDA93FFD39C79",
116
+ "D887E0393C2DA6E3",
117
+ "5F99D04F5B163969",
118
+ "4A057A3B24D3977B",
119
+ "452031C1E4FADA8E",
120
+ "7555AE39F59B87BD",
121
+ "53C55F9CB49FC019",
122
+ "7A8E7BFA937E89A3",
123
+ "CF9C5D7A4986ADB5",
124
+ "D1ABB290658BC778",
125
+ "55CB3774D13EF201",
126
+ "FA34EC4847B268B2",
127
+ "A790795108EA3CAE",
128
+ "C39E072D9FAC631D",
129
+ "014933E0CDAFF6E4",
130
+ "F21E9A77B71C49BC",
131
+ "245946885754369A",
132
+ "6B5C5A9C5D9E0A5A" ];
133
+
134
+ for (var i:uint=0;i<keys.length;i++) {
135
+ var key:ByteArray = Hex.toArray(keys[i]);
136
+ var pt:ByteArray = Hex.toArray(pts[i]);
137
+ var bf:BlowFishKey = new BlowFishKey(key);
138
+ bf.encrypt(pt);
139
+ var out:String = Hex.fromArray(pt).toUpperCase();
140
+ assert("comparing "+cts[i]+" to "+out, cts[i]==out);
141
+ // now go back to plaintext
142
+ bf.decrypt(pt);
143
+ out = Hex.fromArray(pt).toUpperCase();
144
+ assert("comparing "+pts[i]+" to "+out, pts[i]==out);
145
+ }
146
+ }
147
+ }
148
+ }
@@ -0,0 +1,160 @@
1
+ /**
2
+ * CBCModeTest
3
+ *
4
+ * A test class for CBCMode
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.CBCMode;
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 CBCModeTest extends TestCase
20
+ {
21
+ public function CBCModeTest(h:ITestHarness) {
22
+ super(h, "CBCMode Test");
23
+ runTest(testAES,"CBC AES Test Vectors");
24
+ runTest(testXTea,"CBC XTea Test Vectors");
25
+ //
26
+ runTest(testCBC_AES128, "CBC AES-128 Test Vectors");
27
+ runTest(testCBC_AES192, "CBC AES-192 Test Vectors");
28
+ runTest(testCBC_AES256, "CBC AES-256 Test Vectors");
29
+ h.endTestCase();
30
+ }
31
+
32
+ /**
33
+ * Hawt NIST Vectors: http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
34
+ * Section F.2.1 and below.
35
+ */
36
+ public function testCBC_AES128():void {
37
+ var key:ByteArray = Hex.toArray("2b7e151628aed2a6abf7158809cf4f3c");
38
+ var pt:ByteArray = Hex.toArray(
39
+ "6bc1bee22e409f96e93d7e117393172a" +
40
+ "ae2d8a571e03ac9c9eb76fac45af8e51" +
41
+ "30c81c46a35ce411e5fbc1191a0a52ef" +
42
+ "f69f2445df4f9b17ad2b417be66c3710");
43
+ var ct:ByteArray = Hex.toArray(
44
+ "7649abac8119b246cee98e9b12e9197d" +
45
+ "5086cb9b507219ee95db113a917678b2" +
46
+ "73bed6b8e3c1743b7116e69e22229516" +
47
+ "3ff1caa1681fac09120eca307586e1a7");
48
+ var cbc:CBCMode = new CBCMode(new AESKey(key), new NullPad);
49
+ cbc.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");
50
+ var src:ByteArray = new ByteArray;
51
+ src.writeBytes(pt);
52
+ cbc.encrypt(src);
53
+ assert("CBC_AES128 test 1", Hex.fromArray(src)==Hex.fromArray(ct));
54
+ cbc.decrypt(src);
55
+ assert("CBC_AES128 test 2", Hex.fromArray(src)==Hex.fromArray(pt));
56
+ }
57
+ public function testCBC_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
+ "4f021db243bc633d7178183a9fa071e8" +
66
+ "b4d9ada9ad7dedf4e5e738763f69145a" +
67
+ "571b242012fb7ae07fa9baac3df102e0" +
68
+ "08b0e27988598881d920a9e64f5615cd");
69
+ var cbc:CBCMode = new CBCMode(new AESKey(key), new NullPad);
70
+ cbc.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");
71
+ var src:ByteArray = new ByteArray;
72
+ src.writeBytes(pt);
73
+ cbc.encrypt(src);
74
+ assert("CBC_AES192 test 1", Hex.fromArray(src)==Hex.fromArray(ct));
75
+ cbc.decrypt(src);
76
+ assert("CBC_AES192 test 2", Hex.fromArray(src)==Hex.fromArray(pt));
77
+ }
78
+ public function testCBC_AES256():void {
79
+ var key:ByteArray = Hex.toArray(
80
+ "603deb1015ca71be2b73aef0857d7781" +
81
+ "1f352c073b6108d72d9810a30914dff4");
82
+ var pt:ByteArray = Hex.toArray(
83
+ "6bc1bee22e409f96e93d7e117393172a" +
84
+ "ae2d8a571e03ac9c9eb76fac45af8e51" +
85
+ "30c81c46a35ce411e5fbc1191a0a52ef" +
86
+ "f69f2445df4f9b17ad2b417be66c3710");
87
+ var ct:ByteArray = Hex.toArray(
88
+ "f58c4c04d6e5f1ba779eabfb5f7bfbd6" +
89
+ "9cfc4e967edb808d679f777bc6702c7d" +
90
+ "39f23369a9d9bacfa530e26304231461" +
91
+ "b2eb05e2c39be9fcda6c19078c6a9d1b");
92
+ var cbc:CBCMode = new CBCMode(new AESKey(key), new NullPad);
93
+ cbc.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");
94
+ var src:ByteArray = new ByteArray;
95
+ src.writeBytes(pt);
96
+ cbc.encrypt(src);
97
+ assert("CBC_AES256 test 1", Hex.fromArray(src)==Hex.fromArray(ct));
98
+ cbc.decrypt(src);
99
+ assert("CBC_AES256 test 2", Hex.fromArray(src)==Hex.fromArray(pt));
100
+ }
101
+
102
+
103
+ /**
104
+ * For now the main goal is to show we can decrypt what we encrypt in this mode.
105
+ * Eventually, this should get correlated with some well known vectors.
106
+ */
107
+ public function testAES():void {
108
+ var keys:Array = [
109
+ "00010203050607080A0B0C0D0F101112",
110
+ "14151617191A1B1C1E1F202123242526"];
111
+ var cts:Array = [
112
+ "D8F532538289EF7D06B506A4FD5BE9C94894C5508A8D8E29AB600DB0261F0555A8FA287B89E65C0973F1F8283E70C72863FE1C8F1F782084CE05626E961A67B3",
113
+ "59AB30F4D4EE6E4FF9907EF65B1FB68C96890CE217689B1BE0C93ED51CF21BB5A0101A8C30714EC4F52DBC9C6F4126067D363F67ABE58463005E679B68F0B496"];
114
+ var pts:Array = [
115
+ "506812A45F08C889B97F5980038B8359506812A45F08C889B97F5980038B8359506812A45F08C889B97F5980038B8359",
116
+ "5C6D71CA30DE8B8B00549984D2EC7D4B5C6D71CA30DE8B8B00549984D2EC7D4B5C6D71CA30DE8B8B00549984D2EC7D4B"];
117
+
118
+ for (var i:uint=0;i<keys.length;i++) {
119
+ var key:ByteArray = Hex.toArray(keys[i]);
120
+ var pt:ByteArray = Hex.toArray(pts[i]);
121
+ var aes:AESKey = new AESKey(key);
122
+ var cbc:CBCMode = new CBCMode(aes);
123
+ cbc.IV = Hex.toArray("00000000000000000000000000000000");
124
+ cbc.encrypt(pt);
125
+ var str:String = Hex.fromArray(pt).toUpperCase();
126
+ assert("comparing "+cts[i]+" to "+str, cts[i]==str);
127
+ // back to pt
128
+ cbc.decrypt(pt);
129
+ str = Hex.fromArray(pt).toUpperCase();
130
+ assert("comparing "+pts[i]+" to "+str, pts[i]==str);
131
+ }
132
+ }
133
+ public function testXTea():void {
134
+ var keys:Array=[
135
+ "00000000000000000000000000000000",
136
+ "2b02056806144976775d0e266c287843"];
137
+ var cts:Array = [
138
+ "2dc7e8d3695b0538d8f1640d46dca717790af2ab545e11f3b08e798eb3f17b1744299d4d20b534aa",
139
+ "790958213819878370eb8251ffdac371081c5a457fc42502c63910306fea150be8674c3b8e675516"];
140
+ var pts:Array=[
141
+ "0000000000000000000000000000000000000000000000000000000000000000",
142
+ "74657374206d652e74657374206d652e74657374206d652e74657374206d652e"];
143
+
144
+ for (var i:uint=0;i<keys.length;i++) {
145
+ var key:ByteArray = Hex.toArray(keys[i]);
146
+ var pt:ByteArray = Hex.toArray(pts[i]);
147
+ var tea:XTeaKey = new XTeaKey(key);
148
+ var cbc:CBCMode = new CBCMode(tea);
149
+ cbc.IV = Hex.toArray("0000000000000000");
150
+ cbc.encrypt(pt);
151
+ var str:String = Hex.fromArray(pt);
152
+ assert("comparing "+cts[i]+" to "+str, cts[i]==str);
153
+ // now go back to plaintext.
154
+ cbc.decrypt(pt);
155
+ str = Hex.fromArray(pt);
156
+ assert("comparing "+pts[i]+" to "+str, pts[i]==str);
157
+ }
158
+ }
159
+ }
160
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * CFB8ModeTest
3
+ *
4
+ * A test class for CFB8Mode
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.CFB8Mode;
14
+ import com.hurlant.crypto.symmetric.AESKey;
15
+ import com.hurlant.crypto.symmetric.NullPad;
16
+
17
+ public class CFB8ModeTest extends TestCase
18
+ {
19
+ public function CFB8ModeTest(h:ITestHarness) {
20
+ super(h,"CBF8Mode Test");
21
+ runTest(testCFB8_AES128, "CFB-8 AES-128 Test Vectors");
22
+ runTest(testCFB8_AES192, "CFB-8 AES-192 Test Vectors");
23
+ runTest(testCFB8_AES256, "CFB-8 AES-192 Test Vectors");
24
+ h.endTestCase();
25
+ }
26
+
27
+ /**
28
+ * http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
29
+ */
30
+ public function testCFB8_AES128():void {
31
+ var key:ByteArray = Hex.toArray("2b7e151628aed2a6abf7158809cf4f3c");
32
+ var pt:ByteArray = Hex.toArray("6bc1bee22e409f96e93d7e117393172aae2d");
33
+ var ct:ByteArray = Hex.toArray("3b79424c9c0dd436bace9e0ed4586a4f32b9");
34
+ var cfb8:CFB8Mode = new CFB8Mode(new AESKey(key), new NullPad);
35
+ cfb8.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");
36
+ var src:ByteArray = new ByteArray;
37
+ src.writeBytes(pt);
38
+ cfb8.encrypt(src);
39
+ assert("CFB8_AES128 test 1", Hex.fromArray(src)==Hex.fromArray(ct));
40
+ cfb8.decrypt(src);
41
+ assert("CFB8_AES128 test 2", Hex.fromArray(src)==Hex.fromArray(pt));
42
+ }
43
+ public function testCFB8_AES192():void {
44
+ var key:ByteArray = Hex.toArray("8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b");
45
+ var pt:ByteArray = Hex.toArray("6bc1bee22e409f96e93d7e117393172aae2d");
46
+ var ct:ByteArray = Hex.toArray("cda2521ef0a905ca44cd057cbf0d47a0678a");
47
+ var cfb8:CFB8Mode = new CFB8Mode(new AESKey(key), new NullPad);
48
+ cfb8.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");
49
+ var src:ByteArray = new ByteArray;
50
+ src.writeBytes(pt);
51
+ cfb8.encrypt(src);
52
+ assert("CFB8_AES128 test 1", Hex.fromArray(src)==Hex.fromArray(ct));
53
+ cfb8.decrypt(src);
54
+ assert("CFB8_AES128 test 2", Hex.fromArray(src)==Hex.fromArray(pt));
55
+ }
56
+ public function testCFB8_AES256():void {
57
+ var key:ByteArray = Hex.toArray("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4");
58
+ var pt:ByteArray = Hex.toArray("6bc1bee22e409f96e93d7e117393172aae2d");
59
+ var ct:ByteArray = Hex.toArray("dc1f1a8520a64db55fcc8ac554844e889700");
60
+ var cfb8:CFB8Mode = new CFB8Mode(new AESKey(key), new NullPad);
61
+ cfb8.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");
62
+ var src:ByteArray = new ByteArray;
63
+ src.writeBytes(pt);
64
+ cfb8.encrypt(src);
65
+ assert("CFB8_AES128 test 1", Hex.fromArray(src)==Hex.fromArray(ct));
66
+ cfb8.decrypt(src);
67
+ assert("CFB8_AES128 test 2", Hex.fromArray(src)==Hex.fromArray(pt));
68
+ }
69
+
70
+ }
71
+ }