xsalsa20-csprng
Version:
CSPRNG and crypto library powered by XSalsa20
2 lines • 6.74 kB
JavaScript
var e=class e{xsalsa;constructor(){let e=new Uint8Array(56);(typeof window<`u`?window.msCrypto||window.crypto:globalThis.crypto).getRandomValues(e),this.xsalsa=n(e.slice(0,24),e.slice(24))}static of(t,r){let i=Object.create(e.prototype);return i.xsalsa=n(t,r),i}randomInt32(){return this.xsalsa.next().value}randomUint32(){return this.xsalsa.next().value+2**31}uniformInt(e){if(e<2)return 0;let t=2**32%e,n;do n=this.randomUint32();while(n<t);return n%e}};function*t(e,t){let n=new Uint8Array(32),r=new Uint8Array(16),o=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);a(n,e,t,o);for(let t=0;t<8;t++)r[t]=e[t+16];for(;;){let e=new Uint8Array(64);i(e,r,n,o),yield e;let t=1;for(let e=8;e<16;e++)t+=r[e]&255|0,r[e]=t&255,t>>>=8}}function*n(e,n){let r=t(e,n);for(;;){let e=r.next().value;yield*[e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,e[8]|e[9]<<8|e[10]<<16|e[11]<<24,e[12]|e[13]<<8|e[14]<<16|e[15]<<24,e[16]|e[17]<<8|e[18]<<16|e[19]<<24,e[20]|e[21]<<8|e[22]<<16|e[23]<<24,e[24]|e[25]<<8|e[26]<<16|e[27]<<24,e[28]|e[29]<<8|e[30]<<16|e[31]<<24,e[32]|e[33]<<8|e[34]<<16|e[35]<<24,e[36]|e[37]<<8|e[38]<<16|e[39]<<24,e[40]|e[41]<<8|e[42]<<16|e[43]<<24,e[44]|e[45]<<8|e[46]<<16|e[47]<<24,e[48]|e[49]<<8|e[50]<<16|e[51]<<24,e[52]|e[53]<<8|e[54]<<16|e[55]<<24,e[56]|e[57]<<8|e[58]<<16|e[59]<<24,e[60]|e[61]<<8|e[62]<<16|e[63]<<24]}}var r=class{xsalsa;buffer;constructor(e,n){if(e.length!==24)throw Error(`nonce must be 24 bytes`);if(n.length!==32)throw Error(`key must be 32 bytes`);this.xsalsa=t(e,n),this.buffer=new Uint8Array}stream(e){let t,n,r=this.buffer.length;if(r>0){if(e<r)return t=this.buffer.slice(0,e),this.buffer=this.buffer.slice(e),t;if(e===r)return t=this.buffer,this.buffer=new Uint8Array,t;t=new Uint8Array(e),t.set(this.buffer),n=r,this.buffer=new Uint8Array}else t=new Uint8Array(e),n=0;for(;e-n>=64;)t.set(this.xsalsa.next().value,n),n+=64;let i=e-n;if(i>0){let e=this.xsalsa.next().value;t.set(e.slice(0,i),n),this.buffer=e.slice(i)}return t}update(e,t=new Uint8Array(e.length)){let n=this.stream(e.length);for(let r=0;r<e.length;++r)t[r]=e[r]^n[r];return t}};function i(e,t,n,r){let i=r[0]|r[1]<<8|r[2]<<16|r[3]<<24,a=n[0]|n[1]<<8|n[2]<<16|n[3]<<24,o=n[4]|n[5]<<8|n[6]<<16|n[7]<<24,s=n[8]|n[9]<<8|n[10]<<16|n[11]<<24,c=n[12]|n[13]<<8|n[14]<<16|n[15]<<24,l=r[4]|r[5]<<8|r[6]<<16|r[7]<<24,u=t[0]|t[1]<<8|t[2]<<16|t[3]<<24,d=t[4]|t[5]<<8|t[6]<<16|t[7]<<24,f=t[8]|t[9]<<8|t[10]<<16|t[11]<<24,p=t[12]|t[13]<<8|t[14]<<16|t[15]<<24,m=r[8]|r[9]<<8|r[10]<<16|r[11]<<24,h=n[16]|n[17]<<8|n[18]<<16|n[19]<<24,g=n[20]|n[21]<<8|n[22]<<16|n[23]<<24,_=n[24]|n[25]<<8|n[26]<<16|n[27]<<24,v=n[28]|n[29]<<8|n[30]<<16|n[31]<<24,y=r[12]|r[13]<<8|r[14]<<16|r[15]<<24,b=i,x=a,S=o,C=s,w=c,T=l,E=u,D=d,O=f,k=p,A=m,j=h,M=g,N=_,P=v,F=y,I;for(let e=0;e<20;e+=2)I=b+M|0,w^=I<<7|I>>>25,I=w+b|0,O^=I<<9|I>>>23,I=O+w|0,M^=I<<13|I>>>19,I=M+O|0,b^=I<<18|I>>>14,I=T+x|0,k^=I<<7|I>>>25,I=k+T|0,N^=I<<9|I>>>23,I=N+k|0,x^=I<<13|I>>>19,I=x+N|0,T^=I<<18|I>>>14,I=A+E|0,P^=I<<7|I>>>25,I=P+A|0,S^=I<<9|I>>>23,I=S+P|0,E^=I<<13|I>>>19,I=E+S|0,A^=I<<18|I>>>14,I=F+j|0,C^=I<<7|I>>>25,I=C+F|0,D^=I<<9|I>>>23,I=D+C|0,j^=I<<13|I>>>19,I=j+D|0,F^=I<<18|I>>>14,I=b+C|0,x^=I<<7|I>>>25,I=x+b|0,S^=I<<9|I>>>23,I=S+x|0,C^=I<<13|I>>>19,I=C+S|0,b^=I<<18|I>>>14,I=T+w|0,E^=I<<7|I>>>25,I=E+T|0,D^=I<<9|I>>>23,I=D+E|0,w^=I<<13|I>>>19,I=w+D|0,T^=I<<18|I>>>14,I=A+k|0,j^=I<<7|I>>>25,I=j+A|0,O^=I<<9|I>>>23,I=O+j|0,k^=I<<13|I>>>19,I=k+O|0,A^=I<<18|I>>>14,I=F+P|0,M^=I<<7|I>>>25,I=M+F|0,N^=I<<9|I>>>23,I=N+M|0,P^=I<<13|I>>>19,I=P+N|0,F^=I<<18|I>>>14;b=b+i|0,x=x+a|0,S=S+o|0,C=C+s|0,w=w+c|0,T=T+l|0,E=E+u|0,D=D+d|0,O=O+f|0,k=k+p|0,A=A+m|0,j=j+h|0,M=M+g|0,N=N+_|0,P=P+v|0,F=F+y|0,e[0]=b>>>0&255,e[1]=b>>>8&255,e[2]=b>>>16&255,e[3]=b>>>24&255,e[4]=x>>>0&255,e[5]=x>>>8&255,e[6]=x>>>16&255,e[7]=x>>>24&255,e[8]=S>>>0&255,e[9]=S>>>8&255,e[10]=S>>>16&255,e[11]=S>>>24&255,e[12]=C>>>0&255,e[13]=C>>>8&255,e[14]=C>>>16&255,e[15]=C>>>24&255,e[16]=w>>>0&255,e[17]=w>>>8&255,e[18]=w>>>16&255,e[19]=w>>>24&255,e[20]=T>>>0&255,e[21]=T>>>8&255,e[22]=T>>>16&255,e[23]=T>>>24&255,e[24]=E>>>0&255,e[25]=E>>>8&255,e[26]=E>>>16&255,e[27]=E>>>24&255,e[28]=D>>>0&255,e[29]=D>>>8&255,e[30]=D>>>16&255,e[31]=D>>>24&255,e[32]=O>>>0&255,e[33]=O>>>8&255,e[34]=O>>>16&255,e[35]=O>>>24&255,e[36]=k>>>0&255,e[37]=k>>>8&255,e[38]=k>>>16&255,e[39]=k>>>24&255,e[40]=A>>>0&255,e[41]=A>>>8&255,e[42]=A>>>16&255,e[43]=A>>>24&255,e[44]=j>>>0&255,e[45]=j>>>8&255,e[46]=j>>>16&255,e[47]=j>>>24&255,e[48]=M>>>0&255,e[49]=M>>>8&255,e[50]=M>>>16&255,e[51]=M>>>24&255,e[52]=N>>>0&255,e[53]=N>>>8&255,e[54]=N>>>16&255,e[55]=N>>>24&255,e[56]=P>>>0&255,e[57]=P>>>8&255,e[58]=P>>>16&255,e[59]=P>>>24&255,e[60]=F>>>0&255,e[61]=F>>>8&255,e[62]=F>>>16&255,e[63]=F>>>24&255}function a(e,t,n,r){let i=r[0]|r[1]<<8|r[2]<<16|r[3]<<24,a=n[0]|n[1]<<8|n[2]<<16|n[3]<<24,o=n[4]|n[5]<<8|n[6]<<16|n[7]<<24,s=n[8]|n[9]<<8|n[10]<<16|n[11]<<24,c=n[12]|n[13]<<8|n[14]<<16|n[15]<<24,l=r[4]|r[5]<<8|r[6]<<16|r[7]<<24,u=t[0]|t[1]<<8|t[2]<<16|t[3]<<24,d=t[4]|t[5]<<8|t[6]<<16|t[7]<<24,f=t[8]|t[9]<<8|t[10]<<16|t[11]<<24,p=t[12]|t[13]<<8|t[14]<<16|t[15]<<24,m=r[8]|r[9]<<8|r[10]<<16|r[11]<<24,h=n[16]|n[17]<<8|n[18]<<16|n[19]<<24,g=n[20]|n[21]<<8|n[22]<<16|n[23]<<24,_=n[24]|n[25]<<8|n[26]<<16|n[27]<<24,v=n[28]|n[29]<<8|n[30]<<16|n[31]<<24,y=r[12]|r[13]<<8|r[14]<<16|r[15]<<24,b=i,x=a,S=o,C=s,w=c,T=l,E=u,D=d,O=f,k=p,A=m,j=h,M=g,N=_,P=v,F=y,I;for(let e=0;e<20;e+=2)I=b+M|0,w^=I<<7|I>>>25,I=w+b|0,O^=I<<9|I>>>23,I=O+w|0,M^=I<<13|I>>>19,I=M+O|0,b^=I<<18|I>>>14,I=T+x|0,k^=I<<7|I>>>25,I=k+T|0,N^=I<<9|I>>>23,I=N+k|0,x^=I<<13|I>>>19,I=x+N|0,T^=I<<18|I>>>14,I=A+E|0,P^=I<<7|I>>>25,I=P+A|0,S^=I<<9|I>>>23,I=S+P|0,E^=I<<13|I>>>19,I=E+S|0,A^=I<<18|I>>>14,I=F+j|0,C^=I<<7|I>>>25,I=C+F|0,D^=I<<9|I>>>23,I=D+C|0,j^=I<<13|I>>>19,I=j+D|0,F^=I<<18|I>>>14,I=b+C|0,x^=I<<7|I>>>25,I=x+b|0,S^=I<<9|I>>>23,I=S+x|0,C^=I<<13|I>>>19,I=C+S|0,b^=I<<18|I>>>14,I=T+w|0,E^=I<<7|I>>>25,I=E+T|0,D^=I<<9|I>>>23,I=D+E|0,w^=I<<13|I>>>19,I=w+D|0,T^=I<<18|I>>>14,I=A+k|0,j^=I<<7|I>>>25,I=j+A|0,O^=I<<9|I>>>23,I=O+j|0,k^=I<<13|I>>>19,I=k+O|0,A^=I<<18|I>>>14,I=F+P|0,M^=I<<7|I>>>25,I=M+F|0,N^=I<<9|I>>>23,I=N+M|0,P^=I<<13|I>>>19,I=P+N|0,F^=I<<18|I>>>14;e[0]=b>>>0&255,e[1]=b>>>8&255,e[2]=b>>>16&255,e[3]=b>>>24&255,e[4]=T>>>0&255,e[5]=T>>>8&255,e[6]=T>>>16&255,e[7]=T>>>24&255,e[8]=A>>>0&255,e[9]=A>>>8&255,e[10]=A>>>16&255,e[11]=A>>>24&255,e[12]=F>>>0&255,e[13]=F>>>8&255,e[14]=F>>>16&255,e[15]=F>>>24&255,e[16]=E>>>0&255,e[17]=E>>>8&255,e[18]=E>>>16&255,e[19]=E>>>24&255,e[20]=D>>>0&255,e[21]=D>>>8&255,e[22]=D>>>16&255,e[23]=D>>>24&255,e[24]=O>>>0&255,e[25]=O>>>8&255,e[26]=O>>>16&255,e[27]=O>>>24&255,e[28]=k>>>0&255,e[29]=k>>>8&255,e[30]=k>>>16&255,e[31]=k>>>24&255}export{r as XSalsa20,e as default};
//# sourceMappingURL=index.mjs.map