@brix-crypto/crypto-js 0.0.1-security → 4.2.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.

Potentially problematic release.


This version of @brix-crypto/crypto-js might be problematic. Click here for more details.

Files changed (124) hide show
  1. package/.jshintrc +33 -0
  2. package/.travis.yml +15 -0
  3. package/CONTRIBUTING.md +28 -0
  4. package/LICENSE +24 -0
  5. package/README.md +273 -3
  6. package/aes.js +234 -0
  7. package/blowfish.js +471 -0
  8. package/bower.json +39 -0
  9. package/cipher-core.js +895 -0
  10. package/core.js +813 -0
  11. package/crypto-js.js +6657 -0
  12. package/docs/QuickStartGuide.wiki +470 -0
  13. package/enc-base64.js +136 -0
  14. package/enc-base64url.js +148 -0
  15. package/enc-hex.js +18 -0
  16. package/enc-latin1.js +18 -0
  17. package/enc-utf16.js +149 -0
  18. package/enc-utf8.js +18 -0
  19. package/evpkdf.js +134 -0
  20. package/format-hex.js +66 -0
  21. package/format-openssl.js +18 -0
  22. package/hmac-md5.js +18 -0
  23. package/hmac-ripemd160.js +18 -0
  24. package/hmac-sha1.js +18 -0
  25. package/hmac-sha224.js +18 -0
  26. package/hmac-sha256.js +18 -0
  27. package/hmac-sha3.js +18 -0
  28. package/hmac-sha384.js +18 -0
  29. package/hmac-sha512.js +18 -0
  30. package/hmac.js +143 -0
  31. package/index.js +18 -0
  32. package/lib-typedarrays.js +76 -0
  33. package/md5.js +268 -0
  34. package/mode-cfb.js +80 -0
  35. package/mode-ctr-gladman.js +116 -0
  36. package/mode-ctr.js +58 -0
  37. package/mode-ecb.js +40 -0
  38. package/mode-ofb.js +54 -0
  39. package/package.json +45 -3
  40. package/pad-ansix923.js +49 -0
  41. package/pad-iso10126.js +44 -0
  42. package/pad-iso97971.js +40 -0
  43. package/pad-nopadding.js +30 -0
  44. package/pad-pkcs7.js +18 -0
  45. package/pad-zeropadding.js +47 -0
  46. package/pbkdf2.js +145 -0
  47. package/rabbit-legacy.js +190 -0
  48. package/rabbit.js +192 -0
  49. package/rc4.js +139 -0
  50. package/ripemd160.js +267 -0
  51. package/sha1.js +150 -0
  52. package/sha224.js +80 -0
  53. package/sha256.js +199 -0
  54. package/sha3.js +326 -0
  55. package/sha384.js +83 -0
  56. package/sha512.js +326 -0
  57. package/test/aes-profile.js +31 -0
  58. package/test/aes-test.js +80 -0
  59. package/test/blowfish-test.js +33 -0
  60. package/test/cipher-test.js +522 -0
  61. package/test/config-test.js +51 -0
  62. package/test/des-profile.js +31 -0
  63. package/test/des-test.js +104 -0
  64. package/test/enc-base64-test.js +71 -0
  65. package/test/enc-hex-test.js +15 -0
  66. package/test/enc-latin1-test.js +15 -0
  67. package/test/enc-utf16-test.js +55 -0
  68. package/test/enc-utf8-test.js +39 -0
  69. package/test/evpkdf-profile.js +11 -0
  70. package/test/evpkdf-test.js +32 -0
  71. package/test/format-openssl-test.js +37 -0
  72. package/test/hmac-md5-profile.js +30 -0
  73. package/test/hmac-md5-test.js +59 -0
  74. package/test/hmac-sha224-test.js +59 -0
  75. package/test/hmac-sha256-test.js +59 -0
  76. package/test/hmac-sha384-test.js +59 -0
  77. package/test/hmac-sha512-test.js +59 -0
  78. package/test/kdf-openssl-test.js +15 -0
  79. package/test/lib-base-test.js +92 -0
  80. package/test/lib-cipherparams-test.js +59 -0
  81. package/test/lib-passwordbasedcipher-test.js +25 -0
  82. package/test/lib-serializablecipher-test.js +51 -0
  83. package/test/lib-typedarrays-test.js +57 -0
  84. package/test/lib-wordarray-test.js +85 -0
  85. package/test/md5-profile.js +24 -0
  86. package/test/md5-test.js +70 -0
  87. package/test/mode-cbc-test.js +49 -0
  88. package/test/mode-cfb-test.js +51 -0
  89. package/test/mode-ctr-test.js +55 -0
  90. package/test/mode-ecb-test.js +38 -0
  91. package/test/mode-ofb-test.js +50 -0
  92. package/test/pad-ansix923-test.js +28 -0
  93. package/test/pad-iso10126-test.js +50 -0
  94. package/test/pad-iso97971-test.js +35 -0
  95. package/test/pad-pkcs7-test.js +28 -0
  96. package/test/pad-zeropadding-test.js +28 -0
  97. package/test/pbkdf2-profile.js +11 -0
  98. package/test/pbkdf2-test.js +80 -0
  99. package/test/profile.html +281 -0
  100. package/test/rabbit-legacy-test.js +80 -0
  101. package/test/rabbit-profile.js +30 -0
  102. package/test/rabbit-test.js +84 -0
  103. package/test/rc4-profile.js +30 -0
  104. package/test/rc4-test.js +68 -0
  105. package/test/ripemd160-test.js +19 -0
  106. package/test/sha1-profile.js +24 -0
  107. package/test/sha1-test.js +70 -0
  108. package/test/sha224-test.js +19 -0
  109. package/test/sha256-profile.js +24 -0
  110. package/test/sha256-test.js +70 -0
  111. package/test/sha3-profile.js +24 -0
  112. package/test/sha3-test.js +69 -0
  113. package/test/sha384-test.js +54 -0
  114. package/test/sha512-profile.js +24 -0
  115. package/test/sha512-test.js +54 -0
  116. package/test/test-build.html +105 -0
  117. package/test/test.html +138 -0
  118. package/test/test1.html +63 -0
  119. package/test/tripledes-profile.js +31 -0
  120. package/test/tripledes-test.js +121 -0
  121. package/test/x64-word-test.js +99 -0
  122. package/test/x64-wordarray-test.js +38 -0
  123. package/tripledes.js +779 -0
  124. package/x64-core.js +304 -0
@@ -0,0 +1,281 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>CryptoJS Profile</title>
6
+
7
+ <!-- CryptoJS -->
8
+ <script src="../src/core.js"></script>
9
+ <script src="../src/x64-core.js"></script>
10
+ <script src="../src/enc-utf16.js"></script>
11
+ <script src="../src/enc-base64.js"></script>
12
+ <script src="../src/md5.js"></script>
13
+ <script src="../src/sha1.js"></script>
14
+ <script src="../src/sha256.js"></script>
15
+ <script src="../src/sha512.js"></script>
16
+ <script src="../src/sha3.js"></script>
17
+ <script src="../src/hmac.js"></script>
18
+ <script src="../src/pbkdf2.js"></script>
19
+ <script src="../src/evpkdf.js"></script>
20
+ <script src="../src/cipher-core.js"></script>
21
+ <script src="../src/mode-cfb.js"></script>
22
+ <script src="../src/mode-ctr.js"></script>
23
+ <script src="../src/mode-ofb.js"></script>
24
+ <script src="../src/mode-ecb.js"></script>
25
+ <script src="../src/pad-ansix923.js"></script>
26
+ <script src="../src/pad-iso10126.js"></script>
27
+ <script src="../src/pad-zeropadding.js"></script>
28
+ <script src="../src/pad-iso97971.js"></script>
29
+ <script src="../src/pad-nopadding.js"></script>
30
+ <script src="../src/rc4.js"></script>
31
+ <script src="../src/rabbit.js"></script>
32
+ <script src="../src/aes.js"></script>
33
+ <script src="../src/tripledes.js"></script>
34
+
35
+ <!-- YUI -->
36
+ <script src="http://yui.yahooapis.com/3.4.1/build/yui/yui-min.js"></script>
37
+
38
+ <!-- Profile subjects -->
39
+ <script src="md5-profile.js"></script>
40
+ <script src="sha1-profile.js"></script>
41
+ <script src="sha256-profile.js"></script>
42
+ <script src="sha512-profile.js"></script>
43
+ <script src="sha3-profile.js"></script>
44
+ <script src="hmac-profile.js"></script>
45
+ <script src="pbkdf2-profile.js"></script>
46
+ <script src="evpkdf-profile.js"></script>
47
+ <script src="rc4-profile.js"></script>
48
+ <script src="rabbit-profile.js"></script>
49
+ <script src="aes-profile.js"></script>
50
+ <script src="des-profile.js"></script>
51
+ <script src="tripledes-profile.js"></script>
52
+
53
+ <!-- Profile reports -->
54
+ <script>
55
+ YUI().use('profiler', 'console', 'substitute', function (Y) {
56
+ // Implement Profiler.add
57
+ Y.Profiler._subjects = [];
58
+ Y.Profiler.add = function (subject) {
59
+ Y.Profiler._subjects.push(subject);
60
+ };
61
+ Y.Profiler.getSubjects = function () {
62
+ return Y.Profiler._subjects;
63
+ };
64
+
65
+ // Objects to profile
66
+ var objects = [
67
+ 'CryptoJS.lib.Base',
68
+ 'CryptoJS.lib.WordArray',
69
+
70
+ 'CryptoJS.x64.Word',
71
+ 'CryptoJS.x64.WordArray',
72
+
73
+ 'CryptoJS.enc.Hex',
74
+ 'CryptoJS.enc.Latin1',
75
+ 'CryptoJS.enc.Utf8',
76
+ 'CryptoJS.enc.Utf16',
77
+ 'CryptoJS.enc.Base64',
78
+
79
+ 'CryptoJS.lib.BufferedBlockAlgorithm',
80
+ 'CryptoJS.lib.Hasher',
81
+
82
+ 'CryptoJS.algo.MD5',
83
+ 'CryptoJS.algo.SHA1',
84
+ 'CryptoJS.algo.SHA256',
85
+ 'CryptoJS.algo.SHA512',
86
+ 'CryptoJS.algo.SHA3',
87
+
88
+ 'CryptoJS.algo.HMAC',
89
+
90
+ 'CryptoJS.algo.PBKDF2',
91
+ 'CryptoJS.algo.EvpKDF',
92
+
93
+ 'CryptoJS.lib.Cipher',
94
+ 'CryptoJS.lib.StreamCipher',
95
+ 'CryptoJS.lib.BlockCipher',
96
+ 'CryptoJS.lib.BlockCipherMode',
97
+ 'CryptoJS.lib.CipherParams',
98
+ 'CryptoJS.lib.SerializableCipher',
99
+ 'CryptoJS.lib.PasswordBasedCipher',
100
+
101
+ 'CryptoJS.mode.CBC', 'CryptoJS.mode.CBC.Encryptor', 'CryptoJS.mode.CBC.Decryptor',
102
+ 'CryptoJS.mode.CFB', 'CryptoJS.mode.CFB.Encryptor', 'CryptoJS.mode.CFB.Decryptor',
103
+ 'CryptoJS.mode.CTR', 'CryptoJS.mode.CTR.Encryptor', 'CryptoJS.mode.CTR.Decryptor',
104
+ 'CryptoJS.mode.OFB', 'CryptoJS.mode.OFB.Encryptor', 'CryptoJS.mode.OFB.Decryptor',
105
+ 'CryptoJS.mode.ECB', 'CryptoJS.mode.ECB.Encryptor', 'CryptoJS.mode.ECB.Decryptor',
106
+
107
+ 'CryptoJS.pad.Pkcs7',
108
+ 'CryptoJS.pad.AnsiX923',
109
+ 'CryptoJS.pad.Iso10126',
110
+ 'CryptoJS.pad.Iso97971',
111
+ 'CryptoJS.pad.ZeroPadding',
112
+ 'CryptoJS.pad.NoPadding',
113
+
114
+ 'CryptoJS.format.OpenSSL',
115
+
116
+ 'CryptoJS.kdf.OpenSSL',
117
+
118
+ 'CryptoJS.algo.RC4',
119
+ 'CryptoJS.algo.RC4Drop',
120
+ 'CryptoJS.algo.Rabbit',
121
+ 'CryptoJS.algo.AES',
122
+ 'CryptoJS.algo.DES',
123
+ 'CryptoJS.algo.TripleDES'
124
+ ];
125
+
126
+ function registerObjects() {
127
+ for (var i = 0; i < objects.length; i++) {
128
+ Y.Profiler.registerObject(objects[i]);
129
+ }
130
+ }
131
+
132
+ function unregisterObjects() {
133
+ for (var i = 0; i < objects.length; i++) {
134
+ Y.Profiler.unregisterObject(objects[i]);
135
+ }
136
+ }
137
+
138
+ // Load profile subjects
139
+ Y.use('*', function (Y) {
140
+ // Iterate over profile subjects
141
+ var subjects = Y.Profiler.getSubjects();
142
+ for (var nSubject = 0; nSubject < subjects.length; nSubject++) {
143
+ // Shortcut
144
+ var subject = subjects[nSubject];
145
+
146
+ // Iterate over profile subject methods
147
+ for (var methodName in subject) {
148
+ if (typeof subject[methodName] == 'function' && methodName.indexOf('profile') == 0) {
149
+ // Set up
150
+ if (subject['setUp']) {
151
+ subject['setUp']();
152
+ }
153
+
154
+ // Run
155
+ registerObjects();
156
+ subject[methodName]();
157
+ unregisterObjects();
158
+
159
+ // Tear down
160
+ if (subject['tearDown']) {
161
+ subject['tearDown']();
162
+ }
163
+
164
+ // Get reports
165
+ var reports = Y.Profiler.getFullReport(function (report) {
166
+ // Skip reports with 0 calls
167
+ if ( ! report.calls) {
168
+ return false;
169
+ }
170
+
171
+ // Create "total" entry
172
+ report.total = 0;
173
+ for (var i = 0; i < report.points.length; i++) {
174
+ report.total += report.points[i];
175
+ }
176
+
177
+ // Round "avg" entry
178
+ report.avg = Number(report.avg.toFixed(4));
179
+
180
+ return true;
181
+ });
182
+
183
+ // Add name to reports
184
+ for (var name in reports) {
185
+ reports[name].name = name;
186
+ }
187
+
188
+ // Sort reports by total time
189
+ var orderedReports = [];
190
+ for (var name in reports) {
191
+ orderedReports.push(reports[name]);
192
+ }
193
+ orderedReports.sort(function (a, b) {
194
+ return ((b.total - a.total) || (b.calls - a.calls));
195
+ });
196
+
197
+ // Create profile source
198
+ var source = subject.name + '_' + methodName;
199
+
200
+ // Create console
201
+ var yconsole = new Y.Console({
202
+ style: 'block',
203
+ width: '100%',
204
+ height: '600px',
205
+ entryTemplate:
206
+ '<div class="{entry_class} {cat_class} {src_class}">' +
207
+ ' <pre class="{entry_content_class}">{message}</pre>' +
208
+ '</div>',
209
+ strings: {
210
+ title: source,
211
+ pause: 'Pause',
212
+ clear: 'Clear',
213
+ collapse: 'Collapse',
214
+ expand: 'Expand'
215
+ },
216
+ newestOnTop: false,
217
+ render: true
218
+ });
219
+
220
+ // Restrict profile sources
221
+ (function (yconsole, source) {
222
+ yconsole.on('entry', function (e) {
223
+ if (e.message.source != source) {
224
+ e.preventDefault();
225
+ }
226
+ });
227
+ }(yconsole, source));
228
+
229
+ // Collapse doesn't seem to work reliably unless we do it after DOM ready
230
+ (function (yconsole) {
231
+ Y.on('domready', function () {
232
+ yconsole.collapse();
233
+ });
234
+ }(yconsole));
235
+
236
+ // Log reports
237
+ for (var i = 0; i < orderedReports.length; i++) {
238
+ var template =
239
+ '[{total}ms] {name}(): Called {calls} times. ' +
240
+ 'Avg: {avg}ms, Min: {min}ms, Max: {max}ms';
241
+ var message = Y.substitute(template, orderedReports[i]);
242
+
243
+ Y.log(message, 'time', source);
244
+ }
245
+
246
+ // Clean slate for next profile subject
247
+ Y.Profiler.clear();
248
+ }
249
+ }
250
+ }
251
+ });
252
+ });
253
+ </script>
254
+
255
+ <!-- Console -->
256
+ <style type="text/css">
257
+ body.yui3-skin-sam .yui3-console {
258
+ margin: 1em 0;
259
+ }
260
+ body.yui3-skin-sam .yui3-console-entry-meta,
261
+ body.yui3-skin-sam .yui3-console-entry-content {
262
+ display: inline-block;
263
+ vertical-align: top;
264
+ }
265
+ body.yui3-skin-sam .yui3-console-entry-cat {
266
+ display: inline-block;
267
+ width: 35px;
268
+ text-align: center;
269
+ }
270
+ body.yui3-skin-sam .yui3-console-entry {
271
+ min-height: 0;
272
+ }
273
+ body.yui3-skin-sam .yui3-console-ft .yui3-console-filters-categories,
274
+ body.yui3-skin-sam .yui3-console-ft .yui3-console-filters-sources {
275
+ display: none;
276
+ }
277
+ </style>
278
+ </head>
279
+ <body class="yui3-skin-sam">
280
+ </body>
281
+ </html>
@@ -0,0 +1,80 @@
1
+ YUI.add('algo-rabbit-legacy-test', function (Y) {
2
+ var C = CryptoJS;
3
+
4
+ Y.Test.Runner.add(new Y.Test.Case({
5
+ name: 'RabbitLegacy',
6
+
7
+ testVector1: function () {
8
+ Y.Assert.areEqual('02f74a1c26456bf5ecd6a536f05457b1', C.RabbitLegacy.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('00000000000000000000000000000000')).ciphertext.toString());
9
+ },
10
+
11
+ testVector2: function () {
12
+ Y.Assert.areEqual('9c51e28784c37fe9a127f63ec8f32d3d', C.RabbitLegacy.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('dc51c3ac3bfc62f12e3d36fe91281329')).ciphertext.toString());
13
+ },
14
+
15
+ testVector3: function () {
16
+ Y.Assert.areEqual('9b60d002fd5ceb32accd41a0cd0db10c', C.RabbitLegacy.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('c09b0043e9e9ab0187e0c73383957415')).ciphertext.toString());
17
+ },
18
+
19
+ testVector4: function () {
20
+ Y.Assert.areEqual('edb70567375dcd7cd89554f85e27a7c6', C.RabbitLegacy.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('00000000000000000000000000000000'), { iv: C.enc.Hex.parse('0000000000000000') }).ciphertext.toString());
21
+ },
22
+
23
+ testVector5: function () {
24
+ Y.Assert.areEqual('6d7d012292ccdce0e2120058b94ecd1f', C.RabbitLegacy.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('00000000000000000000000000000000'), { iv: C.enc.Hex.parse('597e26c175f573c3') }).ciphertext.toString());
25
+ },
26
+
27
+ testVector6: function () {
28
+ Y.Assert.areEqual('4d1051a123afb670bf8d8505c8d85a44', C.RabbitLegacy.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('00000000000000000000000000000000'), { iv: C.enc.Hex.parse('2717f4d21a56eba6') }).ciphertext.toString());
29
+ },
30
+
31
+ testMultiPart: function () {
32
+ var rabbit = C.algo.RabbitLegacy.createEncryptor(C.enc.Hex.parse('00000000000000000000000000000000'));
33
+ var ciphertext1 = rabbit.process(C.enc.Hex.parse('000000000000'));
34
+ var ciphertext2 = rabbit.process(C.enc.Hex.parse('0000000000'));
35
+ var ciphertext3 = rabbit.process(C.enc.Hex.parse('0000000000'));
36
+ var ciphertext4 = rabbit.finalize();
37
+
38
+ Y.Assert.areEqual('02f74a1c26456bf5ecd6a536f05457b1', ciphertext1.concat(ciphertext2).concat(ciphertext3).concat(ciphertext4).toString());
39
+ },
40
+
41
+ testInputIntegrity: function () {
42
+ var message = C.enc.Hex.parse('00000000000000000000000000000000');
43
+ var key = C.enc.Hex.parse('00000000000000000000000000000000');
44
+ var iv = C.enc.Hex.parse('0000000000000000');
45
+
46
+ var expectedMessage = message.toString();
47
+ var expectedKey = key.toString();
48
+ var expectedIv = iv.toString();
49
+
50
+ C.RabbitLegacy.encrypt(message, key, { iv: iv });
51
+
52
+ Y.Assert.areEqual(expectedMessage, message.toString());
53
+ Y.Assert.areEqual(expectedKey, key.toString());
54
+ Y.Assert.areEqual(expectedIv, iv.toString());
55
+ },
56
+
57
+ testHelper: function () {
58
+ // Save original random method
59
+ var random = C.lib.WordArray.random;
60
+
61
+ // Replace random method with one that returns a predictable value
62
+ C.lib.WordArray.random = function (nBytes) {
63
+ var words = [];
64
+ for (var i = 0; i < nBytes; i += 4) {
65
+ words.push([0x11223344]);
66
+ }
67
+
68
+ return C.lib.WordArray.create(words, nBytes);
69
+ };
70
+
71
+ // Test
72
+ Y.Assert.areEqual(C.algo.RabbitLegacy.createEncryptor(C.MD5('Jefe')).finalize('Hi There').toString(), C.RabbitLegacy.encrypt('Hi There', C.MD5('Jefe')).ciphertext.toString());
73
+ Y.Assert.areEqual(C.lib.SerializableCipher.encrypt(C.algo.RabbitLegacy, 'Hi There', C.MD5('Jefe')).toString(), C.RabbitLegacy.encrypt('Hi There', C.MD5('Jefe')).toString());
74
+ Y.Assert.areEqual(C.lib.PasswordBasedCipher.encrypt(C.algo.RabbitLegacy, 'Hi There', 'Jefe').toString(), C.RabbitLegacy.encrypt('Hi There', 'Jefe').toString());
75
+
76
+ // Restore random method
77
+ C.lib.WordArray.random = random;
78
+ }
79
+ }));
80
+ }, '$Rev$');
@@ -0,0 +1,30 @@
1
+ YUI.add('algo-rabbit-profile', function (Y) {
2
+ var C = CryptoJS;
3
+
4
+ Y.Profiler.add({
5
+ name: 'Rabbit',
6
+
7
+ setUp: function () {
8
+ this.data = {
9
+ key: C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f')
10
+ };
11
+ },
12
+
13
+ profileSinglePartMessage: function () {
14
+ var singlePartMessage = '';
15
+ for (var i = 0; i < 500; i++) {
16
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
17
+ }
18
+
19
+ C.algo.Rabbit.createEncryptor(this.data.key).finalize(singlePartMessage) + '';
20
+ },
21
+
22
+ profileMultiPartMessage: function () {
23
+ var rabbit = C.algo.Rabbit.createEncryptor(this.data.key);
24
+ for (var i = 0; i < 500; i++) {
25
+ rabbit.process('12345678901234567890123456789012345678901234567890') + '';
26
+ }
27
+ rabbit.finalize() + '';
28
+ }
29
+ });
30
+ }, '$Rev$');
@@ -0,0 +1,84 @@
1
+ YUI.add('algo-rabbit-test', function (Y) {
2
+ var C = CryptoJS;
3
+
4
+ Y.Test.Runner.add(new Y.Test.Case({
5
+ name: 'Rabbit',
6
+
7
+ testVector1: function () {
8
+ Y.Assert.areEqual('02f74a1c26456bf5ecd6a536f05457b1', C.Rabbit.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('00000000000000000000000000000000')).ciphertext.toString());
9
+ },
10
+
11
+ testVector2: function () {
12
+ Y.Assert.areEqual('3d02e0c730559112b473b790dee018df', C.Rabbit.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('c21fcf3881cd5ee8628accb0a9890df8')).ciphertext.toString());
13
+ },
14
+
15
+ testVector3: function () {
16
+ Y.Assert.areEqual('a3a97abb80393820b7e50c4abb53823d', C.Rabbit.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('1d272c6a2d8e3dfcac14056b78d633a0')).ciphertext.toString());
17
+ },
18
+
19
+ testVector4: function () {
20
+ Y.Assert.areEqual('75d186d6bc6905c64f1b2dfdd51f7bfc', C.Rabbit.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('0053a6f94c9ff24598eb3e91e4378add'), { iv: C.enc.Hex.parse('0d74db42a91077de') }).ciphertext.toString());
21
+ },
22
+
23
+ testVector5: function () {
24
+ Y.Assert.areEqual('476e2750c73856c93563b5f546f56a6a', C.Rabbit.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('0558abfe51a4f74a9df04396e93c8fe2'), { iv: C.enc.Hex.parse('167de44bb21980e7') }).ciphertext.toString());
25
+ },
26
+
27
+ testVector6: function () {
28
+ Y.Assert.areEqual('921fcf4983891365a7dc901924b5e24b', C.Rabbit.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('0a5db00356a9fc4fa2f5489bee4194e7'), { iv: C.enc.Hex.parse('1f86ed54bb2289f0') }).ciphertext.toString());
29
+ },
30
+
31
+ testVector7: function () {
32
+ Y.Assert.areEqual('613cb0ba96aff6cacf2a459a102a7f78', C.Rabbit.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('0f62b5085bae0154a7fa4da0f34699ec'), { iv: C.enc.Hex.parse('288ff65dc42b92f9') }).ciphertext.toString());
33
+ },
34
+
35
+ testMultiPart: function () {
36
+ var rabbit = C.algo.Rabbit.createEncryptor(C.enc.Hex.parse('00000000000000000000000000000000'));
37
+ var ciphertext1 = rabbit.process(C.enc.Hex.parse('000000000000'));
38
+ var ciphertext2 = rabbit.process(C.enc.Hex.parse('0000000000'));
39
+ var ciphertext3 = rabbit.process(C.enc.Hex.parse('0000000000'));
40
+ var ciphertext4 = rabbit.finalize();
41
+
42
+ Y.Assert.areEqual('02f74a1c26456bf5ecd6a536f05457b1', ciphertext1.concat(ciphertext2).concat(ciphertext3).concat(ciphertext4).toString());
43
+ },
44
+
45
+ testInputIntegrity: function () {
46
+ var message = C.enc.Hex.parse('00000000000000000000000000000000');
47
+ var key = C.enc.Hex.parse('00000000000000000000000000000000');
48
+ var iv = C.enc.Hex.parse('0000000000000000');
49
+
50
+ var expectedMessage = message.toString();
51
+ var expectedKey = key.toString();
52
+ var expectedIv = iv.toString();
53
+
54
+ C.Rabbit.encrypt(message, key, { iv: iv });
55
+
56
+ Y.Assert.areEqual(expectedMessage, message.toString());
57
+ Y.Assert.areEqual(expectedKey, key.toString());
58
+ Y.Assert.areEqual(expectedIv, iv.toString());
59
+ },
60
+
61
+ testHelper: function () {
62
+ // Save original random method
63
+ var random = C.lib.WordArray.random;
64
+
65
+ // Replace random method with one that returns a predictable value
66
+ C.lib.WordArray.random = function (nBytes) {
67
+ var words = [];
68
+ for (var i = 0; i < nBytes; i += 4) {
69
+ words.push([0x11223344]);
70
+ }
71
+
72
+ return C.lib.WordArray.create(words, nBytes);
73
+ };
74
+
75
+ // Test
76
+ Y.Assert.areEqual(C.algo.Rabbit.createEncryptor(C.MD5('Jefe')).finalize('Hi There').toString(), C.Rabbit.encrypt('Hi There', C.MD5('Jefe')).ciphertext.toString());
77
+ Y.Assert.areEqual(C.lib.SerializableCipher.encrypt(C.algo.Rabbit, 'Hi There', C.MD5('Jefe')).toString(), C.Rabbit.encrypt('Hi There', C.MD5('Jefe')).toString());
78
+ Y.Assert.areEqual(C.lib.PasswordBasedCipher.encrypt(C.algo.Rabbit, 'Hi There', 'Jefe').toString(), C.Rabbit.encrypt('Hi There', 'Jefe').toString());
79
+
80
+ // Restore random method
81
+ C.lib.WordArray.random = random;
82
+ }
83
+ }));
84
+ }, '$Rev$');
@@ -0,0 +1,30 @@
1
+ YUI.add('algo-rc4-profile', function (Y) {
2
+ var C = CryptoJS;
3
+
4
+ Y.Profiler.add({
5
+ name: 'RC4',
6
+
7
+ setUp: function () {
8
+ this.data = {
9
+ key: C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f')
10
+ };
11
+ },
12
+
13
+ profileSinglePartMessage: function () {
14
+ var singlePartMessage = '';
15
+ for (var i = 0; i < 500; i++) {
16
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
17
+ }
18
+
19
+ C.algo.RC4.createEncryptor(this.data.key).finalize(singlePartMessage) + '';
20
+ },
21
+
22
+ profileMultiPartMessage: function () {
23
+ var rc4 = C.algo.RC4.createEncryptor(this.data.key);
24
+ for (var i = 0; i < 500; i++) {
25
+ rc4.process('12345678901234567890123456789012345678901234567890') + '';
26
+ }
27
+ rc4.finalize() + '';
28
+ }
29
+ });
30
+ }, '$Rev$');
@@ -0,0 +1,68 @@
1
+ YUI.add('algo-rc4-test', function (Y) {
2
+ var C = CryptoJS;
3
+
4
+ Y.Test.Runner.add(new Y.Test.Case({
5
+ name: 'RC4',
6
+
7
+ testVector1: function () {
8
+ Y.Assert.areEqual('7494c2e7104b0879', C.RC4.encrypt(C.enc.Hex.parse('0000000000000000'), C.enc.Hex.parse('0123456789abcdef')).ciphertext.toString());
9
+ },
10
+
11
+ testVector2: function () {
12
+ Y.Assert.areEqual('f13829c9de', C.RC4.encrypt(C.enc.Hex.parse('dcee4cf92c'), C.enc.Hex.parse('618a63d2fb')).ciphertext.toString());
13
+ },
14
+
15
+ testDrop: function () {
16
+ Y.Assert.areEqual(
17
+ C.RC4.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('0123456789abcdef')).ciphertext.toString().substr(16),
18
+ C.RC4Drop.encrypt(C.enc.Hex.parse('0000000000000000'), C.enc.Hex.parse('0123456789abcdef'), { drop: 2 }).ciphertext.toString()
19
+ );
20
+ },
21
+
22
+ testMultiPart: function () {
23
+ var rc4 = C.algo.RC4.createEncryptor(C.enc.Hex.parse('0123456789abcdef'));
24
+ var ciphertext1 = rc4.process(C.enc.Hex.parse('00000000'));
25
+ var ciphertext2 = rc4.process(C.enc.Hex.parse('0000'));
26
+ var ciphertext3 = rc4.process(C.enc.Hex.parse('0000'));
27
+ var ciphertext4 = rc4.finalize();
28
+
29
+ Y.Assert.areEqual('7494c2e7104b0879', ciphertext1.concat(ciphertext2).concat(ciphertext3).concat(ciphertext4).toString());
30
+ },
31
+
32
+ testInputIntegrity: function () {
33
+ var message = C.enc.Hex.parse('0000000000000000');
34
+ var key = C.enc.Hex.parse('0123456789abcdef');
35
+
36
+ var expectedMessage = message.toString();
37
+ var expectedKey = key.toString();
38
+
39
+ C.RC4.encrypt(message, key);
40
+
41
+ Y.Assert.areEqual(expectedMessage, message.toString());
42
+ Y.Assert.areEqual(expectedKey, key.toString());
43
+ },
44
+
45
+ testHelper: function () {
46
+ // Save original random method
47
+ var random = C.lib.WordArray.random;
48
+
49
+ // Replace random method with one that returns a predictable value
50
+ C.lib.WordArray.random = function (nBytes) {
51
+ var words = [];
52
+ for (var i = 0; i < nBytes; i += 4) {
53
+ words.push([0x11223344]);
54
+ }
55
+
56
+ return C.lib.WordArray.create(words, nBytes);
57
+ };
58
+
59
+ // Test
60
+ Y.Assert.areEqual(C.algo.RC4.createEncryptor(C.SHA256('Jefe')).finalize('Hi There').toString(), C.RC4.encrypt('Hi There', C.SHA256('Jefe')).ciphertext.toString());
61
+ Y.Assert.areEqual(C.lib.SerializableCipher.encrypt(C.algo.RC4, 'Hi There', C.SHA256('Jefe')).toString(), C.RC4.encrypt('Hi There', C.SHA256('Jefe')).toString());
62
+ Y.Assert.areEqual(C.lib.PasswordBasedCipher.encrypt(C.algo.RC4, 'Hi There', 'Jefe').toString(), C.RC4.encrypt('Hi There', 'Jefe').toString());
63
+
64
+ // Restore random method
65
+ C.lib.WordArray.random = random;
66
+ }
67
+ }));
68
+ }, '$Rev$');
@@ -0,0 +1,19 @@
1
+ YUI.add('algo-ripemd160-test', function (Y) {
2
+ var C = CryptoJS;
3
+
4
+ Y.Test.Runner.add(new Y.Test.Case({
5
+ name: 'RIPEMD160',
6
+
7
+ testVector1: function () {
8
+ Y.Assert.areEqual('37f332f68db77bd9d7edd4969571ad671cf9dd3b', C.RIPEMD160('The quick brown fox jumps over the lazy dog').toString());
9
+ },
10
+
11
+ testVector2: function () {
12
+ Y.Assert.areEqual('132072df690933835eb8b6ad0b77e7b6f14acad7', C.RIPEMD160('The quick brown fox jumps over the lazy cog').toString());
13
+ },
14
+
15
+ testVector3: function () {
16
+ Y.Assert.areEqual('9c1185a5c5e9fc54612808977ee8f548b2258d31', C.RIPEMD160('').toString());
17
+ }
18
+ }));
19
+ }, '$Rev$');
@@ -0,0 +1,24 @@
1
+ YUI.add('algo-sha1-profile', function (Y) {
2
+ var C = CryptoJS;
3
+
4
+ Y.Profiler.add({
5
+ name: 'SHA1',
6
+
7
+ profileSinglePartMessage: function () {
8
+ var singlePartMessage = '';
9
+ for (var i = 0; i < 500; i++) {
10
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
11
+ }
12
+
13
+ C.algo.SHA1.create().finalize(singlePartMessage) + '';
14
+ },
15
+
16
+ profileMultiPartMessage: function () {
17
+ var sha1 = C.algo.SHA1.create();
18
+ for (var i = 0; i < 500; i++) {
19
+ sha1.update('12345678901234567890123456789012345678901234567890');
20
+ }
21
+ sha1.finalize() + '';
22
+ }
23
+ });
24
+ }, '$Rev$');