Files
@ 5c8fceb4e291
Branch filter:
Location: CryptoJS/spec/test/chachaSpec.js - annotation
5c8fceb4e291
2.6 KiB
text/javascript
I/O, user interface
ff3879ba7270 ff3879ba7270 11975fd44f93 11975fd44f93 11975fd44f93 11975fd44f93 11975fd44f93 11975fd44f93 11975fd44f93 11975fd44f93 11975fd44f93 11975fd44f93 11975fd44f93 11975fd44f93 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 12f10d9d5948 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 11975fd44f93 12f10d9d5948 ff3879ba7270 ff3879ba7270 ff3879ba7270 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);
});
});
});
|