@brix-crypto/crypto-js 0.0.1-security → 4.2.6
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.
- package/.jshintrc +33 -0
- package/.travis.yml +15 -0
- package/CONTRIBUTING.md +28 -0
- package/LICENSE +24 -0
- package/README.md +273 -3
- package/aes.js +234 -0
- package/blowfish.js +471 -0
- package/bower.json +39 -0
- package/cipher-core.js +895 -0
- package/core.js +819 -0
- package/crypto-js.js +6657 -0
- package/docs/QuickStartGuide.wiki +470 -0
- package/enc-base64.js +140 -0
- package/enc-base64url.js +148 -0
- package/enc-hex.js +18 -0
- package/enc-latin1.js +18 -0
- package/enc-utf16.js +149 -0
- package/enc-utf8.js +18 -0
- package/evpkdf.js +134 -0
- package/format-hex.js +66 -0
- package/format-openssl.js +18 -0
- package/hmac-md5.js +18 -0
- package/hmac-ripemd160.js +18 -0
- package/hmac-sha1.js +18 -0
- package/hmac-sha224.js +18 -0
- package/hmac-sha256.js +18 -0
- package/hmac-sha3.js +18 -0
- package/hmac-sha384.js +18 -0
- package/hmac-sha512.js +18 -0
- package/hmac.js +143 -0
- package/index.js +18 -0
- package/lib-typedarrays.js +76 -0
- package/md5.js +268 -0
- package/mode-cfb.js +80 -0
- package/mode-ctr-gladman.js +116 -0
- package/mode-ctr.js +58 -0
- package/mode-ecb.js +40 -0
- package/mode-ofb.js +54 -0
- package/package.json +45 -3
- package/pad-ansix923.js +49 -0
- package/pad-iso10126.js +44 -0
- package/pad-iso97971.js +40 -0
- package/pad-nopadding.js +30 -0
- package/pad-pkcs7.js +18 -0
- package/pad-zeropadding.js +47 -0
- package/pbkdf2.js +145 -0
- package/rabbit-legacy.js +190 -0
- package/rabbit.js +192 -0
- package/rc4.js +139 -0
- package/ripemd160.js +267 -0
- package/sha1.js +150 -0
- package/sha224.js +80 -0
- package/sha256.js +199 -0
- package/sha3.js +326 -0
- package/sha384.js +83 -0
- package/sha512.js +326 -0
- package/test/aes-profile.js +31 -0
- package/test/aes-test.js +80 -0
- package/test/blowfish-test.js +33 -0
- package/test/cipher-test.js +522 -0
- package/test/config-test.js +51 -0
- package/test/des-profile.js +31 -0
- package/test/des-test.js +104 -0
- package/test/enc-base64-test.js +71 -0
- package/test/enc-hex-test.js +15 -0
- package/test/enc-latin1-test.js +15 -0
- package/test/enc-utf16-test.js +55 -0
- package/test/enc-utf8-test.js +39 -0
- package/test/evpkdf-profile.js +11 -0
- package/test/evpkdf-test.js +32 -0
- package/test/format-openssl-test.js +37 -0
- package/test/hmac-md5-profile.js +30 -0
- package/test/hmac-md5-test.js +59 -0
- package/test/hmac-sha224-test.js +59 -0
- package/test/hmac-sha256-test.js +59 -0
- package/test/hmac-sha384-test.js +59 -0
- package/test/hmac-sha512-test.js +59 -0
- package/test/kdf-openssl-test.js +15 -0
- package/test/lib-base-test.js +92 -0
- package/test/lib-cipherparams-test.js +59 -0
- package/test/lib-passwordbasedcipher-test.js +25 -0
- package/test/lib-serializablecipher-test.js +51 -0
- package/test/lib-typedarrays-test.js +57 -0
- package/test/lib-wordarray-test.js +85 -0
- package/test/md5-profile.js +24 -0
- package/test/md5-test.js +70 -0
- package/test/mode-cbc-test.js +49 -0
- package/test/mode-cfb-test.js +51 -0
- package/test/mode-ctr-test.js +55 -0
- package/test/mode-ecb-test.js +38 -0
- package/test/mode-ofb-test.js +50 -0
- package/test/pad-ansix923-test.js +28 -0
- package/test/pad-iso10126-test.js +50 -0
- package/test/pad-iso97971-test.js +35 -0
- package/test/pad-pkcs7-test.js +28 -0
- package/test/pad-zeropadding-test.js +28 -0
- package/test/pbkdf2-profile.js +11 -0
- package/test/pbkdf2-test.js +80 -0
- package/test/profile.html +281 -0
- package/test/rabbit-legacy-test.js +80 -0
- package/test/rabbit-profile.js +30 -0
- package/test/rabbit-test.js +84 -0
- package/test/rc4-profile.js +30 -0
- package/test/rc4-test.js +68 -0
- package/test/ripemd160-test.js +19 -0
- package/test/sha1-profile.js +24 -0
- package/test/sha1-test.js +70 -0
- package/test/sha224-test.js +19 -0
- package/test/sha256-profile.js +24 -0
- package/test/sha256-test.js +70 -0
- package/test/sha3-profile.js +24 -0
- package/test/sha3-test.js +69 -0
- package/test/sha384-test.js +54 -0
- package/test/sha512-profile.js +24 -0
- package/test/sha512-test.js +54 -0
- package/test/test-build.html +105 -0
- package/test/test.html +138 -0
- package/test/test1.html +63 -0
- package/test/tripledes-profile.js +31 -0
- package/test/tripledes-test.js +121 -0
- package/test/x64-word-test.js +99 -0
- package/test/x64-wordarray-test.js +38 -0
- package/tripledes.js +779 -0
- 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$');
|
package/test/rc4-test.js
ADDED
@@ -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$');
|