salty-crypto 0.3.0 → 1.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/browser-demo.html +1 -1
- package/dist/salty-crypto.d.mts +348 -0
- package/dist/salty-crypto.d.ts +36 -87
- package/dist/salty-crypto.global.js +2 -0
- package/dist/salty-crypto.global.js.map +1 -0
- package/dist/salty-crypto.js +2 -1
- package/dist/salty-crypto.js.map +1 -0
- package/dist/salty-crypto.mjs +2 -0
- package/dist/salty-crypto.mjs.map +1 -0
- package/lib/aead/chacha20poly1305.d.ts +2 -0
- package/lib/aead/chacha20poly1305.js +53 -0
- package/lib/aead/chacha20poly1305.js.map +1 -0
- package/lib/aead.d.ts +16 -0
- package/lib/aead.js +18 -0
- package/lib/aead.js.map +1 -0
- package/lib/bytes.d.ts +4 -0
- package/lib/bytes.js +27 -0
- package/lib/bytes.js.map +1 -0
- package/lib/cipher/chacha20.d.ts +4 -0
- package/lib/cipher/chacha20.js +84 -0
- package/lib/cipher/chacha20.js.map +1 -0
- package/lib/cipher.d.ts +9 -0
- package/lib/cipher.js +4 -0
- package/lib/cipher.js.map +1 -0
- package/lib/dh/x25519.d.ts +10 -0
- package/lib/dh/x25519.js +624 -0
- package/lib/dh/x25519.js.map +1 -0
- package/lib/dh.d.ts +11 -0
- package/lib/dh.js +17 -0
- package/lib/dh.js.map +1 -0
- package/lib/hash/blake2s.d.ts +18 -0
- package/lib/hash/blake2s.js +120 -0
- package/lib/hash/blake2s.js.map +1 -0
- package/lib/hash/poly1305.d.ts +18 -0
- package/lib/hash/poly1305.js +376 -0
- package/lib/hash/poly1305.js.map +1 -0
- package/lib/hash.d.ts +14 -0
- package/lib/hash.js +5 -0
- package/lib/hash.js.map +1 -0
- package/lib/hkdf.d.ts +6 -0
- package/lib/hkdf.js +17 -0
- package/lib/hkdf.js.map +1 -0
- package/lib/hmac.d.ts +6 -0
- package/lib/hmac.js +17 -0
- package/lib/hmac.js.map +1 -0
- package/lib/index.d.ts +45 -0
- package/lib/index.js +48 -0
- package/lib/index.js.map +1 -0
- package/lib/io.d.ts +4 -0
- package/lib/io.js +37 -0
- package/lib/io.js.map +1 -0
- package/lib/noise/algorithms.d.ts +15 -0
- package/lib/noise/algorithms.js +10 -0
- package/lib/noise/algorithms.js.map +1 -0
- package/lib/noise/cipherstate.d.ts +14 -0
- package/lib/noise/cipherstate.js +62 -0
- package/lib/noise/cipherstate.js.map +1 -0
- package/lib/noise/handshake.d.ts +52 -0
- package/lib/noise/handshake.js +191 -0
- package/lib/noise/handshake.js.map +1 -0
- package/lib/noise/patterns.d.ts +16 -0
- package/lib/noise/patterns.js +73 -0
- package/lib/noise/patterns.js.map +1 -0
- package/lib/noise/profiles.d.ts +2 -0
- package/lib/noise/profiles.js +11 -0
- package/lib/noise/profiles.js.map +1 -0
- package/lib/noise/rekey.d.ts +3 -0
- package/lib/noise/rekey.js +9 -0
- package/lib/noise/rekey.js.map +1 -0
- package/lib/noise.d.ts +6 -0
- package/lib/noise.js +8 -0
- package/lib/noise.js.map +1 -0
- package/lib/nonce.d.ts +9 -0
- package/lib/nonce.js +25 -0
- package/lib/nonce.js.map +1 -0
- package/lib/random.d.ts +2 -0
- package/lib/random.js +34 -0
- package/lib/random.js.map +1 -0
- package/package.json +38 -22
- package/src/.DS_Store +0 -0
- package/src/aead/chacha20poly1305.ts +7 -7
- package/src/aead.ts +3 -3
- package/src/bytes.ts +1 -1
- package/src/cipher/chacha20.ts +3 -3
- package/src/cipher.ts +3 -3
- package/src/dh/x25519.ts +1 -1
- package/src/dh.ts +3 -3
- package/src/hash/blake2s.ts +2 -2
- package/src/hash/poly1305.ts +2 -2
- package/src/hash.ts +3 -3
- package/src/hkdf.ts +3 -3
- package/src/hmac.ts +3 -3
- package/src/index.ts +23 -23
- package/src/io.ts +3 -0
- package/src/noise/algorithms.ts +7 -7
- package/src/noise/cipherstate.ts +4 -4
- package/src/noise/handshake.ts +8 -8
- package/src/noise/patterns.ts +1 -1
- package/src/noise/profiles.ts +5 -5
- package/src/noise/rekey.ts +3 -3
- package/src/noise.ts +1 -1
- package/src/nonce.ts +1 -1
- package/src/random.ts +2 -3
- package/test/{tests/aead.test.ts → aead.test.ts} +2 -2
- package/test/{tests/blake2.test.ts → blake2.test.ts} +2 -2
- package/test/{tests/chacha20.test.ts → chacha20.test.ts} +2 -2
- package/test/{tests/io.test.ts → io.test.ts} +2 -2
- package/test/{tests/noise.test.ts → noise.test.ts} +2 -2
- package/test/{tests/poly1305.test.ts → poly1305.test.ts} +2 -2
- package/tsup.config.ts +14 -0
- package/rollup.config.js +0 -19
- package/speed.ts +0 -22
- package/test/harness.ts +0 -74
- package/test/tsconfig.json +0 -18
- package/test-vectors/noise-c-basic.txt +0 -19684
- package/test-vectors/snow.txt +0 -10348
- package/watchall +0 -22
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var SaltyCrypto=(()=>{var bt=Object.defineProperty,Ae=Object.defineProperties,xe=Object.getOwnPropertyDescriptor,de=Object.getOwnPropertyDescriptors,Ue=Object.getOwnPropertyNames,ae=Object.getOwnPropertySymbols;var he=Object.prototype.hasOwnProperty,ge=Object.prototype.propertyIsEnumerable;var oe=(i,e,r)=>e in i?bt(i,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[e]=r,Nt=(i,e)=>{for(var r in e||(e={}))he.call(e,r)&&oe(i,r,e[r]);if(ae)for(var r of ae(e))ge.call(e,r)&&oe(i,r,e[r]);return i},Bt=(i,e)=>Ae(i,de(e));var kt=(i=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(i,{get:(e,r)=>(typeof require!="undefined"?require:e)[r]}):i)(function(i){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+i+'" is not supported')});var G=(i,e)=>{for(var r in e)bt(i,r,{get:e[r],enumerable:!0})},be=(i,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ue(e))!he.call(i,n)&&n!==r&&bt(i,n,{get:()=>e[n],enumerable:!(s=xe(e,n))||s.enumerable});return i};var Ke=i=>be(bt({},"__esModule",{value:!0}),i);var Xe={};G(Xe,{AuthenticationFailure:()=>St,BLAKE2s:()=>xt,Bytes:()=>ot,ChaCha20:()=>at,ChaCha20Poly1305_RFC8439:()=>ut,CipherState:()=>rt,Handshake:()=>gt,INTERNALS:()=>Oe,IO:()=>Ht,Noise_25519_ChaChaPoly_BLAKE2s:()=>se,Nonce:()=>ct,PATTERNS:()=>dt,Poly1305:()=>pt,X25519:()=>Gt,_decrypt:()=>Ot,_encrypt:()=>Ft,_randomBytes:()=>ye,isOneWay:()=>ee,lookupPattern:()=>Ut,makeHKDF:()=>$t,makeHMAC:()=>jt,matchPattern:()=>Qt,randomBytes:()=>Xt});var Yt={};G(Yt,{ChaCha20Poly1305_RFC8439:()=>ut});var Lt={};G(Lt,{ChaCha20:()=>at,chacha20_block:()=>_t,chacha20_quarter_round:()=>it});function Kt(i,e){return i<<e|i>>>32-e}function it(i,e,r,s,n){i[e]+=i[r],i[n]^=i[e],i[n]=Kt(i[n],16),i[s]+=i[n],i[r]^=i[s],i[r]=Kt(i[r],12),i[e]+=i[r],i[n]^=i[e],i[n]=Kt(i[n],8),i[s]+=i[n],i[r]^=i[s],i[r]=Kt(i[r],7)}function fe(i,e,r,s){i[0]+=1634760805,i[1]+=857760878,i[2]+=2036477234,i[3]+=1797285236,i[4]+=e.getUint32(0,!0),i[5]+=e.getUint32(4,!0),i[6]+=e.getUint32(8,!0),i[7]+=e.getUint32(12,!0),i[8]+=e.getUint32(16,!0),i[9]+=e.getUint32(20,!0),i[10]+=e.getUint32(24,!0),i[11]+=e.getUint32(28,!0),i[12]+=r,i[13]+=s.getUint32(0,!0),i[14]+=s.getUint32(4,!0),i[15]+=s.getUint32(8,!0)}function _t(i,e,r){let s=new Uint32Array(16);fe(s,i,e,r);for(let n=0;n<20;n+=2)it(s,0,4,8,12),it(s,1,5,9,13),it(s,2,6,10,14),it(s,3,7,11,15),it(s,0,5,10,15),it(s,1,6,11,12),it(s,2,7,8,13),it(s,3,4,9,14);return fe(s,i,e,r),s}function Ee(i){let e=new DataView(new ArrayBuffer(at.NONCEBYTES));return e.setUint32(0,i.extra,!0),e.setUint32(4,i.lo,!0),e.setUint32(8,i.hi,!0),e}var at={NAME:"chacha20",KEYBYTES:32,NONCEBYTES:12,BLOCKBYTES:64,stream_xor(i,e,r,s,n=0,o=r.byteLength){let a=Ee(e),f=o>>6,c=o&63;for(let y=0;y<f;y++){let p=_t(i,n+y,a);for(let u=0;u<64;u++)s[(y<<6)+u]=r[(y<<6)+u]^p[u>>2]>>((u&3)<<3)}if(c!==0){let y=_t(i,n+f,a);for(let p=0;p<c;p++)s[(f<<6)+p]=r[(f<<6)+p]^y[p>>2]>>((p&3)<<3)}}};var Dt={};G(Dt,{Poly1305:()=>pt});var $,pt=($=class{constructor(e,r){this.buffer=new Uint8Array(16);this.r=new Uint16Array(10);this.h=new Uint16Array(10);this.pad=new Uint16Array(8);this.leftover=0;this.fin=0;if(!e)throw new Error("Poly1305: key required");if((r!=null?r:$.OUTBYTES)!==$.OUTBYTES)throw new Error("Poly1305: outlen != OUTBYTES");let s=e[0]&255|(e[1]&255)<<8;this.r[0]=s&8191;let n=e[2]&255|(e[3]&255)<<8;this.r[1]=(s>>>13|n<<3)&8191;let o=e[4]&255|(e[5]&255)<<8;this.r[2]=(n>>>10|o<<6)&7939;let a=e[6]&255|(e[7]&255)<<8;this.r[3]=(o>>>7|a<<9)&8191;let f=e[8]&255|(e[9]&255)<<8;this.r[4]=(a>>>4|f<<12)&255,this.r[5]=f>>>1&8190;let c=e[10]&255|(e[11]&255)<<8;this.r[6]=(f>>>14|c<<2)&8191;let y=e[12]&255|(e[13]&255)<<8;this.r[7]=(c>>>11|y<<5)&8065;let p=e[14]&255|(e[15]&255)<<8;this.r[8]=(y>>>8|p<<8)&8191,this.r[9]=p>>>5&127,this.pad[0]=e[16]&255|(e[17]&255)<<8,this.pad[1]=e[18]&255|(e[19]&255)<<8,this.pad[2]=e[20]&255|(e[21]&255)<<8,this.pad[3]=e[22]&255|(e[23]&255)<<8,this.pad[4]=e[24]&255|(e[25]&255)<<8,this.pad[5]=e[26]&255|(e[27]&255)<<8,this.pad[6]=e[28]&255|(e[29]&255)<<8,this.pad[7]=e[30]&255|(e[31]&255)<<8}static digest(e,r,s){let n=new $(r,s);return n.update(e),n.final()}blocks(e,r,s){let n=this.fin?0:2048,o=this.h[0],a=this.h[1],f=this.h[2],c=this.h[3],y=this.h[4],p=this.h[5],u=this.h[6],d=this.h[7],l=this.h[8],A=this.h[9],k=this.r[0],B=this.r[1],b=this.r[2],K=this.r[3],_=this.r[4],L=this.r[5],D=this.r[6],C=this.r[7],Y=this.r[8],F=this.r[9];for(;s>=16;){let q=e[r+0]&255|(e[r+1]&255)<<8;o+=q&8191;let j=e[r+2]&255|(e[r+3]&255)<<8;a+=(q>>>13|j<<3)&8191;let Q=e[r+4]&255|(e[r+5]&255)<<8;f+=(j>>>10|Q<<6)&8191;let J=e[r+6]&255|(e[r+7]&255)<<8;c+=(Q>>>7|J<<9)&8191;let tt=e[r+8]&255|(e[r+9]&255)<<8;y+=(J>>>4|tt<<12)&8191,p+=tt>>>1&8191;let nt=e[r+10]&255|(e[r+11]&255)<<8;u+=(tt>>>14|nt<<2)&8191;let ft=e[r+12]&255|(e[r+13]&255)<<8;d+=(nt>>>11|ft<<5)&8191;let yt=e[r+14]&255|(e[r+15]&255)<<8;l+=(ft>>>8|yt<<8)&8191,A+=yt>>>5|n;let m=0,U=m;U+=o*k,U+=a*(5*F),U+=f*(5*Y),U+=c*(5*C),U+=y*(5*D),m=U>>>13,U&=8191,U+=p*(5*L),U+=u*(5*_),U+=d*(5*K),U+=l*(5*b),U+=A*(5*B),m+=U>>>13,U&=8191;let g=m;g+=o*B,g+=a*k,g+=f*(5*F),g+=c*(5*Y),g+=y*(5*C),m=g>>>13,g&=8191,g+=p*(5*D),g+=u*(5*L),g+=d*(5*_),g+=l*(5*K),g+=A*(5*b),m+=g>>>13,g&=8191;let E=m;E+=o*b,E+=a*B,E+=f*k,E+=c*(5*F),E+=y*(5*Y),m=E>>>13,E&=8191,E+=p*(5*C),E+=u*(5*D),E+=d*(5*L),E+=l*(5*_),E+=A*(5*K),m+=E>>>13,E&=8191;let w=m;w+=o*K,w+=a*b,w+=f*B,w+=c*k,w+=y*(5*F),m=w>>>13,w&=8191,w+=p*(5*Y),w+=u*(5*C),w+=d*(5*D),w+=l*(5*L),w+=A*(5*_),m+=w>>>13,w&=8191;let S=m;S+=o*_,S+=a*K,S+=f*b,S+=c*B,S+=y*k,m=S>>>13,S&=8191,S+=p*(5*F),S+=u*(5*Y),S+=d*(5*C),S+=l*(5*D),S+=A*(5*L),m+=S>>>13,S&=8191;let M=m;M+=o*L,M+=a*_,M+=f*K,M+=c*b,M+=y*B,m=M>>>13,M&=8191,M+=p*k,M+=u*(5*F),M+=d*(5*Y),M+=l*(5*C),M+=A*(5*D),m+=M>>>13,M&=8191;let T=m;T+=o*D,T+=a*L,T+=f*_,T+=c*K,T+=y*b,m=T>>>13,T&=8191,T+=p*B,T+=u*k,T+=d*(5*F),T+=l*(5*Y),T+=A*(5*C),m+=T>>>13,T&=8191;let P=m;P+=o*C,P+=a*D,P+=f*L,P+=c*_,P+=y*K,m=P>>>13,P&=8191,P+=p*b,P+=u*B,P+=d*k,P+=l*(5*F),P+=A*(5*Y),m+=P>>>13,P&=8191;let H=m;H+=o*Y,H+=a*C,H+=f*D,H+=c*L,H+=y*_,m=H>>>13,H&=8191,H+=p*K,H+=u*b,H+=d*B,H+=l*k,H+=A*(5*F),m+=H>>>13,H&=8191;let N=m;N+=o*F,N+=a*Y,N+=f*C,N+=c*D,N+=y*L,m=N>>>13,N&=8191,N+=p*_,N+=u*K,N+=d*b,N+=l*B,N+=A*k,m+=N>>>13,N&=8191,m=(m<<2)+m|0,m=m+U|0,U=m&8191,m=m>>>13,g+=m,o=U,a=g,f=E,c=w,y=S,p=M,u=T,d=P,l=H,A=N,r+=16,s-=16}this.h[0]=o,this.h[1]=a,this.h[2]=f,this.h[3]=c,this.h[4]=y,this.h[5]=p,this.h[6]=u,this.h[7]=d,this.h[8]=l,this.h[9]=A}final(e){if(e||(e=new Uint8Array($.OUTBYTES)),this.leftover){let a=this.leftover;for(this.buffer[a++]=1;a<16;a++)this.buffer[a]=0;this.fin=1,this.blocks(this.buffer,0,16)}let r=this.h[1]>>>13;this.h[1]&=8191;for(let a=2;a<10;a++)this.h[a]+=r,r=this.h[a]>>>13,this.h[a]&=8191;this.h[0]+=r*5,r=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=r,r=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=r;let s=new Uint16Array(10);s[0]=this.h[0]+5,r=s[0]>>>13,s[0]&=8191;for(let a=1;a<10;a++)s[a]=this.h[a]+r,r=s[a]>>>13,s[a]&=8191;s[9]-=8192;let n=(r^1)-1;for(let a=0;a<10;a++)s[a]&=n;n=~n;for(let a=0;a<10;a++)this.h[a]=this.h[a]&n|s[a];this.h[0]=(this.h[0]|this.h[1]<<13)&65535,this.h[1]=(this.h[1]>>>3|this.h[2]<<10)&65535,this.h[2]=(this.h[2]>>>6|this.h[3]<<7)&65535,this.h[3]=(this.h[3]>>>9|this.h[4]<<4)&65535,this.h[4]=(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14)&65535,this.h[5]=(this.h[6]>>>2|this.h[7]<<11)&65535,this.h[6]=(this.h[7]>>>5|this.h[8]<<8)&65535,this.h[7]=(this.h[8]>>>8|this.h[9]<<5)&65535;let o=this.h[0]+this.pad[0];this.h[0]=o&65535;for(let a=1;a<8;a++)o=(this.h[a]+this.pad[a]|0)+(o>>>16)|0,this.h[a]=o&65535;return e[0]=this.h[0]>>>0&255,e[1]=this.h[0]>>>8&255,e[2]=this.h[1]>>>0&255,e[3]=this.h[1]>>>8&255,e[4]=this.h[2]>>>0&255,e[5]=this.h[2]>>>8&255,e[6]=this.h[3]>>>0&255,e[7]=this.h[3]>>>8&255,e[8]=this.h[4]>>>0&255,e[9]=this.h[4]>>>8&255,e[10]=this.h[5]>>>0&255,e[11]=this.h[5]>>>8&255,e[12]=this.h[6]>>>0&255,e[13]=this.h[6]>>>8&255,e[14]=this.h[7]>>>0&255,e[15]=this.h[7]>>>8&255,e}update(e,r=0,s=e.byteLength){if(this.leftover){let n=16-this.leftover;n>s&&(n=s);for(let o=0;o<n;o++)this.buffer[this.leftover+o]=e[r+o];if(s-=n,r+=n,this.leftover+=n,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(s>=16){let n=s-s%16;this.blocks(e,r,n),r+=n,s-=n}if(s){for(let n=0;n<s;n++)this.buffer[this.leftover+n]=e[r+n];this.leftover+=s}}},$.NAME="Poly1305",$.KEYBYTES=32,$.OUTBYTES=16,$.BLOCKLEN=16,$);var ot={};G(ot,{EMPTY:()=>wt,append:()=>W,equal:()=>Ct,xor:()=>Et});function we(i,e,r){let s=0;for(let n=0;n<r;n++)s|=i[n]^e[n];return(1&s-1>>>8)-1}function Ct(i,e,r){return we(i,e,r)===0}function Et(i,e){let r=Math.min(i.byteLength,e.byteLength),s=new Uint8Array(r);for(let n=0;n<r;n++)s[n]=i[n]^e[n];return s}function W(i,e){let r=new Uint8Array(i.byteLength+e.byteLength);return r.set(i,0),r.set(e,i.byteLength),r}var wt=new Uint8Array(0);var Se=new Uint8Array(16);function le(i,e){let r=e&15;r!==0&&i.update(Se,0,16-r)}function ce(i,e,r,s,n,o){let a=new Uint8Array(pt.KEYBYTES);at.stream_xor(e,r,a,a,0);let f=new pt(a);o!==void 0&&(f.update(o,0,o.byteLength),le(f,o.byteLength)),f.update(s,0,n),le(f,n);let c=new Uint8Array(16),y=new DataView(c.buffer);o!==void 0&&y.setUint32(0,o.byteLength,!0),y.setUint32(8,n,!0),f.update(c,0,c.byteLength),f.final(i)}var ut={NAME:"ChaChaPoly",KEYBYTES:32,NONCEBYTES:12,TAGBYTES:16,encrypt_detached(i,e,r,s,n,o,a){at.stream_xor(n,o,i,e,1,r),ce(s,n,o,e,r,a)},encrypt:Ft,decrypt_detached(i,e,r,s,n,o,a){let f=new Uint8Array(this.TAGBYTES);ce(f,n,o,e,r,a);let c=Ct(f,s,f.byteLength);return c&&at.stream_xor(n,o,e,i,1,r),c},decrypt:Ot};var St=class extends Error{};function Ft(i,e,r,s){let n=new Uint8Array(i.byteLength+this.TAGBYTES);return this.encrypt_detached(i,n,i.byteLength,n.subarray(i.byteLength),e,r,s),n}function Ot(i,e,r,s){let n=new Uint8Array(i.byteLength-this.TAGBYTES);if(!this.decrypt_detached(n,i,n.byteLength,i.subarray(n.byteLength),e,r,s))throw new St("AEAD authentication failed");return n}var ye=(()=>{if(crypto&&crypto.getRandomValues)return(e,r)=>{for(let s=0;s<r;s+=65536)crypto.getRandomValues(e.subarray(s,s+Math.min(r-s,65536)))};if(typeof kt!="undefined"){let i=kt("crypto");if(i&&i.randomBytes)return(e,r)=>e.set(i.randomBytes(r))}throw new Error("No usable randomness source found")})();function Xt(i){let e=new Uint8Array(i);return ye(e,i),e}var zt={};G(zt,{crypto_scalarmult:()=>Vt,crypto_scalarmult_BYTES:()=>Me,crypto_scalarmult_SCALARBYTES:()=>Te,crypto_scalarmult_base:()=>ue,scalarMult:()=>lt,scalarMultBase:()=>vt});var Me=32,Te=32;function et(){return new Float64Array(16)}var pe=new Uint8Array(32);pe[0]=9;var Rt=et();Rt[0]=56129;Rt[1]=1;function It(i){let e=1;for(let r=0;r<16;r++){let s=i[r]+e+65535;e=Math.floor(s/65536),i[r]=s-e*65536}i[0]+=e-1+37*(e-1)}function mt(i,e,r){let s=~(r-1);for(let n=0;n<16;n++){let o=s&(i[n]^e[n]);i[n]^=o,e[n]^=o}}function Pe(i,e){let r=et(),s=et();for(let n=0;n<16;n++)s[n]=e[n];It(s),It(s),It(s);for(let n=0;n<2;n++){r[0]=s[0]-65517;for(let a=1;a<15;a++)r[a]=s[a]-65535-(r[a-1]>>16&1),r[a-1]&=65535;r[15]=s[15]-32767-(r[14]>>16&1);let o=r[15]>>16&1;r[14]&=65535,mt(s,r,1-o)}for(let n=0;n<16;n++)i[2*n]=s[n]&255,i[2*n+1]=s[n]>>8}function He(i,e){for(let r=0;r<16;r++)i[r]=e[2*r]+(e[2*r+1]<<8);i[15]&=32767}function Mt(i,e,r){for(let s=0;s<16;s++)i[s]=e[s]+r[s]}function Tt(i,e,r){for(let s=0;s<16;s++)i[s]=e[s]-r[s]}function st(i,e,r){let s=0,n=0,o=0,a=0,f=0,c=0,y=0,p=0,u=0,d=0,l=0,A=0,k=0,B=0,b=0,K=0,_=0,L=0,D=0,C=0,Y=0,F=0,q=0,j=0,Q=0,J=0,tt=0,nt=0,ft=0,yt=0,m=0,U=r[0],g=r[1],E=r[2],w=r[3],S=r[4],M=r[5],T=r[6],P=r[7],H=r[8],N=r[9],O=r[10],X=r[11],I=r[12],R=r[13],V=r[14],v=r[15],t=e[0];s+=t*U,n+=t*g,o+=t*E,a+=t*w,f+=t*S,c+=t*M,y+=t*T,p+=t*P,u+=t*H,d+=t*N,l+=t*O,A+=t*X,k+=t*I,B+=t*R,b+=t*V,K+=t*v,t=e[1],n+=t*U,o+=t*g,a+=t*E,f+=t*w,c+=t*S,y+=t*M,p+=t*T,u+=t*P,d+=t*H,l+=t*N,A+=t*O,k+=t*X,B+=t*I,b+=t*R,K+=t*V,_+=t*v,t=e[2],o+=t*U,a+=t*g,f+=t*E,c+=t*w,y+=t*S,p+=t*M,u+=t*T,d+=t*P,l+=t*H,A+=t*N,k+=t*O,B+=t*X,b+=t*I,K+=t*R,_+=t*V,L+=t*v,t=e[3],a+=t*U,f+=t*g,c+=t*E,y+=t*w,p+=t*S,u+=t*M,d+=t*T,l+=t*P,A+=t*H,k+=t*N,B+=t*O,b+=t*X,K+=t*I,_+=t*R,L+=t*V,D+=t*v,t=e[4],f+=t*U,c+=t*g,y+=t*E,p+=t*w,u+=t*S,d+=t*M,l+=t*T,A+=t*P,k+=t*H,B+=t*N,b+=t*O,K+=t*X,_+=t*I,L+=t*R,D+=t*V,C+=t*v,t=e[5],c+=t*U,y+=t*g,p+=t*E,u+=t*w,d+=t*S,l+=t*M,A+=t*T,k+=t*P,B+=t*H,b+=t*N,K+=t*O,_+=t*X,L+=t*I,D+=t*R,C+=t*V,Y+=t*v,t=e[6],y+=t*U,p+=t*g,u+=t*E,d+=t*w,l+=t*S,A+=t*M,k+=t*T,B+=t*P,b+=t*H,K+=t*N,_+=t*O,L+=t*X,D+=t*I,C+=t*R,Y+=t*V,F+=t*v,t=e[7],p+=t*U,u+=t*g,d+=t*E,l+=t*w,A+=t*S,k+=t*M,B+=t*T,b+=t*P,K+=t*H,_+=t*N,L+=t*O,D+=t*X,C+=t*I,Y+=t*R,F+=t*V,q+=t*v,t=e[8],u+=t*U,d+=t*g,l+=t*E,A+=t*w,k+=t*S,B+=t*M,b+=t*T,K+=t*P,_+=t*H,L+=t*N,D+=t*O,C+=t*X,Y+=t*I,F+=t*R,q+=t*V,j+=t*v,t=e[9],d+=t*U,l+=t*g,A+=t*E,k+=t*w,B+=t*S,b+=t*M,K+=t*T,_+=t*P,L+=t*H,D+=t*N,C+=t*O,Y+=t*X,F+=t*I,q+=t*R,j+=t*V,Q+=t*v,t=e[10],l+=t*U,A+=t*g,k+=t*E,B+=t*w,b+=t*S,K+=t*M,_+=t*T,L+=t*P,D+=t*H,C+=t*N,Y+=t*O,F+=t*X,q+=t*I,j+=t*R,Q+=t*V,J+=t*v,t=e[11],A+=t*U,k+=t*g,B+=t*E,b+=t*w,K+=t*S,_+=t*M,L+=t*T,D+=t*P,C+=t*H,Y+=t*N,F+=t*O,q+=t*X,j+=t*I,Q+=t*R,J+=t*V,tt+=t*v,t=e[12],k+=t*U,B+=t*g,b+=t*E,K+=t*w,_+=t*S,L+=t*M,D+=t*T,C+=t*P,Y+=t*H,F+=t*N,q+=t*O,j+=t*X,Q+=t*I,J+=t*R,tt+=t*V,nt+=t*v,t=e[13],B+=t*U,b+=t*g,K+=t*E,_+=t*w,L+=t*S,D+=t*M,C+=t*T,Y+=t*P,F+=t*H,q+=t*N,j+=t*O,Q+=t*X,J+=t*I,tt+=t*R,nt+=t*V,ft+=t*v,t=e[14],b+=t*U,K+=t*g,_+=t*E,L+=t*w,D+=t*S,C+=t*M,Y+=t*T,F+=t*P,q+=t*H,j+=t*N,Q+=t*O,J+=t*X,tt+=t*I,nt+=t*R,ft+=t*V,yt+=t*v,t=e[15],K+=t*U,_+=t*g,L+=t*E,D+=t*w,C+=t*S,Y+=t*M,F+=t*T,q+=t*P,j+=t*H,Q+=t*N,J+=t*O,tt+=t*X,nt+=t*I,ft+=t*R,yt+=t*V,m+=t*v,s+=38*_,n+=38*L,o+=38*D,a+=38*C,f+=38*Y,c+=38*F,y+=38*q,p+=38*j,u+=38*Q,d+=38*J,l+=38*tt,A+=38*nt,k+=38*ft,B+=38*yt,b+=38*m;let h=1;t=s+h+65535,h=Math.floor(t/65536),s=t-h*65536,t=n+h+65535,h=Math.floor(t/65536),n=t-h*65536,t=o+h+65535,h=Math.floor(t/65536),o=t-h*65536,t=a+h+65535,h=Math.floor(t/65536),a=t-h*65536,t=f+h+65535,h=Math.floor(t/65536),f=t-h*65536,t=c+h+65535,h=Math.floor(t/65536),c=t-h*65536,t=y+h+65535,h=Math.floor(t/65536),y=t-h*65536,t=p+h+65535,h=Math.floor(t/65536),p=t-h*65536,t=u+h+65535,h=Math.floor(t/65536),u=t-h*65536,t=d+h+65535,h=Math.floor(t/65536),d=t-h*65536,t=l+h+65535,h=Math.floor(t/65536),l=t-h*65536,t=A+h+65535,h=Math.floor(t/65536),A=t-h*65536,t=k+h+65535,h=Math.floor(t/65536),k=t-h*65536,t=B+h+65535,h=Math.floor(t/65536),B=t-h*65536,t=b+h+65535,h=Math.floor(t/65536),b=t-h*65536,t=K+h+65535,h=Math.floor(t/65536),K=t-h*65536,s+=h-1+37*(h-1),h=1,t=s+h+65535,h=Math.floor(t/65536),s=t-h*65536,t=n+h+65535,h=Math.floor(t/65536),n=t-h*65536,t=o+h+65535,h=Math.floor(t/65536),o=t-h*65536,t=a+h+65535,h=Math.floor(t/65536),a=t-h*65536,t=f+h+65535,h=Math.floor(t/65536),f=t-h*65536,t=c+h+65535,h=Math.floor(t/65536),c=t-h*65536,t=y+h+65535,h=Math.floor(t/65536),y=t-h*65536,t=p+h+65535,h=Math.floor(t/65536),p=t-h*65536,t=u+h+65535,h=Math.floor(t/65536),u=t-h*65536,t=d+h+65535,h=Math.floor(t/65536),d=t-h*65536,t=l+h+65535,h=Math.floor(t/65536),l=t-h*65536,t=A+h+65535,h=Math.floor(t/65536),A=t-h*65536,t=k+h+65535,h=Math.floor(t/65536),k=t-h*65536,t=B+h+65535,h=Math.floor(t/65536),B=t-h*65536,t=b+h+65535,h=Math.floor(t/65536),b=t-h*65536,t=K+h+65535,h=Math.floor(t/65536),K=t-h*65536,s+=h-1+37*(h-1),i[0]=s,i[1]=n,i[2]=o,i[3]=a,i[4]=f,i[5]=c,i[6]=y,i[7]=p,i[8]=u,i[9]=d,i[10]=l,i[11]=A,i[12]=k,i[13]=B,i[14]=b,i[15]=K}function At(i,e){st(i,e,e)}function Ne(i,e){let r=et();for(let s=0;s<16;s++)r[s]=e[s];for(let s=253;s>=0;s--)At(r,r),s!==2&&s!==4&&st(r,r,e);for(let s=0;s<16;s++)i[s]=r[s]}function Vt(i,e,r){let s=new Uint8Array(32),n=new Float64Array(80),o=et(),a=et(),f=et(),c=et(),y=et(),p=et();for(let l=0;l<31;l++)s[l]=e[l];s[31]=e[31]&127|64,s[0]&=248,He(n,r);for(let l=0;l<16;l++)a[l]=n[l],c[l]=o[l]=f[l]=0;o[0]=c[0]=1;for(let l=254;l>=0;--l){let A=s[l>>>3]>>>(l&7)&1;mt(o,a,A),mt(f,c,A),Mt(y,o,f),Tt(o,o,f),Mt(f,a,c),Tt(a,a,c),At(c,y),At(p,o),st(o,f,o),st(f,a,y),Mt(y,o,f),Tt(o,o,f),At(a,o),Tt(f,c,p),st(o,f,Rt),Mt(o,o,c),st(f,f,o),st(o,c,p),st(c,a,n),At(a,y),mt(o,a,A),mt(f,c,A)}for(let l=0;l<16;l++)n[l+16]=o[l],n[l+32]=f[l],n[l+48]=a[l],n[l+64]=c[l];let u=n.subarray(32),d=n.subarray(16);Ne(u,u),st(d,d,u),Pe(i,d)}function ue(i,e){Vt(i,e,pe)}function lt(i,e){if(i.length!==32)throw new Error("bad n size");if(e.length!==32)throw new Error("bad p size");let r=new Uint8Array(32);return Vt(r,i,e),r}function vt(i){if(i.length!==32)throw new Error("bad n size");let e=new Uint8Array(32);return ue(e,i),e}lt.scalarLength=32;lt.groupElementLength=32;var Gt={NAME:"25519",DHLEN:lt.groupElementLength,generateKeypair(){let i=Xt(lt.scalarLength);return{public:vt(i),secret:i}},dh(i,e){return lt(i.secret,e)}};var qt={};G(qt,{BLAKE2s:()=>xt});function Pt(i,e){return i>>>e|i<<32-e}function ht(i,e,r,s,n,o,a){i[e]=i[e]+i[r]+o,i[n]=Pt(i[n]^i[e],16),i[s]=i[s]+i[n],i[r]=Pt(i[r]^i[s],12),i[e]=i[e]+i[r]+a,i[n]=Pt(i[n]^i[e],8),i[s]=i[s]+i[n],i[r]=Pt(i[r]^i[s],7)}var me=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Be=Uint8Array.from([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0]);function z(i,e){return Be[(i<<4)+e]}var Z,xt=(Z=class{constructor(e,r=Z.OUTBYTES){this.outlen=r;this.b=new Uint8Array(64);this.bv=new DataView(this.b.buffer);this.h=Uint32Array.from(me);this.t=new Uint32Array(2);this.c=0;var n;let s=(n=e==null?void 0:e.byteLength)!=null?n:0;if(r==0||r>32||s>32)throw new Error("illegal BLAKE2s parameter length(s)");this.h[0]^=16842752^s<<8^r,e&&s>0&&(this.update(e),this.c=64)}static digest(e,r,s){let n=new Z(r,s);return n.update(e),n.final()}update(e,r=0,s=e.byteLength){for(let n=r;n<r+s;n++)this.c==64&&(this.t[0]+=this.c,this.t[0]<this.c&&this.t[1]++,this.compress(!1),this.c=0),this.b[this.c++]=e[n]}final(e){for(this.t[0]+=this.c,this.t[0]<this.c&&this.t[1]++;this.c<64;)this.b[this.c++]=0;this.compress(!0),e===void 0&&(e=new Uint8Array(this.outlen));for(let r=0;r<this.outlen;r++)e[r]=this.h[r>>2]>>8*(r&3)&255;return e}compress(e){let r=new Uint32Array(16),s=new Uint32Array(16);for(let n=0;n<8;n++)r[n]=this.h[n],r[n+8]=me[n];r[12]^=this.t[0],r[13]^=this.t[1],e&&(r[14]=~r[14]);for(let n=0;n<16;n++)s[n]=this.bv.getUint32(n<<2,!0);for(let n=0;n<10;n++)ht(r,0,4,8,12,s[z(n,0)],s[z(n,1)]),ht(r,1,5,9,13,s[z(n,2)],s[z(n,3)]),ht(r,2,6,10,14,s[z(n,4)],s[z(n,5)]),ht(r,3,7,11,15,s[z(n,6)],s[z(n,7)]),ht(r,0,5,10,15,s[z(n,8)],s[z(n,9)]),ht(r,1,6,11,12,s[z(n,10)],s[z(n,11)]),ht(r,2,7,8,13,s[z(n,12)],s[z(n,13)]),ht(r,3,4,9,14,s[z(n,14)],s[z(n,15)]);for(let n=0;n<8;n++)this.h[n]^=r[n]^r[n+8]}},Z.NAME="BLAKE2s",Z.KEYBYTES=32,Z.OUTBYTES=32,Z.BLOCKLEN=64,Z);function $t(i){function e(r,s,n){let o=i(r,s),a=i(o,Uint8Array.from([1])),f=i(o,W(a,Uint8Array.from([2])));switch(n){case 2:return[a,f];case 3:return[a,f,i(o,W(f,Uint8Array.from([3])))]}}return e}function jt(i){let e=new Uint8Array(i.BLOCKLEN);e.fill(54);let r=new Uint8Array(i.BLOCKLEN);r.fill(92);let s=(n,o)=>{let a=n.byteLength>i.BLOCKLEN?i.digest(n):n,f=W(a,new Uint8Array(i.BLOCKLEN-a.byteLength));return i.digest(W(Et(f,r),i.digest(W(Et(f,e),o))))};return s.NAME="HMAC-"+i.NAME,s}var Ht={};G(Ht,{fromBase64:()=>De,fromHex:()=>_e,toBase64:()=>Le,toHex:()=>ke});function ke(i){let e="";return i.forEach(r=>{e=e+"0123456789abcdef"[r>>4],e=e+"0123456789abcdef"[r&15]}),e}function _e(i){if(i=i.replace(/[^0-9a-fA-F]/g,"").toLowerCase(),i.length%2)throw new Error("Hex input contains an odd number of digits");let e=Math.floor(i.length/2),r=new Uint8Array(e);for(let s=0;s<e;s++)r[s]=parseInt(i.substring(2*s,2*s+2),16);return r}function Le(i,e=!0){let r="";i.forEach(n=>r=r+String.fromCharCode(n));let s=btoa(r);return e||(s=s.replace(/=/g,"")),s}function De(i){let e=atob(i),r=new Uint8Array(e.length);for(let s=0;s<e.length;s++)r[s]=e.charCodeAt(s);return r}var Wt={};G(Wt,{matchPattern:()=>Qt});function Qt(i,e){let s=new RegExp(`^Noise_([A-Za-z0-9+]+)_${i.dh.NAME}_${i.aead.NAME}_${i.hash.NAME}$`).exec(e);return s===null?null:s[1]}var te={};G(te,{CipherState:()=>rt});var ct=class i{constructor(e=0,r=0,s=0){this.lo=e;this.hi=r;this.extra=s}increment(){let e=this.lo,r=e+1|0;this.lo=r,r<e&&(this.hi=this.hi+1|0)}reset(e=0,r=0,s=0){this.lo=e,this.hi=r,this.extra=s}static get MAX(){return new i(4294967295,4294967295)}};var Jt={};G(Jt,{makeRekey:()=>Zt});function Zt(i){return e=>new DataView(i.encrypt(new Uint8Array(32),e,ct.MAX).buffer)}var rt=class{constructor(e,r){this.algorithms=e;this.view=null;this.nonce=new ct;r!==void 0&&(this.view=new DataView(r.buffer)),this.maxPayload=65535-this.algorithms.aead.TAGBYTES}encrypt(e,r){if(this.view===null)return e;let s=this.algorithms.aead.encrypt(e,this.view,this.nonce,r);return this.nonce.increment(),s}decrypt(e,r){if(this.view===null)return e;let s=this.algorithms.aead.decrypt(e,this.view,this.nonce,r);return this.nonce.increment(),s}rekey(){var e;this.view!==null&&(this.view=((e=this.algorithms.rekey)!=null?e:Zt(this.algorithms.aead))(this.view))}encrypt_large(e){if(e.byteLength>this.maxPayload){let r=[];for(;e.byteLength>this.maxPayload;)r.push(this.encrypt(e.subarray(0,this.maxPayload))),e=e.subarray(this.maxPayload);return e.byteLength>0&&r.push(this.encrypt(e)),r}else return[this.encrypt(e)]}decrypt_large(e){let r=e.reduce((o,a)=>o+a.byteLength-this.algorithms.aead.TAGBYTES,0),s=new Uint8Array(r),n=0;return e.forEach(o=>{let a=this.decrypt(o);s.set(a,n),n+=a.byteLength}),s}};var ie={};G(ie,{Handshake:()=>gt});var re={};G(re,{PATTERNS:()=>dt,isOneWay:()=>ee,lookupPattern:()=>Ut});var dt={};function x(i,e,r,s){let n={name:i,baseName:i,messages:e,initiatorPreMessage:r,responderPreMessage:s};dt[n.name]=n}x("I1K1",[["e","s"],["e","ee","es"],["se"]],[],["s"]);x("I1K",[["e","es","s"],["e","ee"],["se"]],[],["s"]);x("I1N",[["e","s"],["e","ee"],["se"]],[],[]);x("I1X1",[["e","s"],["e","ee","s"],["se","es"]],[],[]);x("I1X",[["e","s"],["e","ee","s","es"],["se"]],[],[]);x("IK1",[["e","s"],["e","ee","se","es"]],[],["s"]);x("IK",[["e","es","s","ss"],["e","ee","se"]],[],["s"]);x("IN",[["e","s"],["e","ee","se"]],[],[]);x("IX1",[["e","s"],["e","ee","se","s"],["es"]],[],[]);x("IX",[["e","s"],["e","ee","se","s","es"]],[],[]);x("K1K1",[["e"],["e","ee","es"],["se"]],["s"],["s"]);x("K1K",[["e","es"],["e","ee"],["se"]],["s"],["s"]);x("K1N",[["e"],["e","ee"],["se"]],["s"],[]);x("K1X1",[["e"],["e","ee","s"],["se","es"]],["s"],[]);x("K1X",[["e"],["e","ee","s","es"],["se"]],["s"],[]);x("K",[["e","es","ss"]],["s"],["s"]);x("KK1",[["e"],["e","ee","se","es"]],["s"],["s"]);x("KK",[["e","es","ss"],["e","ee","se"]],["s"],["s"]);x("KN",[["e"],["e","ee","se"]],["s"],[]);x("KX1",[["e"],["e","ee","se","s"],["es"]],["s"],[]);x("KX",[["e"],["e","ee","se","s","es"]],["s"],[]);x("N",[["e","es"]],[],["s"]);x("NK1",[["e"],["e","ee","es"]],[],["s"]);x("NK",[["e","es"],["e","ee"]],[],["s"]);x("NN",[["e"],["e","ee"]],[],[]);x("NX1",[["e"],["e","ee","s"],["es"]],[],[]);x("NX",[["e"],["e","ee","s","es"]],[],[]);x("X1K1",[["e"],["e","ee","es"],["s"],["se"]],[],["s"]);x("X1K",[["e","es"],["e","ee"],["s"],["se"]],[],["s"]);x("X1N",[["e"],["e","ee"],["s"],["se"]],[],[]);x("X1X1",[["e"],["e","ee","s"],["es","s"],["se"]],[],[]);x("X1X",[["e"],["e","ee","s","es"],["s"],["se"]],[],[]);x("X",[["e","es","s","ss"]],[],["s"]);x("XK1",[["e"],["e","ee","es"],["s","se"]],[],["s"]);x("XK",[["e","es"],["e","ee"],["s","se"]],[],["s"]);x("XN",[["e"],["e","ee"],["s","se"]],[],[]);x("XX1",[["e"],["e","ee","s"],["es","s","se"]],[],[]);x("XX",[["e"],["e","ee","s","es"],["s","se"]],[],[]);function ee(i){return i.baseName.length===1}var Ce=/^([NKX]|[NKXI]1?[NKX]1?)([a-z][a-z0-9]*(\+[a-z][a-z0-9]*)*)?$/,Ye=/^psk([0-9]+)$/;function Ut(i){var n,o,a;let e=Ce.exec(i);if(e===null)return null;let r=(o=(n=e[2])==null?void 0:n.split("+"))!=null?o:[],s=(a=dt[e[1]])!=null?a:null;return s?(r.forEach(f=>s=s&&Fe(s,f)),s&&Bt(Nt({},s),{name:i})):null}function Fe(i,e){let r=Ye.exec(e);if(r===null)return null;let s=parseInt(r[1],10),n=i.messages;return Bt(Nt({},i),{messages:s===0?[["psk",...n[0]],...n.slice(1)]:[...n.slice(0,s-1),[...n[s-1],"psk"],...n.slice(s)]})}var gt=class{constructor(e,r,s,n={}){this.algorithms=e;this.role=s;this.stepIndex=0;var a,f,c,y,p,u,d;if(typeof r=="string"){let l=Ut(r);if(l===null)throw new Error("Unknown Noise Protocol handshake pattern "+r);this.pattern=l}else this.pattern=r;this.staticKeypair=(a=n.staticKeypair)!=null?a:this.algorithms.dh.generateKeypair(),this.remoteStaticPublicKey=(f=n.remoteStaticPublicKey)!=null?f:null,this.ephemeralKeypair=(c=n.pregeneratedEphemeralKeypair)!=null?c:this.algorithms.dh.generateKeypair(),this.remoteEphemeralPublicKey=(y=n.remotePregeneratedEphemeralPublicKey)!=null?y:null,this.preSharedKeys=n.preSharedKeys,this.preSharedKeys&&(this.preSharedKeys=this.preSharedKeys.slice(),this.preSharedKeys.length===0&&(this.preSharedKeys=void 0));let o=new TextEncoder().encode("Noise_"+this.pattern.name+"_"+this.algorithms.dh.NAME+"_"+this.algorithms.aead.NAME+"_"+this.algorithms.hash.NAME);this.cipherState=new rt(this.algorithms);{let l=this.algorithms.hash.OUTBYTES,A=o.byteLength>l?this.algorithms.hash.digest(o):o;this.chainingKey=W(A,new Uint8Array(l-A.byteLength))}this.handshakeHash=this.chainingKey,this.mixHash((p=n.prologue)!=null?p:wt),this.pattern.initiatorPreMessage.forEach(l=>this.mixHash(l==="e"?this.isInitiator?this.ephemeralKeypair.public:this.remoteEphemeralPublicKey:this.isInitiator?this.staticKeypair.public:this.remoteStaticPublicKey)),this.pattern.responderPreMessage.forEach(l=>this.mixHash(l==="e"?this.isInitiator?this.remoteEphemeralPublicKey:this.ephemeralKeypair.public:this.isInitiator?this.remoteStaticPublicKey:this.staticKeypair.public)),this.hkdf=(d=this.algorithms.hkdf)!=null?d:$t((u=this.algorithms.hmac)!=null?u:jt(this.algorithms.hash))}get isInitiator(){return this.role==="initiator"}mixHash(e){this.handshakeHash=this.algorithms.hash.digest(W(this.handshakeHash,e))}mixKey(e){let[r,s]=this.hkdf(this.chainingKey,e,2);this.chainingKey=r,this.cipherState=new rt(this.algorithms,s)}mixKeyAndHashNextPSK(){let e=this.preSharedKeys.shift(),[r,s,n]=this.hkdf(this.chainingKey,e,3);this.chainingKey=r,this.mixHash(s),this.cipherState=new rt(this.algorithms,n)}encryptAndHash(e){let r=this.cipherState.encrypt(e,this.handshakeHash);return this.mixHash(r),r}decryptAndHash(e){let r=this.cipherState.decrypt(e,this.handshakeHash);return this.mixHash(e),r}_split(){if(this.stepIndex<this.pattern.messages.length)return null;{let[e,r]=this.hkdf(this.chainingKey,wt,2).map(s=>new rt(this.algorithms,s));return this.isInitiator?{send:e,recv:r}:{send:r,recv:e}}}_nextStep(){if(this.stepIndex>=this.pattern.messages.length)throw new Error("Handshake already complete, cannot continue");return this.pattern.messages[this.stepIndex++]}_processKeyMixToken(e){switch(e){case"ee":this.mixKey(this.algorithms.dh.dh(this.ephemeralKeypair,this.remoteEphemeralPublicKey));break;case"es":this.mixKey(this.isInitiator?this.algorithms.dh.dh(this.ephemeralKeypair,this.remoteStaticPublicKey):this.algorithms.dh.dh(this.staticKeypair,this.remoteEphemeralPublicKey));break;case"se":this.mixKey(this.isInitiator?this.algorithms.dh.dh(this.staticKeypair,this.remoteEphemeralPublicKey):this.algorithms.dh.dh(this.ephemeralKeypair,this.remoteStaticPublicKey));break;case"ss":this.mixKey(this.algorithms.dh.dh(this.staticKeypair,this.remoteStaticPublicKey));break;case"psk":this.mixKeyAndHashNextPSK();break}}writeMessage(e){let r=[];this._nextStep().forEach(n=>{switch(n){case"e":r.push(this.ephemeralKeypair.public),this.mixHash(this.ephemeralKeypair.public),this.preSharedKeys&&this.mixKey(this.ephemeralKeypair.public);break;case"s":r.push(this.encryptAndHash(this.staticKeypair.public));break;default:this._processKeyMixToken(n);break}}),r.push(this.encryptAndHash(e));let s;if(r.length===1)s=r[0];else{s=new Uint8Array(r.reduce((o,a)=>o+a.byteLength,0));let n=0;r.forEach(o=>{s.set(o,n),n+=o.byteLength})}return{packet:s,finished:this._split()}}readMessage(e){let r=n=>{let o=e.slice(0,n);return e=e.subarray(n),o};return this._nextStep().forEach(n=>{switch(n){case"e":this.remoteEphemeralPublicKey=r(this.algorithms.dh.DHLEN),this.mixHash(this.remoteEphemeralPublicKey),this.preSharedKeys&&this.mixKey(this.remoteEphemeralPublicKey);break;case"s":this.remoteStaticPublicKey=this.decryptAndHash(r(this.algorithms.dh.DHLEN+(this.cipherState.view?16:0)));break;default:this._processKeyMixToken(n);break}}),{message:this.decryptAndHash(e),finished:this._split()}}async completeHandshake(e,r,s=async o=>{},n=async()=>new Uint8Array(0)){let o=async()=>{let{packet:f,finished:c}=this.writeMessage(await n());return await e(f),c||a()},a=async()=>{let{message:f,finished:c}=this.readMessage(await r());return await s(f),c||o()};return this.isInitiator?o():a()}};var ne={};G(ne,{Noise_25519_ChaChaPoly_BLAKE2s:()=>se});var se={dh:Gt,aead:ut,hash:xt};var Oe={aead:{chacha20poly1305:Yt},cipher:{chacha20:Lt},dh:{x25519:zt},hash:{blake2s:qt,poly1305:Dt},noise:{algorithms:Wt,cipherstate:te,handshake:ie,patterns:re,profiles:ne,rekey:Jt}};return Ke(Xe);})();
|
|
2
|
+
//# sourceMappingURL=salty-crypto.global.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/aead/chacha20poly1305.ts","../src/cipher/chacha20.ts","../src/hash/poly1305.ts","../src/bytes.ts","../src/aead.ts","../src/random.ts","../src/dh/x25519.ts","../src/dh.ts","../src/hash/blake2s.ts","../src/hkdf.ts","../src/hmac.ts","../src/io.ts","../src/noise/algorithms.ts","../src/noise/cipherstate.ts","../src/nonce.ts","../src/noise/rekey.ts","../src/noise/handshake.ts","../src/noise/patterns.ts","../src/noise/profiles.ts"],"sourcesContent":["/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nexport * from './aead.js';\nexport * as Bytes from './bytes.js';\nexport * from './cipher.js';\nexport * from './dh.js';\nexport * from './hash.js';\nexport * from './hkdf.js';\nexport * from './hmac.js';\nexport * as IO from './io.js';\nexport * from './noise.js';\nexport * from './nonce.js';\nexport * from './random.js';\n\nimport * as chacha20poly1305 from './aead/chacha20poly1305.js';\nimport * as chacha20 from './cipher/chacha20.js';\nimport * as x25519 from './dh/x25519.js';\nimport * as blake2s from './hash/blake2s.js';\nimport * as poly1305 from './hash/poly1305.js';\nimport * as algorithms from './noise/algorithms.js';\nimport * as cipherstate from './noise/cipherstate.js';\nimport * as handshake from './noise/handshake.js';\nimport * as patterns from './noise/patterns.js';\nimport * as profiles from './noise/profiles.js';\nimport * as rekey from './noise/rekey.js';\n\nexport const INTERNALS = {\n aead: {\n chacha20poly1305,\n },\n cipher: {\n chacha20,\n },\n dh: {\n x25519,\n },\n hash: {\n blake2s,\n poly1305,\n },\n noise: {\n algorithms,\n cipherstate,\n handshake,\n patterns,\n profiles,\n rekey,\n },\n};\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\n// RFC-8439 AEAD construction.\n\nimport { AEAD, _encrypt, _decrypt } from '../aead.js';\nimport { Nonce } from '../nonce.js';\n\nimport { ChaCha20 } from '../cipher/chacha20.js';\nimport { Poly1305 } from '../hash/poly1305.js';\nimport * as Bytes from '../bytes.js';\nimport { HashAlgorithm } from '../hash.js';\n\nconst PADDING = new Uint8Array(16);\n\nfunction pad16(p: HashAlgorithm, unpadded_length: number) {\n const leftover = unpadded_length & 15;\n if (leftover !== 0) p.update(PADDING, 0, 16 - leftover);\n}\n\nfunction aead_tag(tag: Uint8Array,\n key: DataView,\n nonce: Nonce,\n ciphertext: Uint8Array,\n cipherlength: number,\n associated_data?: Uint8Array)\n{\n const mac_key = new Uint8Array(Poly1305.KEYBYTES);\n ChaCha20.stream_xor(key, nonce, mac_key, mac_key, 0);\n const p = new Poly1305(mac_key);\n\n if (associated_data !== void 0) {\n p.update(associated_data, 0, associated_data.byteLength);\n pad16(p, associated_data.byteLength);\n }\n\n p.update(ciphertext, 0, cipherlength);\n pad16(p, cipherlength);\n\n const L = new Uint8Array(16);\n const Lv = new DataView(L.buffer);\n if (associated_data !== void 0) {\n Lv.setUint32(0, associated_data.byteLength, true);\n }\n Lv.setUint32(8, cipherlength, true);\n p.update(L, 0, L.byteLength);\n\n p.final(tag);\n}\n\nexport const ChaCha20Poly1305_RFC8439: AEAD = {\n NAME: 'ChaChaPoly',\n KEYBYTES: 32,\n NONCEBYTES: 12,\n TAGBYTES: 16,\n\n encrypt_detached(plaintext: Uint8Array,\n ciphertext: Uint8Array,\n messagelength: number,\n tag: Uint8Array,\n key: DataView,\n nonce: Nonce,\n associated_data?: Uint8Array): void {\n ChaCha20.stream_xor(key, nonce, plaintext, ciphertext, 1, messagelength);\n aead_tag(tag, key, nonce, ciphertext, messagelength, associated_data);\n },\n\n encrypt: _encrypt,\n\n decrypt_detached(plaintext: Uint8Array,\n ciphertext: Uint8Array,\n messagelength: number,\n expected_tag: Uint8Array,\n key: DataView,\n nonce: Nonce,\n associated_data?: Uint8Array): boolean {\n const actual_tag = new Uint8Array(this.TAGBYTES);\n aead_tag(actual_tag, key, nonce, ciphertext, messagelength, associated_data);\n const ok = Bytes.equal(actual_tag, expected_tag, actual_tag.byteLength);\n if (ok) ChaCha20.stream_xor(key, nonce, ciphertext, plaintext, 1, messagelength);\n return ok;\n },\n\n decrypt: _decrypt,\n};\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\n// RFC-8439 ChaCha20.\n\nimport { StreamCipher } from '../cipher.js';\nimport { Nonce } from '../nonce.js';\n\nfunction ROTATE(n: number, bits: number): number {\n return (n << bits) | (n >>> (32 - bits));\n}\n\nexport function chacha20_quarter_round(s: Uint32Array, a: number, b: number, c: number, d: number) {\n s[a] += s[b]; s[d] ^= s[a]; s[d] = ROTATE(s[d], 16);\n s[c] += s[d]; s[b] ^= s[c]; s[b] = ROTATE(s[b], 12);\n s[a] += s[b]; s[d] ^= s[a]; s[d] = ROTATE(s[d], 8);\n s[c] += s[d]; s[b] ^= s[c]; s[b] = ROTATE(s[b], 7);\n}\n\nfunction fill_state(state: Uint32Array, key: DataView, block: number, nonce: DataView) {\n state[0] += 0x61707865; state[1] += 0x3320646e; state[2] += 0x79622d32; state[3] += 0x6b206574;\n state[4] += key.getUint32(0, true); state[5] += key.getUint32(4, true);\n state[6] += key.getUint32(8, true); state[7] += key.getUint32(12, true);\n state[8] += key.getUint32(16, true); state[9] += key.getUint32(20, true);\n state[10] += key.getUint32(24, true); state[11] += key.getUint32(28, true);\n state[12] += block;\n state[13] += nonce.getUint32(0, true);\n state[14] += nonce.getUint32(4, true);\n state[15] += nonce.getUint32(8, true);\n}\n\nexport function chacha20_block(key: DataView, block: number, nonce: DataView): Uint32Array {\n const state = new Uint32Array(16);\n fill_state(state, key, block, nonce);\n for (let round = 0; round < 20; round += 2) {\n chacha20_quarter_round(state, 0, 4, 8, 12);\n chacha20_quarter_round(state, 1, 5, 9, 13);\n chacha20_quarter_round(state, 2, 6, 10, 14);\n chacha20_quarter_round(state, 3, 7, 11, 15);\n chacha20_quarter_round(state, 0, 5, 10, 15);\n chacha20_quarter_round(state, 1, 6, 11, 12);\n chacha20_quarter_round(state, 2, 7, 8, 13);\n chacha20_quarter_round(state, 3, 4, 9, 14);\n }\n fill_state(state, key, block, nonce);\n return state;\n}\n\nfunction serializeNonce(n: Nonce): DataView {\n const view = new DataView(new ArrayBuffer(ChaCha20.NONCEBYTES));\n view.setUint32(0, n.extra, true);\n view.setUint32(4, n.lo, true);\n view.setUint32(8, n.hi, true);\n return view;\n}\n\nexport const ChaCha20: StreamCipher = {\n NAME: 'chacha20',\n KEYBYTES: 32,\n NONCEBYTES: 12,\n BLOCKBYTES: 64,\n\n stream_xor(key: DataView,\n nonce0: Nonce,\n input: Uint8Array,\n output: Uint8Array,\n initial_counter = 0,\n messagelength = input.byteLength): void\n {\n const nonce = serializeNonce(nonce0);\n const whole_blocks = messagelength >> 6;\n const remaining_bytes = messagelength & 63;\n for (let j = 0; j < whole_blocks; j++) {\n const chunk = chacha20_block(key, initial_counter + j, nonce);\n for (let i = 0; i < 64; i++) {\n output[(j << 6) + i] = input[(j << 6) + i] ^ (chunk[i >> 2] >> ((i & 3) << 3));\n }\n }\n if (remaining_bytes !== 0) {\n const chunk = chacha20_block(key, initial_counter + whole_blocks, nonce);\n for (let i = 0; i < remaining_bytes; i++) {\n output[(whole_blocks << 6) + i] = input[(whole_blocks << 6) + i] ^ (chunk[i >> 2] >> ((i & 3) << 3));\n }\n }\n }\n};\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\n// TypeScript port of the \"poly1305\" class from nacl-fast.js from tweetnacl.\n//\n// The comment attached to the class in that file reads as follows:\n// /*\n// * Port of Andrew Moon's Poly1305-donna-16. Public domain.\n// * https://github.com/floodyberry/poly1305-donna\n// */\n\nimport type { Hash, HashAlgorithm } from '../hash.js';\n\nexport const Poly1305 = (class Poly1305 implements HashAlgorithm {\n static readonly NAME = \"Poly1305\";\n static readonly KEYBYTES = 32;\n static readonly OUTBYTES = 16;\n static readonly BLOCKLEN = 16;\n\n buffer = new Uint8Array(16);\n r = new Uint16Array(10);\n h = new Uint16Array(10);\n pad = new Uint16Array(8);\n leftover = 0;\n fin = 0;\n\n static digest(input: Uint8Array, key?: Uint8Array, outlen?: number): Uint8Array {\n const p = new Poly1305(key, outlen);\n p.update(input);\n return p.final();\n }\n\n constructor(key?: Uint8Array, outlen?: number) {\n if (!key) throw new Error(\"Poly1305: key required\");\n if ((outlen ?? Poly1305.OUTBYTES) !== Poly1305.OUTBYTES) throw new Error(\"Poly1305: outlen != OUTBYTES\");\n\n const t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n const t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n const t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n const t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n const t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n const t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n const t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n const t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n }\n\n blocks(m: Uint8Array, mpos: number, bytes: number) {\n const hibit = this.fin ? 0 : (1 << 11);\n\n let h0 = this.h[0];\n let h1 = this.h[1];\n let h2 = this.h[2];\n let h3 = this.h[3];\n let h4 = this.h[4];\n let h5 = this.h[5];\n let h6 = this.h[6];\n let h7 = this.h[7];\n let h8 = this.h[8];\n let h9 = this.h[9];\n\n let r0 = this.r[0];\n let r1 = this.r[1];\n let r2 = this.r[2];\n let r3 = this.r[3];\n let r4 = this.r[4];\n let r5 = this.r[5];\n let r6 = this.r[6];\n let r7 = this.r[7];\n let r8 = this.r[8];\n let r9 = this.r[9];\n\n while (bytes >= 16) {\n const t0 = m[mpos + 0] & 0xff | (m[mpos + 1] & 0xff) << 8; h0 += (t0) & 0x1fff;\n const t1 = m[mpos + 2] & 0xff | (m[mpos + 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n const t2 = m[mpos + 4] & 0xff | (m[mpos + 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n const t3 = m[mpos + 6] & 0xff | (m[mpos + 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n const t4 = m[mpos + 8] & 0xff | (m[mpos + 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n const t5 = m[mpos + 10] & 0xff | (m[mpos + 11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n const t6 = m[mpos + 12] & 0xff | (m[mpos + 13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n const t7 = m[mpos + 14] & 0xff | (m[mpos + 15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n let c = 0;\n\n let d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n let d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n let d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n let d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n let d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n let d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n let d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n let d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n let d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n let d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n }\n\n final(mac?: Uint8Array): Uint8Array {\n if (!mac) mac = new Uint8Array(Poly1305.OUTBYTES);\n\n if (this.leftover) {\n let i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n let c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (let i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n const g = new Uint16Array(10);\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (let i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n let mask = (c ^ 1) - 1;\n for (let i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (let i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0]) | (this.h[1] << 13)) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10)) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7)) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4)) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11)) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8)) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5)) & 0xffff;\n\n let f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (let i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[0] = (this.h[0] >>> 0) & 0xff;\n mac[1] = (this.h[0] >>> 8) & 0xff;\n mac[2] = (this.h[1] >>> 0) & 0xff;\n mac[3] = (this.h[1] >>> 8) & 0xff;\n mac[4] = (this.h[2] >>> 0) & 0xff;\n mac[5] = (this.h[2] >>> 8) & 0xff;\n mac[6] = (this.h[3] >>> 0) & 0xff;\n mac[7] = (this.h[3] >>> 8) & 0xff;\n mac[8] = (this.h[4] >>> 0) & 0xff;\n mac[9] = (this.h[4] >>> 8) & 0xff;\n mac[10] = (this.h[5] >>> 0) & 0xff;\n mac[11] = (this.h[5] >>> 8) & 0xff;\n mac[12] = (this.h[6] >>> 0) & 0xff;\n mac[13] = (this.h[6] >>> 8) & 0xff;\n mac[14] = (this.h[7] >>> 0) & 0xff;\n mac[15] = (this.h[7] >>> 8) & 0xff;\n return mac;\n };\n\n update(m: Uint8Array, mpos = 0, bytes = m.byteLength) {\n if (this.leftover) {\n let want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (let i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos + i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n const want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (let i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos + i];\n this.leftover += bytes;\n }\n }\n}) satisfies Hash;\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\n// `verify` from nacl-fast.js\nfunction verify(x: Uint8Array, y: Uint8Array, n: number): number {\n let d = 0;\n for (let i = 0; i < n; i++) d |= x[i]^y[i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nexport function equal(x: Uint8Array, y: Uint8Array, n: number): boolean {\n return verify(x, y, n) === 0;\n}\n\nexport function xor(a: Uint8Array, b: Uint8Array): Uint8Array {\n const len = Math.min(a.byteLength, b.byteLength);\n const r = new Uint8Array(len);\n for (let i = 0; i < len; i++) r[i] = a[i] ^ b[i];\n return r;\n}\n\nexport function append(a: Uint8Array, b: Uint8Array): Uint8Array {\n const r = new Uint8Array(a.byteLength + b.byteLength);\n r.set(a, 0);\n r.set(b, a.byteLength);\n return r;\n}\n\nexport const EMPTY = new Uint8Array(0);\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nimport { Nonce } from './nonce.js';\n\nexport class AuthenticationFailure extends Error {}\n\nexport interface AEAD {\n readonly NAME: string;\n readonly KEYBYTES: number;\n readonly NONCEBYTES: number;\n readonly TAGBYTES: number;\n\n encrypt_detached(plaintext: Uint8Array,\n ciphertext: Uint8Array,\n messagelength: number,\n tag: Uint8Array,\n key: DataView,\n nonce: Nonce,\n associated_data?: Uint8Array): void;\n\n encrypt(plaintext: Uint8Array,\n key: DataView,\n nonce: Nonce,\n associated_data?: Uint8Array): Uint8Array;\n\n decrypt_detached(plaintext: Uint8Array,\n ciphertext: Uint8Array,\n messagelength: number,\n expected_tag: Uint8Array,\n key: DataView,\n nonce: Nonce,\n associated_data?: Uint8Array): boolean;\n\n decrypt(ciphertextAndTag: Uint8Array,\n key: DataView,\n nonce: Nonce,\n associated_data?: Uint8Array): Uint8Array;\n}\n\nexport function _encrypt(this: AEAD,\n plaintext: Uint8Array,\n key: DataView,\n nonce: Nonce,\n associated_data?: Uint8Array): Uint8Array\n{\n const ciphertextAndTag = new Uint8Array(plaintext.byteLength + this.TAGBYTES);\n this.encrypt_detached(plaintext,\n ciphertextAndTag,\n plaintext.byteLength,\n ciphertextAndTag.subarray(plaintext.byteLength),\n key,\n nonce,\n associated_data);\n return ciphertextAndTag;\n}\n\nexport function _decrypt(this: AEAD,\n ciphertextAndTag: Uint8Array,\n key: DataView,\n nonce: Nonce,\n associated_data?: Uint8Array): Uint8Array\n{\n const plaintext = new Uint8Array(ciphertextAndTag.byteLength - this.TAGBYTES);\n if (!this.decrypt_detached(plaintext,\n ciphertextAndTag,\n plaintext.byteLength,\n ciphertextAndTag.subarray(plaintext.byteLength),\n key,\n nonce,\n associated_data)) {\n throw new AuthenticationFailure(\"AEAD authentication failed\");\n }\n return plaintext;\n}\n\nexport { ChaCha20Poly1305_RFC8439 } from './aead/chacha20poly1305.js';\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\n// TypeScript port of the randomness-generation code from nacl-fast.js from tweetnacl.\n//\n// The comment in that file reads as follows:\n//\n// // Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// // Public domain.\n// //\n// // Implementation derived from TweetNaCl version 20140427.\n// // See for details: http://tweetnacl.cr.yp.to/\n\nexport const _randomBytes: (out: Uint8Array, n: number) => void = (() => {\n if (crypto && crypto.getRandomValues) {\n const QUOTA = 65536;\n return (x: Uint8Array, n: number) => {\n for (let i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(x.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n };\n } else if (typeof require !== 'undefined') {\n const crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n return (x: Uint8Array, n: number) => x.set(crypto.randomBytes(n));\n }\n }\n throw new Error(\"No usable randomness source found\");\n})();\n\nexport function randomBytes(n: number): Uint8Array {\n const bs = new Uint8Array(n);\n _randomBytes(bs, n);\n return bs;\n}\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\n// TypeScript port of the X25519 code from nacl-fast.js from tweetnacl.\n//\n// The comment in that file reads as follows:\n//\n// // Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// // Public domain.\n// //\n// // Implementation derived from TweetNaCl version 20140427.\n// // See for details: http://tweetnacl.cr.yp.to/\n\nexport const crypto_scalarmult_BYTES = 32;\nexport const crypto_scalarmult_SCALARBYTES = 32;\n\nfunction gf(): Float64Array {\n return new Float64Array(16);\n}\n\nconst _9 = new Uint8Array(32);\n_9[0] = 9;\n\nconst _121665 = gf();\n_121665[0] = 0xdb41;\n_121665[1] = 1;\n\nfunction car25519(o: Float64Array) {\n let c = 1;\n for (let i = 0; i < 16; i++) {\n const v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p: Float64Array, q: Float64Array, b: number) {\n const c = ~(b-1);\n for (let i = 0; i < 16; i++) {\n const t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o: Uint8Array, n: Float64Array) {\n const m = gf();\n const t = gf();\n for (let i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (let j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (let i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n const b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (let i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction unpack25519(o: Float64Array, n: Uint8Array) {\n for (let i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o: Float64Array, a: Float64Array, b: Float64Array) {\n for (let i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o: Float64Array, a: Float64Array, b: Float64Array) {\n for (let i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o: Float64Array, a: Float64Array, b: Float64Array) {\n let t0 = 0;\n let t1 = 0;\n let t2 = 0;\n let t3 = 0;\n let t4 = 0;\n let t5 = 0;\n let t6 = 0;\n let t7 = 0;\n let t8 = 0;\n let t9 = 0;\n let t10 = 0;\n let t11 = 0;\n let t12 = 0;\n let t13 = 0;\n let t14 = 0;\n let t15 = 0;\n let t16 = 0;\n let t17 = 0;\n let t18 = 0;\n let t19 = 0;\n let t20 = 0;\n let t21 = 0;\n let t22 = 0;\n let t23 = 0;\n let t24 = 0;\n let t25 = 0;\n let t26 = 0;\n let t27 = 0;\n let t28 = 0;\n let t29 = 0;\n let t30 = 0;\n\n const b0 = b[0];\n const b1 = b[1];\n const b2 = b[2];\n const b3 = b[3];\n const b4 = b[4];\n const b5 = b[5];\n const b6 = b[6];\n const b7 = b[7];\n const b8 = b[8];\n const b9 = b[9];\n const b10 = b[10];\n const b11 = b[11];\n const b12 = b[12];\n const b13 = b[13];\n const b14 = b[14];\n const b15 = b[15];\n\n let v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n let c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o: Float64Array, a: Float64Array) {\n M(o, a, a);\n}\n\nfunction inv25519(o: Float64Array, i: Float64Array) {\n const c = gf();\n for (let a = 0; a < 16; a++) c[a] = i[a];\n for (let a = 253; a >= 0; a--) {\n S(c, c);\n if (a !== 2 && a !== 4) M(c, c, i);\n }\n for (let a = 0; a < 16; a++) o[a] = c[a];\n}\n\nexport function crypto_scalarmult(q: Uint8Array, n: Uint8Array, p: Uint8Array) {\n const z = new Uint8Array(32);\n const x = new Float64Array(80);\n\n const a = gf();\n const b = gf();\n const c = gf();\n const d = gf();\n const e = gf();\n const f = gf();\n\n for (let i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n\n unpack25519(x,p);\n\n for (let i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n\n for (let i=254; i>=0; --i) {\n const r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n\n for (let i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n\n const x32 = x.subarray(32);\n const x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n}\n\nexport function crypto_scalarmult_base(q: Uint8Array, n: Uint8Array) {\n crypto_scalarmult(q, n, _9);\n}\n\n/* High-level API */\n\nexport function scalarMult(n: Uint8Array, p: Uint8Array): Uint8Array {\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n const q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n}\n\nexport function scalarMultBase(n: Uint8Array): Uint8Array {\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n const q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n}\n\nscalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nscalarMult.groupElementLength = crypto_scalarmult_BYTES;\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nimport { randomBytes } from \"./random.js\";\nimport { scalarMult, scalarMultBase } from \"./dh/x25519.js\";\n\nexport type DHKeyPair = { public: Uint8Array, secret: Uint8Array };\n\nexport interface DH {\n readonly NAME: string;\n readonly DHLEN: number;\n\n generateKeypair(): DHKeyPair;\n dh(kp: DHKeyPair, pk: Uint8Array): Uint8Array;\n}\n\nexport const X25519: DH = {\n NAME: \"25519\",\n DHLEN: scalarMult.groupElementLength,\n\n generateKeypair(): DHKeyPair {\n const sk = randomBytes(scalarMult.scalarLength);\n const pk = scalarMultBase(sk);\n return { public: pk, secret: sk };\n },\n\n dh(kp: DHKeyPair, pk: Uint8Array): Uint8Array {\n return scalarMult(kp.secret, pk);\n }\n};\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\n// RFC 7693 BLAKE2s, ported from the C code therein.\n\nimport type { Hash, HashAlgorithm } from '../hash.js';\n\nfunction ROTR32(n: number, bits: number): number {\n return (n >>> bits) | (n << (32 - bits));\n}\n\nfunction B2S_G(v: Uint32Array, a: number, b: number, c: number, d: number, x: number, y: number) {\n v[a] = v[a] + v[b] + x;\n v[d] = ROTR32(v[d] ^ v[a], 16);\n v[c] = v[c] + v[d];\n v[b] = ROTR32(v[b] ^ v[c], 12);\n v[a] = v[a] + v[b] + y;\n v[d] = ROTR32(v[d] ^ v[a], 8);\n v[c] = v[c] + v[d];\n v[b] = ROTR32(v[b] ^ v[c], 7);\n}\n\nconst blake2s_iv = Uint32Array.from([\n 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A,\n 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19,\n]);\n\nconst _sigma = Uint8Array.from([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\n 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\n 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\n 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,\n]);\n\nfunction sigma(i: number, j: number): number {\n return _sigma[(i << 4) + j];\n}\n\nexport const BLAKE2s = (class BLAKE2s implements HashAlgorithm {\n static readonly NAME = \"BLAKE2s\";\n static readonly KEYBYTES = 32;\n static readonly OUTBYTES = 32;\n static readonly BLOCKLEN = 64;\n\n b = new Uint8Array(64);\n bv = new DataView(this.b.buffer);\n\n h = Uint32Array.from(blake2s_iv);\n t = new Uint32Array(2);\n c = 0;\n\n static digest(input: Uint8Array, key?: Uint8Array, outlen?: number, ): Uint8Array {\n const p = new BLAKE2s(key, outlen);\n p.update(input);\n return p.final();\n }\n\n constructor(key?: Uint8Array, public outlen: number = BLAKE2s.OUTBYTES)\n {\n const keylen = key?.byteLength ?? 0;\n\n if (outlen == 0 || outlen > 32 || keylen > 32) {\n throw new Error(\"illegal BLAKE2s parameter length(s)\");\n }\n\n this.h[0] ^= 0x01010000 ^ (keylen << 8) ^ outlen;\n\n if (key && keylen > 0) {\n this.update(key);\n this.c = 64;\n }\n }\n\n update(input: Uint8Array, offset = 0, length = input.byteLength) {\n for (let i = offset; i < offset + length; i++) {\n if (this.c == 64) {\n this.t[0] += this.c;\n if (this.t[0] < this.c) this.t[1]++;\n this.compress(false);\n this.c = 0;\n }\n this.b[this.c++] = input[i];\n }\n }\n\n final(output?: Uint8Array): Uint8Array {\n this.t[0] += this.c;\n if (this.t[0] < this.c) this.t[1]++;\n\n while (this.c < 64) this.b[this.c++] = 0;\n this.compress(true);\n\n if (output === void 0) output = new Uint8Array(this.outlen);\n for (let i = 0; i < this.outlen; i++) {\n output[i] = (this.h[i >> 2] >> (8 * (i & 3))) & 0xFF;\n }\n return output;\n }\n\n compress(last: boolean) {\n const v = new Uint32Array(16);\n const m = new Uint32Array(16);\n\n for (let i = 0; i < 8; i++) {\n v[i] = this.h[i];\n v[i + 8] = blake2s_iv[i];\n }\n\n v[12] ^= this.t[0];\n v[13] ^= this.t[1];\n if (last) v[14] = ~v[14];\n\n for (let i = 0; i < 16; i++) {\n m[i] = this.bv.getUint32(i << 2, true);\n }\n\n for (let i = 0; i < 10; i++) {\n B2S_G(v, 0, 4, 8, 12, m[sigma(i, 0)], m[sigma(i, 1)]);\n B2S_G(v, 1, 5, 9, 13, m[sigma(i, 2)], m[sigma(i, 3)]);\n B2S_G(v, 2, 6, 10, 14, m[sigma(i, 4)], m[sigma(i, 5)]);\n B2S_G(v, 3, 7, 11, 15, m[sigma(i, 6)], m[sigma(i, 7)]);\n B2S_G(v, 0, 5, 10, 15, m[sigma(i, 8)], m[sigma(i, 9)]);\n B2S_G(v, 1, 6, 11, 12, m[sigma(i, 10)], m[sigma(i, 11)]);\n B2S_G(v, 2, 7, 8, 13, m[sigma(i, 12)], m[sigma(i, 13)]);\n B2S_G(v, 3, 4, 9, 14, m[sigma(i, 14)], m[sigma(i, 15)]);\n }\n\n for (let i = 0; i < 8; i++) {\n this.h[i] ^= v[i] ^ v[i + 8];\n }\n }\n}) satisfies Hash;\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nimport { HMAC } from './hmac.js';\nimport * as Bytes from './bytes.js';\n\nexport type HKDF = {\n (chainingKey: Uint8Array, input: Uint8Array, numOutputs: 2): [Uint8Array, Uint8Array];\n (chainingKey: Uint8Array, input: Uint8Array, numOutputs: 3): [Uint8Array, Uint8Array, Uint8Array];\n};\n\nexport function makeHKDF(hmac: HMAC): HKDF {\n function hkdf(chainingKey: Uint8Array, input: Uint8Array, numOutputs: 2): [Uint8Array, Uint8Array];\n function hkdf(chainingKey: Uint8Array, input: Uint8Array, numOutputs: 3): [Uint8Array, Uint8Array, Uint8Array];\n function hkdf(chainingKey: Uint8Array, input: Uint8Array, numOutputs: 2 | 3): Uint8Array[] {\n const tempKey = hmac(chainingKey, input);\n const o1 = hmac(tempKey, Uint8Array.from([1]));\n const o2 = hmac(tempKey, Bytes.append(o1, Uint8Array.from([2])));\n switch (numOutputs) {\n case 2: return [o1, o2];\n case 3: return [o1, o2, hmac(tempKey, Bytes.append(o2, Uint8Array.from([3])))];\n }\n };\n return hkdf;\n}\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nimport { Hash } from './hash.js';\nimport * as Bytes from './bytes.js';\n\nexport type HMAC = {\n (key: Uint8Array, data: Uint8Array): Uint8Array;\n readonly NAME: string;\n};\n\nexport function makeHMAC(hash: Hash): HMAC {\n const HMAC_IPAD = new Uint8Array(hash.BLOCKLEN); HMAC_IPAD.fill(0x36);\n const HMAC_OPAD = new Uint8Array(hash.BLOCKLEN); HMAC_OPAD.fill(0x5c);\n const hmac = (key0: Uint8Array, data: Uint8Array) => {\n const key1 = key0.byteLength > hash.BLOCKLEN ? hash.digest(key0) : key0;\n const key = Bytes.append(key1, new Uint8Array(hash.BLOCKLEN - key1.byteLength));\n return hash.digest(Bytes.append(Bytes.xor(key, HMAC_OPAD),\n hash.digest(Bytes.append(Bytes.xor(key, HMAC_IPAD),\n data))));\n };\n hmac.NAME = 'HMAC-' + hash.NAME;\n return hmac;\n}\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nexport function toHex(bs: Uint8Array): string {\n let s = '';\n bs.forEach(b => {\n s = s + '0123456789abcdef'[b >> 4];\n s = s + '0123456789abcdef'[b & 15];\n });\n return s;\n}\n\nexport function fromHex(s: string): Uint8Array {\n s = s.replace(/[^0-9a-fA-F]/g, '').toLowerCase();\n if (s.length % 2) throw new Error(\"Hex input contains an odd number of digits\");\n const len = Math.floor(s.length / 2);\n const result = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n result[i] = parseInt(s.substring(2*i,2*i+2),16);\n }\n return result;\n}\n\nexport function toBase64(bs: Uint8Array, withPadding = true): string {\n let r = '';\n bs.forEach(b => r = r + String.fromCharCode(b));\n let s = btoa(r);\n if (!withPadding) s = s.replace(/=/g, '');\n return s;\n}\n\nexport function fromBase64(s: string): Uint8Array {\n const r = atob(s);\n const result = new Uint8Array(r.length);\n for (let i = 0; i < r.length; i++) result[i] = r.charCodeAt(i);\n return result;\n}\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nimport { AEAD } from '../aead.js';\nimport { Hash } from '../hash.js';\nimport { DH } from '../dh.js';\nimport { HMAC } from '../hmac.js';\nimport { HKDF } from '../hkdf.js';\n\nimport { Rekey } from './rekey.js';\n\nexport interface Algorithms {\n dh: DH,\n aead: AEAD,\n hash: Hash,\n hmac?: HMAC,\n hkdf?: HKDF,\n rekey?: Rekey,\n}\n\nexport function matchPattern(a: Algorithms, protocol_name: string): string | null {\n const r = new RegExp(`^Noise_([A-Za-z0-9+]+)_${a.dh.NAME}_${a.aead.NAME}_${a.hash.NAME}$`);\n const m = r.exec(protocol_name);\n if (m === null) return null;\n return m[1];\n}\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nimport { Nonce } from '../nonce.js';\nimport { makeRekey } from './rekey.js';\nimport { Algorithms } from './algorithms.js';\n\nexport class CipherState {\n view: DataView | null = null;\n nonce = new Nonce();\n readonly maxPayload: number;\n\n constructor (public algorithms: Algorithms,\n key?: Uint8Array)\n {\n if (key !== void 0) this.view = new DataView(key.buffer);\n this.maxPayload = 65535 - this.algorithms.aead.TAGBYTES;\n }\n\n encrypt(plaintext: Uint8Array, associated_data?: Uint8Array): Uint8Array {\n if (this.view === null) return plaintext;\n const ciphertext =\n this.algorithms.aead.encrypt(plaintext, this.view, this.nonce, associated_data);\n this.nonce.increment();\n return ciphertext;\n }\n\n decrypt(ciphertext: Uint8Array, associated_data?: Uint8Array): Uint8Array {\n if (this.view === null) return ciphertext;\n const plaintext =\n this.algorithms.aead.decrypt(ciphertext, this.view, this.nonce, associated_data);\n this.nonce.increment();\n return plaintext;\n }\n\n rekey() {\n if (this.view === null) return;\n this.view = (this.algorithms.rekey ?? makeRekey(this.algorithms.aead))(this.view);\n }\n\n encrypt_large(plaintext: Uint8Array): Uint8Array[] {\n if (plaintext.byteLength > this.maxPayload) {\n const pieces = [];\n while (plaintext.byteLength > this.maxPayload) {\n pieces.push(this.encrypt(plaintext.subarray(0, this.maxPayload)));\n plaintext = plaintext.subarray(this.maxPayload);\n }\n if (plaintext.byteLength > 0) {\n pieces.push(this.encrypt(plaintext));\n }\n return pieces;\n } else {\n return [this.encrypt(plaintext)];\n }\n }\n\n decrypt_large(ciphertexts: Uint8Array[]): Uint8Array {\n const final_len = ciphertexts.reduce(\n (acc, c) => acc + c.byteLength - this.algorithms.aead.TAGBYTES, 0);\n const final = new Uint8Array(final_len);\n let offset = 0;\n ciphertexts.forEach(c => {\n const p = this.decrypt(c);\n final.set(p, offset);\n offset += p.byteLength;\n });\n return final;\n }\n}\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nexport class Nonce {\n constructor(public lo = 0, public hi = 0, public extra = 0) {}\n\n increment() {\n const oldLo = this.lo;\n const newLo = (oldLo + 1) | 0;\n this.lo = newLo;\n if (newLo < oldLo) this.hi = (this.hi + 1) | 0;\n }\n\n reset(lo = 0, hi = 0, extra = 0) {\n this.lo = lo;\n this.hi = hi;\n this.extra = extra;\n }\n\n static get MAX(): Nonce {\n return new Nonce(0xffffffff, 0xffffffff);\n }\n}\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nimport { AEAD } from '../aead.js';\nimport { Nonce } from '../nonce.js';\n\nexport type Rekey = (k: DataView) => DataView;\n\nexport function makeRekey(aead: AEAD): Rekey {\n return (k: DataView): DataView => {\n return new DataView(aead.encrypt(new Uint8Array(32), k, Nonce.MAX).buffer);\n };\n}\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nimport { DHKeyPair } from '../dh.js';\nimport * as Bytes from '../bytes.js';\n\nimport { Algorithms } from './algorithms.js';\nimport { CipherState } from './cipherstate.js';\nimport { HandshakePattern, KeyMixToken, lookupPattern, Token } from './patterns.js';\nimport { HKDF, makeHKDF } from '../hkdf.js';\nimport { makeHMAC } from '../hmac.js';\n\nexport type Role = 'initiator' | 'responder';\n\nexport type HandshakeOptions = {\n prologue?: Uint8Array,\n staticKeypair?: DHKeyPair,\n remoteStaticPublicKey?: Uint8Array,\n pregeneratedEphemeralKeypair?: DHKeyPair,\n remotePregeneratedEphemeralPublicKey?: Uint8Array,\n preSharedKeys?: Uint8Array[],\n};\n\nexport type TransportState = { send: CipherState, recv: CipherState };\n\nexport class Handshake {\n staticKeypair: DHKeyPair;\n remoteStaticPublicKey: Uint8Array | null;\n ephemeralKeypair: DHKeyPair;\n remoteEphemeralPublicKey: Uint8Array | null;\n preSharedKeys?: Uint8Array[];\n stepIndex = 0;\n cipherState: CipherState;\n chainingKey: Uint8Array;\n handshakeHash: Uint8Array;\n hkdf: HKDF;\n pattern: HandshakePattern;\n\n constructor (public algorithms: Algorithms,\n pattern: HandshakePattern | string,\n public role: Role,\n options: HandshakeOptions = {})\n {\n if (typeof pattern === 'string') {\n const p = lookupPattern(pattern);\n if (p === null) throw new Error(\"Unknown Noise Protocol handshake pattern \" + pattern);\n this.pattern = p;\n } else {\n this.pattern = pattern;\n }\n\n this.staticKeypair = options.staticKeypair ?? this.algorithms.dh.generateKeypair();\n this.remoteStaticPublicKey = options.remoteStaticPublicKey ?? null;\n this.ephemeralKeypair = options.pregeneratedEphemeralKeypair ?? this.algorithms.dh.generateKeypair();\n this.remoteEphemeralPublicKey = options.remotePregeneratedEphemeralPublicKey ?? null;\n this.preSharedKeys = options.preSharedKeys;\n if (this.preSharedKeys) {\n this.preSharedKeys = this.preSharedKeys.slice();\n if (this.preSharedKeys.length === 0) this.preSharedKeys = void 0;\n }\n\n const protocolName = new TextEncoder().encode(\n 'Noise_' + this.pattern.name +\n '_' + this.algorithms.dh.NAME +\n '_' + this.algorithms.aead.NAME +\n '_' + this.algorithms.hash.NAME);\n\n this.cipherState = new CipherState(this.algorithms);\n {\n const ckLen = this.algorithms.hash.OUTBYTES;\n const ckSeed = (protocolName.byteLength > ckLen)\n ? this.algorithms.hash.digest(protocolName)\n : protocolName;\n this.chainingKey = Bytes.append(ckSeed, new Uint8Array(ckLen - ckSeed.byteLength));\n }\n this.handshakeHash = this.chainingKey;\n\n this.mixHash(options.prologue ?? Bytes.EMPTY);\n this.pattern.initiatorPreMessage.forEach(t => this.mixHash(t === 'e'\n ? (this.isInitiator ? this.ephemeralKeypair.public : this.remoteEphemeralPublicKey!)\n : (this.isInitiator ? this.staticKeypair.public : this.remoteStaticPublicKey!)));\n this.pattern.responderPreMessage.forEach(t => this.mixHash(t === 'e'\n ? (!this.isInitiator ? this.ephemeralKeypair.public : this.remoteEphemeralPublicKey!)\n : (!this.isInitiator ? this.staticKeypair.public : this.remoteStaticPublicKey!)));\n\n this.hkdf = this.algorithms.hkdf ?? makeHKDF(\n this.algorithms.hmac ?? makeHMAC(this.algorithms.hash));\n }\n\n get isInitiator(): boolean {\n return this.role === 'initiator';\n }\n\n mixHash(data: Uint8Array) {\n this.handshakeHash = this.algorithms.hash.digest(Bytes.append(this.handshakeHash, data));\n }\n\n mixKey(input: Uint8Array) {\n const [newCk, k] = this.hkdf(this.chainingKey, input, 2);\n this.chainingKey = newCk;\n this.cipherState = new CipherState(this.algorithms, k);\n }\n\n mixKeyAndHashNextPSK() {\n const psk = this.preSharedKeys!.shift()!;\n const [newCk, tempH, k] = this.hkdf(this.chainingKey, psk, 3);\n this.chainingKey = newCk;\n this.mixHash(tempH);\n this.cipherState = new CipherState(this.algorithms, k);\n }\n\n encryptAndHash(p: Uint8Array) {\n const c = this.cipherState.encrypt(p, this.handshakeHash);\n this.mixHash(c);\n return c;\n }\n\n decryptAndHash(c: Uint8Array) {\n const p = this.cipherState.decrypt(c, this.handshakeHash);\n this.mixHash(c);\n return p;\n }\n\n _split(): TransportState | null {\n if (this.stepIndex < this.pattern.messages.length) {\n return null;\n } else {\n let [kI, kR] = this.hkdf(this.chainingKey, Bytes.EMPTY, 2)\n .map(k => new CipherState(this.algorithms, k));\n return this.isInitiator ? { send: kI, recv: kR } : { send: kR, recv: kI };\n }\n }\n\n _nextStep(): Token[] {\n if (this.stepIndex >= this.pattern.messages.length) {\n throw new Error(\"Handshake already complete, cannot continue\");\n }\n return this.pattern.messages[this.stepIndex++];\n }\n\n _processKeyMixToken(t: KeyMixToken) {\n switch (t) {\n case 'ee':\n this.mixKey(this.algorithms.dh.dh(this.ephemeralKeypair, this.remoteEphemeralPublicKey!));\n break;\n\n case 'es':\n this.mixKey(this.isInitiator\n ? this.algorithms.dh.dh(this.ephemeralKeypair, this.remoteStaticPublicKey!)\n : this.algorithms.dh.dh(this.staticKeypair, this.remoteEphemeralPublicKey!));\n break;\n\n case 'se':\n this.mixKey(!this.isInitiator\n ? this.algorithms.dh.dh(this.ephemeralKeypair, this.remoteStaticPublicKey!)\n : this.algorithms.dh.dh(this.staticKeypair, this.remoteEphemeralPublicKey!));\n break;\n\n case 'ss':\n this.mixKey(this.algorithms.dh.dh(this.staticKeypair, this.remoteStaticPublicKey!));\n break;\n\n case 'psk':\n this.mixKeyAndHashNextPSK();\n break;\n }\n }\n\n writeMessage(payload: Uint8Array): { packet: Uint8Array, finished: TransportState | null } {\n const pieces = [];\n this._nextStep().forEach(t => {\n switch (t) {\n case 'e':\n pieces.push(this.ephemeralKeypair.public);\n this.mixHash(this.ephemeralKeypair.public);\n if (this.preSharedKeys) this.mixKey(this.ephemeralKeypair.public);\n break;\n\n case 's':\n pieces.push(this.encryptAndHash(this.staticKeypair.public));\n break;\n\n default:\n this._processKeyMixToken(t);\n break;\n }\n });\n pieces.push(this.encryptAndHash(payload));\n\n let packet: Uint8Array;\n if (pieces.length === 1) {\n packet = pieces[0];\n } else {\n packet = new Uint8Array(pieces.reduce((ac, p) => ac + p.byteLength, 0));\n let offset = 0;\n pieces.forEach(p => { packet.set(p, offset); offset += p.byteLength; });\n }\n\n return { packet, finished: this._split() };\n }\n\n readMessage(packet: Uint8Array): { message: Uint8Array, finished: TransportState | null } {\n const take = (n: number): Uint8Array => {\n const bs = packet.slice(0, n);\n packet = packet.subarray(n);\n return bs;\n };\n this._nextStep().forEach(t => {\n switch (t) {\n case 'e':\n this.remoteEphemeralPublicKey = take(this.algorithms.dh.DHLEN);\n this.mixHash(this.remoteEphemeralPublicKey);\n if (this.preSharedKeys) this.mixKey(this.remoteEphemeralPublicKey);\n break;\n\n case 's':\n this.remoteStaticPublicKey = this.decryptAndHash(take(\n this.algorithms.dh.DHLEN + (this.cipherState.view ? 16 : 0)));\n break;\n\n default:\n this._processKeyMixToken(t);\n break;\n }\n });\n\n const message = this.decryptAndHash(packet);\n return { message, finished: this._split() };\n }\n\n async completeHandshake(writePacket: (packet: Uint8Array) => Promise<void>,\n readPacket: () => Promise<Uint8Array>,\n handleMessage = async (_m: Uint8Array): Promise<void> => {},\n produceMessage = async (): Promise<Uint8Array> => new Uint8Array(0))\n : Promise<TransportState>\n {\n const W = async (): Promise<TransportState> => {\n const { packet, finished } = this.writeMessage(await produceMessage());\n await writePacket(packet);\n return finished || R();\n };\n const R = async (): Promise<TransportState> => {\n const { message, finished } = this.readMessage(await readPacket());\n await handleMessage(message);\n return finished || W();\n };\n return (this.isInitiator ? W() : R());\n }\n}\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nexport type KeyTransferToken = 'e' | 's';\nexport type KeyMixToken = 'ee' | 'es' | 'se' | 'ss' | 'psk';\nexport type Token = KeyTransferToken | KeyMixToken;\nexport type PreMessage = ['e'] | ['s'] | ['e', 's'] | [];\n\nexport interface HandshakePattern {\n name: string; // e.g. \"NNpsk2\"\n baseName: string; // e.g. \"NN\"\n messages: Token[][];\n initiatorPreMessage: PreMessage;\n responderPreMessage: PreMessage;\n}\n\nexport const PATTERNS: { [key: string]: HandshakePattern } = {};\n\nfunction _p(\n name: string,\n messages: Token[][],\n initiatorPreMessage: PreMessage,\n responderPreMessage: PreMessage,\n) {\n const pat = { name, baseName: name, messages, initiatorPreMessage, responderPreMessage };\n PATTERNS[pat.name] = pat;\n}\n\n_p(\"I1K1\", [[\"e\",\"s\"],[\"e\",\"ee\",\"es\"],[\"se\"]], [], [\"s\"]);\n_p(\"I1K\", [[\"e\",\"es\",\"s\"],[\"e\",\"ee\"],[\"se\"]], [], [\"s\"]);\n_p(\"I1N\", [[\"e\",\"s\"],[\"e\",\"ee\"],[\"se\"]], [], []);\n_p(\"I1X1\", [[\"e\",\"s\"],[\"e\",\"ee\",\"s\"],[\"se\",\"es\"]], [], []);\n_p(\"I1X\", [[\"e\",\"s\"],[\"e\",\"ee\",\"s\",\"es\"],[\"se\"]], [], []);\n_p(\"IK1\", [[\"e\",\"s\"],[\"e\",\"ee\",\"se\",\"es\"]], [], [\"s\"]);\n_p(\"IK\", [[\"e\",\"es\",\"s\",\"ss\"],[\"e\",\"ee\",\"se\"]], [], [\"s\"]);\n_p(\"IN\", [[\"e\",\"s\"],[\"e\",\"ee\",\"se\"]], [], []);\n_p(\"IX1\", [[\"e\",\"s\"],[\"e\",\"ee\",\"se\",\"s\"],[\"es\"]], [], []);\n_p(\"IX\", [[\"e\",\"s\"],[\"e\",\"ee\",\"se\",\"s\",\"es\"]], [], []);\n_p(\"K1K1\", [[\"e\"],[\"e\",\"ee\",\"es\"],[\"se\"]], [\"s\"], [\"s\"]);\n_p(\"K1K\", [[\"e\",\"es\"],[\"e\",\"ee\"],[\"se\"]], [\"s\"], [\"s\"]);\n_p(\"K1N\", [[\"e\"],[\"e\",\"ee\"],[\"se\"]], [\"s\"], []);\n_p(\"K1X1\", [[\"e\"],[\"e\",\"ee\",\"s\"],[\"se\",\"es\"]], [\"s\"], []);\n_p(\"K1X\", [[\"e\"],[\"e\",\"ee\",\"s\",\"es\"],[\"se\"]], [\"s\"], []);\n_p(\"K\", [[\"e\",\"es\",\"ss\"]], [\"s\"], [\"s\"]);\n_p(\"KK1\", [[\"e\"],[\"e\",\"ee\",\"se\",\"es\"]], [\"s\"], [\"s\"]);\n_p(\"KK\", [[\"e\",\"es\",\"ss\"],[\"e\",\"ee\",\"se\"]], [\"s\"], [\"s\"]);\n_p(\"KN\", [[\"e\"],[\"e\",\"ee\",\"se\"]], [\"s\"], []);\n_p(\"KX1\", [[\"e\"],[\"e\",\"ee\",\"se\",\"s\"],[\"es\"]], [\"s\"], []);\n_p(\"KX\", [[\"e\"],[\"e\",\"ee\",\"se\",\"s\",\"es\"]], [\"s\"], []);\n_p(\"N\", [[\"e\",\"es\"]], [], [\"s\"]);\n_p(\"NK1\", [[\"e\"],[\"e\",\"ee\",\"es\"]], [], [\"s\"]);\n_p(\"NK\", [[\"e\",\"es\"],[\"e\",\"ee\"]], [], [\"s\"]);\n_p(\"NN\", [[\"e\"],[\"e\",\"ee\"]], [], []);\n_p(\"NX1\", [[\"e\"],[\"e\",\"ee\",\"s\"],[\"es\"]], [], []);\n_p(\"NX\", [[\"e\"],[\"e\",\"ee\",\"s\",\"es\"]], [], []);\n_p(\"X1K1\", [[\"e\"],[\"e\",\"ee\",\"es\"],[\"s\"],[\"se\"]], [], [\"s\"]);\n_p(\"X1K\", [[\"e\",\"es\"],[\"e\",\"ee\"],[\"s\"],[\"se\"]], [], [\"s\"]);\n_p(\"X1N\", [[\"e\"],[\"e\",\"ee\"],[\"s\"],[\"se\"]], [], []);\n_p(\"X1X1\", [[\"e\"],[\"e\",\"ee\",\"s\"],[\"es\",\"s\"],[\"se\"]], [], []);\n_p(\"X1X\", [[\"e\"],[\"e\",\"ee\",\"s\",\"es\"],[\"s\"],[\"se\"]], [], []);\n_p(\"X\", [[\"e\",\"es\",\"s\",\"ss\"]], [], [\"s\"]);\n_p(\"XK1\", [[\"e\"],[\"e\",\"ee\",\"es\"],[\"s\",\"se\"]], [], [\"s\"]);\n_p(\"XK\", [[\"e\",\"es\"],[\"e\",\"ee\"],[\"s\",\"se\"]], [], [\"s\"]);\n_p(\"XN\", [[\"e\"],[\"e\",\"ee\"],[\"s\",\"se\"]], [], []);\n_p(\"XX1\", [[\"e\"],[\"e\",\"ee\",\"s\"],[\"es\",\"s\",\"se\"]], [], []);\n_p(\"XX\", [[\"e\"],[\"e\",\"ee\",\"s\",\"es\"],[\"s\",\"se\"]], [], []);\n\nexport function isOneWay(pat: HandshakePattern): boolean {\n return pat.baseName.length === 1;\n}\n\nconst NAME_RE = /^([NKX]|[NKXI]1?[NKX]1?)([a-z][a-z0-9]*(\\+[a-z][a-z0-9]*)*)?$/;\nconst PSK_RE = /^psk([0-9]+)$/;\n\nexport function lookupPattern(name: string): HandshakePattern | null {\n const m = NAME_RE.exec(name);\n if (m === null) return null;\n const modifiers = m[2]?.split('+') ?? [];\n let pat: HandshakePattern | null = PATTERNS[m[1]] ?? null;\n if (!pat) return null;\n modifiers.forEach(m => pat = pat && applyModifier(pat, m));\n return pat && { ... pat, name };\n}\n\nfunction applyModifier(pat: HandshakePattern, mod: string): HandshakePattern | null {\n const m = PSK_RE.exec(mod);\n if (m === null) return null;\n const n = parseInt(m[1], 10);\n const messages = pat.messages;\n return { ... pat, messages: (n === 0\n ? [[\"psk\", ... messages[0]], ... messages.slice(1)]\n : [... messages.slice(0, n-1), [... messages[n-1], \"psk\"], ... messages.slice(n)]) };\n}\n","/// SPDX-License-Identifier: MIT\n/// SPDX-FileCopyrightText: Copyright © 2023-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nimport { Algorithms } from './algorithms.js';\nimport { BLAKE2s } from '../hash.js';\nimport { ChaCha20Poly1305_RFC8439 } from '../aead.js';\nimport { X25519 } from '../dh.js';\n\nexport const Noise_25519_ChaChaPoly_BLAKE2s: Algorithms = {\n dh: X25519,\n aead: ChaCha20Poly1305_RFC8439,\n hash: BLAKE2s,\n};\n"],"mappings":"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","names":["src_exports","__export","AuthenticationFailure","BLAKE2s","bytes_exports","ChaCha20","ChaCha20Poly1305_RFC8439","CipherState","Handshake","INTERNALS","io_exports","Noise_25519_ChaChaPoly_BLAKE2s","Nonce","PATTERNS","Poly1305","X25519","_decrypt","_encrypt","_randomBytes","isOneWay","lookupPattern","makeHKDF","makeHMAC","matchPattern","randomBytes","chacha20poly1305_exports","__export","ChaCha20Poly1305_RFC8439","chacha20_exports","__export","ChaCha20","chacha20_block","chacha20_quarter_round","ROTATE","n","bits","s","a","b","c","d","fill_state","state","key","block","nonce","round","serializeNonce","view","nonce0","input","output","initial_counter","messagelength","whole_blocks","remaining_bytes","j","chunk","i","poly1305_exports","__export","Poly1305","_a","key","outlen","t0","t1","t2","t3","t4","t5","t6","t7","input","p","m","mpos","bytes","hibit","h0","h1","h2","h3","h4","h5","h6","h7","h8","h9","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","c","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","mac","i","g","mask","f","want","bytes_exports","__export","EMPTY","append","equal","xor","verify","x","y","n","d","i","a","b","len","r","PADDING","pad16","p","unpadded_length","leftover","aead_tag","tag","key","nonce","ciphertext","cipherlength","associated_data","mac_key","Poly1305","ChaCha20","L","Lv","ChaCha20Poly1305_RFC8439","plaintext","messagelength","_encrypt","expected_tag","actual_tag","ok","equal","_decrypt","AuthenticationFailure","_encrypt","plaintext","key","nonce","associated_data","ciphertextAndTag","_decrypt","_randomBytes","x","n","i","__require","crypto","randomBytes","bs","x25519_exports","__export","crypto_scalarmult","crypto_scalarmult_BYTES","crypto_scalarmult_SCALARBYTES","crypto_scalarmult_base","scalarMult","scalarMultBase","gf","_9","_121665","car25519","o","c","i","v","sel25519","p","q","b","t","pack25519","n","m","j","unpack25519","A","a","Z","M","t0","t1","t2","t3","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","S","inv25519","z","x","d","e","f","r","x32","x16","X25519","scalarMult","sk","randomBytes","scalarMultBase","kp","pk","blake2s_exports","__export","BLAKE2s","ROTR32","n","bits","B2S_G","v","a","b","c","d","x","y","blake2s_iv","_sigma","sigma","j","_a","key","outlen","keylen","input","p","offset","length","i","output","last","m","makeHKDF","hmac","hkdf","chainingKey","input","numOutputs","tempKey","o1","o2","append","makeHMAC","hash","HMAC_IPAD","HMAC_OPAD","hmac","key0","data","key1","key","append","xor","io_exports","__export","fromBase64","fromHex","toBase64","toHex","bs","s","b","len","result","i","withPadding","r","algorithms_exports","__export","matchPattern","a","protocol_name","m","cipherstate_exports","__export","CipherState","Nonce","_Nonce","lo","hi","extra","oldLo","newLo","rekey_exports","__export","makeRekey","makeRekey","aead","k","Nonce","CipherState","algorithms","key","Nonce","plaintext","associated_data","ciphertext","_a","makeRekey","pieces","ciphertexts","final_len","acc","c","final","offset","p","handshake_exports","__export","Handshake","patterns_exports","__export","PATTERNS","isOneWay","lookupPattern","PATTERNS","_p","name","messages","initiatorPreMessage","responderPreMessage","pat","isOneWay","NAME_RE","PSK_RE","lookupPattern","_a","_b","_c","m","modifiers","applyModifier","__spreadProps","__spreadValues","mod","n","Handshake","algorithms","pattern","role","options","_a","_b","_c","_d","_e","_f","_g","p","lookupPattern","protocolName","CipherState","ckLen","ckSeed","append","EMPTY","t","makeHKDF","makeHMAC","data","input","newCk","k","psk","tempH","c","kI","kR","payload","pieces","packet","ac","offset","take","bs","writePacket","readPacket","handleMessage","_m","produceMessage","W","finished","R","message","profiles_exports","__export","Noise_25519_ChaChaPoly_BLAKE2s","Noise_25519_ChaChaPoly_BLAKE2s","X25519","ChaCha20Poly1305_RFC8439","BLAKE2s","INTERNALS","chacha20poly1305_exports","chacha20_exports","x25519_exports","blake2s_exports","poly1305_exports","algorithms_exports","cipherstate_exports","handshake_exports","patterns_exports","profiles_exports","rekey_exports"]}
|
package/dist/salty-crypto.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).SaltyCrypto={})}(this,(function(t){"use strict";function e(t,e){return t<<e|t>>>32-e}function s(t,s,i,h,r){t[s]+=t[i],t[r]^=t[s],t[r]=e(t[r],16),t[h]+=t[r],t[i]^=t[h],t[i]=e(t[i],12),t[s]+=t[i],t[r]^=t[s],t[r]=e(t[r],8),t[h]+=t[r],t[i]^=t[h],t[i]=e(t[i],7)}function i(t,e,s,i){t[0]+=1634760805,t[1]+=857760878,t[2]+=2036477234,t[3]+=1797285236,t[4]+=e.getUint32(0,!0),t[5]+=e.getUint32(4,!0),t[6]+=e.getUint32(8,!0),t[7]+=e.getUint32(12,!0),t[8]+=e.getUint32(16,!0),t[9]+=e.getUint32(20,!0),t[10]+=e.getUint32(24,!0),t[11]+=e.getUint32(28,!0),t[12]+=s,t[13]+=i.getUint32(0,!0),t[14]+=i.getUint32(4,!0),t[15]+=i.getUint32(8,!0)}function h(t,e,h){const r=new Uint32Array(16);i(r,t,e,h);for(let t=0;t<20;t+=2)s(r,0,4,8,12),s(r,1,5,9,13),s(r,2,6,10,14),s(r,3,7,11,15),s(r,0,5,10,15),s(r,1,6,11,12),s(r,2,7,8,13),s(r,3,4,9,14);return i(r,t,e,h),r}const r={NAME:"chacha20",KEYBYTES:32,NONCEBYTES:12,BLOCKBYTES:64,stream_xor(t,e,s,i,n=0,a=s.byteLength){const o=function(t){const e=new DataView(new ArrayBuffer(r.NONCEBYTES));return e.setUint32(0,t.extra,!0),e.setUint32(4,t.lo,!0),e.setUint32(8,t.hi,!0),e}(e),l=a>>6,c=63&a;for(let e=0;e<l;e++){const r=h(t,n+e,o);for(let t=0;t<64;t++)i[(e<<6)+t]=s[(e<<6)+t]^r[t>>2]>>((3&t)<<3)}if(0!==c){const e=h(t,n+l,o);for(let t=0;t<c;t++)i[(l<<6)+t]=s[(l<<6)+t]^e[t>>2]>>((3&t)<<3)}}};var n,a=Object.freeze({__proto__:null,ChaCha20:r,chacha20_block:h,chacha20_quarter_round:s});const o=(n=class t{static digest(e,s,i){const h=new t(s,i);return h.update(e),h.final()}constructor(e,s){if(this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.leftover=0,this.fin=0,!e)throw new Error("Poly1305: key required");if((null!=s?s:t.OUTBYTES)!==t.OUTBYTES)throw new Error("Poly1305: outlen != OUTBYTES");const i=255&e[0]|(255&e[1])<<8;this.r[0]=8191&i;const h=255&e[2]|(255&e[3])<<8;this.r[1]=8191&(i>>>13|h<<3);const r=255&e[4]|(255&e[5])<<8;this.r[2]=7939&(h>>>10|r<<6);const n=255&e[6]|(255&e[7])<<8;this.r[3]=8191&(r>>>7|n<<9);const a=255&e[8]|(255&e[9])<<8;this.r[4]=255&(n>>>4|a<<12),this.r[5]=a>>>1&8190;const o=255&e[10]|(255&e[11])<<8;this.r[6]=8191&(a>>>14|o<<2);const l=255&e[12]|(255&e[13])<<8;this.r[7]=8065&(o>>>11|l<<5);const c=255&e[14]|(255&e[15])<<8;this.r[8]=8191&(l>>>8|c<<8),this.r[9]=c>>>5&127,this.pad[0]=255&e[16]|(255&e[17])<<8,this.pad[1]=255&e[18]|(255&e[19])<<8,this.pad[2]=255&e[20]|(255&e[21])<<8,this.pad[3]=255&e[22]|(255&e[23])<<8,this.pad[4]=255&e[24]|(255&e[25])<<8,this.pad[5]=255&e[26]|(255&e[27])<<8,this.pad[6]=255&e[28]|(255&e[29])<<8,this.pad[7]=255&e[30]|(255&e[31])<<8}blocks(t,e,s){const i=this.fin?0:2048;let h=this.h[0],r=this.h[1],n=this.h[2],a=this.h[3],o=this.h[4],l=this.h[5],c=this.h[6],f=this.h[7],u=this.h[8],y=this.h[9],p=this.r[0],d=this.r[1],m=this.r[2],g=this.r[3],b=this.r[4],K=this.r[5],w=this.r[6],E=this.r[7],_=this.r[8],A=this.r[9];for(;s>=16;){const U=255&t[e+0]|(255&t[e+1])<<8;h+=8191&U;const M=255&t[e+2]|(255&t[e+3])<<8;r+=8191&(U>>>13|M<<3);const S=255&t[e+4]|(255&t[e+5])<<8;n+=8191&(M>>>10|S<<6);const v=255&t[e+6]|(255&t[e+7])<<8;a+=8191&(S>>>7|v<<9);const L=255&t[e+8]|(255&t[e+9])<<8;o+=8191&(v>>>4|L<<12),l+=L>>>1&8191;const N=255&t[e+10]|(255&t[e+11])<<8;c+=8191&(L>>>14|N<<2);const x=255&t[e+12]|(255&t[e+13])<<8;f+=8191&(N>>>11|x<<5);const T=255&t[e+14]|(255&t[e+15])<<8;u+=8191&(x>>>8|T<<8),y+=T>>>5|i;let k=0,P=k;P+=h*p,P+=r*(5*A),P+=n*(5*_),P+=a*(5*E),P+=o*(5*w),k=P>>>13,P&=8191,P+=l*(5*K),P+=c*(5*b),P+=f*(5*g),P+=u*(5*m),P+=y*(5*d),k+=P>>>13,P&=8191;let B=k;B+=h*d,B+=r*p,B+=n*(5*A),B+=a*(5*_),B+=o*(5*E),k=B>>>13,B&=8191,B+=l*(5*w),B+=c*(5*K),B+=f*(5*b),B+=u*(5*g),B+=y*(5*m),k+=B>>>13,B&=8191;let O=k;O+=h*m,O+=r*d,O+=n*p,O+=a*(5*A),O+=o*(5*_),k=O>>>13,O&=8191,O+=l*(5*E),O+=c*(5*w),O+=f*(5*K),O+=u*(5*b),O+=y*(5*g),k+=O>>>13,O&=8191;let C=k;C+=h*g,C+=r*m,C+=n*d,C+=a*p,C+=o*(5*A),k=C>>>13,C&=8191,C+=l*(5*_),C+=c*(5*E),C+=f*(5*w),C+=u*(5*K),C+=y*(5*b),k+=C>>>13,C&=8191;let H=k;H+=h*b,H+=r*g,H+=n*m,H+=a*d,H+=o*p,k=H>>>13,H&=8191,H+=l*(5*A),H+=c*(5*_),H+=f*(5*E),H+=u*(5*w),H+=y*(5*K),k+=H>>>13,H&=8191;let X=k;X+=h*K,X+=r*b,X+=n*g,X+=a*m,X+=o*d,k=X>>>13,X&=8191,X+=l*p,X+=c*(5*A),X+=f*(5*_),X+=u*(5*E),X+=y*(5*w),k+=X>>>13,X&=8191;let Y=k;Y+=h*w,Y+=r*K,Y+=n*b,Y+=a*g,Y+=o*m,k=Y>>>13,Y&=8191,Y+=l*d,Y+=c*p,Y+=f*(5*A),Y+=u*(5*_),Y+=y*(5*E),k+=Y>>>13,Y&=8191;let I=k;I+=h*E,I+=r*w,I+=n*K,I+=a*b,I+=o*g,k=I>>>13,I&=8191,I+=l*m,I+=c*d,I+=f*p,I+=u*(5*A),I+=y*(5*_),k+=I>>>13,I&=8191;let z=k;z+=h*_,z+=r*E,z+=n*w,z+=a*K,z+=o*b,k=z>>>13,z&=8191,z+=l*g,z+=c*m,z+=f*d,z+=u*p,z+=y*(5*A),k+=z>>>13,z&=8191;let j=k;j+=h*A,j+=r*_,j+=n*E,j+=a*w,j+=o*K,k=j>>>13,j&=8191,j+=l*b,j+=c*g,j+=f*m,j+=u*d,j+=y*p,k+=j>>>13,j&=8191,k=(k<<2)+k|0,k=k+P|0,P=8191&k,k>>>=13,B+=k,h=P,r=B,n=O,a=C,o=H,l=X,c=Y,f=I,u=z,y=j,e+=16,s-=16}this.h[0]=h,this.h[1]=r,this.h[2]=n,this.h[3]=a,this.h[4]=o,this.h[5]=l,this.h[6]=c,this.h[7]=f,this.h[8]=u,this.h[9]=y}final(e){if(e||(e=new Uint8Array(t.OUTBYTES)),this.leftover){let t=this.leftover;for(this.buffer[t++]=1;t<16;t++)this.buffer[t]=0;this.fin=1,this.blocks(this.buffer,0,16)}let s=this.h[1]>>>13;this.h[1]&=8191;for(let t=2;t<10;t++)this.h[t]+=s,s=this.h[t]>>>13,this.h[t]&=8191;this.h[0]+=5*s,s=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=s,s=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=s;const i=new Uint16Array(10);i[0]=this.h[0]+5,s=i[0]>>>13,i[0]&=8191;for(let t=1;t<10;t++)i[t]=this.h[t]+s,s=i[t]>>>13,i[t]&=8191;i[9]-=8192;let h=(1^s)-1;for(let t=0;t<10;t++)i[t]&=h;h=~h;for(let t=0;t<10;t++)this.h[t]=this.h[t]&h|i[t];this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5);let r=this.h[0]+this.pad[0];this.h[0]=65535&r;for(let t=1;t<8;t++)r=(this.h[t]+this.pad[t]|0)+(r>>>16)|0,this.h[t]=65535&r;return e[0]=this.h[0]>>>0&255,e[1]=this.h[0]>>>8&255,e[2]=this.h[1]>>>0&255,e[3]=this.h[1]>>>8&255,e[4]=this.h[2]>>>0&255,e[5]=this.h[2]>>>8&255,e[6]=this.h[3]>>>0&255,e[7]=this.h[3]>>>8&255,e[8]=this.h[4]>>>0&255,e[9]=this.h[4]>>>8&255,e[10]=this.h[5]>>>0&255,e[11]=this.h[5]>>>8&255,e[12]=this.h[6]>>>0&255,e[13]=this.h[6]>>>8&255,e[14]=this.h[7]>>>0&255,e[15]=this.h[7]>>>8&255,e}update(t,e=0,s=t.byteLength){if(this.leftover){let i=16-this.leftover;i>s&&(i=s);for(let s=0;s<i;s++)this.buffer[this.leftover+s]=t[e+s];if(s-=i,e+=i,this.leftover+=i,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(s>=16){const i=s-s%16;this.blocks(t,e,i),e+=i,s-=i}if(s){for(let i=0;i<s;i++)this.buffer[this.leftover+i]=t[e+i];this.leftover+=s}}},n.NAME="Poly1305",n.KEYBYTES=32,n.OUTBYTES=16,n.BLOCKLEN=16,n);var l=Object.freeze({__proto__:null,Poly1305:o});function c(t,e,s){return 0===function(t,e,s){let i=0;for(let h=0;h<s;h++)i|=t[h]^e[h];return(1&i-1>>>8)-1}(t,e,s)}function f(t,e){const s=Math.min(t.byteLength,e.byteLength),i=new Uint8Array(s);for(let h=0;h<s;h++)i[h]=t[h]^e[h];return i}function u(t,e){const s=new Uint8Array(t.byteLength+e.byteLength);return s.set(t,0),s.set(e,t.byteLength),s}const y=new Uint8Array(0);var p=Object.freeze({__proto__:null,EMPTY:y,append:u,equal:c,xor:f});const d=new Uint8Array(16);function m(t,e){const s=15&e;0!==s&&t.update(d,0,16-s)}function g(t,e,s,i,h,n){const a=new Uint8Array(o.KEYBYTES);r.stream_xor(e,s,a,a,0);const l=new o(a);void 0!==n&&(l.update(n,0,n.byteLength),m(l,n.byteLength)),l.update(i,0,h),m(l,h);const c=new Uint8Array(16),f=new DataView(c.buffer);void 0!==n&&f.setUint32(0,n.byteLength,!0),f.setUint32(8,h,!0),l.update(c,0,c.byteLength),l.final(t)}const b={NAME:"ChaChaPoly",KEYBYTES:32,NONCEBYTES:12,TAGBYTES:16,encrypt_detached(t,e,s,i,h,n,a){r.stream_xor(h,n,t,e,1,s),g(i,h,n,e,s,a)},encrypt:E,decrypt_detached(t,e,s,i,h,n,a){const o=new Uint8Array(this.TAGBYTES);g(o,h,n,e,s,a);const l=c(o,i,o.byteLength);return l&&r.stream_xor(h,n,e,t,1,s),l},decrypt:_};var K=Object.freeze({__proto__:null,ChaCha20Poly1305_RFC8439:b});class w extends Error{}function E(t,e,s,i){const h=new Uint8Array(t.byteLength+this.TAGBYTES);return this.encrypt_detached(t,h,t.byteLength,h.subarray(t.byteLength),e,s,i),h}function _(t,e,s,i){const h=new Uint8Array(t.byteLength-this.TAGBYTES);if(!this.decrypt_detached(h,t,h.byteLength,t.subarray(h.byteLength),e,s,i))throw new w("AEAD authentication failed");return h}const A=(()=>{var t="undefined"!=typeof self?self.crypto||self.msCrypto:null;if(t&&t.getRandomValues){const e=65536;return(s,i)=>{for(let h=0;h<i;h+=e)t.getRandomValues(s.subarray(h,h+Math.min(i-h,e)))}}if("undefined"!=typeof require&&(t=require("crypto"))&&t.randomBytes)return(e,s)=>e.set(t.randomBytes(s));throw new Error("No usable randomness source found")})();function U(t){const e=new Uint8Array(t);return A(e,t),e}function M(){return new Float64Array(16)}const S=new Uint8Array(32);S[0]=9;const v=M();function L(t){let e=1;for(let s=0;s<16;s++){const i=t[s]+e+65535;e=Math.floor(i/65536),t[s]=i-65536*e}t[0]+=e-1+37*(e-1)}function N(t,e,s){const i=~(s-1);for(let s=0;s<16;s++){const h=i&(t[s]^e[s]);t[s]^=h,e[s]^=h}}function x(t,e,s){for(let i=0;i<16;i++)t[i]=e[i]+s[i]}function T(t,e,s){for(let i=0;i<16;i++)t[i]=e[i]-s[i]}function k(t,e,s){let i=0,h=0,r=0,n=0,a=0,o=0,l=0,c=0,f=0,u=0,y=0,p=0,d=0,m=0,g=0,b=0,K=0,w=0,E=0,_=0,A=0,U=0,M=0,S=0,v=0,L=0,N=0,x=0,T=0,k=0,P=0;const B=s[0],O=s[1],C=s[2],H=s[3],X=s[4],Y=s[5],I=s[6],z=s[7],j=s[8],D=s[9],R=s[10],F=s[11],V=s[12],G=s[13],$=s[14],q=s[15];let W=e[0];i+=W*B,h+=W*O,r+=W*C,n+=W*H,a+=W*X,o+=W*Y,l+=W*I,c+=W*z,f+=W*j,u+=W*D,y+=W*R,p+=W*F,d+=W*V,m+=W*G,g+=W*$,b+=W*q,W=e[1],h+=W*B,r+=W*O,n+=W*C,a+=W*H,o+=W*X,l+=W*Y,c+=W*I,f+=W*z,u+=W*j,y+=W*D,p+=W*R,d+=W*F,m+=W*V,g+=W*G,b+=W*$,K+=W*q,W=e[2],r+=W*B,n+=W*O,a+=W*C,o+=W*H,l+=W*X,c+=W*Y,f+=W*I,u+=W*z,y+=W*j,p+=W*D,d+=W*R,m+=W*F,g+=W*V,b+=W*G,K+=W*$,w+=W*q,W=e[3],n+=W*B,a+=W*O,o+=W*C,l+=W*H,c+=W*X,f+=W*Y,u+=W*I,y+=W*z,p+=W*j,d+=W*D,m+=W*R,g+=W*F,b+=W*V,K+=W*G,w+=W*$,E+=W*q,W=e[4],a+=W*B,o+=W*O,l+=W*C,c+=W*H,f+=W*X,u+=W*Y,y+=W*I,p+=W*z,d+=W*j,m+=W*D,g+=W*R,b+=W*F,K+=W*V,w+=W*G,E+=W*$,_+=W*q,W=e[5],o+=W*B,l+=W*O,c+=W*C,f+=W*H,u+=W*X,y+=W*Y,p+=W*I,d+=W*z,m+=W*j,g+=W*D,b+=W*R,K+=W*F,w+=W*V,E+=W*G,_+=W*$,A+=W*q,W=e[6],l+=W*B,c+=W*O,f+=W*C,u+=W*H,y+=W*X,p+=W*Y,d+=W*I,m+=W*z,g+=W*j,b+=W*D,K+=W*R,w+=W*F,E+=W*V,_+=W*G,A+=W*$,U+=W*q,W=e[7],c+=W*B,f+=W*O,u+=W*C,y+=W*H,p+=W*X,d+=W*Y,m+=W*I,g+=W*z,b+=W*j,K+=W*D,w+=W*R,E+=W*F,_+=W*V,A+=W*G,U+=W*$,M+=W*q,W=e[8],f+=W*B,u+=W*O,y+=W*C,p+=W*H,d+=W*X,m+=W*Y,g+=W*I,b+=W*z,K+=W*j,w+=W*D,E+=W*R,_+=W*F,A+=W*V,U+=W*G,M+=W*$,S+=W*q,W=e[9],u+=W*B,y+=W*O,p+=W*C,d+=W*H,m+=W*X,g+=W*Y,b+=W*I,K+=W*z,w+=W*j,E+=W*D,_+=W*R,A+=W*F,U+=W*V,M+=W*G,S+=W*$,v+=W*q,W=e[10],y+=W*B,p+=W*O,d+=W*C,m+=W*H,g+=W*X,b+=W*Y,K+=W*I,w+=W*z,E+=W*j,_+=W*D,A+=W*R,U+=W*F,M+=W*V,S+=W*G,v+=W*$,L+=W*q,W=e[11],p+=W*B,d+=W*O,m+=W*C,g+=W*H,b+=W*X,K+=W*Y,w+=W*I,E+=W*z,_+=W*j,A+=W*D,U+=W*R,M+=W*F,S+=W*V,v+=W*G,L+=W*$,N+=W*q,W=e[12],d+=W*B,m+=W*O,g+=W*C,b+=W*H,K+=W*X,w+=W*Y,E+=W*I,_+=W*z,A+=W*j,U+=W*D,M+=W*R,S+=W*F,v+=W*V,L+=W*G,N+=W*$,x+=W*q,W=e[13],m+=W*B,g+=W*O,b+=W*C,K+=W*H,w+=W*X,E+=W*Y,_+=W*I,A+=W*z,U+=W*j,M+=W*D,S+=W*R,v+=W*F,L+=W*V,N+=W*G,x+=W*$,T+=W*q,W=e[14],g+=W*B,b+=W*O,K+=W*C,w+=W*H,E+=W*X,_+=W*Y,A+=W*I,U+=W*z,M+=W*j,S+=W*D,v+=W*R,L+=W*F,N+=W*V,x+=W*G,T+=W*$,k+=W*q,W=e[15],b+=W*B,K+=W*O,w+=W*C,E+=W*H,_+=W*X,A+=W*Y,U+=W*I,M+=W*z,S+=W*j,v+=W*D,L+=W*R,N+=W*F,x+=W*V,T+=W*G,k+=W*$,P+=W*q,i+=38*K,h+=38*w,r+=38*E,n+=38*_,a+=38*A,o+=38*U,l+=38*M,c+=38*S,f+=38*v,u+=38*L,y+=38*N,p+=38*x,d+=38*T,m+=38*k,g+=38*P;let Z=1;W=i+Z+65535,Z=Math.floor(W/65536),i=W-65536*Z,W=h+Z+65535,Z=Math.floor(W/65536),h=W-65536*Z,W=r+Z+65535,Z=Math.floor(W/65536),r=W-65536*Z,W=n+Z+65535,Z=Math.floor(W/65536),n=W-65536*Z,W=a+Z+65535,Z=Math.floor(W/65536),a=W-65536*Z,W=o+Z+65535,Z=Math.floor(W/65536),o=W-65536*Z,W=l+Z+65535,Z=Math.floor(W/65536),l=W-65536*Z,W=c+Z+65535,Z=Math.floor(W/65536),c=W-65536*Z,W=f+Z+65535,Z=Math.floor(W/65536),f=W-65536*Z,W=u+Z+65535,Z=Math.floor(W/65536),u=W-65536*Z,W=y+Z+65535,Z=Math.floor(W/65536),y=W-65536*Z,W=p+Z+65535,Z=Math.floor(W/65536),p=W-65536*Z,W=d+Z+65535,Z=Math.floor(W/65536),d=W-65536*Z,W=m+Z+65535,Z=Math.floor(W/65536),m=W-65536*Z,W=g+Z+65535,Z=Math.floor(W/65536),g=W-65536*Z,W=b+Z+65535,Z=Math.floor(W/65536),b=W-65536*Z,i+=Z-1+37*(Z-1),Z=1,W=i+Z+65535,Z=Math.floor(W/65536),i=W-65536*Z,W=h+Z+65535,Z=Math.floor(W/65536),h=W-65536*Z,W=r+Z+65535,Z=Math.floor(W/65536),r=W-65536*Z,W=n+Z+65535,Z=Math.floor(W/65536),n=W-65536*Z,W=a+Z+65535,Z=Math.floor(W/65536),a=W-65536*Z,W=o+Z+65535,Z=Math.floor(W/65536),o=W-65536*Z,W=l+Z+65535,Z=Math.floor(W/65536),l=W-65536*Z,W=c+Z+65535,Z=Math.floor(W/65536),c=W-65536*Z,W=f+Z+65535,Z=Math.floor(W/65536),f=W-65536*Z,W=u+Z+65535,Z=Math.floor(W/65536),u=W-65536*Z,W=y+Z+65535,Z=Math.floor(W/65536),y=W-65536*Z,W=p+Z+65535,Z=Math.floor(W/65536),p=W-65536*Z,W=d+Z+65535,Z=Math.floor(W/65536),d=W-65536*Z,W=m+Z+65535,Z=Math.floor(W/65536),m=W-65536*Z,W=g+Z+65535,Z=Math.floor(W/65536),g=W-65536*Z,W=b+Z+65535,Z=Math.floor(W/65536),b=W-65536*Z,i+=Z-1+37*(Z-1),t[0]=i,t[1]=h,t[2]=r,t[3]=n,t[4]=a,t[5]=o,t[6]=l,t[7]=c,t[8]=f,t[9]=u,t[10]=y,t[11]=p,t[12]=d,t[13]=m,t[14]=g,t[15]=b}function P(t,e){k(t,e,e)}function B(t,e,s){const i=new Uint8Array(32),h=new Float64Array(80),r=M(),n=M(),a=M(),o=M(),l=M(),c=M();for(let t=0;t<31;t++)i[t]=e[t];i[31]=127&e[31]|64,i[0]&=248,function(t,e){for(let s=0;s<16;s++)t[s]=e[2*s]+(e[2*s+1]<<8);t[15]&=32767}(h,s);for(let t=0;t<16;t++)n[t]=h[t],o[t]=r[t]=a[t]=0;r[0]=o[0]=1;for(let t=254;t>=0;--t){const e=i[t>>>3]>>>(7&t)&1;N(r,n,e),N(a,o,e),x(l,r,a),T(r,r,a),x(a,n,o),T(n,n,o),P(o,l),P(c,r),k(r,a,r),k(a,n,l),x(l,r,a),T(r,r,a),P(n,r),T(a,o,c),k(r,a,v),x(r,r,o),k(a,a,r),k(r,o,c),k(o,n,h),P(n,l),N(r,n,e),N(a,o,e)}for(let t=0;t<16;t++)h[t+16]=r[t],h[t+32]=a[t],h[t+48]=n[t],h[t+64]=o[t];const f=h.subarray(32),u=h.subarray(16);!function(t,e){const s=M();for(let t=0;t<16;t++)s[t]=e[t];for(let t=253;t>=0;t--)P(s,s),2!==t&&4!==t&&k(s,s,e);for(let e=0;e<16;e++)t[e]=s[e]}(f,f),k(u,u,f),function(t,e){const s=M(),i=M();for(let t=0;t<16;t++)i[t]=e[t];L(i),L(i),L(i);for(let t=0;t<2;t++){s[0]=i[0]-65517;for(let t=1;t<15;t++)s[t]=i[t]-65535-(s[t-1]>>16&1),s[t-1]&=65535;s[15]=i[15]-32767-(s[14]>>16&1);const t=s[15]>>16&1;s[14]&=65535,N(i,s,1-t)}for(let e=0;e<16;e++)t[2*e]=255&i[e],t[2*e+1]=i[e]>>8}(t,u)}function O(t,e){B(t,e,S)}function C(t,e){if(32!==t.length)throw new Error("bad n size");if(32!==e.length)throw new Error("bad p size");const s=new Uint8Array(32);return B(s,t,e),s}function H(t){if(32!==t.length)throw new Error("bad n size");const e=new Uint8Array(32);return O(e,t),e}v[0]=56129,v[1]=1,C.scalarLength=32,C.groupElementLength=32;var X=Object.freeze({__proto__:null,crypto_scalarmult:B,crypto_scalarmult_BYTES:32,crypto_scalarmult_SCALARBYTES:32,crypto_scalarmult_base:O,scalarMult:C,scalarMultBase:H});const Y={NAME:"25519",DHLEN:C.groupElementLength,generateKeypair(){const t=U(C.scalarLength);return{public:H(t),secret:t}},dh:(t,e)=>C(t.secret,e)};var I;function z(t,e){return t>>>e|t<<32-e}function j(t,e,s,i,h,r,n){t[e]=t[e]+t[s]+r,t[h]=z(t[h]^t[e],16),t[i]=t[i]+t[h],t[s]=z(t[s]^t[i],12),t[e]=t[e]+t[s]+n,t[h]=z(t[h]^t[e],8),t[i]=t[i]+t[h],t[s]=z(t[s]^t[i],7)}const D=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),R=Uint8Array.from([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0]);function F(t,e){return R[(t<<4)+e]}const V=(I=class t{static digest(e,s,i){const h=new t(s,i);return h.update(e),h.final()}constructor(e,s=t.OUTBYTES){var i;this.outlen=s,this.b=new Uint8Array(64),this.bv=new DataView(this.b.buffer),this.h=Uint32Array.from(D),this.t=new Uint32Array(2),this.c=0;const h=null!==(i=null==e?void 0:e.byteLength)&&void 0!==i?i:0;if(0==s||s>32||h>32)throw new Error("illegal BLAKE2s parameter length(s)");this.h[0]^=16842752^h<<8^s,e&&h>0&&(this.update(e),this.c=64)}update(t,e=0,s=t.byteLength){for(let i=e;i<e+s;i++)64==this.c&&(this.t[0]+=this.c,this.t[0]<this.c&&this.t[1]++,this.compress(!1),this.c=0),this.b[this.c++]=t[i]}final(t){for(this.t[0]+=this.c,this.t[0]<this.c&&this.t[1]++;this.c<64;)this.b[this.c++]=0;this.compress(!0),void 0===t&&(t=new Uint8Array(this.outlen));for(let e=0;e<this.outlen;e++)t[e]=this.h[e>>2]>>8*(3&e)&255;return t}compress(t){const e=new Uint32Array(16),s=new Uint32Array(16);for(let t=0;t<8;t++)e[t]=this.h[t],e[t+8]=D[t];e[12]^=this.t[0],e[13]^=this.t[1],t&&(e[14]=~e[14]);for(let t=0;t<16;t++)s[t]=this.bv.getUint32(t<<2,!0);for(let t=0;t<10;t++)j(e,0,4,8,12,s[F(t,0)],s[F(t,1)]),j(e,1,5,9,13,s[F(t,2)],s[F(t,3)]),j(e,2,6,10,14,s[F(t,4)],s[F(t,5)]),j(e,3,7,11,15,s[F(t,6)],s[F(t,7)]),j(e,0,5,10,15,s[F(t,8)],s[F(t,9)]),j(e,1,6,11,12,s[F(t,10)],s[F(t,11)]),j(e,2,7,8,13,s[F(t,12)],s[F(t,13)]),j(e,3,4,9,14,s[F(t,14)],s[F(t,15)]);for(let t=0;t<8;t++)this.h[t]^=e[t]^e[t+8]}},I.NAME="BLAKE2s",I.KEYBYTES=32,I.OUTBYTES=32,I.BLOCKLEN=64,I);var G=Object.freeze({__proto__:null,BLAKE2s:V});function $(t){return function(e,s,i){const h=t(e,s),r=t(h,Uint8Array.from([1])),n=t(h,u(r,Uint8Array.from([2])));switch(i){case 2:return[r,n];case 3:return[r,n,t(h,u(n,Uint8Array.from([3])))]}}}function q(t){const e=new Uint8Array(t.BLOCKLEN);e.fill(54);const s=new Uint8Array(t.BLOCKLEN);s.fill(92);const i=(i,h)=>{const r=i.byteLength>t.BLOCKLEN?t.digest(i):i,n=u(r,new Uint8Array(t.BLOCKLEN-r.byteLength));return t.digest(u(f(n,s),t.digest(u(f(n,e),h))))};return i.NAME="HMAC-"+t.NAME,i}var W=Object.freeze({__proto__:null,fromBase64:function(t){const e=atob(t),s=new Uint8Array(e.length);for(let t=0;t<e.length;t++)s[t]=e.charCodeAt(t);return s},fromHex:function(t){if((t=t.replace(/[^0-9a-fA-F]/g,"").toLowerCase()).length%2)throw new Error("Hex input contains an odd number of digits");const e=Math.floor(t.length/2),s=new Uint8Array(e);for(let i=0;i<e;i++)s[i]=parseInt(t.substring(2*i,2*i+2),16);return s},toBase64:function(t,e=!0){let s="";t.forEach((t=>s+=String.fromCharCode(t)));let i=btoa(s);return e||(i=i.replace(/=/g,"")),i},toHex:function(t){let e="";return t.forEach((t=>{e+="0123456789abcdef"[t>>4],e+="0123456789abcdef"[15&t]})),e}});function Z(t,e){const s=new RegExp(`^Noise_([A-Za-z0-9+]+)_${t.dh.NAME}_${t.aead.NAME}_${t.hash.NAME}$`).exec(e);return null===s?null:s[1]}var J=Object.freeze({__proto__:null,matchPattern:Z});class Q{constructor(t=0,e=0,s=0){this.lo=t,this.hi=e,this.extra=s}increment(){const t=this.lo,e=t+1|0;this.lo=e,e<t&&(this.hi=this.hi+1|0)}reset(t=0,e=0,s=0){this.lo=t,this.hi=e,this.extra=s}static get MAX(){return new Q(4294967295,4294967295)}}function tt(t){return e=>new DataView(t.encrypt(new Uint8Array(32),e,Q.MAX).buffer)}var et=Object.freeze({__proto__:null,makeRekey:tt});class st{constructor(t,e){this.algorithms=t,this.view=null,this.nonce=new Q,void 0!==e&&(this.view=new DataView(e.buffer)),this.maxPayload=65535-this.algorithms.aead.TAGBYTES}encrypt(t,e){if(null===this.view)return t;const s=this.algorithms.aead.encrypt(t,this.view,this.nonce,e);return this.nonce.increment(),s}decrypt(t,e){if(null===this.view)return t;const s=this.algorithms.aead.decrypt(t,this.view,this.nonce,e);return this.nonce.increment(),s}rekey(){var t;null!==this.view&&(this.view=(null!==(t=this.algorithms.rekey)&&void 0!==t?t:tt(this.algorithms.aead))(this.view))}encrypt_large(t){if(t.byteLength>this.maxPayload){const e=[];for(;t.byteLength>this.maxPayload;)e.push(this.encrypt(t.subarray(0,this.maxPayload))),t=t.subarray(this.maxPayload);return t.byteLength>0&&e.push(this.encrypt(t)),e}return[this.encrypt(t)]}decrypt_large(t){const e=t.reduce(((t,e)=>t+e.byteLength-this.algorithms.aead.TAGBYTES),0),s=new Uint8Array(e);let i=0;return t.forEach((t=>{const e=this.decrypt(t);s.set(e,i),i+=e.byteLength})),s}}var it=Object.freeze({__proto__:null,CipherState:st});const ht={};function rt(t,e,s,i){const h={name:t,baseName:t,messages:e,initiatorPreMessage:s,responderPreMessage:i};ht[h.name]=h}function nt(t){return 1===t.baseName.length}rt("I1K1",[["e","s"],["e","ee","es"],["se"]],[],["s"]),rt("I1K",[["e","es","s"],["e","ee"],["se"]],[],["s"]),rt("I1N",[["e","s"],["e","ee"],["se"]],[],[]),rt("I1X1",[["e","s"],["e","ee","s"],["se","es"]],[],[]),rt("I1X",[["e","s"],["e","ee","s","es"],["se"]],[],[]),rt("IK1",[["e","s"],["e","ee","se","es"]],[],["s"]),rt("IK",[["e","es","s","ss"],["e","ee","se"]],[],["s"]),rt("IN",[["e","s"],["e","ee","se"]],[],[]),rt("IX1",[["e","s"],["e","ee","se","s"],["es"]],[],[]),rt("IX",[["e","s"],["e","ee","se","s","es"]],[],[]),rt("K1K1",[["e"],["e","ee","es"],["se"]],["s"],["s"]),rt("K1K",[["e","es"],["e","ee"],["se"]],["s"],["s"]),rt("K1N",[["e"],["e","ee"],["se"]],["s"],[]),rt("K1X1",[["e"],["e","ee","s"],["se","es"]],["s"],[]),rt("K1X",[["e"],["e","ee","s","es"],["se"]],["s"],[]),rt("K",[["e","es","ss"]],["s"],["s"]),rt("KK1",[["e"],["e","ee","se","es"]],["s"],["s"]),rt("KK",[["e","es","ss"],["e","ee","se"]],["s"],["s"]),rt("KN",[["e"],["e","ee","se"]],["s"],[]),rt("KX1",[["e"],["e","ee","se","s"],["es"]],["s"],[]),rt("KX",[["e"],["e","ee","se","s","es"]],["s"],[]),rt("N",[["e","es"]],[],["s"]),rt("NK1",[["e"],["e","ee","es"]],[],["s"]),rt("NK",[["e","es"],["e","ee"]],[],["s"]),rt("NN",[["e"],["e","ee"]],[],[]),rt("NX1",[["e"],["e","ee","s"],["es"]],[],[]),rt("NX",[["e"],["e","ee","s","es"]],[],[]),rt("X1K1",[["e"],["e","ee","es"],["s"],["se"]],[],["s"]),rt("X1K",[["e","es"],["e","ee"],["s"],["se"]],[],["s"]),rt("X1N",[["e"],["e","ee"],["s"],["se"]],[],[]),rt("X1X1",[["e"],["e","ee","s"],["es","s"],["se"]],[],[]),rt("X1X",[["e"],["e","ee","s","es"],["s"],["se"]],[],[]),rt("X",[["e","es","s","ss"]],[],["s"]),rt("XK1",[["e"],["e","ee","es"],["s","se"]],[],["s"]),rt("XK",[["e","es"],["e","ee"],["s","se"]],[],["s"]),rt("XN",[["e"],["e","ee"],["s","se"]],[],[]),rt("XX1",[["e"],["e","ee","s"],["es","s","se"]],[],[]),rt("XX",[["e"],["e","ee","s","es"],["s","se"]],[],[]);const at=/^([NKX]|[NKXI]1?[NKX]1?)([a-z][a-z0-9]*(\+[a-z][a-z0-9]*)*)?$/,ot=/^psk([0-9]+)$/;function lt(t){var e,s,i;const h=at.exec(t);if(null===h)return null;const r=null!==(s=null===(e=h[2])||void 0===e?void 0:e.split("+"))&&void 0!==s?s:[];let n=null!==(i=ht[h[1]])&&void 0!==i?i:null;return n?(r.forEach((t=>n=n&&function(t,e){const s=ot.exec(e);if(null===s)return null;const i=parseInt(s[1],10),h=t.messages;return Object.assign(Object.assign({},t),{messages:0===i?[["psk",...h[0]],...h.slice(1)]:[...h.slice(0,i-1),[...h[i-1],"psk"],...h.slice(i)]})}(n,t))),n&&Object.assign(Object.assign({},n),{name:t})):null}var ct=Object.freeze({__proto__:null,PATTERNS:ht,isOneWay:nt,lookupPattern:lt});class ft{constructor(t,e,s,i={}){var h,r,n,a,o,l,c;if(this.algorithms=t,this.role=s,this.stepIndex=0,"string"==typeof e){const t=lt(e);if(null===t)throw new Error("Unknown Noise Protocol handshake pattern "+e);this.pattern=t}else this.pattern=e;this.staticKeypair=null!==(h=i.staticKeypair)&&void 0!==h?h:this.algorithms.dh.generateKeypair(),this.remoteStaticPublicKey=null!==(r=i.remoteStaticPublicKey)&&void 0!==r?r:null,this.ephemeralKeypair=null!==(n=i.pregeneratedEphemeralKeypair)&&void 0!==n?n:this.algorithms.dh.generateKeypair(),this.remoteEphemeralPublicKey=null!==(a=i.remotePregeneratedEphemeralPublicKey)&&void 0!==a?a:null,this.preSharedKeys=i.preSharedKeys,this.preSharedKeys&&(this.preSharedKeys=this.preSharedKeys.slice(),0===this.preSharedKeys.length&&(this.preSharedKeys=void 0));const f=(new TextEncoder).encode("Noise_"+this.pattern.name+"_"+this.algorithms.dh.NAME+"_"+this.algorithms.aead.NAME+"_"+this.algorithms.hash.NAME);this.cipherState=new st(this.algorithms);{const t=this.algorithms.hash.OUTBYTES,e=f.byteLength>t?this.algorithms.hash.digest(f):f;this.chainingKey=u(e,new Uint8Array(t-e.byteLength))}this.handshakeHash=this.chainingKey,this.mixHash(null!==(o=i.prologue)&&void 0!==o?o:y),this.pattern.initiatorPreMessage.forEach((t=>this.mixHash("e"===t?this.isInitiator?this.ephemeralKeypair.public:this.remoteEphemeralPublicKey:this.isInitiator?this.staticKeypair.public:this.remoteStaticPublicKey))),this.pattern.responderPreMessage.forEach((t=>this.mixHash("e"===t?this.isInitiator?this.remoteEphemeralPublicKey:this.ephemeralKeypair.public:this.isInitiator?this.remoteStaticPublicKey:this.staticKeypair.public))),this.hkdf=null!==(l=this.algorithms.hkdf)&&void 0!==l?l:$(null!==(c=this.algorithms.hmac)&&void 0!==c?c:q(this.algorithms.hash))}get isInitiator(){return"initiator"===this.role}mixHash(t){this.handshakeHash=this.algorithms.hash.digest(u(this.handshakeHash,t))}mixKey(t){const[e,s]=this.hkdf(this.chainingKey,t,2);this.chainingKey=e,this.cipherState=new st(this.algorithms,s)}mixKeyAndHashNextPSK(){const t=this.preSharedKeys.shift(),[e,s,i]=this.hkdf(this.chainingKey,t,3);this.chainingKey=e,this.mixHash(s),this.cipherState=new st(this.algorithms,i)}encryptAndHash(t){const e=this.cipherState.encrypt(t,this.handshakeHash);return this.mixHash(e),e}decryptAndHash(t){const e=this.cipherState.decrypt(t,this.handshakeHash);return this.mixHash(t),e}_split(){if(this.stepIndex<this.pattern.messages.length)return null;{let[t,e]=this.hkdf(this.chainingKey,y,2).map((t=>new st(this.algorithms,t)));return this.isInitiator?{send:t,recv:e}:{send:e,recv:t}}}_nextStep(){if(this.stepIndex>=this.pattern.messages.length)throw new Error("Handshake already complete, cannot continue");return this.pattern.messages[this.stepIndex++]}_processKeyMixToken(t){switch(t){case"ee":this.mixKey(this.algorithms.dh.dh(this.ephemeralKeypair,this.remoteEphemeralPublicKey));break;case"es":this.mixKey(this.isInitiator?this.algorithms.dh.dh(this.ephemeralKeypair,this.remoteStaticPublicKey):this.algorithms.dh.dh(this.staticKeypair,this.remoteEphemeralPublicKey));break;case"se":this.mixKey(this.isInitiator?this.algorithms.dh.dh(this.staticKeypair,this.remoteEphemeralPublicKey):this.algorithms.dh.dh(this.ephemeralKeypair,this.remoteStaticPublicKey));break;case"ss":this.mixKey(this.algorithms.dh.dh(this.staticKeypair,this.remoteStaticPublicKey));break;case"psk":this.mixKeyAndHashNextPSK()}}writeMessage(t){const e=[];let s;if(this._nextStep().forEach((t=>{switch(t){case"e":e.push(this.ephemeralKeypair.public),this.mixHash(this.ephemeralKeypair.public),this.preSharedKeys&&this.mixKey(this.ephemeralKeypair.public);break;case"s":e.push(this.encryptAndHash(this.staticKeypair.public));break;default:this._processKeyMixToken(t)}})),e.push(this.encryptAndHash(t)),1===e.length)s=e[0];else{s=new Uint8Array(e.reduce(((t,e)=>t+e.byteLength),0));let t=0;e.forEach((e=>{s.set(e,t),t+=e.byteLength}))}return{packet:s,finished:this._split()}}readMessage(t){const e=e=>{const s=t.slice(0,e);return t=t.subarray(e),s};this._nextStep().forEach((t=>{switch(t){case"e":this.remoteEphemeralPublicKey=e(this.algorithms.dh.DHLEN),this.mixHash(this.remoteEphemeralPublicKey),this.preSharedKeys&&this.mixKey(this.remoteEphemeralPublicKey);break;case"s":this.remoteStaticPublicKey=this.decryptAndHash(e(this.algorithms.dh.DHLEN+(this.cipherState.view?16:0)));break;default:this._processKeyMixToken(t)}}));return{message:this.decryptAndHash(t),finished:this._split()}}async completeHandshake(t,e,s=(async t=>{}),i=(async()=>new Uint8Array(0))){const h=async()=>{const{packet:e,finished:s}=this.writeMessage(await i());return await t(e),s||r()},r=async()=>{const{message:t,finished:i}=this.readMessage(await e());return await s(t),i||h()};return this.isInitiator?h():r()}}const ut={dh:Y,aead:b,hash:V};const yt={aead:{chacha20poly1305:K},cipher:{chacha20:a},dh:{x25519:X},hash:{blake2s:G,poly1305:l},noise:{algorithms:J,cipherstate:it,handshake:Object.freeze({__proto__:null,Handshake:ft}),patterns:ct,profiles:Object.freeze({__proto__:null,Noise_25519_ChaChaPoly_BLAKE2s:ut}),rekey:et}};t.AuthenticationFailure=w,t.BLAKE2s=V,t.Bytes=p,t.ChaCha20=r,t.ChaCha20Poly1305_RFC8439=b,t.CipherState=st,t.Handshake=ft,t.INTERNALS=yt,t.IO=W,t.Noise_25519_ChaChaPoly_BLAKE2s=ut,t.Nonce=Q,t.PATTERNS=ht,t.Poly1305=o,t.X25519=Y,t._decrypt=_,t._encrypt=E,t._randomBytes=A,t.isOneWay=nt,t.lookupPattern=lt,t.makeHKDF=$,t.makeHMAC=q,t.matchPattern=Z,t.randomBytes=U}));
|
|
1
|
+
"use strict";var bt=Object.defineProperty,me=Object.defineProperties,Ae=Object.getOwnPropertyDescriptor,xe=Object.getOwnPropertyDescriptors,de=Object.getOwnPropertyNames,ne=Object.getOwnPropertySymbols;var oe=Object.prototype.hasOwnProperty,Ue=Object.prototype.propertyIsEnumerable;var ae=(i,e,r)=>e in i?bt(i,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[e]=r,Nt=(i,e)=>{for(var r in e||(e={}))oe.call(e,r)&&ae(i,r,e[r]);if(ne)for(var r of ne(e))Ue.call(e,r)&&ae(i,r,e[r]);return i},Bt=(i,e)=>me(i,xe(e));var G=(i,e)=>{for(var r in e)bt(i,r,{get:e[r],enumerable:!0})},ge=(i,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of de(e))!oe.call(i,n)&&n!==r&&bt(i,n,{get:()=>e[n],enumerable:!(s=Ae(e,n))||s.enumerable});return i};var be=i=>ge(bt({},"__esModule",{value:!0}),i);var Oe={};G(Oe,{AuthenticationFailure:()=>St,BLAKE2s:()=>xt,Bytes:()=>ot,ChaCha20:()=>at,ChaCha20Poly1305_RFC8439:()=>ut,CipherState:()=>rt,Handshake:()=>gt,INTERNALS:()=>Fe,IO:()=>Ht,Noise_25519_ChaChaPoly_BLAKE2s:()=>ie,Nonce:()=>ct,PATTERNS:()=>dt,Poly1305:()=>pt,X25519:()=>zt,_decrypt:()=>Ft,_encrypt:()=>Yt,_randomBytes:()=>ce,isOneWay:()=>te,lookupPattern:()=>Ut,makeHKDF:()=>qt,makeHMAC:()=>$t,matchPattern:()=>jt,randomBytes:()=>Ot});module.exports=be(Oe);var Ct={};G(Ct,{ChaCha20Poly1305_RFC8439:()=>ut});var _t={};G(_t,{ChaCha20:()=>at,chacha20_block:()=>kt,chacha20_quarter_round:()=>it});function Kt(i,e){return i<<e|i>>>32-e}function it(i,e,r,s,n){i[e]+=i[r],i[n]^=i[e],i[n]=Kt(i[n],16),i[s]+=i[n],i[r]^=i[s],i[r]=Kt(i[r],12),i[e]+=i[r],i[n]^=i[e],i[n]=Kt(i[n],8),i[s]+=i[n],i[r]^=i[s],i[r]=Kt(i[r],7)}function he(i,e,r,s){i[0]+=1634760805,i[1]+=857760878,i[2]+=2036477234,i[3]+=1797285236,i[4]+=e.getUint32(0,!0),i[5]+=e.getUint32(4,!0),i[6]+=e.getUint32(8,!0),i[7]+=e.getUint32(12,!0),i[8]+=e.getUint32(16,!0),i[9]+=e.getUint32(20,!0),i[10]+=e.getUint32(24,!0),i[11]+=e.getUint32(28,!0),i[12]+=r,i[13]+=s.getUint32(0,!0),i[14]+=s.getUint32(4,!0),i[15]+=s.getUint32(8,!0)}function kt(i,e,r){let s=new Uint32Array(16);he(s,i,e,r);for(let n=0;n<20;n+=2)it(s,0,4,8,12),it(s,1,5,9,13),it(s,2,6,10,14),it(s,3,7,11,15),it(s,0,5,10,15),it(s,1,6,11,12),it(s,2,7,8,13),it(s,3,4,9,14);return he(s,i,e,r),s}function Ke(i){let e=new DataView(new ArrayBuffer(at.NONCEBYTES));return e.setUint32(0,i.extra,!0),e.setUint32(4,i.lo,!0),e.setUint32(8,i.hi,!0),e}var at={NAME:"chacha20",KEYBYTES:32,NONCEBYTES:12,BLOCKBYTES:64,stream_xor(i,e,r,s,n=0,o=r.byteLength){let a=Ke(e),f=o>>6,c=o&63;for(let y=0;y<f;y++){let p=kt(i,n+y,a);for(let u=0;u<64;u++)s[(y<<6)+u]=r[(y<<6)+u]^p[u>>2]>>((u&3)<<3)}if(c!==0){let y=kt(i,n+f,a);for(let p=0;p<c;p++)s[(f<<6)+p]=r[(f<<6)+p]^y[p>>2]>>((p&3)<<3)}}};var Lt={};G(Lt,{Poly1305:()=>pt});var $,pt=($=class{constructor(e,r){this.buffer=new Uint8Array(16);this.r=new Uint16Array(10);this.h=new Uint16Array(10);this.pad=new Uint16Array(8);this.leftover=0;this.fin=0;if(!e)throw new Error("Poly1305: key required");if((r!=null?r:$.OUTBYTES)!==$.OUTBYTES)throw new Error("Poly1305: outlen != OUTBYTES");let s=e[0]&255|(e[1]&255)<<8;this.r[0]=s&8191;let n=e[2]&255|(e[3]&255)<<8;this.r[1]=(s>>>13|n<<3)&8191;let o=e[4]&255|(e[5]&255)<<8;this.r[2]=(n>>>10|o<<6)&7939;let a=e[6]&255|(e[7]&255)<<8;this.r[3]=(o>>>7|a<<9)&8191;let f=e[8]&255|(e[9]&255)<<8;this.r[4]=(a>>>4|f<<12)&255,this.r[5]=f>>>1&8190;let c=e[10]&255|(e[11]&255)<<8;this.r[6]=(f>>>14|c<<2)&8191;let y=e[12]&255|(e[13]&255)<<8;this.r[7]=(c>>>11|y<<5)&8065;let p=e[14]&255|(e[15]&255)<<8;this.r[8]=(y>>>8|p<<8)&8191,this.r[9]=p>>>5&127,this.pad[0]=e[16]&255|(e[17]&255)<<8,this.pad[1]=e[18]&255|(e[19]&255)<<8,this.pad[2]=e[20]&255|(e[21]&255)<<8,this.pad[3]=e[22]&255|(e[23]&255)<<8,this.pad[4]=e[24]&255|(e[25]&255)<<8,this.pad[5]=e[26]&255|(e[27]&255)<<8,this.pad[6]=e[28]&255|(e[29]&255)<<8,this.pad[7]=e[30]&255|(e[31]&255)<<8}static digest(e,r,s){let n=new $(r,s);return n.update(e),n.final()}blocks(e,r,s){let n=this.fin?0:2048,o=this.h[0],a=this.h[1],f=this.h[2],c=this.h[3],y=this.h[4],p=this.h[5],u=this.h[6],d=this.h[7],l=this.h[8],A=this.h[9],k=this.r[0],B=this.r[1],b=this.r[2],K=this.r[3],_=this.r[4],L=this.r[5],D=this.r[6],C=this.r[7],Y=this.r[8],F=this.r[9];for(;s>=16;){let q=e[r+0]&255|(e[r+1]&255)<<8;o+=q&8191;let j=e[r+2]&255|(e[r+3]&255)<<8;a+=(q>>>13|j<<3)&8191;let Q=e[r+4]&255|(e[r+5]&255)<<8;f+=(j>>>10|Q<<6)&8191;let J=e[r+6]&255|(e[r+7]&255)<<8;c+=(Q>>>7|J<<9)&8191;let tt=e[r+8]&255|(e[r+9]&255)<<8;y+=(J>>>4|tt<<12)&8191,p+=tt>>>1&8191;let nt=e[r+10]&255|(e[r+11]&255)<<8;u+=(tt>>>14|nt<<2)&8191;let ft=e[r+12]&255|(e[r+13]&255)<<8;d+=(nt>>>11|ft<<5)&8191;let yt=e[r+14]&255|(e[r+15]&255)<<8;l+=(ft>>>8|yt<<8)&8191,A+=yt>>>5|n;let m=0,U=m;U+=o*k,U+=a*(5*F),U+=f*(5*Y),U+=c*(5*C),U+=y*(5*D),m=U>>>13,U&=8191,U+=p*(5*L),U+=u*(5*_),U+=d*(5*K),U+=l*(5*b),U+=A*(5*B),m+=U>>>13,U&=8191;let g=m;g+=o*B,g+=a*k,g+=f*(5*F),g+=c*(5*Y),g+=y*(5*C),m=g>>>13,g&=8191,g+=p*(5*D),g+=u*(5*L),g+=d*(5*_),g+=l*(5*K),g+=A*(5*b),m+=g>>>13,g&=8191;let E=m;E+=o*b,E+=a*B,E+=f*k,E+=c*(5*F),E+=y*(5*Y),m=E>>>13,E&=8191,E+=p*(5*C),E+=u*(5*D),E+=d*(5*L),E+=l*(5*_),E+=A*(5*K),m+=E>>>13,E&=8191;let w=m;w+=o*K,w+=a*b,w+=f*B,w+=c*k,w+=y*(5*F),m=w>>>13,w&=8191,w+=p*(5*Y),w+=u*(5*C),w+=d*(5*D),w+=l*(5*L),w+=A*(5*_),m+=w>>>13,w&=8191;let S=m;S+=o*_,S+=a*K,S+=f*b,S+=c*B,S+=y*k,m=S>>>13,S&=8191,S+=p*(5*F),S+=u*(5*Y),S+=d*(5*C),S+=l*(5*D),S+=A*(5*L),m+=S>>>13,S&=8191;let M=m;M+=o*L,M+=a*_,M+=f*K,M+=c*b,M+=y*B,m=M>>>13,M&=8191,M+=p*k,M+=u*(5*F),M+=d*(5*Y),M+=l*(5*C),M+=A*(5*D),m+=M>>>13,M&=8191;let T=m;T+=o*D,T+=a*L,T+=f*_,T+=c*K,T+=y*b,m=T>>>13,T&=8191,T+=p*B,T+=u*k,T+=d*(5*F),T+=l*(5*Y),T+=A*(5*C),m+=T>>>13,T&=8191;let P=m;P+=o*C,P+=a*D,P+=f*L,P+=c*_,P+=y*K,m=P>>>13,P&=8191,P+=p*b,P+=u*B,P+=d*k,P+=l*(5*F),P+=A*(5*Y),m+=P>>>13,P&=8191;let H=m;H+=o*Y,H+=a*C,H+=f*D,H+=c*L,H+=y*_,m=H>>>13,H&=8191,H+=p*K,H+=u*b,H+=d*B,H+=l*k,H+=A*(5*F),m+=H>>>13,H&=8191;let N=m;N+=o*F,N+=a*Y,N+=f*C,N+=c*D,N+=y*L,m=N>>>13,N&=8191,N+=p*_,N+=u*K,N+=d*b,N+=l*B,N+=A*k,m+=N>>>13,N&=8191,m=(m<<2)+m|0,m=m+U|0,U=m&8191,m=m>>>13,g+=m,o=U,a=g,f=E,c=w,y=S,p=M,u=T,d=P,l=H,A=N,r+=16,s-=16}this.h[0]=o,this.h[1]=a,this.h[2]=f,this.h[3]=c,this.h[4]=y,this.h[5]=p,this.h[6]=u,this.h[7]=d,this.h[8]=l,this.h[9]=A}final(e){if(e||(e=new Uint8Array($.OUTBYTES)),this.leftover){let a=this.leftover;for(this.buffer[a++]=1;a<16;a++)this.buffer[a]=0;this.fin=1,this.blocks(this.buffer,0,16)}let r=this.h[1]>>>13;this.h[1]&=8191;for(let a=2;a<10;a++)this.h[a]+=r,r=this.h[a]>>>13,this.h[a]&=8191;this.h[0]+=r*5,r=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=r,r=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=r;let s=new Uint16Array(10);s[0]=this.h[0]+5,r=s[0]>>>13,s[0]&=8191;for(let a=1;a<10;a++)s[a]=this.h[a]+r,r=s[a]>>>13,s[a]&=8191;s[9]-=8192;let n=(r^1)-1;for(let a=0;a<10;a++)s[a]&=n;n=~n;for(let a=0;a<10;a++)this.h[a]=this.h[a]&n|s[a];this.h[0]=(this.h[0]|this.h[1]<<13)&65535,this.h[1]=(this.h[1]>>>3|this.h[2]<<10)&65535,this.h[2]=(this.h[2]>>>6|this.h[3]<<7)&65535,this.h[3]=(this.h[3]>>>9|this.h[4]<<4)&65535,this.h[4]=(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14)&65535,this.h[5]=(this.h[6]>>>2|this.h[7]<<11)&65535,this.h[6]=(this.h[7]>>>5|this.h[8]<<8)&65535,this.h[7]=(this.h[8]>>>8|this.h[9]<<5)&65535;let o=this.h[0]+this.pad[0];this.h[0]=o&65535;for(let a=1;a<8;a++)o=(this.h[a]+this.pad[a]|0)+(o>>>16)|0,this.h[a]=o&65535;return e[0]=this.h[0]>>>0&255,e[1]=this.h[0]>>>8&255,e[2]=this.h[1]>>>0&255,e[3]=this.h[1]>>>8&255,e[4]=this.h[2]>>>0&255,e[5]=this.h[2]>>>8&255,e[6]=this.h[3]>>>0&255,e[7]=this.h[3]>>>8&255,e[8]=this.h[4]>>>0&255,e[9]=this.h[4]>>>8&255,e[10]=this.h[5]>>>0&255,e[11]=this.h[5]>>>8&255,e[12]=this.h[6]>>>0&255,e[13]=this.h[6]>>>8&255,e[14]=this.h[7]>>>0&255,e[15]=this.h[7]>>>8&255,e}update(e,r=0,s=e.byteLength){if(this.leftover){let n=16-this.leftover;n>s&&(n=s);for(let o=0;o<n;o++)this.buffer[this.leftover+o]=e[r+o];if(s-=n,r+=n,this.leftover+=n,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(s>=16){let n=s-s%16;this.blocks(e,r,n),r+=n,s-=n}if(s){for(let n=0;n<s;n++)this.buffer[this.leftover+n]=e[r+n];this.leftover+=s}}},$.NAME="Poly1305",$.KEYBYTES=32,$.OUTBYTES=16,$.BLOCKLEN=16,$);var ot={};G(ot,{EMPTY:()=>wt,append:()=>W,equal:()=>Dt,xor:()=>Et});function Ee(i,e,r){let s=0;for(let n=0;n<r;n++)s|=i[n]^e[n];return(1&s-1>>>8)-1}function Dt(i,e,r){return Ee(i,e,r)===0}function Et(i,e){let r=Math.min(i.byteLength,e.byteLength),s=new Uint8Array(r);for(let n=0;n<r;n++)s[n]=i[n]^e[n];return s}function W(i,e){let r=new Uint8Array(i.byteLength+e.byteLength);return r.set(i,0),r.set(e,i.byteLength),r}var wt=new Uint8Array(0);var we=new Uint8Array(16);function fe(i,e){let r=e&15;r!==0&&i.update(we,0,16-r)}function le(i,e,r,s,n,o){let a=new Uint8Array(pt.KEYBYTES);at.stream_xor(e,r,a,a,0);let f=new pt(a);o!==void 0&&(f.update(o,0,o.byteLength),fe(f,o.byteLength)),f.update(s,0,n),fe(f,n);let c=new Uint8Array(16),y=new DataView(c.buffer);o!==void 0&&y.setUint32(0,o.byteLength,!0),y.setUint32(8,n,!0),f.update(c,0,c.byteLength),f.final(i)}var ut={NAME:"ChaChaPoly",KEYBYTES:32,NONCEBYTES:12,TAGBYTES:16,encrypt_detached(i,e,r,s,n,o,a){at.stream_xor(n,o,i,e,1,r),le(s,n,o,e,r,a)},encrypt:Yt,decrypt_detached(i,e,r,s,n,o,a){let f=new Uint8Array(this.TAGBYTES);le(f,n,o,e,r,a);let c=Dt(f,s,f.byteLength);return c&&at.stream_xor(n,o,e,i,1,r),c},decrypt:Ft};var St=class extends Error{};function Yt(i,e,r,s){let n=new Uint8Array(i.byteLength+this.TAGBYTES);return this.encrypt_detached(i,n,i.byteLength,n.subarray(i.byteLength),e,r,s),n}function Ft(i,e,r,s){let n=new Uint8Array(i.byteLength-this.TAGBYTES);if(!this.decrypt_detached(n,i,n.byteLength,i.subarray(n.byteLength),e,r,s))throw new St("AEAD authentication failed");return n}var ce=(()=>{if(crypto&&crypto.getRandomValues)return(e,r)=>{for(let s=0;s<r;s+=65536)crypto.getRandomValues(e.subarray(s,s+Math.min(r-s,65536)))};if(typeof require!="undefined"){let i=require("crypto");if(i&&i.randomBytes)return(e,r)=>e.set(i.randomBytes(r))}throw new Error("No usable randomness source found")})();function Ot(i){let e=new Uint8Array(i);return ce(e,i),e}var vt={};G(vt,{crypto_scalarmult:()=>Rt,crypto_scalarmult_BYTES:()=>Se,crypto_scalarmult_SCALARBYTES:()=>Me,crypto_scalarmult_base:()=>pe,scalarMult:()=>lt,scalarMultBase:()=>Vt});var Se=32,Me=32;function et(){return new Float64Array(16)}var ye=new Uint8Array(32);ye[0]=9;var It=et();It[0]=56129;It[1]=1;function Xt(i){let e=1;for(let r=0;r<16;r++){let s=i[r]+e+65535;e=Math.floor(s/65536),i[r]=s-e*65536}i[0]+=e-1+37*(e-1)}function mt(i,e,r){let s=~(r-1);for(let n=0;n<16;n++){let o=s&(i[n]^e[n]);i[n]^=o,e[n]^=o}}function Te(i,e){let r=et(),s=et();for(let n=0;n<16;n++)s[n]=e[n];Xt(s),Xt(s),Xt(s);for(let n=0;n<2;n++){r[0]=s[0]-65517;for(let a=1;a<15;a++)r[a]=s[a]-65535-(r[a-1]>>16&1),r[a-1]&=65535;r[15]=s[15]-32767-(r[14]>>16&1);let o=r[15]>>16&1;r[14]&=65535,mt(s,r,1-o)}for(let n=0;n<16;n++)i[2*n]=s[n]&255,i[2*n+1]=s[n]>>8}function Pe(i,e){for(let r=0;r<16;r++)i[r]=e[2*r]+(e[2*r+1]<<8);i[15]&=32767}function Mt(i,e,r){for(let s=0;s<16;s++)i[s]=e[s]+r[s]}function Tt(i,e,r){for(let s=0;s<16;s++)i[s]=e[s]-r[s]}function st(i,e,r){let s=0,n=0,o=0,a=0,f=0,c=0,y=0,p=0,u=0,d=0,l=0,A=0,k=0,B=0,b=0,K=0,_=0,L=0,D=0,C=0,Y=0,F=0,q=0,j=0,Q=0,J=0,tt=0,nt=0,ft=0,yt=0,m=0,U=r[0],g=r[1],E=r[2],w=r[3],S=r[4],M=r[5],T=r[6],P=r[7],H=r[8],N=r[9],O=r[10],X=r[11],I=r[12],R=r[13],V=r[14],v=r[15],t=e[0];s+=t*U,n+=t*g,o+=t*E,a+=t*w,f+=t*S,c+=t*M,y+=t*T,p+=t*P,u+=t*H,d+=t*N,l+=t*O,A+=t*X,k+=t*I,B+=t*R,b+=t*V,K+=t*v,t=e[1],n+=t*U,o+=t*g,a+=t*E,f+=t*w,c+=t*S,y+=t*M,p+=t*T,u+=t*P,d+=t*H,l+=t*N,A+=t*O,k+=t*X,B+=t*I,b+=t*R,K+=t*V,_+=t*v,t=e[2],o+=t*U,a+=t*g,f+=t*E,c+=t*w,y+=t*S,p+=t*M,u+=t*T,d+=t*P,l+=t*H,A+=t*N,k+=t*O,B+=t*X,b+=t*I,K+=t*R,_+=t*V,L+=t*v,t=e[3],a+=t*U,f+=t*g,c+=t*E,y+=t*w,p+=t*S,u+=t*M,d+=t*T,l+=t*P,A+=t*H,k+=t*N,B+=t*O,b+=t*X,K+=t*I,_+=t*R,L+=t*V,D+=t*v,t=e[4],f+=t*U,c+=t*g,y+=t*E,p+=t*w,u+=t*S,d+=t*M,l+=t*T,A+=t*P,k+=t*H,B+=t*N,b+=t*O,K+=t*X,_+=t*I,L+=t*R,D+=t*V,C+=t*v,t=e[5],c+=t*U,y+=t*g,p+=t*E,u+=t*w,d+=t*S,l+=t*M,A+=t*T,k+=t*P,B+=t*H,b+=t*N,K+=t*O,_+=t*X,L+=t*I,D+=t*R,C+=t*V,Y+=t*v,t=e[6],y+=t*U,p+=t*g,u+=t*E,d+=t*w,l+=t*S,A+=t*M,k+=t*T,B+=t*P,b+=t*H,K+=t*N,_+=t*O,L+=t*X,D+=t*I,C+=t*R,Y+=t*V,F+=t*v,t=e[7],p+=t*U,u+=t*g,d+=t*E,l+=t*w,A+=t*S,k+=t*M,B+=t*T,b+=t*P,K+=t*H,_+=t*N,L+=t*O,D+=t*X,C+=t*I,Y+=t*R,F+=t*V,q+=t*v,t=e[8],u+=t*U,d+=t*g,l+=t*E,A+=t*w,k+=t*S,B+=t*M,b+=t*T,K+=t*P,_+=t*H,L+=t*N,D+=t*O,C+=t*X,Y+=t*I,F+=t*R,q+=t*V,j+=t*v,t=e[9],d+=t*U,l+=t*g,A+=t*E,k+=t*w,B+=t*S,b+=t*M,K+=t*T,_+=t*P,L+=t*H,D+=t*N,C+=t*O,Y+=t*X,F+=t*I,q+=t*R,j+=t*V,Q+=t*v,t=e[10],l+=t*U,A+=t*g,k+=t*E,B+=t*w,b+=t*S,K+=t*M,_+=t*T,L+=t*P,D+=t*H,C+=t*N,Y+=t*O,F+=t*X,q+=t*I,j+=t*R,Q+=t*V,J+=t*v,t=e[11],A+=t*U,k+=t*g,B+=t*E,b+=t*w,K+=t*S,_+=t*M,L+=t*T,D+=t*P,C+=t*H,Y+=t*N,F+=t*O,q+=t*X,j+=t*I,Q+=t*R,J+=t*V,tt+=t*v,t=e[12],k+=t*U,B+=t*g,b+=t*E,K+=t*w,_+=t*S,L+=t*M,D+=t*T,C+=t*P,Y+=t*H,F+=t*N,q+=t*O,j+=t*X,Q+=t*I,J+=t*R,tt+=t*V,nt+=t*v,t=e[13],B+=t*U,b+=t*g,K+=t*E,_+=t*w,L+=t*S,D+=t*M,C+=t*T,Y+=t*P,F+=t*H,q+=t*N,j+=t*O,Q+=t*X,J+=t*I,tt+=t*R,nt+=t*V,ft+=t*v,t=e[14],b+=t*U,K+=t*g,_+=t*E,L+=t*w,D+=t*S,C+=t*M,Y+=t*T,F+=t*P,q+=t*H,j+=t*N,Q+=t*O,J+=t*X,tt+=t*I,nt+=t*R,ft+=t*V,yt+=t*v,t=e[15],K+=t*U,_+=t*g,L+=t*E,D+=t*w,C+=t*S,Y+=t*M,F+=t*T,q+=t*P,j+=t*H,Q+=t*N,J+=t*O,tt+=t*X,nt+=t*I,ft+=t*R,yt+=t*V,m+=t*v,s+=38*_,n+=38*L,o+=38*D,a+=38*C,f+=38*Y,c+=38*F,y+=38*q,p+=38*j,u+=38*Q,d+=38*J,l+=38*tt,A+=38*nt,k+=38*ft,B+=38*yt,b+=38*m;let h=1;t=s+h+65535,h=Math.floor(t/65536),s=t-h*65536,t=n+h+65535,h=Math.floor(t/65536),n=t-h*65536,t=o+h+65535,h=Math.floor(t/65536),o=t-h*65536,t=a+h+65535,h=Math.floor(t/65536),a=t-h*65536,t=f+h+65535,h=Math.floor(t/65536),f=t-h*65536,t=c+h+65535,h=Math.floor(t/65536),c=t-h*65536,t=y+h+65535,h=Math.floor(t/65536),y=t-h*65536,t=p+h+65535,h=Math.floor(t/65536),p=t-h*65536,t=u+h+65535,h=Math.floor(t/65536),u=t-h*65536,t=d+h+65535,h=Math.floor(t/65536),d=t-h*65536,t=l+h+65535,h=Math.floor(t/65536),l=t-h*65536,t=A+h+65535,h=Math.floor(t/65536),A=t-h*65536,t=k+h+65535,h=Math.floor(t/65536),k=t-h*65536,t=B+h+65535,h=Math.floor(t/65536),B=t-h*65536,t=b+h+65535,h=Math.floor(t/65536),b=t-h*65536,t=K+h+65535,h=Math.floor(t/65536),K=t-h*65536,s+=h-1+37*(h-1),h=1,t=s+h+65535,h=Math.floor(t/65536),s=t-h*65536,t=n+h+65535,h=Math.floor(t/65536),n=t-h*65536,t=o+h+65535,h=Math.floor(t/65536),o=t-h*65536,t=a+h+65535,h=Math.floor(t/65536),a=t-h*65536,t=f+h+65535,h=Math.floor(t/65536),f=t-h*65536,t=c+h+65535,h=Math.floor(t/65536),c=t-h*65536,t=y+h+65535,h=Math.floor(t/65536),y=t-h*65536,t=p+h+65535,h=Math.floor(t/65536),p=t-h*65536,t=u+h+65535,h=Math.floor(t/65536),u=t-h*65536,t=d+h+65535,h=Math.floor(t/65536),d=t-h*65536,t=l+h+65535,h=Math.floor(t/65536),l=t-h*65536,t=A+h+65535,h=Math.floor(t/65536),A=t-h*65536,t=k+h+65535,h=Math.floor(t/65536),k=t-h*65536,t=B+h+65535,h=Math.floor(t/65536),B=t-h*65536,t=b+h+65535,h=Math.floor(t/65536),b=t-h*65536,t=K+h+65535,h=Math.floor(t/65536),K=t-h*65536,s+=h-1+37*(h-1),i[0]=s,i[1]=n,i[2]=o,i[3]=a,i[4]=f,i[5]=c,i[6]=y,i[7]=p,i[8]=u,i[9]=d,i[10]=l,i[11]=A,i[12]=k,i[13]=B,i[14]=b,i[15]=K}function At(i,e){st(i,e,e)}function He(i,e){let r=et();for(let s=0;s<16;s++)r[s]=e[s];for(let s=253;s>=0;s--)At(r,r),s!==2&&s!==4&&st(r,r,e);for(let s=0;s<16;s++)i[s]=r[s]}function Rt(i,e,r){let s=new Uint8Array(32),n=new Float64Array(80),o=et(),a=et(),f=et(),c=et(),y=et(),p=et();for(let l=0;l<31;l++)s[l]=e[l];s[31]=e[31]&127|64,s[0]&=248,Pe(n,r);for(let l=0;l<16;l++)a[l]=n[l],c[l]=o[l]=f[l]=0;o[0]=c[0]=1;for(let l=254;l>=0;--l){let A=s[l>>>3]>>>(l&7)&1;mt(o,a,A),mt(f,c,A),Mt(y,o,f),Tt(o,o,f),Mt(f,a,c),Tt(a,a,c),At(c,y),At(p,o),st(o,f,o),st(f,a,y),Mt(y,o,f),Tt(o,o,f),At(a,o),Tt(f,c,p),st(o,f,It),Mt(o,o,c),st(f,f,o),st(o,c,p),st(c,a,n),At(a,y),mt(o,a,A),mt(f,c,A)}for(let l=0;l<16;l++)n[l+16]=o[l],n[l+32]=f[l],n[l+48]=a[l],n[l+64]=c[l];let u=n.subarray(32),d=n.subarray(16);He(u,u),st(d,d,u),Te(i,d)}function pe(i,e){Rt(i,e,ye)}function lt(i,e){if(i.length!==32)throw new Error("bad n size");if(e.length!==32)throw new Error("bad p size");let r=new Uint8Array(32);return Rt(r,i,e),r}function Vt(i){if(i.length!==32)throw new Error("bad n size");let e=new Uint8Array(32);return pe(e,i),e}lt.scalarLength=32;lt.groupElementLength=32;var zt={NAME:"25519",DHLEN:lt.groupElementLength,generateKeypair(){let i=Ot(lt.scalarLength);return{public:Vt(i),secret:i}},dh(i,e){return lt(i.secret,e)}};var Gt={};G(Gt,{BLAKE2s:()=>xt});function Pt(i,e){return i>>>e|i<<32-e}function ht(i,e,r,s,n,o,a){i[e]=i[e]+i[r]+o,i[n]=Pt(i[n]^i[e],16),i[s]=i[s]+i[n],i[r]=Pt(i[r]^i[s],12),i[e]=i[e]+i[r]+a,i[n]=Pt(i[n]^i[e],8),i[s]=i[s]+i[n],i[r]=Pt(i[r]^i[s],7)}var ue=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Ne=Uint8Array.from([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,10,4,8,9,15,13,6,1,12,0,2,11,7,5,3,11,8,12,0,5,2,15,13,10,14,3,6,7,1,9,4,7,9,3,1,13,12,11,14,2,6,5,10,4,0,15,8,9,0,5,7,2,4,10,15,14,1,11,12,6,8,3,13,2,12,6,10,0,11,8,3,4,13,7,5,15,14,1,9,12,5,1,15,14,13,4,10,0,7,6,3,9,2,8,11,13,11,7,14,12,1,3,9,5,0,15,4,8,6,2,10,6,15,14,9,11,3,0,8,12,2,13,7,1,4,10,5,10,2,8,4,7,6,1,5,15,11,9,14,3,12,13,0]);function z(i,e){return Ne[(i<<4)+e]}var Z,xt=(Z=class{constructor(e,r=Z.OUTBYTES){this.outlen=r;this.b=new Uint8Array(64);this.bv=new DataView(this.b.buffer);this.h=Uint32Array.from(ue);this.t=new Uint32Array(2);this.c=0;var n;let s=(n=e==null?void 0:e.byteLength)!=null?n:0;if(r==0||r>32||s>32)throw new Error("illegal BLAKE2s parameter length(s)");this.h[0]^=16842752^s<<8^r,e&&s>0&&(this.update(e),this.c=64)}static digest(e,r,s){let n=new Z(r,s);return n.update(e),n.final()}update(e,r=0,s=e.byteLength){for(let n=r;n<r+s;n++)this.c==64&&(this.t[0]+=this.c,this.t[0]<this.c&&this.t[1]++,this.compress(!1),this.c=0),this.b[this.c++]=e[n]}final(e){for(this.t[0]+=this.c,this.t[0]<this.c&&this.t[1]++;this.c<64;)this.b[this.c++]=0;this.compress(!0),e===void 0&&(e=new Uint8Array(this.outlen));for(let r=0;r<this.outlen;r++)e[r]=this.h[r>>2]>>8*(r&3)&255;return e}compress(e){let r=new Uint32Array(16),s=new Uint32Array(16);for(let n=0;n<8;n++)r[n]=this.h[n],r[n+8]=ue[n];r[12]^=this.t[0],r[13]^=this.t[1],e&&(r[14]=~r[14]);for(let n=0;n<16;n++)s[n]=this.bv.getUint32(n<<2,!0);for(let n=0;n<10;n++)ht(r,0,4,8,12,s[z(n,0)],s[z(n,1)]),ht(r,1,5,9,13,s[z(n,2)],s[z(n,3)]),ht(r,2,6,10,14,s[z(n,4)],s[z(n,5)]),ht(r,3,7,11,15,s[z(n,6)],s[z(n,7)]),ht(r,0,5,10,15,s[z(n,8)],s[z(n,9)]),ht(r,1,6,11,12,s[z(n,10)],s[z(n,11)]),ht(r,2,7,8,13,s[z(n,12)],s[z(n,13)]),ht(r,3,4,9,14,s[z(n,14)],s[z(n,15)]);for(let n=0;n<8;n++)this.h[n]^=r[n]^r[n+8]}},Z.NAME="BLAKE2s",Z.KEYBYTES=32,Z.OUTBYTES=32,Z.BLOCKLEN=64,Z);function qt(i){function e(r,s,n){let o=i(r,s),a=i(o,Uint8Array.from([1])),f=i(o,W(a,Uint8Array.from([2])));switch(n){case 2:return[a,f];case 3:return[a,f,i(o,W(f,Uint8Array.from([3])))]}}return e}function $t(i){let e=new Uint8Array(i.BLOCKLEN);e.fill(54);let r=new Uint8Array(i.BLOCKLEN);r.fill(92);let s=(n,o)=>{let a=n.byteLength>i.BLOCKLEN?i.digest(n):n,f=W(a,new Uint8Array(i.BLOCKLEN-a.byteLength));return i.digest(W(Et(f,r),i.digest(W(Et(f,e),o))))};return s.NAME="HMAC-"+i.NAME,s}var Ht={};G(Ht,{fromBase64:()=>Le,fromHex:()=>ke,toBase64:()=>_e,toHex:()=>Be});function Be(i){let e="";return i.forEach(r=>{e=e+"0123456789abcdef"[r>>4],e=e+"0123456789abcdef"[r&15]}),e}function ke(i){if(i=i.replace(/[^0-9a-fA-F]/g,"").toLowerCase(),i.length%2)throw new Error("Hex input contains an odd number of digits");let e=Math.floor(i.length/2),r=new Uint8Array(e);for(let s=0;s<e;s++)r[s]=parseInt(i.substring(2*s,2*s+2),16);return r}function _e(i,e=!0){let r="";i.forEach(n=>r=r+String.fromCharCode(n));let s=btoa(r);return e||(s=s.replace(/=/g,"")),s}function Le(i){let e=atob(i),r=new Uint8Array(e.length);for(let s=0;s<e.length;s++)r[s]=e.charCodeAt(s);return r}var Qt={};G(Qt,{matchPattern:()=>jt});function jt(i,e){let s=new RegExp(`^Noise_([A-Za-z0-9+]+)_${i.dh.NAME}_${i.aead.NAME}_${i.hash.NAME}$`).exec(e);return s===null?null:s[1]}var Jt={};G(Jt,{CipherState:()=>rt});var ct=class i{constructor(e=0,r=0,s=0){this.lo=e;this.hi=r;this.extra=s}increment(){let e=this.lo,r=e+1|0;this.lo=r,r<e&&(this.hi=this.hi+1|0)}reset(e=0,r=0,s=0){this.lo=e,this.hi=r,this.extra=s}static get MAX(){return new i(4294967295,4294967295)}};var Zt={};G(Zt,{makeRekey:()=>Wt});function Wt(i){return e=>new DataView(i.encrypt(new Uint8Array(32),e,ct.MAX).buffer)}var rt=class{constructor(e,r){this.algorithms=e;this.view=null;this.nonce=new ct;r!==void 0&&(this.view=new DataView(r.buffer)),this.maxPayload=65535-this.algorithms.aead.TAGBYTES}encrypt(e,r){if(this.view===null)return e;let s=this.algorithms.aead.encrypt(e,this.view,this.nonce,r);return this.nonce.increment(),s}decrypt(e,r){if(this.view===null)return e;let s=this.algorithms.aead.decrypt(e,this.view,this.nonce,r);return this.nonce.increment(),s}rekey(){var e;this.view!==null&&(this.view=((e=this.algorithms.rekey)!=null?e:Wt(this.algorithms.aead))(this.view))}encrypt_large(e){if(e.byteLength>this.maxPayload){let r=[];for(;e.byteLength>this.maxPayload;)r.push(this.encrypt(e.subarray(0,this.maxPayload))),e=e.subarray(this.maxPayload);return e.byteLength>0&&r.push(this.encrypt(e)),r}else return[this.encrypt(e)]}decrypt_large(e){let r=e.reduce((o,a)=>o+a.byteLength-this.algorithms.aead.TAGBYTES,0),s=new Uint8Array(r),n=0;return e.forEach(o=>{let a=this.decrypt(o);s.set(a,n),n+=a.byteLength}),s}};var re={};G(re,{Handshake:()=>gt});var ee={};G(ee,{PATTERNS:()=>dt,isOneWay:()=>te,lookupPattern:()=>Ut});var dt={};function x(i,e,r,s){let n={name:i,baseName:i,messages:e,initiatorPreMessage:r,responderPreMessage:s};dt[n.name]=n}x("I1K1",[["e","s"],["e","ee","es"],["se"]],[],["s"]);x("I1K",[["e","es","s"],["e","ee"],["se"]],[],["s"]);x("I1N",[["e","s"],["e","ee"],["se"]],[],[]);x("I1X1",[["e","s"],["e","ee","s"],["se","es"]],[],[]);x("I1X",[["e","s"],["e","ee","s","es"],["se"]],[],[]);x("IK1",[["e","s"],["e","ee","se","es"]],[],["s"]);x("IK",[["e","es","s","ss"],["e","ee","se"]],[],["s"]);x("IN",[["e","s"],["e","ee","se"]],[],[]);x("IX1",[["e","s"],["e","ee","se","s"],["es"]],[],[]);x("IX",[["e","s"],["e","ee","se","s","es"]],[],[]);x("K1K1",[["e"],["e","ee","es"],["se"]],["s"],["s"]);x("K1K",[["e","es"],["e","ee"],["se"]],["s"],["s"]);x("K1N",[["e"],["e","ee"],["se"]],["s"],[]);x("K1X1",[["e"],["e","ee","s"],["se","es"]],["s"],[]);x("K1X",[["e"],["e","ee","s","es"],["se"]],["s"],[]);x("K",[["e","es","ss"]],["s"],["s"]);x("KK1",[["e"],["e","ee","se","es"]],["s"],["s"]);x("KK",[["e","es","ss"],["e","ee","se"]],["s"],["s"]);x("KN",[["e"],["e","ee","se"]],["s"],[]);x("KX1",[["e"],["e","ee","se","s"],["es"]],["s"],[]);x("KX",[["e"],["e","ee","se","s","es"]],["s"],[]);x("N",[["e","es"]],[],["s"]);x("NK1",[["e"],["e","ee","es"]],[],["s"]);x("NK",[["e","es"],["e","ee"]],[],["s"]);x("NN",[["e"],["e","ee"]],[],[]);x("NX1",[["e"],["e","ee","s"],["es"]],[],[]);x("NX",[["e"],["e","ee","s","es"]],[],[]);x("X1K1",[["e"],["e","ee","es"],["s"],["se"]],[],["s"]);x("X1K",[["e","es"],["e","ee"],["s"],["se"]],[],["s"]);x("X1N",[["e"],["e","ee"],["s"],["se"]],[],[]);x("X1X1",[["e"],["e","ee","s"],["es","s"],["se"]],[],[]);x("X1X",[["e"],["e","ee","s","es"],["s"],["se"]],[],[]);x("X",[["e","es","s","ss"]],[],["s"]);x("XK1",[["e"],["e","ee","es"],["s","se"]],[],["s"]);x("XK",[["e","es"],["e","ee"],["s","se"]],[],["s"]);x("XN",[["e"],["e","ee"],["s","se"]],[],[]);x("XX1",[["e"],["e","ee","s"],["es","s","se"]],[],[]);x("XX",[["e"],["e","ee","s","es"],["s","se"]],[],[]);function te(i){return i.baseName.length===1}var De=/^([NKX]|[NKXI]1?[NKX]1?)([a-z][a-z0-9]*(\+[a-z][a-z0-9]*)*)?$/,Ce=/^psk([0-9]+)$/;function Ut(i){var n,o,a;let e=De.exec(i);if(e===null)return null;let r=(o=(n=e[2])==null?void 0:n.split("+"))!=null?o:[],s=(a=dt[e[1]])!=null?a:null;return s?(r.forEach(f=>s=s&&Ye(s,f)),s&&Bt(Nt({},s),{name:i})):null}function Ye(i,e){let r=Ce.exec(e);if(r===null)return null;let s=parseInt(r[1],10),n=i.messages;return Bt(Nt({},i),{messages:s===0?[["psk",...n[0]],...n.slice(1)]:[...n.slice(0,s-1),[...n[s-1],"psk"],...n.slice(s)]})}var gt=class{constructor(e,r,s,n={}){this.algorithms=e;this.role=s;this.stepIndex=0;var a,f,c,y,p,u,d;if(typeof r=="string"){let l=Ut(r);if(l===null)throw new Error("Unknown Noise Protocol handshake pattern "+r);this.pattern=l}else this.pattern=r;this.staticKeypair=(a=n.staticKeypair)!=null?a:this.algorithms.dh.generateKeypair(),this.remoteStaticPublicKey=(f=n.remoteStaticPublicKey)!=null?f:null,this.ephemeralKeypair=(c=n.pregeneratedEphemeralKeypair)!=null?c:this.algorithms.dh.generateKeypair(),this.remoteEphemeralPublicKey=(y=n.remotePregeneratedEphemeralPublicKey)!=null?y:null,this.preSharedKeys=n.preSharedKeys,this.preSharedKeys&&(this.preSharedKeys=this.preSharedKeys.slice(),this.preSharedKeys.length===0&&(this.preSharedKeys=void 0));let o=new TextEncoder().encode("Noise_"+this.pattern.name+"_"+this.algorithms.dh.NAME+"_"+this.algorithms.aead.NAME+"_"+this.algorithms.hash.NAME);this.cipherState=new rt(this.algorithms);{let l=this.algorithms.hash.OUTBYTES,A=o.byteLength>l?this.algorithms.hash.digest(o):o;this.chainingKey=W(A,new Uint8Array(l-A.byteLength))}this.handshakeHash=this.chainingKey,this.mixHash((p=n.prologue)!=null?p:wt),this.pattern.initiatorPreMessage.forEach(l=>this.mixHash(l==="e"?this.isInitiator?this.ephemeralKeypair.public:this.remoteEphemeralPublicKey:this.isInitiator?this.staticKeypair.public:this.remoteStaticPublicKey)),this.pattern.responderPreMessage.forEach(l=>this.mixHash(l==="e"?this.isInitiator?this.remoteEphemeralPublicKey:this.ephemeralKeypair.public:this.isInitiator?this.remoteStaticPublicKey:this.staticKeypair.public)),this.hkdf=(d=this.algorithms.hkdf)!=null?d:qt((u=this.algorithms.hmac)!=null?u:$t(this.algorithms.hash))}get isInitiator(){return this.role==="initiator"}mixHash(e){this.handshakeHash=this.algorithms.hash.digest(W(this.handshakeHash,e))}mixKey(e){let[r,s]=this.hkdf(this.chainingKey,e,2);this.chainingKey=r,this.cipherState=new rt(this.algorithms,s)}mixKeyAndHashNextPSK(){let e=this.preSharedKeys.shift(),[r,s,n]=this.hkdf(this.chainingKey,e,3);this.chainingKey=r,this.mixHash(s),this.cipherState=new rt(this.algorithms,n)}encryptAndHash(e){let r=this.cipherState.encrypt(e,this.handshakeHash);return this.mixHash(r),r}decryptAndHash(e){let r=this.cipherState.decrypt(e,this.handshakeHash);return this.mixHash(e),r}_split(){if(this.stepIndex<this.pattern.messages.length)return null;{let[e,r]=this.hkdf(this.chainingKey,wt,2).map(s=>new rt(this.algorithms,s));return this.isInitiator?{send:e,recv:r}:{send:r,recv:e}}}_nextStep(){if(this.stepIndex>=this.pattern.messages.length)throw new Error("Handshake already complete, cannot continue");return this.pattern.messages[this.stepIndex++]}_processKeyMixToken(e){switch(e){case"ee":this.mixKey(this.algorithms.dh.dh(this.ephemeralKeypair,this.remoteEphemeralPublicKey));break;case"es":this.mixKey(this.isInitiator?this.algorithms.dh.dh(this.ephemeralKeypair,this.remoteStaticPublicKey):this.algorithms.dh.dh(this.staticKeypair,this.remoteEphemeralPublicKey));break;case"se":this.mixKey(this.isInitiator?this.algorithms.dh.dh(this.staticKeypair,this.remoteEphemeralPublicKey):this.algorithms.dh.dh(this.ephemeralKeypair,this.remoteStaticPublicKey));break;case"ss":this.mixKey(this.algorithms.dh.dh(this.staticKeypair,this.remoteStaticPublicKey));break;case"psk":this.mixKeyAndHashNextPSK();break}}writeMessage(e){let r=[];this._nextStep().forEach(n=>{switch(n){case"e":r.push(this.ephemeralKeypair.public),this.mixHash(this.ephemeralKeypair.public),this.preSharedKeys&&this.mixKey(this.ephemeralKeypair.public);break;case"s":r.push(this.encryptAndHash(this.staticKeypair.public));break;default:this._processKeyMixToken(n);break}}),r.push(this.encryptAndHash(e));let s;if(r.length===1)s=r[0];else{s=new Uint8Array(r.reduce((o,a)=>o+a.byteLength,0));let n=0;r.forEach(o=>{s.set(o,n),n+=o.byteLength})}return{packet:s,finished:this._split()}}readMessage(e){let r=n=>{let o=e.slice(0,n);return e=e.subarray(n),o};return this._nextStep().forEach(n=>{switch(n){case"e":this.remoteEphemeralPublicKey=r(this.algorithms.dh.DHLEN),this.mixHash(this.remoteEphemeralPublicKey),this.preSharedKeys&&this.mixKey(this.remoteEphemeralPublicKey);break;case"s":this.remoteStaticPublicKey=this.decryptAndHash(r(this.algorithms.dh.DHLEN+(this.cipherState.view?16:0)));break;default:this._processKeyMixToken(n);break}}),{message:this.decryptAndHash(e),finished:this._split()}}async completeHandshake(e,r,s=async o=>{},n=async()=>new Uint8Array(0)){let o=async()=>{let{packet:f,finished:c}=this.writeMessage(await n());return await e(f),c||a()},a=async()=>{let{message:f,finished:c}=this.readMessage(await r());return await s(f),c||o()};return this.isInitiator?o():a()}};var se={};G(se,{Noise_25519_ChaChaPoly_BLAKE2s:()=>ie});var ie={dh:zt,aead:ut,hash:xt};var Fe={aead:{chacha20poly1305:Ct},cipher:{chacha20:_t},dh:{x25519:vt},hash:{blake2s:Gt,poly1305:Lt},noise:{algorithms:Qt,cipherstate:Jt,handshake:re,patterns:ee,profiles:se,rekey:Zt}};0&&(module.exports={AuthenticationFailure,BLAKE2s,Bytes,ChaCha20,ChaCha20Poly1305_RFC8439,CipherState,Handshake,INTERNALS,IO,Noise_25519_ChaChaPoly_BLAKE2s,Nonce,PATTERNS,Poly1305,X25519,_decrypt,_encrypt,_randomBytes,isOneWay,lookupPattern,makeHKDF,makeHMAC,matchPattern,randomBytes});
|
|
2
|
+
//# sourceMappingURL=salty-crypto.js.map
|