Files
@ 7eec13103f80
Branch filter:
Location: CryptoJS/spec/test/chachaSpec.js - annotation
7eec13103f80
2.5 KiB
text/javascript
encrypt/decrypt wrappers
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 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 ff3879ba7270 | /* global expect */
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.concat(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=[];
for(let i=0;i<8;i++){nonce.push(Math.floor(Math.random()*256));}
expect(decrypt(encrypt(text,key,nonce),key)).toEqual(text);
});
});
});
|