Files
@ 07d399b4c31c
Branch filter:
Location: CryptoJS/spec/test/chachaSpec.js - annotation
07d399b4c31c
3.0 KiB
text/javascript
updated .hgignore
ff3879ba7270 ff3879ba7270 e2095e3881bf e2095e3881bf e2095e3881bf 11975fd44f93 11975fd44f93 11975fd44f93 e2095e3881bf 11975fd44f93 11975fd44f93 11975fd44f93 11975fd44f93 11975fd44f93 e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf ff3879ba7270 ff3879ba7270 e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf ff3879ba7270 ff3879ba7270 ff3879ba7270 e2095e3881bf ff3879ba7270 e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf ff3879ba7270 ff3879ba7270 e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf ff3879ba7270 ff3879ba7270 e2095e3881bf ff3879ba7270 | /* global expect */
function getRandomValues(arr) {
for (let i = 0; i < arr.length; i++) {
arr[i] = Math.floor(Math.random()*256);
}
}
window = {
crypto: {
getRandomValues: getRandomValues
}
};
describe("Chacha", function() {
let cryptoJS = require("../../dist/main.js");
let util = cryptoJS.util;
let Chacha20 = cryptoJS.Chacha20;
let encrypt = cryptoJS.encrypt;
let decrypt = cryptoJS.decrypt;
let str2utf8 = util.str2utf8;
let key = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31];
let nonce1 = [0, 0, 0, 9, 0, 0, 0, 74, 0, 0, 0, 0];
let nonce2 = [0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0];
let plaintext = "Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it.";
describe("Chacha20", function() {
it("should return a correct test vector", function() {
let cipher = new Chacha20(key, nonce1);
let output = cipher._computeBlock().map(x => x >>> 0);
let expected = [0xe4e7f110, 0x15593bd1, 0x1fdd0f50, 0xc47120a3, 0xc7f4d1c7, 0x0368c033, 0x9aaa2204, 0x4e6cd4c3, 0x466482d2, 0x09aa9f07, 0x05d7c214, 0xa2028bd9, 0xd19c12b5, 0xb94e16de, 0xe883d0cb, 0x4e3c50a2];
expect(output).toEqual(expected);
});
it("should output a correct key stream", function() {
let cipher = new Chacha20(key, nonce2);
let expected = [34, 79, 81, 243, 64, 27, 217, 225, 47, 222, 39, 111, 184, 99, 29, 237, 140, 19, 31, 130, 61, 44, 6, 226, 126, 79, 202, 236, 158, 243, 207, 120, 138, 59, 10, 163, 114, 96, 10, 146, 181, 121, 116, 205, 237, 43, 147, 52, 121, 76, 186, 64, 198, 62, 52, 205, 234, 33, 44, 76, 240, 125, 65, 183, 105, 166, 116, 159, 63, 99, 15, 65, 34, 202, 254, 40, 236, 77, 196, 126, 38, 212, 52, 109, 112, 185, 140, 115, 243, 233, 197, 58, 196, 12, 89, 69, 57, 139, 110, 218, 26, 131, 44, 137, 193, 103, 234, 205, 144, 29, 126, 43, 243, 99];
expected.forEach(b => {
expect(cipher.getByte()).toEqual(b);
});
});
});
describe("encrypt", function() {
it("should correctly encrypt an example text", function() {
let ciphertext = [110, 46, 53, 154, 37, 104, 249, 128, 65, 186, 7, 40, 221, 13, 105, 129, 233, 126, 122, 236, 29, 67, 96, 194, 10, 39, 175, 204, 253, 159, 174, 11, 249, 27, 101, 197, 82, 71, 51, 171, 143, 89, 61, 171, 205, 98, 179, 87, 22, 57, 214, 36, 230, 81, 82, 171, 143, 83, 12, 53, 159, 8, 97, 216, 7, 202, 13, 191, 80, 13, 106, 97, 86, 163, 142, 8, 138, 34, 182, 94, 82, 188, 81, 77, 22, 204, 248, 6, 129, 140, 233, 26, 183, 121, 55, 54, 90, 249, 11, 191, 116, 163, 91, 230, 180, 11, 142, 237, 242, 120, 94, 66, 135, 77];
expect(encrypt(str2utf8(plaintext), key, nonce2)).toEqual([nonce2, ciphertext]);
});
});
describe("decrypt", function() {
it("should be able to decrypt a Chacha20 encrypted text", function() {
let text = str2utf8(plaintext);
let key = [];
for (let i = 0; i < 16; i++) {key.push(Math.floor(Math.random() * 256));}
let [nonce, ciphertext] = encrypt(text, key);
expect(decrypt(ciphertext, key, nonce)).toEqual(text);
});
});
});
|