diff --git a/cryptojs/all-tests.ts b/cryptojs/all-tests.ts
new file mode 100644
index 0000000000..207ecda6b0
--- /dev/null
+++ b/cryptojs/all-tests.ts
@@ -0,0 +1,57 @@
+///
+
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
diff --git a/cryptojs/all-tests.ts.tscparams b/cryptojs/all-tests.ts.tscparams
new file mode 100644
index 0000000000..e16c76dff8
--- /dev/null
+++ b/cryptojs/all-tests.ts.tscparams
@@ -0,0 +1 @@
+""
diff --git a/cryptojs/cryptojs.d.ts b/cryptojs/cryptojs.d.ts
index e718884609..fc52995b6e 100644
--- a/cryptojs/cryptojs.d.ts
+++ b/cryptojs/cryptojs.d.ts
@@ -239,7 +239,7 @@ declare module CryptoJS{
}
interface IFormatter{
- stringify(cipherParams: lib.CipherParams): string
+ stringify(cipherParams: lib.CipherParamsData): string
parse(s: string): lib.CipherParams
}
}
diff --git a/cryptojs/test/aes-profile-tests.ts b/cryptojs/test/aes-profile-tests.ts
new file mode 100644
index 0000000000..2e9df8ceb7
--- /dev/null
+++ b/cryptojs/test/aes-profile-tests.ts
@@ -0,0 +1,37 @@
+///
+///
+
+YUI.add('algo-aes-profile', function (Y) {
+ var C = CryptoJS;
+
+ //Profiler is removed in YUI 3.10.2
+ //@see http://www.yuiblog.com/blog/2013/06/04/yui-3-10-2-released/
+ //Y.Profiler.add({
+ var obj = {
+ name: 'AES',
+
+ setUp: function () {
+ this.data = {
+ key: C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'),
+ iv: C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f')
+ };
+ },
+
+ profileSinglePartMessage: function () {
+ var singlePartMessage = '';
+ for (var i = 0; i < 500; i++) {
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
+ }
+
+ C.algo.AES.createEncryptor(this.data.key, { iv: this.data.iv }).finalize(singlePartMessage) + '';
+ },
+
+ profileMultiPartMessage: function () {
+ var aes = C.algo.AES.createEncryptor(this.data.key, { iv: this.data.iv });
+ for (var i = 0; i < 500; i++) {
+ aes.process('12345678901234567890123456789012345678901234567890') + '';
+ }
+ aes.finalize() + '';
+ }
+ };
+}, '$Rev$');
diff --git a/cryptojs/test/aes-profile-tests.ts.tscparams b/cryptojs/test/aes-profile-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/aes-profile-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/aes-tests.ts b/cryptojs/test/aes-tests.ts
new file mode 100644
index 0000000000..eaef25447c
--- /dev/null
+++ b/cryptojs/test/aes-tests.ts
@@ -0,0 +1,83 @@
+///
+///
+
+YUI.add('algo-aes-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'AES',
+
+ testEncryptKeySize128: function () {
+ Y.Assert.areEqual('69c4e0d86a7b0430d8cdb78070b4c55a', C.AES.encrypt(C.enc.Hex.parse('00112233445566778899aabbccddeeff'), C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ },
+
+ testEncryptKeySize192: function () {
+ Y.Assert.areEqual('dda97ca4864cdfe06eaf70a0ec0d7191', C.AES.encrypt(C.enc.Hex.parse('00112233445566778899aabbccddeeff'), C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f1011121314151617'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ },
+
+ testEncryptKeySize256: function () {
+ Y.Assert.areEqual('8ea2b7ca516745bfeafc49904b496089', C.AES.encrypt(C.enc.Hex.parse('00112233445566778899aabbccddeeff'), C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ },
+
+ testDecryptKeySize128: function () {
+ Y.Assert.areEqual('00112233445566778899aabbccddeeff', C.AES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse('69c4e0d86a7b0430d8cdb78070b4c55a') }), C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ },
+
+ testDecryptKeySize192: function () {
+ Y.Assert.areEqual('00112233445566778899aabbccddeeff', C.AES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse('dda97ca4864cdfe06eaf70a0ec0d7191') }), C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f1011121314151617'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ },
+
+ testDecryptKeySize256: function () {
+ Y.Assert.areEqual('00112233445566778899aabbccddeeff', C.AES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse('8ea2b7ca516745bfeafc49904b496089') }), C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ },
+
+ testMultiPart: function () {
+ var aes = C.algo.AES.createEncryptor(C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f'), { mode: C.mode.ECB, padding: C.pad.NoPadding });
+ var ciphertext1 = aes.process(C.enc.Hex.parse('001122334455'));
+ var ciphertext2 = aes.process(C.enc.Hex.parse('66778899aa'));
+ var ciphertext3 = aes.process(C.enc.Hex.parse('bbccddeeff'));
+ var ciphertext4 = aes.finalize();
+
+ Y.Assert.areEqual('69c4e0d86a7b0430d8cdb78070b4c55a', ciphertext1.concat(ciphertext2).concat(ciphertext3).concat(ciphertext4).toString());
+ },
+
+ testInputIntegrity: function () {
+ var message = C.enc.Hex.parse('00112233445566778899aabbccddeeff');
+ var key = C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f');
+ var iv = C.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');
+
+ var expectedMessage = message.toString();
+ var expectedKey = key.toString();
+ var expectedIv = iv.toString();
+
+ C.AES.encrypt(message, key, { iv: iv });
+
+ Y.Assert.areEqual(expectedMessage, message.toString());
+ Y.Assert.areEqual(expectedKey, key.toString());
+ Y.Assert.areEqual(expectedIv, iv.toString());
+ },
+
+ testHelper: function () {
+ // Save original random method
+ var random = C.lib.WordArray.random;
+
+ // Replace random method with one that returns a predictable value
+ C.lib.WordArray.random = function (nBytes) {
+ var words = [];
+ for (var i = 0; i < nBytes; i += 4) {
+ words.push([0x11223344]);
+ }
+
+ return C.lib.WordArray.create(words, nBytes);
+ };
+
+ // Test
+ Y.Assert.areEqual(C.algo.AES.createEncryptor(C.SHA256('Jefe'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).finalize('Hi There').toString(), C.AES.encrypt('Hi There', C.SHA256('Jefe'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ Y.Assert.areEqual(C.lib.SerializableCipher.encrypt(C.algo.AES, 'Hi There', C.SHA256('Jefe'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString(), C.AES.encrypt('Hi There', C.SHA256('Jefe'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ Y.Assert.areEqual(C.lib.PasswordBasedCipher.encrypt(C.algo.AES, 'Hi There', 'Jefe', { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString(), C.AES.encrypt('Hi There', 'Jefe', { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+
+ // Restore random method
+ C.lib.WordArray.random = random;
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/aes-tests.ts.tscparams b/cryptojs/test/aes-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/aes-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/des-profile-tests.ts b/cryptojs/test/des-profile-tests.ts
new file mode 100644
index 0000000000..edc9321fc8
--- /dev/null
+++ b/cryptojs/test/des-profile-tests.ts
@@ -0,0 +1,37 @@
+///
+///
+
+YUI.add('algo-des-profile', function (Y) {
+ var C = CryptoJS;
+
+ //Profiler is removed in YUI 3.10.2
+ //@see http://www.yuiblog.com/blog/2013/06/04/yui-3-10-2-released/
+ //Y.Profiler.add({
+ var obj = {
+ name: 'DES',
+
+ setUp: function () {
+ this.data = {
+ key: C.enc.Hex.parse('0001020304050607'),
+ iv: C.enc.Hex.parse('08090a0b0c0d0e0f')
+ };
+ },
+
+ profileSinglePartMessage: function () {
+ var singlePartMessage = '';
+ for (var i = 0; i < 100; i++) {
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
+ }
+
+ C.algo.DES.createEncryptor(this.data.key, { iv: this.data.iv }).finalize(singlePartMessage) + '';
+ },
+
+ profileMultiPartMessage: function () {
+ var des = C.algo.DES.createEncryptor(this.data.key, { iv: this.data.iv });
+ for (var i = 0; i < 100; i++) {
+ des.process('12345678901234567890123456789012345678901234567890') + '';
+ }
+ des.finalize() + '';
+ }
+ };
+}, '$Rev$');
diff --git a/cryptojs/test/des-profile-tests.ts.tscparams b/cryptojs/test/des-profile-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/des-profile-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/des-tests.ts b/cryptojs/test/des-tests.ts
new file mode 100644
index 0000000000..5e18608e0a
--- /dev/null
+++ b/cryptojs/test/des-tests.ts
@@ -0,0 +1,107 @@
+///
+///
+
+YUI.add('algo-des-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'DES',
+
+ testEncrypt1: function () {
+ Y.Assert.areEqual('95a8d72813daa94d', C.DES.encrypt(C.enc.Hex.parse('0000000000000000'), C.enc.Hex.parse('8000000000000000'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ },
+
+ testEncrypt2: function () {
+ Y.Assert.areEqual('1de5279dae3bed6f', C.DES.encrypt(C.enc.Hex.parse('0000000000000000'), C.enc.Hex.parse('0000000000002000'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ },
+
+ testEncrypt3: function () {
+ Y.Assert.areEqual('1d1ca853ae7c0c5f', C.DES.encrypt(C.enc.Hex.parse('0000000000002000'), C.enc.Hex.parse('0000000000000000'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ },
+
+ testEncrypt4: function () {
+ Y.Assert.areEqual('ac978c247863388f', C.DES.encrypt(C.enc.Hex.parse('3232323232323232'), C.enc.Hex.parse('3232323232323232'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ },
+
+ testEncrypt5: function () {
+ Y.Assert.areEqual('3af1703d76442789', C.DES.encrypt(C.enc.Hex.parse('6464646464646464'), C.enc.Hex.parse('6464646464646464'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ },
+
+ testEncrypt6: function () {
+ Y.Assert.areEqual('a020003c5554f34c', C.DES.encrypt(C.enc.Hex.parse('9696969696969696'), C.enc.Hex.parse('9696969696969696'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ },
+
+ testDecrypt1: function () {
+ Y.Assert.areEqual('0000000000000000', C.DES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse('95a8d72813daa94d') }), C.enc.Hex.parse('8000000000000000'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ },
+
+ testDecrypt2: function () {
+ Y.Assert.areEqual('0000000000000000', C.DES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse('1de5279dae3bed6f') }), C.enc.Hex.parse('0000000000002000'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ },
+
+ testDecrypt3: function () {
+ Y.Assert.areEqual('0000000000002000', C.DES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse('1d1ca853ae7c0c5f') }), C.enc.Hex.parse('0000000000000000'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ },
+
+ testDecrypt4: function () {
+ Y.Assert.areEqual('3232323232323232', C.DES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse('ac978c247863388f') }), C.enc.Hex.parse('3232323232323232'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ },
+
+ testDecrypt5: function () {
+ Y.Assert.areEqual('6464646464646464', C.DES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse('3af1703d76442789') }), C.enc.Hex.parse('6464646464646464'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ },
+
+ testDecrypt6: function () {
+ Y.Assert.areEqual('9696969696969696', C.DES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse('a020003c5554f34c') }), C.enc.Hex.parse('9696969696969696'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ },
+
+ testMultiPart: function () {
+ var des = C.algo.DES.createEncryptor(C.enc.Hex.parse('0123456789abcdef'), { mode: C.mode.ECB, padding: C.pad.NoPadding });
+ var ciphertext1 = des.process(C.enc.Hex.parse('001122334455'));
+ var ciphertext2 = des.process(C.enc.Hex.parse('66778899aa'));
+ var ciphertext3 = des.process(C.enc.Hex.parse('bbccddeeff'));
+ var ciphertext4 = des.finalize();
+
+ Y.Assert.areEqual(C.DES.encrypt(C.enc.Hex.parse('00112233445566778899aabbccddeeff'), C.enc.Hex.parse('0123456789abcdef'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString(), ciphertext1.concat(ciphertext2).concat(ciphertext3).concat(ciphertext4).toString());
+ },
+
+ testInputIntegrity: function () {
+ var message = C.enc.Hex.parse('00112233445566778899aabbccddeeff');
+ var key = C.enc.Hex.parse('0001020304050607');
+ var iv = C.enc.Hex.parse('08090a0b0c0d0e0f');
+
+ var expectedMessage = message.toString();
+ var expectedKey = key.toString();
+ var expectedIv = iv.toString();
+
+ C.DES.encrypt(message, key, { iv: iv });
+
+ Y.Assert.areEqual(expectedMessage, message.toString());
+ Y.Assert.areEqual(expectedKey, key.toString());
+ Y.Assert.areEqual(expectedIv, iv.toString());
+ },
+
+ testHelper: function () {
+ // Save original random method
+ var random = C.lib.WordArray.random;
+
+ // Replace random method with one that returns a predictable value
+ C.lib.WordArray.random = function (nBytes) {
+ var words = [];
+ for (var i = 0; i < nBytes; i += 4) {
+ words.push([0x11223344]);
+ }
+
+ return C.lib.WordArray.create(words, nBytes);
+ };
+
+ // Test
+ Y.Assert.areEqual(C.algo.DES.createEncryptor(C.SHA256('Jefe'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).finalize('Hi There').toString(), C.DES.encrypt('Hi There', C.SHA256('Jefe'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ Y.Assert.areEqual(C.lib.SerializableCipher.encrypt(C.algo.DES, 'Hi There', C.SHA256('Jefe'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString(), C.DES.encrypt('Hi There', C.SHA256('Jefe'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ Y.Assert.areEqual(C.lib.PasswordBasedCipher.encrypt(C.algo.DES, 'Hi There', 'Jefe', { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString(), C.DES.encrypt('Hi There', 'Jefe', { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+
+ // Restore random method
+ C.lib.WordArray.random = random;
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/des-tests.ts.tscparams b/cryptojs/test/des-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/des-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/enc-base64-tests.ts b/cryptojs/test/enc-base64-tests.ts
new file mode 100644
index 0000000000..87bfd57765
--- /dev/null
+++ b/cryptojs/test/enc-base64-tests.ts
@@ -0,0 +1,74 @@
+///
+///
+
+YUI.add('enc-base64-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'Base64',
+
+ testStringify0: function () {
+ Y.Assert.areEqual('', C.enc.Base64.stringify(C.lib.WordArray.create([0x666f6f62, 0x61720000], 0)));
+ },
+
+ testStringify1: function () {
+ Y.Assert.areEqual('Zg==', C.enc.Base64.stringify(C.lib.WordArray.create([0x666f6f62, 0x61720000], 1)));
+ },
+
+ testStringify2: function () {
+ Y.Assert.areEqual('Zm8=', C.enc.Base64.stringify(C.lib.WordArray.create([0x666f6f62, 0x61720000], 2)));
+ },
+
+ testStringify3: function () {
+ Y.Assert.areEqual('Zm9v', C.enc.Base64.stringify(C.lib.WordArray.create([0x666f6f62, 0x61720000], 3)));
+ },
+
+ testStringify4: function () {
+ Y.Assert.areEqual('Zm9vYg==', C.enc.Base64.stringify(C.lib.WordArray.create([0x666f6f62, 0x61720000], 4)));
+ },
+
+ testStringify5: function () {
+ Y.Assert.areEqual('Zm9vYmE=', C.enc.Base64.stringify(C.lib.WordArray.create([0x666f6f62, 0x61720000], 5)));
+ },
+
+ testStringify6: function () {
+ Y.Assert.areEqual('Zm9vYmFy', C.enc.Base64.stringify(C.lib.WordArray.create([0x666f6f62, 0x61720000], 6)));
+ },
+
+ testStringify15: function () {
+ Y.Assert.areEqual('Pj4+Pz8/Pj4+Pz8/PS8r', C.enc.Base64.stringify(C.lib.WordArray.create([0x3e3e3e3f, 0x3f3f3e3e, 0x3e3f3f3f, 0x3d2f2b00], 15)));
+ },
+
+ testParse0: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0x666f6f62, 0x61720000], 0).toString(), C.enc.Base64.parse('').toString());
+ },
+
+ testParse1: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0x666f6f62, 0x61720000], 1).toString(), C.enc.Base64.parse('Zg==').toString());
+ },
+
+ testParse2: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0x666f6f62, 0x61720000], 2).toString(), C.enc.Base64.parse('Zm8=').toString());
+ },
+
+ testParse3: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0x666f6f62, 0x61720000], 3).toString(), C.enc.Base64.parse('Zm9v').toString());
+ },
+
+ testParse4: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0x666f6f62, 0x61720000], 4).toString(), C.enc.Base64.parse('Zm9vYg==').toString());
+ },
+
+ testParse5: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0x666f6f62, 0x61720000], 5).toString(), C.enc.Base64.parse('Zm9vYmE=').toString());
+ },
+
+ testParse6: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0x666f6f62, 0x61720000], 6).toString(), C.enc.Base64.parse('Zm9vYmFy').toString());
+ },
+
+ testParse15: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0x3e3e3e3f, 0x3f3f3e3e, 0x3e3f3f3f, 0x3d2f2b00], 15).toString(), C.enc.Base64.parse('Pj4+Pz8/Pj4+Pz8/PS8r').toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/enc-base64-tests.ts.tscparams b/cryptojs/test/enc-base64-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/enc-base64-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/enc-hex-tests.ts b/cryptojs/test/enc-hex-tests.ts
new file mode 100644
index 0000000000..dc960ba452
--- /dev/null
+++ b/cryptojs/test/enc-hex-tests.ts
@@ -0,0 +1,18 @@
+///
+///
+
+YUI.add('enc-hex-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'Hex',
+
+ testStringify: function () {
+ Y.Assert.areEqual('12345678', C.enc.Hex.stringify(C.lib.WordArray.create([0x12345678])));
+ },
+
+ testParse: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0x12345678]).toString(), C.enc.Hex.parse('12345678').toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/enc-hex-tests.ts.tscparams b/cryptojs/test/enc-hex-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/enc-hex-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/enc-latin1-tests.ts b/cryptojs/test/enc-latin1-tests.ts
new file mode 100644
index 0000000000..5e163912e6
--- /dev/null
+++ b/cryptojs/test/enc-latin1-tests.ts
@@ -0,0 +1,18 @@
+///
+///
+
+YUI.add('enc-latin1-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'Latin1',
+
+ testStringify: function () {
+ Y.Assert.areEqual('\x12\x34\x56\x78', C.enc.Latin1.stringify(C.lib.WordArray.create([0x12345678])));
+ },
+
+ testParse: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0x12345678]).toString(), C.enc.Latin1.parse('\x12\x34\x56\x78').toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/enc-latin1-tests.ts.tscparams b/cryptojs/test/enc-latin1-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/enc-latin1-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/enc-utf16-tests.ts b/cryptojs/test/enc-utf16-tests.ts
new file mode 100644
index 0000000000..8191cd72c9
--- /dev/null
+++ b/cryptojs/test/enc-utf16-tests.ts
@@ -0,0 +1,58 @@
+///
+///
+
+YUI.add('enc-utf16-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'Utf16',
+
+ testStringify1: function () {
+ Y.Assert.areEqual('z', C.enc.Utf16.stringify(C.lib.WordArray.create([0x007a0000], 2)));
+ },
+
+ testStringify2: function () {
+ Y.Assert.areEqual('水', C.enc.Utf16.stringify(C.lib.WordArray.create([0x6c340000], 2)));
+ },
+
+ testStringify3: function () {
+ Y.Assert.areEqual('𐀀', C.enc.Utf16.stringify(C.lib.WordArray.create([0xd800dc00], 4)));
+ },
+
+ testStringify4: function () {
+ Y.Assert.areEqual('𝄞', C.enc.Utf16.stringify(C.lib.WordArray.create([0xd834dd1e], 4)));
+ },
+
+ testStringify5: function () {
+ Y.Assert.areEqual('', C.enc.Utf16.stringify(C.lib.WordArray.create([0xdbffdffd], 4)));
+ },
+
+ testStringifyLE: function () {
+ Y.Assert.areEqual('', C.enc.Utf16LE.stringify(C.lib.WordArray.create([0xffdbfddf], 4)));
+ },
+
+ testParse1: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0x007a0000], 2).toString(), C.enc.Utf16.parse('z').toString());
+ },
+
+ testParse2: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0x6c340000], 2).toString(), C.enc.Utf16.parse('水').toString());
+ },
+
+ testParse3: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0xd800dc00], 4).toString(), C.enc.Utf16.parse('𐀀').toString());
+ },
+
+ testParse4: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0xd834dd1e], 4).toString(), C.enc.Utf16.parse('𝄞').toString());
+ },
+
+ testParse5: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdbffdffd], 4).toString(), C.enc.Utf16.parse('').toString());
+ },
+
+ testParseLE: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0xffdbfddf], 4).toString(), C.enc.Utf16LE.parse('').toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/enc-utf16-tests.ts.tscparams b/cryptojs/test/enc-utf16-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/enc-utf16-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/enc-utf8-tests.ts b/cryptojs/test/enc-utf8-tests.ts
new file mode 100644
index 0000000000..7c0a0583ce
--- /dev/null
+++ b/cryptojs/test/enc-utf8-tests.ts
@@ -0,0 +1,42 @@
+///
+///
+
+YUI.add('enc-utf8-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'Utf8',
+
+ testStringify1: function () {
+ Y.Assert.areEqual('$', C.enc.Utf8.stringify(C.lib.WordArray.create([0x24000000], 1)));
+ },
+
+ testStringify2: function () {
+ Y.Assert.areEqual('¢', C.enc.Utf8.stringify(C.lib.WordArray.create([0xc2a20000], 2)));
+ },
+
+ testStringify3: function () {
+ Y.Assert.areEqual('€', C.enc.Utf8.stringify(C.lib.WordArray.create([0xe282ac00], 3)));
+ },
+
+ testStringify4: function () {
+ Y.Assert.areEqual('𤭢', C.enc.Utf8.stringify(C.lib.WordArray.create([0xf0a4ada2], 4)));
+ },
+
+ testParse1: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0x24000000], 1).toString(), C.enc.Utf8.parse('$').toString());
+ },
+
+ testParse2: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0xc2a20000], 2).toString(), C.enc.Utf8.parse('¢').toString());
+ },
+
+ testParse3: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0xe282ac00], 3).toString(), C.enc.Utf8.parse('€').toString());
+ },
+
+ testParse4: function () {
+ Y.Assert.areEqual(C.lib.WordArray.create([0xf0a4ada2], 4).toString(), C.enc.Utf8.parse('𤭢').toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/enc-utf8-tests.ts.tscparams b/cryptojs/test/enc-utf8-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/enc-utf8-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/evpkdf-profile-tests.ts b/cryptojs/test/evpkdf-profile-tests.ts
new file mode 100644
index 0000000000..7af922fbf6
--- /dev/null
+++ b/cryptojs/test/evpkdf-profile-tests.ts
@@ -0,0 +1,17 @@
+///
+///
+
+YUI.add('algo-evpkdf-profile', function (Y) {
+ var C = CryptoJS;
+
+ //Profiler is removed in YUI 3.10.2
+ //@see http://www.yuiblog.com/blog/2013/06/04/yui-3-10-2-released/
+ //Y.Profiler.add({
+ var obj = {
+ name: 'EvpKDF',
+
+ profileKeySize256Iterations20: function () {
+ C.algo.EvpKDF.create({ keySize: 256/32, iterations: 20 }).compute('password', 'ATHENA.MIT.EDUraeburn');
+ }
+ };
+}, '$Rev$');
diff --git a/cryptojs/test/evpkdf-profile-tests.ts.tscparams b/cryptojs/test/evpkdf-profile-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/evpkdf-profile-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/evpkdf-tests.ts b/cryptojs/test/evpkdf-tests.ts
new file mode 100644
index 0000000000..d02a304f4e
--- /dev/null
+++ b/cryptojs/test/evpkdf-tests.ts
@@ -0,0 +1,35 @@
+///
+///
+
+YUI.add('algo-evpkdf-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'EvpKDF',
+
+ testVector: function () {
+ Y.Assert.areEqual('fdbdf3419fff98bdb0241390f62a9db35f4aba29d77566377997314ebfc709f20b5ca7b1081f94b1ac12e3c8ba87d05a', C.EvpKDF('password', 'saltsalt', { keySize: (256+128)/32 }).toString());
+ },
+
+ // There are no official test vectors that I could find, and the EVP implementation is short on comments.
+ // Need to use the C code to generate more test vectors.
+ // The iteration count in particular needs to be tested.
+
+ testInputIntegrity: function () {
+ var password = C.lib.WordArray.create([0x12345678]);
+ var salt = C.lib.WordArray.create([0x12345678]);
+
+ var expectedPassword = password.toString();
+ var expectedSalt = salt.toString();
+
+ C.EvpKDF(password, salt);
+
+ Y.Assert.areEqual(expectedPassword, password.toString());
+ Y.Assert.areEqual(expectedSalt, salt.toString());
+ },
+
+ testHelper: function () {
+ Y.Assert.areEqual(C.algo.EvpKDF.create({ keySize: (256+128)/32 }).compute('password', 'saltsalt').toString(), C.EvpKDF('password', 'saltsalt', { keySize: (256+128)/32 }).toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/evpkdf-tests.ts.tscparams b/cryptojs/test/evpkdf-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/evpkdf-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/format-openssl-tests.ts b/cryptojs/test/format-openssl-tests.ts
new file mode 100644
index 0000000000..3f863bd8da
--- /dev/null
+++ b/cryptojs/test/format-openssl-tests.ts
@@ -0,0 +1,40 @@
+///
+///
+
+YUI.add('format-openssl-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'OpenSSLFormatter',
+
+ setUp: function () {
+ this.data = {};
+
+ this.data.ciphertext = C.lib.WordArray.create([0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f]);
+ this.data.salt = C.lib.WordArray.create([0x01234567, 0x89abcdef]);
+ },
+
+ testSaltedToString: function () {
+ Y.Assert.areEqual(C.enc.Latin1.parse('Salted__').concat(this.data.salt).concat(this.data.ciphertext).toString(C.enc.Base64), C.format.OpenSSL.stringify(C.lib.CipherParams.create({ ciphertext: this.data.ciphertext, salt: this.data.salt })));
+ },
+
+ testUnsaltedToString: function () {
+ Y.Assert.areEqual(this.data.ciphertext.toString(C.enc.Base64), C.format.OpenSSL.stringify(C.lib.CipherParams.create({ ciphertext: this.data.ciphertext })));
+ },
+
+ testSaltedFromString: function () {
+ var openSSLStr = C.format.OpenSSL.stringify(C.lib.CipherParams.create({ ciphertext: this.data.ciphertext, salt: this.data.salt }));
+ var cipherParams = C.format.OpenSSL.parse(openSSLStr);
+
+ Y.Assert.areEqual(this.data.ciphertext.toString(), cipherParams.ciphertext.toString());
+ Y.Assert.areEqual(this.data.salt.toString(), cipherParams.salt.toString());
+ },
+
+ testUnsaltedFromString: function () {
+ var openSSLStr = C.format.OpenSSL.stringify(C.lib.CipherParams.create({ ciphertext: this.data.ciphertext }));
+ var cipherParams = C.format.OpenSSL.parse(openSSLStr);
+
+ Y.Assert.areEqual(this.data.ciphertext.toString(), cipherParams.ciphertext.toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/format-openssl-tests.ts.tscparams b/cryptojs/test/format-openssl-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/format-openssl-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/hmac-profile-tests.ts b/cryptojs/test/hmac-profile-tests.ts
new file mode 100644
index 0000000000..1d9a1ba75f
--- /dev/null
+++ b/cryptojs/test/hmac-profile-tests.ts
@@ -0,0 +1,36 @@
+///
+///
+
+YUI.add('algo-hmac-profile', function (Y) {
+ var C = CryptoJS;
+
+ //Profiler is removed in YUI 3.10.2
+ //@see http://www.yuiblog.com/blog/2013/06/04/yui-3-10-2-released/
+ //Y.Profiler.add({
+ var obj = {
+ name: 'HMAC',
+
+ setUp: function () {
+ this.data = {
+ key: C.lib.WordArray.random(128/8)
+ };
+ },
+
+ profileSinglePartMessage: function () {
+ var singlePartMessage = '';
+ for (var i = 0; i < 500; i++) {
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
+ }
+
+ C.algo.HMAC.create(C.algo.MD5, this.data.key).finalize(singlePartMessage) + '';
+ },
+
+ profileMultiPartMessage: function () {
+ var hmac = C.algo.HMAC.create(C.algo.MD5, this.data.key);
+ for (var i = 0; i < 500; i++) {
+ hmac.update('12345678901234567890123456789012345678901234567890');
+ }
+ hmac.finalize() + '';
+ }
+ };
+}, '$Rev$');
diff --git a/cryptojs/test/hmac-profile-tests.ts.tscparams b/cryptojs/test/hmac-profile-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/hmac-profile-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/hmac-tests.ts b/cryptojs/test/hmac-tests.ts
new file mode 100644
index 0000000000..d40f6ce42f
--- /dev/null
+++ b/cryptojs/test/hmac-tests.ts
@@ -0,0 +1,54 @@
+///
+///
+
+YUI.add('algo-hmac-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'HMAC',
+
+ testVector1: function () {
+ Y.Assert.areEqual('9294727a3638bb1c13f48ef8158bfc9d', C.HmacMD5('Hi There', C.enc.Hex.parse('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b')).toString());
+ },
+
+ testVector2: function () {
+ Y.Assert.areEqual('750c783e6ab0b503eaa86e310a5db738', C.HmacMD5('what do ya want for nothing?', 'Jefe').toString());
+ },
+
+ testVector3: function () {
+ Y.Assert.areEqual('56be34521d144c88dbb8c733f0e8b3f6', C.HmacMD5(C.enc.Hex.parse('dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd'), C.enc.Hex.parse('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')).toString());
+ },
+
+ testUpdate: function () {
+ var hmac = C.algo.HMAC.create(C.algo.MD5, C.enc.Hex.parse('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'));
+ hmac.update(C.enc.Hex.parse('dddddddddddddddddddddddddddddddddddd'));
+ hmac.update(C.enc.Hex.parse('dddddddddddddddddddddddddddddddd'));
+ hmac.update(C.enc.Hex.parse('dddddddddddddddddddddddddddddddd'));
+
+ Y.Assert.areEqual(C.HmacMD5(C.enc.Hex.parse('dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd'), C.enc.Hex.parse('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')).toString(), hmac.finalize().toString());
+ },
+
+ testInputIntegrity: function () {
+ var message = C.lib.WordArray.create([0x12345678]);
+ var key = C.lib.WordArray.create([0x12345678]);
+
+ var expectedMessage = message.toString();
+ var expectedKey = key.toString();
+
+ C.HmacMD5(message, key);
+
+ Y.Assert.areEqual(expectedMessage, message.toString());
+ Y.Assert.areEqual(expectedKey, key.toString());
+ },
+
+ testRespectKeySigBytes: function () {
+ var key = C.lib.WordArray.random(8);
+ key.sigBytes = 4;
+
+ var keyClamped = key.clone();
+ keyClamped.clamp();
+
+ Y.Assert.areEqual(CryptoJS.HmacSHA256("Message", keyClamped).toString(), CryptoJS.HmacSHA256("Message", key).toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/hmac-tests.ts.tscparams b/cryptojs/test/hmac-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/hmac-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/kdf-openssl-tests.ts b/cryptojs/test/kdf-openssl-tests.ts
new file mode 100644
index 0000000000..cc353d7e4c
--- /dev/null
+++ b/cryptojs/test/kdf-openssl-tests.ts
@@ -0,0 +1,18 @@
+///
+///
+
+YUI.add('kdf-openssl-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'OpenSSLKdf',
+
+ testVector: function () {
+ var derivedParams = C.kdf.OpenSSL.execute('password', 256/32, 128/32, C.enc.Hex.parse('0a9d8620cf7219f1'));
+
+ Y.Assert.areEqual('50f32e0ec9408e02ff42364a52aac95c3694fc027256c6f488bf84b8e60effcd', derivedParams.key.toString());
+ Y.Assert.areEqual('81381e39b94fd692dff7e2239a298cb6', derivedParams.iv.toString());
+ Y.Assert.areEqual('0a9d8620cf7219f1', derivedParams.salt.toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/kdf-openssl-tests.ts.tscparams b/cryptojs/test/kdf-openssl-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/kdf-openssl-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/lib-base-tests.ts b/cryptojs/test/lib-base-tests.ts
new file mode 100644
index 0000000000..38467b9076
--- /dev/null
+++ b/cryptojs/test/lib-base-tests.ts
@@ -0,0 +1,89 @@
+///
+///
+
+YUI.add('lib-base-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'Base',
+
+ setUp: function () {
+ this.data = {};
+
+ this.data.overrides = {
+ init: function (arg: Object) {
+ this.initFired = true;
+ this.initArg = arg;
+ },
+
+ toString: function () {
+ }
+ };
+
+ this.data.mixins = {
+ mixinMethod: function () {
+ }
+ };
+
+ this.data.Obj = C.lib.Base.extend(this.data.overrides);
+
+ this.data.Obj.mixIn(this.data.mixins);
+
+ this.data.obj = this.data.Obj.create('argValue');
+
+ this.data.objClone = this.data.obj.clone();
+ },
+
+ testExtendInheritance: function () {
+ Y.Assert.areEqual(C.lib.Base.extend, this.data.Obj.extend);
+ Y.Assert.isFalse(this.data.Obj.hasOwnProperty('extend'));
+ },
+
+ testExtendSuper: function () {
+ Y.Assert.areEqual(C.lib.Base, this.data.Obj.$super);
+ },
+
+ testExtendOverrideInit: function () {
+ Y.Assert.areEqual(this.data.overrides.init, this.data.Obj.init);
+ Y.Assert.isTrue(this.data.Obj.hasOwnProperty('init'));
+ },
+
+ testExtendOverrideToString: function () {
+ Y.Assert.areEqual(this.data.overrides.toString, this.data.Obj.toString);
+ Y.Assert.isTrue(this.data.Obj.hasOwnProperty('toString'));
+ },
+
+ testCreateInheritanceFromBase: function () {
+ Y.Assert.areEqual(C.lib.Base.extend, this.data.obj.extend);
+ Y.Assert.isFalse(this.data.obj.hasOwnProperty('extend'));
+ },
+
+ testCreateSuper: function () {
+ Y.Assert.areEqual(this.data.Obj, this.data.obj.$super);
+ },
+
+ testCreateInit: function () {
+ Y.Assert.isTrue(this.data.obj.initFired);
+ Y.Assert.areEqual('argValue', this.data.obj.initArg);
+ },
+
+ testMixIn: function () {
+ Y.Assert.areEqual(this.data.mixins.mixinMethod, this.data.Obj.mixinMethod);
+ Y.Assert.isTrue(this.data.Obj.hasOwnProperty('mixinMethod'));
+ },
+
+ testCloneDistinct: function () {
+ Y.Assert.areNotEqual(this.data.obj, this.data.objClone);
+ },
+
+ testCloneCopy: function () {
+ Y.Assert.areEqual(this.data.obj.initArg, this.data.objClone.initArg);
+ },
+
+ testCloneIndependent: function () {
+ this.data.obj.initArg = 'newValue';
+
+ Y.Assert.areNotEqual(this.data.obj.initArg, this.data.objClone.initArg);
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/lib-base-tests.ts.tscparams b/cryptojs/test/lib-base-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/lib-base-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/lib-cipherparams-tests.ts b/cryptojs/test/lib-cipherparams-tests.ts
new file mode 100644
index 0000000000..2b87034fa1
--- /dev/null
+++ b/cryptojs/test/lib-cipherparams-tests.ts
@@ -0,0 +1,62 @@
+///
+///
+
+YUI.add('lib-cipherparams-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'CipherParams',
+
+ setUp: function () {
+ this.data = {};
+
+ this.data.ciphertext = C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f');
+ this.data.key = C.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');
+ this.data.iv = C.enc.Hex.parse('202122232425262728292a2b2c2d2e2f');
+ this.data.salt = C.enc.Hex.parse('0123456789abcdef');
+ this.data.algorithm = C.algo.AES;
+ this.data.mode = C.mode.CBC;
+ this.data.padding = C.pad.Pkcs7;
+ this.data.blockSize = this.data.algorithm.blockSize;
+ this.data.formatter = C.format.OpenSSL;
+
+ this.data.cipherParams = C.lib.CipherParams.create({
+ ciphertext: this.data.ciphertext,
+ key: this.data.key,
+ iv: this.data.iv,
+ salt: this.data.salt,
+ algorithm: this.data.algorithm,
+ mode: this.data.mode,
+ padding: this.data.padding,
+ blockSize: this.data.blockSize,
+ formatter: this.data.formatter
+ });
+ },
+
+ testInit: function () {
+ Y.Assert.areEqual(this.data.ciphertext, this.data.cipherParams.ciphertext);
+ Y.Assert.areEqual(this.data.key, this.data.cipherParams.key);
+ Y.Assert.areEqual(this.data.iv, this.data.cipherParams.iv);
+ Y.Assert.areEqual(this.data.salt, this.data.cipherParams.salt);
+ Y.Assert.areEqual(this.data.algorithm, this.data.cipherParams.algorithm);
+ Y.Assert.areEqual(this.data.mode, this.data.cipherParams.mode);
+ Y.Assert.areEqual(this.data.padding, this.data.cipherParams.padding);
+ Y.Assert.areEqual(this.data.blockSize, this.data.cipherParams.blockSize);
+ Y.Assert.areEqual(this.data.formatter, this.data.cipherParams.formatter);
+ },
+
+ testToString0: function () {
+ Y.Assert.areEqual(C.format.OpenSSL.stringify(this.data.cipherParams), this.data.cipherParams.toString());
+ },
+
+ testToString1: function () {
+ var JsonFormatter = {
+ stringify: function (cipherParams: CryptoJS.lib.CipherParamsData) {
+ return '{ ct: ' + cipherParams.ciphertext + ', iv: ' + cipherParams.iv + ' }';
+ }
+ };
+
+ Y.Assert.areEqual(JsonFormatter.stringify(this.data.cipherParams), this.data.cipherParams.toString(JsonFormatter));
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/lib-cipherparams-tests.ts.tscparams b/cryptojs/test/lib-cipherparams-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/lib-cipherparams-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/lib-passwordbasedcipher-tests.ts b/cryptojs/test/lib-passwordbasedcipher-tests.ts
new file mode 100644
index 0000000000..d18128896e
--- /dev/null
+++ b/cryptojs/test/lib-passwordbasedcipher-tests.ts
@@ -0,0 +1,28 @@
+///
+///
+
+YUI.add('lib-passwordbasedcipher-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'PasswordBasedCipher',
+
+ testEncrypt: function () {
+ // Compute actual
+ var actual = C.lib.PasswordBasedCipher.encrypt(C.algo.AES, 'Hello, World!', 'password');
+
+ // Compute expected
+ var aes = C.algo.AES.createEncryptor(actual.key, { iv: actual.iv });
+ var expected = aes.finalize('Hello, World!');
+
+ Y.Assert.areEqual(expected.toString(), actual.ciphertext.toString());
+ },
+
+ testDecrypt: function () {
+ var ciphertext = C.lib.PasswordBasedCipher.encrypt(C.algo.AES, 'Hello, World!', 'password');
+ var plaintext = C.lib.PasswordBasedCipher.decrypt(C.algo.AES, ciphertext, 'password');
+
+ Y.Assert.areEqual('Hello, World!', plaintext.toString(C.enc.Utf8));
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/lib-passwordbasedcipher-tests.ts.tscparams b/cryptojs/test/lib-passwordbasedcipher-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/lib-passwordbasedcipher-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/lib-serializablecipher-tests.ts b/cryptojs/test/lib-serializablecipher-tests.ts
new file mode 100644
index 0000000000..6ea097a342
--- /dev/null
+++ b/cryptojs/test/lib-serializablecipher-tests.ts
@@ -0,0 +1,54 @@
+///
+///
+
+YUI.add('lib-serializablecipher-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'SerializableCipher',
+
+ setUp: function () {
+ this.data = {};
+
+ this.data.message = C.lib.WordArray.create([0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f]);
+ this.data.key = C.lib.WordArray.create([0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f]);
+ this.data.iv = C.lib.WordArray.create([0x20212223, 0x24252627, 0x28292a2b, 0x2c2d2e2f]);
+ },
+
+ testEncrypt: function () {
+ // Compute expected
+ var aes = C.algo.AES.createEncryptor(this.data.key, { iv: this.data.iv });
+ var ciphertext = aes.finalize(this.data.message);
+ var expected = C.lib.CipherParams.create({
+ ciphertext: ciphertext,
+ key: this.data.key,
+ iv: this.data.iv,
+ algorithm: C.algo.AES,
+ mode: aes.cfg.mode,
+ padding: aes.cfg.padding,
+ blockSize: aes.blockSize,
+ formatter: C.format.OpenSSL
+ });
+
+ // Compute actual
+ var actual = C.lib.SerializableCipher.encrypt(C.algo.AES, this.data.message, this.data.key, { iv: this.data.iv });
+
+ // Test
+ Y.Assert.areEqual(expected.toString(), actual.toString());
+ Y.Assert.areEqual(expected.ciphertext.toString(), actual.ciphertext.toString());
+ Y.Assert.areEqual(expected.key.toString(), actual.key.toString());
+ Y.Assert.areEqual(expected.iv.toString(), actual.iv.toString());
+ Y.Assert.areEqual(expected.algorithm, actual.algorithm);
+ Y.Assert.areEqual(expected.mode, actual.mode);
+ Y.Assert.areEqual(expected.padding, actual.padding);
+ Y.Assert.areEqual(expected.blockSize, actual.blockSize);
+ },
+
+ testDecrypt: function () {
+ var encrypted = C.lib.SerializableCipher.encrypt(C.algo.AES, this.data.message, this.data.key, { iv: this.data.iv }) + '';
+ var decrypted = C.lib.SerializableCipher.decrypt(C.algo.AES, encrypted, this.data.key, { iv: this.data.iv });
+
+ Y.Assert.areEqual(this.data.message.toString(), decrypted.toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/lib-serializablecipher-tests.ts.tscparams b/cryptojs/test/lib-serializablecipher-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/lib-serializablecipher-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/lib-typedarrays-tests.ts b/cryptojs/test/lib-typedarrays-tests.ts
new file mode 100644
index 0000000000..beb3d667a7
--- /dev/null
+++ b/cryptojs/test/lib-typedarrays-tests.ts
@@ -0,0 +1,62 @@
+///
+///
+
+YUI.add('lib-wordarray-test', function (Y) {
+ var C = CryptoJS;
+
+ if (typeof ArrayBuffer != 'undefined') {
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'TypedArrays',
+
+ setUp: function () {
+ this.data = {};
+
+ this.data.buffer = new ArrayBuffer(8);
+
+ var uint8View = new Uint8Array(this.data.buffer);
+ uint8View[0] = 0x01;
+ uint8View[1] = 0x23;
+ uint8View[2] = 0x45;
+ uint8View[3] = 0x67;
+ uint8View[4] = 0x89;
+ uint8View[5] = 0xab;
+ uint8View[6] = 0xcd;
+ uint8View[7] = 0xef;
+ },
+
+ testInt8Array: function () {
+ Y.Assert.areEqual('0123456789abcdef', C.lib.WordArray.create(new Int8Array(this.data.buffer)).toString());
+ },
+
+ testUint8Array: function () {
+ Y.Assert.areEqual('0123456789abcdef', C.lib.WordArray.create(new Uint8Array(this.data.buffer)).toString());
+ },
+
+ testUint8ClampedArray: function () {
+ //Note also: Uint8ClampedArray is not defined in lib.d.ts & not supported in IE
+ //@see http://compatibility.shwups-cms.ch/en/home?&property=Uint8ClampedArray
+// Y.Assert.areEqual('0123456789abcdef', C.lib.WordArray.create(new Uint8ClampedArray(this.data.buffer)).toString());
+ },
+
+ testInt16Array: function () {
+ Y.Assert.areEqual('0123456789abcdef', C.lib.WordArray.create(new Int16Array(this.data.buffer)).toString());
+ },
+
+ testUint16Array: function () {
+ Y.Assert.areEqual('0123456789abcdef', C.lib.WordArray.create(new Uint16Array(this.data.buffer)).toString());
+ },
+
+ testInt32Array: function () {
+ Y.Assert.areEqual('0123456789abcdef', C.lib.WordArray.create(new Int32Array(this.data.buffer)).toString());
+ },
+
+ testUint32Array: function () {
+ Y.Assert.areEqual('0123456789abcdef', C.lib.WordArray.create(new Uint32Array(this.data.buffer)).toString());
+ },
+
+ testPartialView: function () {
+ Y.Assert.areEqual('456789ab', C.lib.WordArray.create(new Int16Array(this.data.buffer, 2, 2)).toString());
+ }
+ }));
+ }
+}, '$Rev$');
diff --git a/cryptojs/test/lib-typedarrays-tests.ts.tscparams b/cryptojs/test/lib-typedarrays-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/lib-typedarrays-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/lib-wordarray-tests.ts b/cryptojs/test/lib-wordarray-tests.ts
new file mode 100644
index 0000000000..0f210aa663
--- /dev/null
+++ b/cryptojs/test/lib-wordarray-tests.ts
@@ -0,0 +1,88 @@
+///
+///
+
+YUI.add('lib-wordarray-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'WordArray',
+
+ testInit0: function () {
+ Y.Assert.areEqual('', C.lib.WordArray.create().toString());
+ },
+
+ testInit1: function () {
+ Y.Assert.areEqual('12345678', C.lib.WordArray.create([0x12345678]).toString());
+ },
+
+ testInit2: function () {
+ Y.Assert.areEqual('1234', C.lib.WordArray.create([0x12345678], 2).toString());
+ },
+
+ testToStringPassedEncoder: function () {
+ Y.Assert.areEqual('\x12\x34\x56\x78', C.lib.WordArray.create([0x12345678]).toString(C.enc.Latin1));
+ },
+
+ testToStringDefaultEncoder: function () {
+ Y.Assert.areEqual('12345678', C.lib.WordArray.create([0x12345678]).toString());
+ },
+
+ testConcat3: function () {
+ var wordArray1 = C.lib.WordArray.create([0x12345678], 3);
+ var wordArray2 = C.lib.WordArray.create([0x12345678], 3);
+
+ Y.Assert.areEqual('123456123456', wordArray1.concat(wordArray2).toString());
+ Y.Assert.areEqual('123456123456', wordArray1.toString());
+ },
+
+ testConcat4: function () {
+ var wordArray1 = C.lib.WordArray.create([0x12345678], 4);
+ var wordArray2 = C.lib.WordArray.create([0x12345678], 3);
+
+ Y.Assert.areEqual('12345678123456', wordArray1.concat(wordArray2).toString());
+ Y.Assert.areEqual('12345678123456', wordArray1.toString());
+ },
+
+ testConcat5: function () {
+ var wordArray1 = C.lib.WordArray.create([0x12345678], 5);
+ var wordArray2 = C.lib.WordArray.create([0x12345678], 3);
+
+ Y.Assert.areEqual('1234567800123456', wordArray1.concat(wordArray2).toString());
+ Y.Assert.areEqual('1234567800123456', wordArray1.toString());
+ },
+
+ testConcatLong: function () {
+ var wordArray1 = C.lib.WordArray.create();
+
+ var wordArray2 = C.lib.WordArray.create();
+ var wordArray3 = C.lib.WordArray.create();
+ for (var i = 0; i < 500000; i++) {
+ wordArray2.words[i] = i;
+ wordArray3.words[i] = i;
+ }
+ wordArray2.sigBytes = wordArray3.sigBytes = 500000;
+
+ Y.Assert.areEqual(wordArray2.toString() + wordArray3.toString(), wordArray1.concat(wordArray2.concat(wordArray3)).toString());
+ },
+
+ testClamp: function () {
+ var wordArray = C.lib.WordArray.create([0x12345678, 0x12345678], 3);
+ wordArray.clamp();
+
+ Y.Assert.areEqual([0x12345600].toString(), wordArray.words.toString());
+ },
+
+ testClone: function () {
+ var wordArray = C.lib.WordArray.create([0x12345678]);
+ var clone = wordArray.clone();
+ clone.words[0] = 0;
+
+ Y.Assert.areNotEqual(wordArray.toString(), clone.toString());
+ },
+
+ testRandom: function () {
+ Y.Assert.areNotEqual(C.lib.WordArray.random(8).toString(), C.lib.WordArray.random(8).toString());
+ Y.Assert.areEqual(8, C.lib.WordArray.random(8).sigBytes);
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/lib-wordarray-tests.ts.tscparams b/cryptojs/test/lib-wordarray-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/lib-wordarray-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/md5-profile-tests.ts b/cryptojs/test/md5-profile-tests.ts
new file mode 100644
index 0000000000..c51c735b51
--- /dev/null
+++ b/cryptojs/test/md5-profile-tests.ts
@@ -0,0 +1,30 @@
+///
+///
+
+YUI.add('algo-md5-profile', function (Y) {
+ var C = CryptoJS;
+
+ //Profiler is removed in YUI 3.10.2
+ //@see http://www.yuiblog.com/blog/2013/06/04/yui-3-10-2-released/
+ //Y.Profiler.add({
+ var obj = {
+ name: 'MD5',
+
+ profileSinglePartMessage: function () {
+ var singlePartMessage = '';
+ for (var i = 0; i < 500; i++) {
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
+ }
+
+ C.algo.MD5.create().finalize(singlePartMessage) + '';
+ },
+
+ profileMultiPartMessage: function () {
+ var md5 = C.algo.MD5.create();
+ for (var i = 0; i < 500; i++) {
+ md5.update('12345678901234567890123456789012345678901234567890');
+ }
+ md5.finalize() + '';
+ }
+ };
+}, '$Rev$');
diff --git a/cryptojs/test/md5-profile-tests.ts.tscparams b/cryptojs/test/md5-profile-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/md5-profile-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/md5-tests.ts b/cryptojs/test/md5-tests.ts
new file mode 100644
index 0000000000..71056d1b64
--- /dev/null
+++ b/cryptojs/test/md5-tests.ts
@@ -0,0 +1,73 @@
+///
+///
+
+YUI.add('algo-md5-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'MD5',
+
+ testVector1: function () {
+ Y.Assert.areEqual('d41d8cd98f00b204e9800998ecf8427e', C.MD5('').toString());
+ },
+
+ testVector2: function () {
+ Y.Assert.areEqual('0cc175b9c0f1b6a831c399e269772661', C.MD5('a').toString());
+ },
+
+ testVector3: function () {
+ Y.Assert.areEqual('900150983cd24fb0d6963f7d28e17f72', C.MD5('abc').toString());
+ },
+
+ testVector4: function () {
+ Y.Assert.areEqual('f96b697d7cb7938d525a2f31aaf161d0', C.MD5('message digest').toString());
+ },
+
+ testVector5: function () {
+ Y.Assert.areEqual('c3fcd3d76192e4007dfb496cca67e13b', C.MD5('abcdefghijklmnopqrstuvwxyz').toString());
+ },
+
+ testVector6: function () {
+ Y.Assert.areEqual('d174ab98d277d9f5a5611c2c9f419d9f', C.MD5('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789').toString());
+ },
+
+ testVector7: function () {
+ Y.Assert.areEqual('57edf4a22be3c955ac49da2e2107b67a', C.MD5('12345678901234567890123456789012345678901234567890123456789012345678901234567890').toString());
+ },
+
+ testUpdateAndLongMessage: function () {
+ var md5 = C.algo.MD5.create();
+ for (var i = 0; i < 100; i++) {
+ md5.update('12345678901234567890123456789012345678901234567890');
+ }
+
+ Y.Assert.areEqual('7d017545e0268a6a12f2b507871d0429', md5.finalize().toString());
+ },
+
+ testClone: function () {
+ var md5 = C.algo.MD5.create();
+
+ Y.Assert.areEqual(C.MD5('a').toString(), md5.update('a').clone().finalize().toString());
+ Y.Assert.areEqual(C.MD5('ab').toString(), md5.update('b').clone().finalize().toString());
+ Y.Assert.areEqual(C.MD5('abc').toString(), md5.update('c').clone().finalize().toString());
+ },
+
+ testInputIntegrity: function () {
+ var message = C.lib.WordArray.create([0x12345678]);
+
+ var expected = message.toString();
+
+ C.MD5(message);
+
+ Y.Assert.areEqual(expected, message.toString());
+ },
+
+ testHelper: function () {
+ Y.Assert.areEqual(C.algo.MD5.create().finalize('').toString(), C.MD5('').toString());
+ },
+
+ testHmacHelper: function () {
+ Y.Assert.areEqual(C.algo.HMAC.create(C.algo.MD5, C.enc.Hex.parse('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b')).finalize('Hi There').toString(), C.HmacMD5('Hi There', C.enc.Hex.parse('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b')).toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/md5-tests.ts.tscparams b/cryptojs/test/md5-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/md5-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/mode-cbc-tests.ts b/cryptojs/test/mode-cbc-tests.ts
new file mode 100644
index 0000000000..cb6b4e18c9
--- /dev/null
+++ b/cryptojs/test/mode-cbc-tests.ts
@@ -0,0 +1,52 @@
+///
+///
+
+YUI.add('mode-cbc-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'CBC',
+
+ setUp: function () {
+ this.data = {};
+
+ this.data.message = C.lib.WordArray.create([
+ 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f,
+ 0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f
+ ]);
+ this.data.key = C.lib.WordArray.create([0x20212223, 0x24252627, 0x28292a2b, 0x2c2d2e2f]);
+ this.data.iv = C.lib.WordArray.create([0x30313233, 0x34353637, 0x38393a3b, 0x3c3d3e3f]);
+ },
+
+ testEncryptor: function () {
+ // Compute expected
+ var expected = this.data.message.clone();
+ var aes = C.algo.AES.createEncryptor(this.data.key);
+
+ // First block XORed with IV, then encrypted
+ for (var i = 0; i < 4; i++) {
+ expected.words[i] ^= this.data.iv.words[i];
+ }
+ aes.encryptBlock(expected.words, 0);
+
+ // Subsequent blocks XORed with previous crypted block, then encrypted
+ for (var i = 4; i < 8; i++) {
+ expected.words[i] ^= expected.words[i - 4];
+ }
+ aes.encryptBlock(expected.words, 4);
+
+ // Compute actual
+ var actual = C.AES.encrypt(this.data.message, this.data.key, { iv: this.data.iv, mode: C.mode.CBC, padding: C.pad.NoPadding }).ciphertext;
+
+ // Test
+ Y.Assert.areEqual(expected.toString(), actual.toString());
+ },
+
+ testDecryptor: function () {
+ var encrypted = C.AES.encrypt(this.data.message, this.data.key, { iv: this.data.iv, mode: C.mode.CBC, padding: C.pad.NoPadding });
+ var decrypted = C.AES.decrypt(encrypted, this.data.key, { iv: this.data.iv, mode: C.mode.CBC, padding: C.pad.NoPadding });
+
+ Y.Assert.areEqual(this.data.message.toString(), decrypted.toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/mode-cbc-tests.ts.tscparams b/cryptojs/test/mode-cbc-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/mode-cbc-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/mode-cfb-tests.ts b/cryptojs/test/mode-cfb-tests.ts
new file mode 100644
index 0000000000..8727946bae
--- /dev/null
+++ b/cryptojs/test/mode-cfb-tests.ts
@@ -0,0 +1,54 @@
+///
+///
+
+YUI.add('mode-cfb-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'CFB',
+
+ setUp: function () {
+ this.data = {};
+
+ this.data.message = C.lib.WordArray.create([
+ 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f,
+ 0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f
+ ]);
+ this.data.key = C.lib.WordArray.create([0x20212223, 0x24252627, 0x28292a2b, 0x2c2d2e2f]);
+ this.data.iv = C.lib.WordArray.create([0x30313233, 0x34353637, 0x38393a3b, 0x3c3d3e3f]);
+ },
+
+ testEncryptor: function () {
+ // Compute expected
+ var expected = this.data.message.clone();
+ var aes = C.algo.AES.createEncryptor(this.data.key);
+
+ // First block XORed with encrypted IV
+ var keystream = this.data.iv.words.slice(0);
+ aes.encryptBlock(keystream, 0);
+ for (var i = 0; i < 4; i++) {
+ expected.words[i] ^= keystream[i];
+ }
+
+ // Subsequent blocks XORed with encrypted previous crypted block
+ var keystream = expected.words.slice(0, 4);
+ aes.encryptBlock(keystream, 0);
+ for (var i = 4; i < 8; i++) {
+ expected.words[i] ^= keystream[i % 4];
+ }
+
+ // Compute actual
+ var actual = C.AES.encrypt(this.data.message, this.data.key, { iv: this.data.iv, mode: C.mode.CFB, padding: C.pad.NoPadding }).ciphertext;
+
+ // Test
+ Y.Assert.areEqual(expected.toString(), actual.toString());
+ },
+
+ testDecryptor: function () {
+ var encrypted = C.AES.encrypt(this.data.message, this.data.key, { iv: this.data.iv, mode: C.mode.CFB, padding: C.pad.NoPadding });
+ var decrypted = C.AES.decrypt(encrypted, this.data.key, { iv: this.data.iv, mode: C.mode.CFB, padding: C.pad.NoPadding });
+
+ Y.Assert.areEqual(this.data.message.toString(), decrypted.toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/mode-cfb-tests.ts.tscparams b/cryptojs/test/mode-cfb-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/mode-cfb-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/mode-ctr-tests.ts b/cryptojs/test/mode-ctr-tests.ts
new file mode 100644
index 0000000000..a9ca0ddbb1
--- /dev/null
+++ b/cryptojs/test/mode-ctr-tests.ts
@@ -0,0 +1,58 @@
+///
+///
+
+YUI.add('mode-ctr-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'CTR',
+
+ setUp: function () {
+ this.data = {};
+
+ this.data.message = C.lib.WordArray.create([
+ 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f,
+ 0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f
+ ]);
+ this.data.key = C.lib.WordArray.create([0x20212223, 0x24252627, 0x28292a2b, 0x2c2d2e2f]);
+ this.data.iv = C.lib.WordArray.create([0x30313233, 0x34353637, 0x38393a3b, 0x3c3d3e3f]);
+ },
+
+ testEncryptor: function () {
+ // Compute expected
+ var expected = this.data.message.clone();
+ var aes = C.algo.AES.createEncryptor(this.data.key);
+
+ // Counter initialized with IV
+ var counter = this.data.iv.words.slice(0);
+
+ // First block XORed with encrypted counter
+ var keystream = counter.slice(0);
+ aes.encryptBlock(keystream, 0);
+ for (var i = 0; i < 4; i++) {
+ expected.words[i] ^= keystream[i];
+ }
+
+ // Subsequent blocks XORed with encrypted incremented counter
+ counter[3]++;
+ var keystream = counter.slice(0);
+ aes.encryptBlock(keystream, 0);
+ for (var i = 4; i < 8; i++) {
+ expected.words[i] ^= keystream[i % 4];
+ }
+
+ // Compute actual
+ var actual = C.AES.encrypt(this.data.message, this.data.key, { iv: this.data.iv, mode: C.mode.CTR, padding: C.pad.NoPadding }).ciphertext;
+
+ // Test
+ Y.Assert.areEqual(expected.toString(), actual.toString());
+ },
+
+ testDecryptor: function () {
+ var encrypted = C.AES.encrypt(this.data.message, this.data.key, { iv: this.data.iv, mode: C.mode.CTR, padding: C.pad.NoPadding });
+ var decrypted = C.AES.decrypt(encrypted, this.data.key, { iv: this.data.iv, mode: C.mode.CTR, padding: C.pad.NoPadding });
+
+ Y.Assert.areEqual(this.data.message.toString(), decrypted.toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/mode-ctr-tests.ts.tscparams b/cryptojs/test/mode-ctr-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/mode-ctr-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/mode-ecb-tests.ts b/cryptojs/test/mode-ecb-tests.ts
new file mode 100644
index 0000000000..249c2b6d24
--- /dev/null
+++ b/cryptojs/test/mode-ecb-tests.ts
@@ -0,0 +1,41 @@
+///
+///
+
+YUI.add('mode-ecb-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'ECB',
+
+ setUp: function () {
+ this.data = {};
+
+ this.data.message = C.lib.WordArray.create([
+ 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f,
+ 0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f
+ ]);
+ this.data.key = C.lib.WordArray.create([0x20212223, 0x24252627, 0x28292a2b, 0x2c2d2e2f]);
+ },
+
+ testEncryptor: function () {
+ // Compute expected
+ var expected = this.data.message.clone();
+ var aes = C.algo.AES.createEncryptor(this.data.key);
+ aes.encryptBlock(expected.words, 0);
+ aes.encryptBlock(expected.words, 4);
+
+ // Compute actual
+ var actual = C.AES.encrypt(this.data.message, this.data.key, { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext;
+
+ // Test
+ Y.Assert.areEqual(expected.toString(), actual.toString());
+ },
+
+ testDecryptor: function () {
+ var encrypted = C.AES.encrypt(this.data.message, this.data.key, { mode: C.mode.ECB, padding: C.pad.NoPadding });
+ var decrypted = C.AES.decrypt(encrypted, this.data.key, { mode: C.mode.ECB, padding: C.pad.NoPadding });
+
+ Y.Assert.areEqual(this.data.message.toString(), decrypted.toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/mode-ecb-tests.ts.tscparams b/cryptojs/test/mode-ecb-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/mode-ecb-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/mode-ofb-tests.ts b/cryptojs/test/mode-ofb-tests.ts
new file mode 100644
index 0000000000..89aa36c681
--- /dev/null
+++ b/cryptojs/test/mode-ofb-tests.ts
@@ -0,0 +1,53 @@
+///
+///
+
+YUI.add('mode-ofb-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'OFB',
+
+ setUp: function () {
+ this.data = {};
+
+ this.data.message = C.lib.WordArray.create([
+ 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f,
+ 0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f
+ ]);
+ this.data.key = C.lib.WordArray.create([0x20212223, 0x24252627, 0x28292a2b, 0x2c2d2e2f]);
+ this.data.iv = C.lib.WordArray.create([0x30313233, 0x34353637, 0x38393a3b, 0x3c3d3e3f]);
+ },
+
+ testEncryptor: function () {
+ // Compute expected
+ var expected = this.data.message.clone();
+ var aes = C.algo.AES.createEncryptor(this.data.key);
+
+ // First block XORed with encrypted IV
+ var keystream = this.data.iv.words.slice(0);
+ aes.encryptBlock(keystream, 0);
+ for (var i = 0; i < 4; i++) {
+ expected.words[i] ^= keystream[i];
+ }
+
+ // Subsequent blocks XORed with encrypted previous keystream
+ aes.encryptBlock(keystream, 0);
+ for (var i = 4; i < 8; i++) {
+ expected.words[i] ^= keystream[i % 4];
+ }
+
+ // Compute actual
+ var actual = C.AES.encrypt(this.data.message, this.data.key, { iv: this.data.iv, mode: C.mode.OFB, padding: C.pad.NoPadding }).ciphertext;
+
+ // Test
+ Y.Assert.areEqual(expected.toString(), actual.toString());
+ },
+
+ testDecryptor: function () {
+ var encrypted = C.AES.encrypt(this.data.message, this.data.key, { iv: this.data.iv, mode: C.mode.OFB, padding: C.pad.NoPadding });
+ var decrypted = C.AES.decrypt(encrypted, this.data.key, { iv: this.data.iv, mode: C.mode.OFB, padding: C.pad.NoPadding });
+
+ Y.Assert.areEqual(this.data.message.toString(), decrypted.toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/mode-ofb-tests.ts.tscparams b/cryptojs/test/mode-ofb-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/mode-ofb-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/pad-ansix923-tests.ts b/cryptojs/test/pad-ansix923-tests.ts
new file mode 100644
index 0000000000..6b610728cc
--- /dev/null
+++ b/cryptojs/test/pad-ansix923-tests.ts
@@ -0,0 +1,31 @@
+///
+///
+
+YUI.add('pad-ansix923-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'AnsiX923',
+
+ testPad: function () {
+ var data = C.lib.WordArray.create([0xdddddd00], 3);
+ C.pad.AnsiX923.pad(data, 2);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd00, 0x00000005]).toString(), data.toString());
+ },
+
+ testPadClamp: function () {
+ var data = C.lib.WordArray.create([0xdddddddd, 0xdddddddd], 3);
+ C.pad.AnsiX923.pad(data, 2);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd00, 0x00000005]).toString(), data.toString());
+ },
+
+ testUnpad: function () {
+ var data = C.lib.WordArray.create([0xdddddd00, 0x00000005]);
+ C.pad.AnsiX923.unpad(data);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd00], 3).toString(), data.toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/pad-ansix923-tests.ts.tscparams b/cryptojs/test/pad-ansix923-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/pad-ansix923-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/pad-iso10126-tests.ts b/cryptojs/test/pad-iso10126-tests.ts
new file mode 100644
index 0000000000..de46f7d816
--- /dev/null
+++ b/cryptojs/test/pad-iso10126-tests.ts
@@ -0,0 +1,53 @@
+///
+///
+
+YUI.add('pad-iso10126-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'Iso10126',
+
+ setUp: function () {
+ this.data = {};
+
+ // Save original random method
+ this.data.random = C.lib.WordArray.random;
+
+ // Replace random method with one that returns a predictable value
+ C.lib.WordArray.random = function (nBytes) {
+ var words = [];
+ for (var i = 0; i < nBytes; i += 4) {
+ words.push([0x11223344]);
+ }
+
+ return C.lib.WordArray.create(words, nBytes);
+ };
+ },
+
+ tearDown: function () {
+ // Restore random method
+ C.lib.WordArray.random = this.data.random;
+ },
+
+ testPad: function () {
+ var data = C.lib.WordArray.create([0xdddddd00], 3);
+ C.pad.Iso10126.pad(data, 2);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd11, 0x22334405]).toString(), data.toString());
+ },
+
+ testPadClamp: function () {
+ var data = C.lib.WordArray.create([0xdddddddd, 0xdddddddd], 3);
+ C.pad.Iso10126.pad(data, 2);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd11, 0x22334405]).toString(), data.toString());
+ },
+
+ testUnpad: function () {
+ var data = C.lib.WordArray.create([0xdddddd11, 0x22334405]);
+ C.pad.Iso10126.unpad(data);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd00], 3).toString(), data.toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/pad-iso10126-tests.ts.tscparams b/cryptojs/test/pad-iso10126-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/pad-iso10126-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/pad-iso97971-tests.ts b/cryptojs/test/pad-iso97971-tests.ts
new file mode 100644
index 0000000000..29f1ef6af1
--- /dev/null
+++ b/cryptojs/test/pad-iso97971-tests.ts
@@ -0,0 +1,38 @@
+///
+///
+
+YUI.add('pad-iso97971-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'Iso97971',
+
+ testPad1: function () {
+ var data = C.lib.WordArray.create([0xdddddd00], 3);
+ C.pad.Iso97971.pad(data, 1);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd80]).toString(), data.toString());
+ },
+
+ testPad2: function () {
+ var data = C.lib.WordArray.create([0xdddddd00], 3);
+ C.pad.Iso97971.pad(data, 2);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd80, 0x00000000]).toString(), data.toString());
+ },
+
+ testPadClamp: function () {
+ var data = C.lib.WordArray.create([0xdddddddd, 0xdddddddd], 3);
+ C.pad.Iso97971.pad(data, 2);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd80, 0x00000000]).toString(), data.toString());
+ },
+
+ testUnpad: function () {
+ var data = C.lib.WordArray.create([0xdddddd80, 0x00000000]);
+ C.pad.Iso97971.unpad(data);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd00], 3).toString(), data.toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/pad-iso97971-tests.ts.tscparams b/cryptojs/test/pad-iso97971-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/pad-iso97971-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/pad-pkcs7-tests.ts b/cryptojs/test/pad-pkcs7-tests.ts
new file mode 100644
index 0000000000..b56381daf3
--- /dev/null
+++ b/cryptojs/test/pad-pkcs7-tests.ts
@@ -0,0 +1,31 @@
+///
+///
+
+YUI.add('pad-pkcs7-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'Pkcs7',
+
+ testPad: function () {
+ var data = C.lib.WordArray.create([0xdddddd00], 3);
+ C.pad.Pkcs7.pad(data, 2);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd05, 0x05050505]).toString(), data.toString());
+ },
+
+ testPadClamp: function () {
+ var data = C.lib.WordArray.create([0xdddddddd, 0xdddddddd], 3);
+ C.pad.Pkcs7.pad(data, 2);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd05, 0x05050505]).toString(), data.toString());
+ },
+
+ testUnpad: function () {
+ var data = C.lib.WordArray.create([0xdddddd05, 0x05050505]);
+ C.pad.Pkcs7.unpad(data);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd00], 3).toString(), data.toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/pad-pkcs7-tests.ts.tscparams b/cryptojs/test/pad-pkcs7-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/pad-pkcs7-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/pad-zeropadding-tests.ts b/cryptojs/test/pad-zeropadding-tests.ts
new file mode 100644
index 0000000000..f2fdfe8f48
--- /dev/null
+++ b/cryptojs/test/pad-zeropadding-tests.ts
@@ -0,0 +1,31 @@
+///
+///
+
+YUI.add('pad-zeropadding-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'ZeroPadding',
+
+ testPad: function () {
+ var data = C.lib.WordArray.create([0xdddddd00], 3);
+ C.pad.ZeroPadding.pad(data, 2);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd00, 0x00000000]).toString(), data.toString());
+ },
+
+ testPadClamp: function () {
+ var data = C.lib.WordArray.create([0xdddddddd, 0xdddddddd], 3);
+ C.pad.ZeroPadding.pad(data, 2);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd00, 0x00000000]).toString(), data.toString());
+ },
+
+ testUnpad: function () {
+ var data = C.lib.WordArray.create([0xdddddd00, 0x00000000]);
+ C.pad.ZeroPadding.unpad(data);
+
+ Y.Assert.areEqual(C.lib.WordArray.create([0xdddddd00], 3).toString(), data.toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/pad-zeropadding-tests.ts.tscparams b/cryptojs/test/pad-zeropadding-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/pad-zeropadding-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/pbkdf2-profile-tests.ts b/cryptojs/test/pbkdf2-profile-tests.ts
new file mode 100644
index 0000000000..adb684c365
--- /dev/null
+++ b/cryptojs/test/pbkdf2-profile-tests.ts
@@ -0,0 +1,17 @@
+///
+///
+
+YUI.add('algo-pbkdf2-profile', function (Y) {
+ var C = CryptoJS;
+
+ //Profiler is removed in YUI 3.10.2
+ //@see http://www.yuiblog.com/blog/2013/06/04/yui-3-10-2-released/
+ //Y.Profiler.add({
+ var obj = {
+ name: 'PBKDF2',
+
+ profileKeySize256Iterations20: function () {
+ C.algo.PBKDF2.create({ keySize: 256/32, iterations: 20 }).compute('password', 'ATHENA.MIT.EDUraeburn');
+ }
+ };
+}, '$Rev$');
diff --git a/cryptojs/test/pbkdf2-profile-tests.ts.tscparams b/cryptojs/test/pbkdf2-profile-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/pbkdf2-profile-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/pbkdf2-tests.ts b/cryptojs/test/pbkdf2-tests.ts
new file mode 100644
index 0000000000..0b7cf411f8
--- /dev/null
+++ b/cryptojs/test/pbkdf2-tests.ts
@@ -0,0 +1,83 @@
+///
+///
+
+YUI.add('algo-pbkdf2-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'PBKDF2',
+
+ testKeySize128: function () {
+ Y.Assert.areEqual('cdedb5281bb2f801565a1122b2563515', C.PBKDF2('password', 'ATHENA.MIT.EDUraeburn', { keySize: 128/32 }).toString());
+ },
+
+ testKeySize256: function () {
+ Y.Assert.areEqual('cdedb5281bb2f801565a1122b25635150ad1f7a04bb9f3a333ecc0e2e1f70837', C.PBKDF2('password', 'ATHENA.MIT.EDUraeburn', { keySize: 256/32 }).toString());
+ },
+
+ testKeySize128Iterations2: function () {
+ Y.Assert.areEqual('01dbee7f4a9e243e988b62c73cda935d', C.PBKDF2('password', 'ATHENA.MIT.EDUraeburn', { keySize: 128/32, iterations: 2 }).toString());
+ },
+
+ testKeySize256Iterations2: function () {
+ Y.Assert.areEqual('01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86', C.PBKDF2('password', 'ATHENA.MIT.EDUraeburn', { keySize: 256/32, iterations: 2 }).toString());
+ },
+
+ testKeySize128Iterations1200: function () {
+ Y.Assert.areEqual('5c08eb61fdf71e4e4ec3cf6ba1f5512b', C.PBKDF2('password', 'ATHENA.MIT.EDUraeburn', { keySize: 128/32, iterations: 1200 }).toString());
+ },
+
+ testKeySize256Iterations1200: function () {
+ Y.Assert.areEqual('5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13', C.PBKDF2('password', 'ATHENA.MIT.EDUraeburn', { keySize: 256/32, iterations: 1200 }).toString());
+ },
+
+ testKeySize128Iterations5: function () {
+ Y.Assert.areEqual('d1daa78615f287e6a1c8b120d7062a49', C.PBKDF2('password', C.enc.Hex.parse('1234567878563412'), { keySize: 128/32, iterations: 5 }).toString());
+ },
+
+ testKeySize256Iterations5: function () {
+ Y.Assert.areEqual('d1daa78615f287e6a1c8b120d7062a493f98d203e6be49a6adf4fa574b6e64ee', C.PBKDF2('password', C.enc.Hex.parse('1234567878563412'), { keySize: 256/32, iterations: 5 }).toString());
+ },
+
+ testKeySize128Iterations1200PassPhraseEqualsBlockSize: function () {
+ Y.Assert.areEqual('139c30c0966bc32ba55fdbf212530ac9', C.PBKDF2('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 'pass phrase equals block size', { keySize: 128/32, iterations: 1200 }).toString());
+ },
+
+ testKeySize256Iterations1200PassPhraseEqualsBlockSize: function () {
+ Y.Assert.areEqual('139c30c0966bc32ba55fdbf212530ac9c5ec59f1a452f5cc9ad940fea0598ed1', C.PBKDF2('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 'pass phrase equals block size', { keySize: 256/32, iterations: 1200 }).toString());
+ },
+
+ testKeySize128Iterations1200PassPhraseExceedsBlockSize: function () {
+ Y.Assert.areEqual('9ccad6d468770cd51b10e6a68721be61', C.PBKDF2('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 'pass phrase exceeds block size', { keySize: 128/32, iterations: 1200 }).toString());
+ },
+
+ testKeySize256Iterations1200PassPhraseExceedsBlockSize: function () {
+ Y.Assert.areEqual('9ccad6d468770cd51b10e6a68721be611a8b4d282601db3b36be9246915ec82a', C.PBKDF2('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 'pass phrase exceeds block size', { keySize: 256/32, iterations: 1200 }).toString());
+ },
+
+ testKeySize128Iterations50: function () {
+ Y.Assert.areEqual('6b9cf26d45455a43a5b8bb276a403b39', C.PBKDF2(C.enc.Hex.parse('f09d849e'), 'EXAMPLE.COMpianist', { keySize: 128/32, iterations: 50 }).toString());
+ },
+
+ testKeySize256Iterations50: function () {
+ Y.Assert.areEqual('6b9cf26d45455a43a5b8bb276a403b39e7fe37a0c41e02c281ff3069e1e94f52', C.PBKDF2(C.enc.Hex.parse('f09d849e'), 'EXAMPLE.COMpianist', { keySize: 256/32, iterations: 50 }).toString());
+ },
+
+ testInputIntegrity: function () {
+ var password = C.lib.WordArray.create([0x12345678]);
+ var salt = C.lib.WordArray.create([0x12345678]);
+
+ var expectedPassword = password.toString();
+ var expectedSalt = salt.toString();
+
+ C.PBKDF2(password, salt);
+
+ Y.Assert.areEqual(expectedPassword, password.toString());
+ Y.Assert.areEqual(expectedSalt, salt.toString());
+ },
+
+ testHelper: function () {
+ Y.Assert.areEqual(C.algo.PBKDF2.create({ keySize: 128/32 }).compute('password', 'ATHENA.MIT.EDUraeburn').toString(), C.PBKDF2('password', 'ATHENA.MIT.EDUraeburn', { keySize: 128/32 }).toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/pbkdf2-tests.ts.tscparams b/cryptojs/test/pbkdf2-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/pbkdf2-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/rabbit-legacy-tests.ts b/cryptojs/test/rabbit-legacy-tests.ts
new file mode 100644
index 0000000000..658d62b25c
--- /dev/null
+++ b/cryptojs/test/rabbit-legacy-tests.ts
@@ -0,0 +1,83 @@
+///
+///
+
+YUI.add('algo-rabbit-legacy-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'RabbitLegacy',
+
+ testVector1: function () {
+ Y.Assert.areEqual('02f74a1c26456bf5ecd6a536f05457b1', C.RabbitLegacy.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('00000000000000000000000000000000')).ciphertext.toString());
+ },
+
+ testVector2: function () {
+ Y.Assert.areEqual('9c51e28784c37fe9a127f63ec8f32d3d', C.RabbitLegacy.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('dc51c3ac3bfc62f12e3d36fe91281329')).ciphertext.toString());
+ },
+
+ testVector3: function () {
+ Y.Assert.areEqual('9b60d002fd5ceb32accd41a0cd0db10c', C.RabbitLegacy.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('c09b0043e9e9ab0187e0c73383957415')).ciphertext.toString());
+ },
+
+ testVector4: function () {
+ 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());
+ },
+
+ testVector5: function () {
+ 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());
+ },
+
+ testVector6: function () {
+ 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());
+ },
+
+ testMultiPart: function () {
+ var rabbit = C.algo.RabbitLegacy.createEncryptor(C.enc.Hex.parse('00000000000000000000000000000000'));
+ var ciphertext1 = rabbit.process(C.enc.Hex.parse('000000000000'));
+ var ciphertext2 = rabbit.process(C.enc.Hex.parse('0000000000'));
+ var ciphertext3 = rabbit.process(C.enc.Hex.parse('0000000000'));
+ var ciphertext4 = rabbit.finalize();
+
+ Y.Assert.areEqual('02f74a1c26456bf5ecd6a536f05457b1', ciphertext1.concat(ciphertext2).concat(ciphertext3).concat(ciphertext4).toString());
+ },
+
+ testInputIntegrity: function () {
+ var message = C.enc.Hex.parse('00000000000000000000000000000000');
+ var key = C.enc.Hex.parse('00000000000000000000000000000000');
+ var iv = C.enc.Hex.parse('0000000000000000');
+
+ var expectedMessage = message.toString();
+ var expectedKey = key.toString();
+ var expectedIv = iv.toString();
+
+ C.RabbitLegacy.encrypt(message, key, { iv: iv });
+
+ Y.Assert.areEqual(expectedMessage, message.toString());
+ Y.Assert.areEqual(expectedKey, key.toString());
+ Y.Assert.areEqual(expectedIv, iv.toString());
+ },
+
+ testHelper: function () {
+ // Save original random method
+ var random = C.lib.WordArray.random;
+
+ // Replace random method with one that returns a predictable value
+ C.lib.WordArray.random = function (nBytes) {
+ var words = [];
+ for (var i = 0; i < nBytes; i += 4) {
+ words.push([0x11223344]);
+ }
+
+ return C.lib.WordArray.create(words, nBytes);
+ };
+
+ // Test
+ Y.Assert.areEqual(C.algo.RabbitLegacy.createEncryptor(C.MD5('Jefe')).finalize('Hi There').toString(), C.RabbitLegacy.encrypt('Hi There', C.MD5('Jefe')).ciphertext.toString());
+ 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());
+ Y.Assert.areEqual(C.lib.PasswordBasedCipher.encrypt(C.algo.RabbitLegacy, 'Hi There', 'Jefe').toString(), C.RabbitLegacy.encrypt('Hi There', 'Jefe').toString());
+
+ // Restore random method
+ C.lib.WordArray.random = random;
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/rabbit-legacy-tests.ts.tscparams b/cryptojs/test/rabbit-legacy-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/rabbit-legacy-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/rabbit-profile-tests.ts b/cryptojs/test/rabbit-profile-tests.ts
new file mode 100644
index 0000000000..05bdc9a4ee
--- /dev/null
+++ b/cryptojs/test/rabbit-profile-tests.ts
@@ -0,0 +1,36 @@
+///
+///
+
+YUI.add('algo-rabbit-profile', function (Y) {
+ var C = CryptoJS;
+
+ //Profiler is removed in YUI 3.10.2
+ //@see http://www.yuiblog.com/blog/2013/06/04/yui-3-10-2-released/
+ //Y.Profiler.add({
+ var obj = {
+ name: 'Rabbit',
+
+ setUp: function () {
+ this.data = {
+ key: C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f')
+ };
+ },
+
+ profileSinglePartMessage: function () {
+ var singlePartMessage = '';
+ for (var i = 0; i < 500; i++) {
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
+ }
+
+ C.algo.Rabbit.createEncryptor(this.data.key).finalize(singlePartMessage) + '';
+ },
+
+ profileMultiPartMessage: function () {
+ var rabbit = C.algo.Rabbit.createEncryptor(this.data.key);
+ for (var i = 0; i < 500; i++) {
+ rabbit.process('12345678901234567890123456789012345678901234567890') + '';
+ }
+ rabbit.finalize() + '';
+ }
+ };
+}, '$Rev$');
diff --git a/cryptojs/test/rabbit-profile-tests.ts.tscparams b/cryptojs/test/rabbit-profile-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/rabbit-profile-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/rabbit-tests.ts b/cryptojs/test/rabbit-tests.ts
new file mode 100644
index 0000000000..e8e0d3e3cf
--- /dev/null
+++ b/cryptojs/test/rabbit-tests.ts
@@ -0,0 +1,87 @@
+///
+///
+
+YUI.add('algo-rabbit-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'Rabbit',
+
+ testVector1: function () {
+ Y.Assert.areEqual('02f74a1c26456bf5ecd6a536f05457b1', C.Rabbit.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('00000000000000000000000000000000')).ciphertext.toString());
+ },
+
+ testVector2: function () {
+ Y.Assert.areEqual('3d02e0c730559112b473b790dee018df', C.Rabbit.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('c21fcf3881cd5ee8628accb0a9890df8')).ciphertext.toString());
+ },
+
+ testVector3: function () {
+ Y.Assert.areEqual('a3a97abb80393820b7e50c4abb53823d', C.Rabbit.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('1d272c6a2d8e3dfcac14056b78d633a0')).ciphertext.toString());
+ },
+
+ testVector4: function () {
+ 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());
+ },
+
+ testVector5: function () {
+ 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());
+ },
+
+ testVector6: function () {
+ 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());
+ },
+
+ testVector7: function () {
+ 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());
+ },
+
+ testMultiPart: function () {
+ var rabbit = C.algo.Rabbit.createEncryptor(C.enc.Hex.parse('00000000000000000000000000000000'));
+ var ciphertext1 = rabbit.process(C.enc.Hex.parse('000000000000'));
+ var ciphertext2 = rabbit.process(C.enc.Hex.parse('0000000000'));
+ var ciphertext3 = rabbit.process(C.enc.Hex.parse('0000000000'));
+ var ciphertext4 = rabbit.finalize();
+
+ Y.Assert.areEqual('02f74a1c26456bf5ecd6a536f05457b1', ciphertext1.concat(ciphertext2).concat(ciphertext3).concat(ciphertext4).toString());
+ },
+
+ testInputIntegrity: function () {
+ var message = C.enc.Hex.parse('00000000000000000000000000000000');
+ var key = C.enc.Hex.parse('00000000000000000000000000000000');
+ var iv = C.enc.Hex.parse('0000000000000000');
+
+ var expectedMessage = message.toString();
+ var expectedKey = key.toString();
+ var expectedIv = iv.toString();
+
+ C.Rabbit.encrypt(message, key, { iv: iv });
+
+ Y.Assert.areEqual(expectedMessage, message.toString());
+ Y.Assert.areEqual(expectedKey, key.toString());
+ Y.Assert.areEqual(expectedIv, iv.toString());
+ },
+
+ testHelper: function () {
+ // Save original random method
+ var random = C.lib.WordArray.random;
+
+ // Replace random method with one that returns a predictable value
+ C.lib.WordArray.random = function (nBytes) {
+ var words = [];
+ for (var i = 0; i < nBytes; i += 4) {
+ words.push([0x11223344]);
+ }
+
+ return C.lib.WordArray.create(words, nBytes);
+ };
+
+ // Test
+ Y.Assert.areEqual(C.algo.Rabbit.createEncryptor(C.MD5('Jefe')).finalize('Hi There').toString(), C.Rabbit.encrypt('Hi There', C.MD5('Jefe')).ciphertext.toString());
+ 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());
+ Y.Assert.areEqual(C.lib.PasswordBasedCipher.encrypt(C.algo.Rabbit, 'Hi There', 'Jefe').toString(), C.Rabbit.encrypt('Hi There', 'Jefe').toString());
+
+ // Restore random method
+ C.lib.WordArray.random = random;
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/rabbit-tests.ts.tscparams b/cryptojs/test/rabbit-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/rabbit-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/rc4-profile-tests.ts b/cryptojs/test/rc4-profile-tests.ts
new file mode 100644
index 0000000000..6d3145e56e
--- /dev/null
+++ b/cryptojs/test/rc4-profile-tests.ts
@@ -0,0 +1,36 @@
+///
+///
+
+YUI.add('algo-rc4-profile', function (Y) {
+ var C = CryptoJS;
+
+ //Profiler is removed in YUI 3.10.2
+ //@see http://www.yuiblog.com/blog/2013/06/04/yui-3-10-2-released/
+ //Y.Profiler.add({
+ var obj = {
+ name: 'RC4',
+
+ setUp: function () {
+ this.data = {
+ key: C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f')
+ };
+ },
+
+ profileSinglePartMessage: function () {
+ var singlePartMessage = '';
+ for (var i = 0; i < 500; i++) {
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
+ }
+
+ C.algo.RC4.createEncryptor(this.data.key).finalize(singlePartMessage) + '';
+ },
+
+ profileMultiPartMessage: function () {
+ var rc4 = C.algo.RC4.createEncryptor(this.data.key);
+ for (var i = 0; i < 500; i++) {
+ rc4.process('12345678901234567890123456789012345678901234567890') + '';
+ }
+ rc4.finalize() + '';
+ }
+ };
+}, '$Rev$');
diff --git a/cryptojs/test/rc4-profile-tests.ts.tscparams b/cryptojs/test/rc4-profile-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/rc4-profile-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/rc4-tests.ts b/cryptojs/test/rc4-tests.ts
new file mode 100644
index 0000000000..5a4e5aa6fc
--- /dev/null
+++ b/cryptojs/test/rc4-tests.ts
@@ -0,0 +1,71 @@
+///
+///
+
+YUI.add('algo-rc4-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'RC4',
+
+ testVector1: function () {
+ Y.Assert.areEqual('7494c2e7104b0879', C.RC4.encrypt(C.enc.Hex.parse('0000000000000000'), C.enc.Hex.parse('0123456789abcdef')).ciphertext.toString());
+ },
+
+ testVector2: function () {
+ Y.Assert.areEqual('f13829c9de', C.RC4.encrypt(C.enc.Hex.parse('dcee4cf92c'), C.enc.Hex.parse('618a63d2fb')).ciphertext.toString());
+ },
+
+ testDrop: function () {
+ Y.Assert.areEqual(
+ C.RC4.encrypt(C.enc.Hex.parse('00000000000000000000000000000000'), C.enc.Hex.parse('0123456789abcdef')).ciphertext.toString().substr(16),
+ C.RC4Drop.encrypt(C.enc.Hex.parse('0000000000000000'), C.enc.Hex.parse('0123456789abcdef'), { drop: 2 }).ciphertext.toString()
+ );
+ },
+
+ testMultiPart: function () {
+ var rc4 = C.algo.RC4.createEncryptor(C.enc.Hex.parse('0123456789abcdef'));
+ var ciphertext1 = rc4.process(C.enc.Hex.parse('00000000'));
+ var ciphertext2 = rc4.process(C.enc.Hex.parse('0000'));
+ var ciphertext3 = rc4.process(C.enc.Hex.parse('0000'));
+ var ciphertext4 = rc4.finalize();
+
+ Y.Assert.areEqual('7494c2e7104b0879', ciphertext1.concat(ciphertext2).concat(ciphertext3).concat(ciphertext4).toString());
+ },
+
+ testInputIntegrity: function () {
+ var message = C.enc.Hex.parse('0000000000000000');
+ var key = C.enc.Hex.parse('0123456789abcdef');
+
+ var expectedMessage = message.toString();
+ var expectedKey = key.toString();
+
+ C.RC4.encrypt(message, key);
+
+ Y.Assert.areEqual(expectedMessage, message.toString());
+ Y.Assert.areEqual(expectedKey, key.toString());
+ },
+
+ testHelper: function () {
+ // Save original random method
+ var random = C.lib.WordArray.random;
+
+ // Replace random method with one that returns a predictable value
+ C.lib.WordArray.random = function (nBytes) {
+ var words = [];
+ for (var i = 0; i < nBytes; i += 4) {
+ words.push([0x11223344]);
+ }
+
+ return C.lib.WordArray.create(words, nBytes);
+ };
+
+ // Test
+ Y.Assert.areEqual(C.algo.RC4.createEncryptor(C.SHA256('Jefe')).finalize('Hi There').toString(), C.RC4.encrypt('Hi There', C.SHA256('Jefe')).ciphertext.toString());
+ 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());
+ Y.Assert.areEqual(C.lib.PasswordBasedCipher.encrypt(C.algo.RC4, 'Hi There', 'Jefe').toString(), C.RC4.encrypt('Hi There', 'Jefe').toString());
+
+ // Restore random method
+ C.lib.WordArray.random = random;
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/rc4-tests.ts.tscparams b/cryptojs/test/rc4-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/rc4-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/ripemd160-tests.ts b/cryptojs/test/ripemd160-tests.ts
new file mode 100644
index 0000000000..3173983887
--- /dev/null
+++ b/cryptojs/test/ripemd160-tests.ts
@@ -0,0 +1,22 @@
+///
+///
+
+YUI.add('algo-ripemd160-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'RIPEMD160',
+
+ testVector1: function () {
+ Y.Assert.areEqual('37f332f68db77bd9d7edd4969571ad671cf9dd3b', C.RIPEMD160('The quick brown fox jumps over the lazy dog').toString());
+ },
+
+ testVector2: function () {
+ Y.Assert.areEqual('132072df690933835eb8b6ad0b77e7b6f14acad7', C.RIPEMD160('The quick brown fox jumps over the lazy cog').toString());
+ },
+
+ testVector3: function () {
+ Y.Assert.areEqual('9c1185a5c5e9fc54612808977ee8f548b2258d31', C.RIPEMD160('').toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/ripemd160-tests.ts.tscparams b/cryptojs/test/ripemd160-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/ripemd160-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/sha1-profile-tests.ts b/cryptojs/test/sha1-profile-tests.ts
new file mode 100644
index 0000000000..e0d46c49b2
--- /dev/null
+++ b/cryptojs/test/sha1-profile-tests.ts
@@ -0,0 +1,30 @@
+///
+///
+
+YUI.add('algo-sha1-profile', function (Y) {
+ var C = CryptoJS;
+
+ //Profiler is removed in YUI 3.10.2
+ //@see http://www.yuiblog.com/blog/2013/06/04/yui-3-10-2-released/
+ //Y.Profiler.add({
+ var obj = {
+ name: 'SHA1',
+
+ profileSinglePartMessage: function () {
+ var singlePartMessage = '';
+ for (var i = 0; i < 500; i++) {
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
+ }
+
+ C.algo.SHA1.create().finalize(singlePartMessage) + '';
+ },
+
+ profileMultiPartMessage: function () {
+ var sha1 = C.algo.SHA1.create();
+ for (var i = 0; i < 500; i++) {
+ sha1.update('12345678901234567890123456789012345678901234567890');
+ }
+ sha1.finalize() + '';
+ }
+ };
+}, '$Rev$');
diff --git a/cryptojs/test/sha1-profile-tests.ts.tscparams b/cryptojs/test/sha1-profile-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/sha1-profile-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/sha1-tests.ts b/cryptojs/test/sha1-tests.ts
new file mode 100644
index 0000000000..92f87d2107
--- /dev/null
+++ b/cryptojs/test/sha1-tests.ts
@@ -0,0 +1,73 @@
+///
+///
+
+YUI.add('algo-sha1-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'SHA1',
+
+ testVector1: function () {
+ Y.Assert.areEqual('da39a3ee5e6b4b0d3255bfef95601890afd80709', C.SHA1('').toString());
+ },
+
+ testVector2: function () {
+ Y.Assert.areEqual('86f7e437faa5a7fce15d1ddcb9eaeaea377667b8', C.SHA1('a').toString());
+ },
+
+ testVector3: function () {
+ Y.Assert.areEqual('a9993e364706816aba3e25717850c26c9cd0d89d', C.SHA1('abc').toString());
+ },
+
+ testVector4: function () {
+ Y.Assert.areEqual('c12252ceda8be8994d5fa0290a47231c1d16aae3', C.SHA1('message digest').toString());
+ },
+
+ testVector5: function () {
+ Y.Assert.areEqual('32d10c7b8cf96570ca04ce37f2a19d84240d3a89', C.SHA1('abcdefghijklmnopqrstuvwxyz').toString());
+ },
+
+ testVector6: function () {
+ Y.Assert.areEqual('761c457bf73b14d27e9e9265c46f4b4dda11f940', C.SHA1('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789').toString());
+ },
+
+ testVector7: function () {
+ Y.Assert.areEqual('50abf5706a150990a08b2c5ea40fa0e585554732', C.SHA1('12345678901234567890123456789012345678901234567890123456789012345678901234567890').toString());
+ },
+
+ testUpdateAndLongMessage: function () {
+ var sha1 = C.algo.SHA1.create();
+ for (var i = 0; i < 100; i++) {
+ sha1.update('12345678901234567890123456789012345678901234567890');
+ }
+
+ Y.Assert.areEqual('85e4c4b3933d5553ebf82090409a9d90226d845c', sha1.finalize().toString());
+ },
+
+ testClone: function () {
+ var sha1 = C.algo.SHA1.create();
+
+ Y.Assert.areEqual(C.SHA1('a').toString(), sha1.update('a').clone().finalize().toString());
+ Y.Assert.areEqual(C.SHA1('ab').toString(), sha1.update('b').clone().finalize().toString());
+ Y.Assert.areEqual(C.SHA1('abc').toString(), sha1.update('c').clone().finalize().toString());
+ },
+
+ testInputIntegrity: function () {
+ var message = C.lib.WordArray.create([0x12345678]);
+
+ var expected = message.toString();
+
+ C.SHA1(message);
+
+ Y.Assert.areEqual(expected, message.toString());
+ },
+
+ testHelper: function () {
+ Y.Assert.areEqual(C.algo.SHA1.create().finalize('').toString(), C.SHA1('').toString());
+ },
+
+ testHmacHelper: function () {
+ Y.Assert.areEqual(C.algo.HMAC.create(C.algo.SHA1, C.enc.Hex.parse('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b')).finalize('Hi There').toString(), C.HmacSHA1('Hi There', C.enc.Hex.parse('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b')).toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/sha1-tests.ts.tscparams b/cryptojs/test/sha1-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/sha1-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/sha224-tests.ts b/cryptojs/test/sha224-tests.ts
new file mode 100644
index 0000000000..49413aaef1
--- /dev/null
+++ b/cryptojs/test/sha224-tests.ts
@@ -0,0 +1,22 @@
+///
+///
+
+YUI.add('algo-sha224-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'SHA224',
+
+ testVector1: function () {
+ Y.Assert.areEqual('d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f', C.SHA224('').toString());
+ },
+
+ testVector2: function () {
+ Y.Assert.areEqual('730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525', C.SHA224('The quick brown fox jumps over the lazy dog').toString());
+ },
+
+ testVector3: function () {
+ Y.Assert.areEqual('619cba8e8e05826e9b8c519c0a5c68f4fb653e8a3d8aa04bb2c8cd4c', C.SHA224('The quick brown fox jumps over the lazy dog.').toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/sha224-tests.ts.tscparams b/cryptojs/test/sha224-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/sha224-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/sha256-profile-tests.ts b/cryptojs/test/sha256-profile-tests.ts
new file mode 100644
index 0000000000..899202743f
--- /dev/null
+++ b/cryptojs/test/sha256-profile-tests.ts
@@ -0,0 +1,30 @@
+///
+///
+
+YUI.add('algo-sha256-profile', function (Y) {
+ var C = CryptoJS;
+
+ //Profiler is removed in YUI 3.10.2
+ //@see http://www.yuiblog.com/blog/2013/06/04/yui-3-10-2-released/
+ //Y.Profiler.add({
+ var obj = {
+ name: 'SHA256',
+
+ profileSinglePartMessage: function () {
+ var singlePartMessage = '';
+ for (var i = 0; i < 500; i++) {
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
+ }
+
+ C.algo.SHA256.create().finalize(singlePartMessage) + '';
+ },
+
+ profileMultiPartMessage: function () {
+ var sha256 = C.algo.SHA256.create();
+ for (var i = 0; i < 500; i++) {
+ sha256.update('12345678901234567890123456789012345678901234567890');
+ }
+ sha256.finalize() + '';
+ }
+ };
+}, '$Rev$');
diff --git a/cryptojs/test/sha256-profile-tests.ts.tscparams b/cryptojs/test/sha256-profile-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/sha256-profile-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/sha256-tests.ts b/cryptojs/test/sha256-tests.ts
new file mode 100644
index 0000000000..0daf3223ec
--- /dev/null
+++ b/cryptojs/test/sha256-tests.ts
@@ -0,0 +1,73 @@
+///
+///
+
+YUI.add('algo-sha256-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'SHA256',
+
+ testVector1: function () {
+ Y.Assert.areEqual('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', C.SHA256('').toString());
+ },
+
+ testVector2: function () {
+ Y.Assert.areEqual('ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb', C.SHA256('a').toString());
+ },
+
+ testVector3: function () {
+ Y.Assert.areEqual('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad', C.SHA256('abc').toString());
+ },
+
+ testVector4: function () {
+ Y.Assert.areEqual('f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650', C.SHA256('message digest').toString());
+ },
+
+ testVector5: function () {
+ Y.Assert.areEqual('71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73', C.SHA256('abcdefghijklmnopqrstuvwxyz').toString());
+ },
+
+ testVector6: function () {
+ Y.Assert.areEqual('db4bfcbd4da0cd85a60c3c37d3fbd8805c77f15fc6b1fdfe614ee0a7c8fdb4c0', C.SHA256('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789').toString());
+ },
+
+ testVector7: function () {
+ Y.Assert.areEqual('f371bc4a311f2b009eef952dd83ca80e2b60026c8e935592d0f9c308453c813e', C.SHA256('12345678901234567890123456789012345678901234567890123456789012345678901234567890').toString());
+ },
+
+ testUpdateAndLongMessage: function () {
+ var sha256 = C.algo.SHA256.create();
+ for (var i = 0; i < 100; i++) {
+ sha256.update('12345678901234567890123456789012345678901234567890');
+ }
+
+ Y.Assert.areEqual('f8146961d9b73d8da49ccd526fca65439cdd5b402f76971556d5f52fd129843e', sha256.finalize().toString());
+ },
+
+ testClone: function () {
+ var sha256 = C.algo.SHA256.create();
+
+ Y.Assert.areEqual(C.SHA256('a').toString(), sha256.update('a').clone().finalize().toString());
+ Y.Assert.areEqual(C.SHA256('ab').toString(), sha256.update('b').clone().finalize().toString());
+ Y.Assert.areEqual(C.SHA256('abc').toString(), sha256.update('c').clone().finalize().toString());
+ },
+
+ testInputIntegrity: function () {
+ var message = C.lib.WordArray.create([0x12345678]);
+
+ var expected = message.toString();
+
+ C.SHA256(message);
+
+ Y.Assert.areEqual(expected, message.toString());
+ },
+
+ testHelper: function () {
+ Y.Assert.areEqual(C.algo.SHA256.create().finalize('').toString(), C.SHA256('').toString());
+ },
+
+ testHmacHelper: function () {
+ Y.Assert.areEqual(C.algo.HMAC.create(C.algo.SHA256, C.enc.Hex.parse('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b')).finalize('Hi There').toString(), C.HmacSHA256('Hi There', C.enc.Hex.parse('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b')).toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/sha256-tests.ts.tscparams b/cryptojs/test/sha256-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/sha256-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/sha3-profile-tests.ts b/cryptojs/test/sha3-profile-tests.ts
new file mode 100644
index 0000000000..015c326d0b
--- /dev/null
+++ b/cryptojs/test/sha3-profile-tests.ts
@@ -0,0 +1,30 @@
+///
+///
+
+YUI.add('algo-sha3-profile', function (Y) {
+ var C = CryptoJS;
+
+ //Profiler is removed in YUI 3.10.2
+ //@see http://www.yuiblog.com/blog/2013/06/04/yui-3-10-2-released/
+ //Y.Profiler.add({
+ var obj = {
+ name: 'SHA3',
+
+ profileSinglePartMessage: function () {
+ var singlePartMessage = '';
+ for (var i = 0; i < 500; i++) {
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
+ }
+
+ C.algo.SHA3.create().finalize(singlePartMessage) + '';
+ },
+
+ profileMultiPartMessage: function () {
+ var sha3 = C.algo.SHA3.create();
+ for (var i = 0; i < 500; i++) {
+ sha3.update('12345678901234567890123456789012345678901234567890');
+ }
+ sha3.finalize() + '';
+ }
+ };
+}, '$Rev$');
diff --git a/cryptojs/test/sha3-profile-tests.ts.tscparams b/cryptojs/test/sha3-profile-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/sha3-profile-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/sha3-tests.ts b/cryptojs/test/sha3-tests.ts
new file mode 100644
index 0000000000..c8ab5d642e
--- /dev/null
+++ b/cryptojs/test/sha3-tests.ts
@@ -0,0 +1,72 @@
+///
+///
+
+YUI.add('algo-sha3-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'SHA3',
+
+ testVector1: function () {
+ Y.Assert.areEqual('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e', C.SHA3('', { outputLength: 512 }).toString());
+ },
+
+ testVector2: function () {
+ Y.Assert.areEqual('81950e7096d31d4f22e3db71cac725bf59e81af54c7ca9e6aeee71c010fc5467466312a01aa5c137cfb140646941556796f612c9351268737c7e9a2b9631d1fa', C.SHA3(C.enc.Hex.parse('3a3a819c48efde2ad914fbf00e18ab6bc4f14513ab27d0c178a188b61431e7f5623cb66b23346775d386b50e982c493adbbfc54b9a3cd383382336a1a0b2150a15358f336d03ae18f666c7573d55c4fd181c29e6ccfde63ea35f0adf5885cfc0a3d84a2b2e4dd24496db789e663170cef74798aa1bbcd4574ea0bba40489d764b2f83aadc66b148b4a0cd95246c127d5871c4f11418690a5ddf01246a0c80a43c70088b6183639dcfda4125bd113a8f49ee23ed306faac576c3fb0c1e256671d817fc2534a52f5b439f72e424de376f4c565cca82307dd9ef76da5b7c4eb7e085172e328807c02d011ffbf33785378d79dc266f6a5be6bb0e4a92eceebaeb1'), { outputLength: 512 }).toString());
+ },
+
+ testVector3: function () {
+ Y.Assert.areEqual('2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff', C.SHA3('', { outputLength: 384 }).toString());
+ },
+
+ testVector4: function () {
+ Y.Assert.areEqual('6bff1c8405a3fe594e360e3bccea1ebcd509310dc79b9e45c263783d7a5dd662c6789b18bd567dbdda1554f5bee6a860', C.SHA3(C.enc.Hex.parse('3a3a819c48efde2ad914fbf00e18ab6bc4f14513ab27d0c178a188b61431e7f5623cb66b23346775d386b50e982c493adbbfc54b9a3cd383382336a1a0b2150a15358f336d03ae18f666c7573d55c4fd181c29e6ccfde63ea35f0adf5885cfc0a3d84a2b2e4dd24496db789e663170cef74798aa1bbcd4574ea0bba40489d764b2f83aadc66b148b4a0cd95246c127d5871c4f11418690a5ddf01246a0c80a43c70088b6183639dcfda4125bd113a8f49ee23ed306faac576c3fb0c1e256671d817fc2534a52f5b439f72e424de376f4c565cca82307dd9ef76da5b7c4eb7e085172e328807c02d011ffbf33785378d79dc266f6a5be6bb0e4a92eceebaeb1'), { outputLength: 384 }).toString());
+ },
+
+ testVector5: function () {
+ Y.Assert.areEqual('c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', C.SHA3('', { outputLength: 256 }).toString());
+ },
+
+ testVector6: function () {
+ Y.Assert.areEqual('348fb774adc970a16b1105669442625e6adaa8257a89effdb5a802f161b862ea', C.SHA3(C.enc.Hex.parse('3a3a819c48efde2ad914fbf00e18ab6bc4f14513ab27d0c178a188b61431e7f5623cb66b23346775d386b50e982c493adbbfc54b9a3cd383382336a1a0b2150a15358f336d03ae18f666c7573d55c4fd181c29e6ccfde63ea35f0adf5885cfc0a3d84a2b2e4dd24496db789e663170cef74798aa1bbcd4574ea0bba40489d764b2f83aadc66b148b4a0cd95246c127d5871c4f11418690a5ddf01246a0c80a43c70088b6183639dcfda4125bd113a8f49ee23ed306faac576c3fb0c1e256671d817fc2534a52f5b439f72e424de376f4c565cca82307dd9ef76da5b7c4eb7e085172e328807c02d011ffbf33785378d79dc266f6a5be6bb0e4a92eceebaeb1'), { outputLength: 256 }).toString());
+ },
+
+ testVector7: function () {
+ Y.Assert.areEqual('f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd', C.SHA3('', { outputLength: 224 }).toString());
+ },
+
+ testVector8: function () {
+ Y.Assert.areEqual('5af56987ea9cf11fcd0eac5ebc14b037365e9b1123e31cb2dfc7929a', C.SHA3(C.enc.Hex.parse('3a3a819c48efde2ad914fbf00e18ab6bc4f14513ab27d0c178a188b61431e7f5623cb66b23346775d386b50e982c493adbbfc54b9a3cd383382336a1a0b2150a15358f336d03ae18f666c7573d55c4fd181c29e6ccfde63ea35f0adf5885cfc0a3d84a2b2e4dd24496db789e663170cef74798aa1bbcd4574ea0bba40489d764b2f83aadc66b148b4a0cd95246c127d5871c4f11418690a5ddf01246a0c80a43c70088b6183639dcfda4125bd113a8f49ee23ed306faac576c3fb0c1e256671d817fc2534a52f5b439f72e424de376f4c565cca82307dd9ef76da5b7c4eb7e085172e328807c02d011ffbf33785378d79dc266f6a5be6bb0e4a92eceebaeb1'), { outputLength: 224 }).toString());
+ },
+
+ testDefaultOutputLength: function () {
+ Y.Assert.areEqual('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e', C.SHA3('').toString());
+ },
+
+ testClone: function () {
+ var sha3 = C.algo.SHA3.create();
+
+ Y.Assert.areEqual(C.SHA3('a').toString(), sha3.update('a').clone().finalize().toString());
+ Y.Assert.areEqual(C.SHA3('ab').toString(), sha3.update('b').clone().finalize().toString());
+ Y.Assert.areEqual(C.SHA3('abc').toString(), sha3.update('c').clone().finalize().toString());
+ },
+
+ testInputIntegrity: function () {
+ var message = C.lib.WordArray.create([0x12345678]);
+
+ var expected = message.toString();
+
+ C.SHA3(message);
+
+ Y.Assert.areEqual(expected, message.toString());
+ },
+
+ testHelper: function () {
+ Y.Assert.areEqual(C.algo.SHA3.create({ outputLength: 256 }).finalize('').toString(), C.SHA3('', { outputLength: 256 }).toString());
+ },
+
+ testHmacHelper: function () {
+ Y.Assert.areEqual(C.algo.HMAC.create(C.algo.SHA3, C.enc.Hex.parse('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b')).finalize('Hi There').toString(), C.HmacSHA3('Hi There', C.enc.Hex.parse('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b')).toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/sha3-tests.ts.tscparams b/cryptojs/test/sha3-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/sha3-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/sha384-tests.ts b/cryptojs/test/sha384-tests.ts
new file mode 100644
index 0000000000..fd4f4a4095
--- /dev/null
+++ b/cryptojs/test/sha384-tests.ts
@@ -0,0 +1,57 @@
+///
+///
+
+YUI.add('algo-sha384-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'SHA384',
+
+ testVector1: function () {
+ Y.Assert.areEqual('38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b', C.SHA384('').toString());
+ },
+
+ testVector2: function () {
+ Y.Assert.areEqual('ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1', C.SHA384('The quick brown fox jumps over the lazy dog').toString());
+ },
+
+ testVector3: function () {
+ Y.Assert.areEqual('ed892481d8272ca6df370bf706e4d7bc1b5739fa2177aae6c50e946678718fc67a7af2819a021c2fc34e91bdb63409d7', C.SHA384('The quick brown fox jumps over the lazy dog.').toString());
+ },
+
+ testUpdateAndLongMessage: function () {
+ var sha384 = C.algo.SHA384.create();
+ for (var i = 0; i < 100; i++) {
+ sha384.update('12345678901234567890123456789012345678901234567890');
+ }
+
+ Y.Assert.areEqual('297a519246d6f639a4020119e1f03fc8d77171647b2ff75ea4125b7150fed0cdcc93f8dca1c3c6a624d5e88d780d82cd', sha384.finalize().toString());
+ },
+
+ testClone: function () {
+ var sha384 = C.algo.SHA384.create();
+
+ Y.Assert.areEqual(C.SHA384('a').toString(), sha384.update('a').clone().finalize().toString());
+ Y.Assert.areEqual(C.SHA384('ab').toString(), sha384.update('b').clone().finalize().toString());
+ Y.Assert.areEqual(C.SHA384('abc').toString(), sha384.update('c').clone().finalize().toString());
+ },
+
+ testInputIntegrity: function () {
+ var message = C.lib.WordArray.create([0x12345678]);
+
+ var expected = message.toString();
+
+ C.SHA384(message);
+
+ Y.Assert.areEqual(expected, message.toString());
+ },
+
+ testHelper: function () {
+ Y.Assert.areEqual(C.algo.SHA384.create().finalize('').toString(), C.SHA384('').toString());
+ },
+
+ testHmacHelper: function () {
+ Y.Assert.areEqual(C.algo.HMAC.create(C.algo.SHA384, C.enc.Hex.parse('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b')).finalize('Hi There').toString(), C.HmacSHA384('Hi There', C.enc.Hex.parse('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b')).toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/sha384-tests.ts.tscparams b/cryptojs/test/sha384-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/sha384-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/sha512-profile-tests.ts b/cryptojs/test/sha512-profile-tests.ts
new file mode 100644
index 0000000000..82baed5a81
--- /dev/null
+++ b/cryptojs/test/sha512-profile-tests.ts
@@ -0,0 +1,30 @@
+///
+///
+
+YUI.add('algo-sha512-profile', function (Y) {
+ var C = CryptoJS;
+
+ //Profiler is removed in YUI 3.10.2
+ //@see http://www.yuiblog.com/blog/2013/06/04/yui-3-10-2-released/
+ //Y.Profiler.add({
+ var obj = {
+ name: 'SHA512',
+
+ profileSinglePartMessage: function () {
+ var singlePartMessage = '';
+ for (var i = 0; i < 500; i++) {
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
+ }
+
+ C.algo.SHA512.create().finalize(singlePartMessage) + '';
+ },
+
+ profileMultiPartMessage: function () {
+ var sha512 = C.algo.SHA512.create();
+ for (var i = 0; i < 500; i++) {
+ sha512.update('12345678901234567890123456789012345678901234567890');
+ }
+ sha512.finalize() + '';
+ }
+ };
+}, '$Rev$');
diff --git a/cryptojs/test/sha512-profile-tests.ts.tscparams b/cryptojs/test/sha512-profile-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/sha512-profile-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/sha512-tests.ts b/cryptojs/test/sha512-tests.ts
new file mode 100644
index 0000000000..c6559d7c7c
--- /dev/null
+++ b/cryptojs/test/sha512-tests.ts
@@ -0,0 +1,57 @@
+///
+///
+
+YUI.add('algo-sha512-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'SHA512',
+
+ testVector1: function () {
+ Y.Assert.areEqual('cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e', C.SHA512('').toString());
+ },
+
+ testVector2: function () {
+ Y.Assert.areEqual('07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6', C.SHA512('The quick brown fox jumps over the lazy dog').toString());
+ },
+
+ testVector3: function () {
+ Y.Assert.areEqual('91ea1245f20d46ae9a037a989f54f1f790f0a47607eeb8a14d12890cea77a1bbc6c7ed9cf205e67b7f2b8fd4c7dfd3a7a8617e45f3c463d481c7e586c39ac1ed', C.SHA512('The quick brown fox jumps over the lazy dog.').toString());
+ },
+
+ testUpdateAndLongMessage: function () {
+ var sha512 = C.algo.SHA512.create();
+ for (var i = 0; i < 100; i++) {
+ sha512.update('12345678901234567890123456789012345678901234567890');
+ }
+
+ Y.Assert.areEqual('9bc64f37c54606dff234b6607e06683c7ba248558d0ec74a11525d9f59e0be566489cc9413c00ca5e9db705fc52ba71214bcf118f65072fe284af8f8cf9500af', sha512.finalize().toString());
+ },
+
+ testClone: function () {
+ var sha512 = C.algo.SHA512.create();
+
+ Y.Assert.areEqual(C.SHA512('a').toString(), sha512.update('a').clone().finalize().toString());
+ Y.Assert.areEqual(C.SHA512('ab').toString(), sha512.update('b').clone().finalize().toString());
+ Y.Assert.areEqual(C.SHA512('abc').toString(), sha512.update('c').clone().finalize().toString());
+ },
+
+ testInputIntegrity: function () {
+ var message = C.lib.WordArray.create([0x12345678]);
+
+ var expected = message.toString();
+
+ C.SHA512(message);
+
+ Y.Assert.areEqual(expected, message.toString());
+ },
+
+ testHelper: function () {
+ Y.Assert.areEqual(C.algo.SHA512.create().finalize('').toString(), C.SHA512('').toString());
+ },
+
+ testHmacHelper: function () {
+ Y.Assert.areEqual(C.algo.HMAC.create(C.algo.SHA512, C.enc.Hex.parse('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b')).finalize('Hi There').toString(), C.HmacSHA512('Hi There', C.enc.Hex.parse('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b')).toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/sha512-tests.ts.tscparams b/cryptojs/test/sha512-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/sha512-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/tripledes-profile-tests.ts b/cryptojs/test/tripledes-profile-tests.ts
new file mode 100644
index 0000000000..e1543ff485
--- /dev/null
+++ b/cryptojs/test/tripledes-profile-tests.ts
@@ -0,0 +1,37 @@
+///
+///
+
+YUI.add('algo-tripledes-profile', function (Y) {
+ var C = CryptoJS;
+
+ //Profiler is removed in YUI 3.10.2
+ //@see http://www.yuiblog.com/blog/2013/06/04/yui-3-10-2-released/
+ //Y.Profiler.add({
+ var obj = {
+ name: 'TripleDES',
+
+ setUp: function () {
+ this.data = {
+ key: C.enc.Hex.parse('0001020304050607'),
+ iv: C.enc.Hex.parse('08090a0b0c0d0e0f')
+ };
+ },
+
+ profileSinglePartMessage: function () {
+ var singlePartMessage = '';
+ for (var i = 0; i < 100; i++) {
+ singlePartMessage += '12345678901234567890123456789012345678901234567890';
+ }
+
+ C.algo.TripleDES.createEncryptor(this.data.key, { iv: this.data.iv }).finalize(singlePartMessage) + '';
+ },
+
+ profileMultiPartMessage: function () {
+ var des = C.algo.TripleDES.createEncryptor(this.data.key, { iv: this.data.iv });
+ for (var i = 0; i < 100; i++) {
+ des.process('12345678901234567890123456789012345678901234567890') + '';
+ }
+ des.finalize() + '';
+ }
+ };
+}, '$Rev$');
diff --git a/cryptojs/test/tripledes-profile-tests.ts.tscparams b/cryptojs/test/tripledes-profile-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/tripledes-profile-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/tripledes-tests.ts b/cryptojs/test/tripledes-tests.ts
new file mode 100644
index 0000000000..2227d37103
--- /dev/null
+++ b/cryptojs/test/tripledes-tests.ts
@@ -0,0 +1,91 @@
+///
+///
+
+YUI.add('algo-tripledes-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'TripleDES',
+
+ testEncrypt1: function () {
+ Y.Assert.areEqual('95a8d72813daa94d', C.TripleDES.encrypt(C.enc.Hex.parse('0000000000000000'), C.enc.Hex.parse('800101010101010180010101010101018001010101010101'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ },
+
+ testEncrypt2: function () {
+ Y.Assert.areEqual('869efd7f9f265a09', C.TripleDES.encrypt(C.enc.Hex.parse('0000000000000000'), C.enc.Hex.parse('010101010101010201010101010101020101010101010102'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ },
+
+ testEncrypt3: function () {
+ Y.Assert.areEqual('95f8a5e5dd31d900', C.TripleDES.encrypt(C.enc.Hex.parse('8000000000000000'), C.enc.Hex.parse('010101010101010101010101010101010101010101010101'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ },
+
+ testEncrypt4: function () {
+ Y.Assert.areEqual('166b40b44aba4bd6', C.TripleDES.encrypt(C.enc.Hex.parse('0000000000000001'), C.enc.Hex.parse('010101010101010101010101010101010101010101010101'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ },
+
+ testDecrypt1: function () {
+ Y.Assert.areEqual('0000000000000000', C.TripleDES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse('95a8d72813daa94d') }), C.enc.Hex.parse('800101010101010180010101010101018001010101010101'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ },
+
+ testDecrypt2: function () {
+ Y.Assert.areEqual('0000000000000000', C.TripleDES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse('869efd7f9f265a09') }), C.enc.Hex.parse('010101010101010201010101010101020101010101010102'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ },
+
+ testDecrypt3: function () {
+ Y.Assert.areEqual('8000000000000000', C.TripleDES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse('95f8a5e5dd31d900') }), C.enc.Hex.parse('010101010101010101010101010101010101010101010101'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ },
+
+ testDecrypt4: function () {
+ Y.Assert.areEqual('0000000000000001', C.TripleDES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse('166b40b44aba4bd6') }), C.enc.Hex.parse('010101010101010101010101010101010101010101010101'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ },
+
+ testMultiPart: function () {
+ var des = C.algo.TripleDES.createEncryptor(C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f1011121314151617'), { mode: C.mode.ECB, padding: C.pad.NoPadding });
+ var ciphertext1 = des.process(C.enc.Hex.parse('001122334455'));
+ var ciphertext2 = des.process(C.enc.Hex.parse('66778899aa'));
+ var ciphertext3 = des.process(C.enc.Hex.parse('bbccddeeff'));
+ var ciphertext4 = des.finalize();
+
+ Y.Assert.areEqual(C.TripleDES.encrypt(C.enc.Hex.parse('00112233445566778899aabbccddeeff'), C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f1011121314151617'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString(), ciphertext1.concat(ciphertext2).concat(ciphertext3).concat(ciphertext4).toString());
+ },
+
+ testInputIntegrity: function () {
+ var message = C.enc.Hex.parse('00112233445566778899aabbccddeeff');
+ var key = C.enc.Hex.parse('000102030405060708090a0b0c0d0e0f1011121314151617');
+ var iv = C.enc.Hex.parse('08090a0b0c0d0e0f');
+
+ var expectedMessage = message.toString();
+ var expectedKey = key.toString();
+ var expectedIv = iv.toString();
+
+ C.TripleDES.encrypt(message, key, { iv: iv });
+
+ Y.Assert.areEqual(expectedMessage, message.toString());
+ Y.Assert.areEqual(expectedKey, key.toString());
+ Y.Assert.areEqual(expectedIv, iv.toString());
+ },
+
+ testHelper: function () {
+ // Save original random method
+ var random = C.lib.WordArray.random;
+
+ // Replace random method with one that returns a predictable value
+ C.lib.WordArray.random = function (nBytes) {
+ var words = [];
+ for (var i = 0; i < nBytes; i += 4) {
+ words.push([0x11223344]);
+ }
+
+ return C.lib.WordArray.create(words, nBytes);
+ };
+
+ // Test
+ Y.Assert.areEqual(C.algo.TripleDES.createEncryptor(C.SHA256('Jefe'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).finalize('Hi There').toString(), C.TripleDES.encrypt('Hi There', C.SHA256('Jefe'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString());
+ Y.Assert.areEqual(C.lib.SerializableCipher.encrypt(C.algo.TripleDES, 'Hi There', C.SHA256('Jefe'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString(), C.TripleDES.encrypt('Hi There', C.SHA256('Jefe'), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+ Y.Assert.areEqual(C.lib.PasswordBasedCipher.encrypt(C.algo.TripleDES, 'Hi There', 'Jefe', { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString(), C.TripleDES.encrypt('Hi There', 'Jefe', { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString());
+
+ // Restore random method
+ C.lib.WordArray.random = random;
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/tripledes-tests.ts.tscparams b/cryptojs/test/tripledes-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/tripledes-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/x64-word-tests.ts b/cryptojs/test/x64-word-tests.ts
new file mode 100644
index 0000000000..f5ee66ce22
--- /dev/null
+++ b/cryptojs/test/x64-word-tests.ts
@@ -0,0 +1,102 @@
+///
+///
+
+YUI.add('x64-word-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'X64Word',
+
+ testInit: function () {
+ var word = C.x64.Word.create(0x00010203, 0x04050607);
+
+ Y.Assert.areEqual(0x00010203, word.high, 'word.high');
+ Y.Assert.areEqual(0x04050607, word.low, 'word.low');
+ }
+
+ // testNot: function () {
+ // var word = C.x64.Word.create(0x00010203, 0x04050607).not();
+
+ // Y.Assert.areEqual(~0x00010203, word.high, 'word.high');
+ // Y.Assert.areEqual(~0x04050607, word.low, 'word.low');
+ // },
+
+ // testAnd: function () {
+ // var word1 = C.x64.Word.create(0x00010203, 0x04050607);
+ // var word2 = C.x64.Word.create(0x18191a1b, 0x1c1d1e1f);
+ // var anded = word1.and(word2);
+
+ // Y.Assert.areEqual(0x00010203 & 0x18191a1b, anded.high, 'word.high');
+ // Y.Assert.areEqual(0x04050607 & 0x1c1d1e1f, anded.low, 'word.low');
+ // },
+
+ // testOr: function () {
+ // var word1 = C.x64.Word.create(0x00010203, 0x04050607);
+ // var word2 = C.x64.Word.create(0x18191a1b, 0x1c1d1e1f);
+ // var ored = word1.or(word2);
+
+ // Y.Assert.areEqual(0x00010203 | 0x18191a1b, ored.high, 'word.high');
+ // Y.Assert.areEqual(0x04050607 | 0x1c1d1e1f, ored.low, 'word.low');
+ // },
+
+ // testXor: function () {
+ // var word1 = C.x64.Word.create(0x00010203, 0x04050607);
+ // var word2 = C.x64.Word.create(0x18191a1b, 0x1c1d1e1f);
+ // var xored = word1.xor(word2);
+
+ // Y.Assert.areEqual(0x00010203 ^ 0x18191a1b, xored.high, 'word.high');
+ // Y.Assert.areEqual(0x04050607 ^ 0x1c1d1e1f, xored.low, 'word.low');
+ // },
+
+ // testShiftL25: function () {
+ // var word = C.x64.Word.create(0x00010203, 0x04050607).shiftL(25);
+
+ // Y.Assert.areEqual(0x06080a0c, word.high, 'word.high');
+ // Y.Assert.areEqual(0x0e000000, word.low, 'word.low');
+ // },
+
+ // testShiftL32: function () {
+ // var word = C.x64.Word.create(0x00010203, 0x04050607).shiftL(32);
+
+ // Y.Assert.areEqual(0x04050607, word.high, 'word.high');
+ // Y.Assert.areEqual(0x00000000, word.low, 'word.low');
+ // },
+
+ // testShiftR7: function () {
+ // var word = C.x64.Word.create(0x00010203, 0x04050607).shiftR(7);
+
+ // Y.Assert.areEqual(0x00000204, word.high, 'word.high');
+ // Y.Assert.areEqual(0x06080A0C, word.low, 'word.low');
+ // },
+
+ // testShiftR32: function () {
+ // var word = C.x64.Word.create(0x00010203, 0x04050607).shiftR(32);
+
+ // Y.Assert.areEqual(0x00000000, word.high, 'word.high');
+ // Y.Assert.areEqual(0x00010203, word.low, 'word.low');
+ // },
+
+ // testRotL: function () {
+ // var word = C.x64.Word.create(0x00010203, 0x04050607).rotL(25);
+
+ // Y.Assert.areEqual(0x06080a0c, word.high, 'word.high');
+ // Y.Assert.areEqual(0x0e000204, word.low, 'word.low');
+ // },
+
+ // testRotR: function () {
+ // var word = C.x64.Word.create(0x00010203, 0x04050607).rotR(7);
+
+ // Y.Assert.areEqual(0x0e000204, word.high, 'word.high');
+ // Y.Assert.areEqual(0x06080a0c, word.low, 'word.low');
+ // },
+
+ // testAdd: function () {
+ // var word1 = C.x64.Word.create(0x00010203, 0x04050607);
+ // var word2 = C.x64.Word.create(0x18191a1b, 0x1c1d1e1f);
+ // var added = word1.add(word2);
+
+ // Y.Assert.areEqual(0x181a1c1e, added.high, 'word.high');
+ // Y.Assert.areEqual(0x20222426, added.low, 'word.low');
+ // }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/x64-word-tests.ts.tscparams b/cryptojs/test/x64-word-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/x64-word-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/cryptojs/test/x64-wordarray-tests.ts b/cryptojs/test/x64-wordarray-tests.ts
new file mode 100644
index 0000000000..7b11830b9e
--- /dev/null
+++ b/cryptojs/test/x64-wordarray-tests.ts
@@ -0,0 +1,41 @@
+///
+///
+
+YUI.add('x64-wordarray-test', function (Y) {
+ var C = CryptoJS;
+
+ Y.Test.Runner.add(new Y.Test.Case({
+ name: 'X64WordArray',
+
+ testInit0: function () {
+ Y.Assert.areEqual('', C.x64.WordArray.create().toX32().toString());
+ },
+
+ testInit1: function () {
+ var wordArray = C.x64.WordArray.create([
+ C.x64.Word.create(0x00010203, 0x04050607),
+ C.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
+ ]);
+
+ Y.Assert.areEqual('000102030405060718191a1b1c1d1e1f', wordArray.toX32().toString());
+ },
+
+ testInit2: function () {
+ var wordArray = C.x64.WordArray.create([
+ C.x64.Word.create(0x00010203, 0x04050607),
+ C.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
+ ], 10);
+
+ Y.Assert.areEqual('00010203040506071819', wordArray.toX32().toString());
+ },
+
+ testToX32: function () {
+ var wordArray = C.x64.WordArray.create([
+ C.x64.Word.create(0x00010203, 0x04050607),
+ C.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
+ ], 10);
+
+ Y.Assert.areEqual('00010203040506071819', wordArray.toX32().toString());
+ }
+ }));
+}, '$Rev$');
diff --git a/cryptojs/test/x64-wordarray-tests.ts.tscparams b/cryptojs/test/x64-wordarray-tests.ts.tscparams
new file mode 100644
index 0000000000..3cc762b550
--- /dev/null
+++ b/cryptojs/test/x64-wordarray-tests.ts.tscparams
@@ -0,0 +1 @@
+""
\ No newline at end of file
diff --git a/yui/README.md b/yui/README.md
new file mode 100644
index 0000000000..d0e2a6493c
--- /dev/null
+++ b/yui/README.md
@@ -0,0 +1,11 @@
+yui.d.ts
+========
+
+typescript definition type for [yui3](https://github.com/yui/yui3).
+
+The definition is based on [yui 3.14.0](https://github.com/yui/yui3/tree/release-3.14.0).
+
+I create it only for writing test files of [cryptojs.d.ts](../cryptojs/test).
+So, the definition is incomplete now (22/11/2013).
+
+Gia Bảo @ [Sân Đình](https://sandinh.com)
diff --git a/yui/yui-test.d.ts b/yui/yui-test.d.ts
new file mode 100644
index 0000000000..f72784ffa4
--- /dev/null
+++ b/yui/yui-test.d.ts
@@ -0,0 +1,104 @@
+// Type definitions for yui 3.14.0
+// Project: https://github.com/yui/yui3/blob/release-3.14.0/src/test/js
+// Definitions by:
+// Gia Bảo @ Sân Đình
+
+declare module YUITest {
+ interface YUITestStatic{
+ Assert: IAssert
+ Case: TestCase
+ Runner: TestRunner
+ }
+
+ interface EventTarget{
+ attach(type: string, listener: Function): void
+ subscribe(type: string, listener: Function): void
+ fire(event: Object): void
+ fire(event: string): void
+ detach(type: string, listener: Function): void
+ unsubscribe(type: string, listener: Function): void
+ }
+
+ interface TestRunner extends EventTarget{
+ TEST_CASE_BEGIN_EVENT: string
+ TEST_CASE_COMPLETE_EVENT: string
+ TEST_SUITE_BEGIN_EVENT: string
+ TEST_SUITE_COMPLETE_EVENT: string
+ TEST_PASS_EVENT: string
+ TEST_FAIL_EVENT: string
+ ERROR_EVENT: string
+ TEST_IGNORE_EVENT: string
+ COMPLETE_EVENT: string
+ BEGIN_EVENT: string
+
+ getName(): string
+ setName(name: string): void
+
+ add(testObject: TestSuite): void
+ add(testObject: TestCase): void
+
+ clear(): void
+ isWaiting(): boolean
+ isRunning(): boolean
+
+ getResults(format?: Function): any //Object|String
+ getCoverage(format?: Function): any //Object|String
+ callback(...args: any[]): Function
+ resume(segment?: Function): void
+ run(options?: Object): void
+ run(options?: boolean): void
+ }
+
+ interface TestSuite{
+ name: string
+// items: any[] //Array of test suites and test cases. @private
+ add(testObject: TestSuite): void
+ add(testObject: TestCase): void
+ setUp(): void
+ tearDown(): void
+ }
+
+ interface TestCase{
+ new (template: Object): TestCase
+ DEFAULT_WAIT: number
+ callback(...args: any[]): Function
+ resume(segment?: Function): void
+ wait(segment?: Function, delay?: number): void
+ waitFor(condition: Function, segment: Function, timeout?: number, increment?: number): void
+ assert(condition: boolean, message: string): void
+ fail(message?: string): void
+ init(): void
+ destroy(): void
+ setUp(): void
+ tearDown(): void
+ }
+
+ interface IAssert{
+ fail(message?: string): void
+ pass(message?: string): void
+ areEqual(expected: Object, actual: Object, message?: string): void
+ areNotEqual(unexpected: Object, actual: Object, message?: string): void
+ areNotSame(unexpected: Object, actual: Object, message?: string): void
+ areSame(expected: Object, actual: Object, message?: string): void
+ isFalse(actual: Object, message?: string): void
+ isTrue(actual: Object, message?: string): void
+ isNaN(actual: Object, message?: string): void
+ isNotNaN(actual: Object, message?: string): void
+ isNotNull(actual: Object, message?: string): void
+ isNotUndefined(actual: Object, message?: string): void
+ isNull(actual: Object, message?: string): void
+ isUndefined(actual: Object, message?: string): void
+ isArray(actual: Object, message?: string): void
+ isBoolean(actual: Object, message?: string): void
+ isFunction(actual: Object, message?: string): void
+ isInstanceOf(expected: Function, actual: Object, message?: string): void
+ isNumber(actual: Object, message?: string): void
+ isObject(actual: Object, message?: string): void
+ isString(actual: Object, message?: string): void
+ isTypeOf(expectedType: string, actualValue: Object, message?: string): void
+
+ throwsError(expectedError: string, method: Object, message?: string): void
+ throwsError(expectedError: Function, method: Object, message?: string): void
+ throwsError(expectedError: Object, method: Object, message?: string): void
+ }
+}
diff --git a/yui/yui.d.ts b/yui/yui.d.ts
new file mode 100644
index 0000000000..acc448899b
--- /dev/null
+++ b/yui/yui.d.ts
@@ -0,0 +1,29 @@
+// Type definitions for yui 3.14.0
+// Project: https://github.com/yui/yui3/blob/release-3.14.0/src/yui/js
+// Definitions by:
+// Gia Bảo @ Sân Đình
+
+///
+
+interface YUI{
+ Test: YUITest.YUITestStatic
+ Assert: YUITest.IAssert
+
+ add(name: string, fn: (Y: YUI, name: string) => any, version: string, details?: Y.IConfig): YUI;
+
+ mix(receiver: Function, supplier: Function, overwrite?: boolean, whitelist?: string[], mode?: number, merge?: boolean): any//Function|Object|YUI
+ mix(receiver: Object, supplier: Function, overwrite?: boolean, whitelist?: string[], mode?: number, merge?: boolean): any//Function|Object|YUI
+ mix(receiver: Function, supplier: Object, overwrite?: boolean, whitelist?: string[], mode?: number, merge?: boolean): any//Function|Object|YUI
+ mix(receiver: Object, supplier: Object, overwrite?: boolean, whitelist?: string[], mode?: number, merge?: boolean): any//Function|Object|YUI
+}
+
+declare module Y{
+ interface IConfig{
+ requires: string[]
+ optional: string[]
+ use: string[]
+ }
+}
+
+declare var Y: YUI;
+declare var YUI: YUI;