MASK=0xffffffff;
function int2bytes(x){
var res=new Array(4);
for(var i=0;i<4;i++){
res[i]=x&0xff;
x>>>=8;
}
return res;
}
function lrot(x,shift){
return (x<<shift|x>>>(32-shift))&MASK;
}
function quarterRound(arr,ia,ib,ic,id){
var a=arr[ia], b=arr[ib], c=arr[ic], d=arr[id];
a=(a+b)&MASK; d=lrot(d^a,16);
c=(c+d)&MASK; b=lrot(b^c,12);
a=(a+b)&MASK; d=lrot(d^a,8);
c=(c+d)&MASK; b=lrot(b^c,7);
arr[ia]=a; arr[ib]=b; arr[ic]=c; arr[id]=d;
}
function chacha(key,nonce,position){
var x=input.slice();
for(var i=0;i<10;i++){
// column round
quarterRound(x,0,4,8,12);
quarterRound(x,1,5,9,13);
quarterRound(x,2,6,10,14);
quarterRound(x,3,7,11,15);
// diagonal round
quarterRound(x,0,5,10,15);
quarterRound(x,1,6,11,12);
quarterRound(x,2,7,8,13);
quarterRound(x,3,4,9,14);
}
return x.map((xi,i)=>(xi+input[i])&MASK);
}
function encrypt(message,key){
var nonce=Date.now();
var nonce0=nonce;
}