(()=>{const e="undefined"!=typeof globalThis?globalThis:global||self,{Error:n,Float64Array:t,Uint8Array:o}=e,r=new t(16),l=new t(16),w=new o(32),f=new t(16);w[0]=9,f[0]=56129,f[1]=l[0]=1;const s=(e,n,t)=>{for(let o=0;o<16;o++)e[o]=n[o]+t[o]|0},c=(e,n,t)=>{for(let o=0;o<16;o++)e[o]=n[o]-t[o]|0},u=e=>{let n=0;for(let t=0;t<16;t++)e[t]+=65536,n=Math.floor(e[t]/65536),e[(t+1)*(t<15?1:0)]+=n-1+37*(n-1)*(15===t?1:0),e[t]-=65536*n},d=(e,n)=>{e.set(n.subarray(0,e.length))},a=(e,n,o)=>{let r=0,l=0,w=new t(31);for(r=0;r<16;r++)for(l=0;l<16;l++)w[r+l]+=n[r]*o[l];for(r=0;r<15;r++)w[r]+=38*w[r+16];u(w),u(w),d(e,w)},b=(e,n)=>{a(e,n,n)},i=(e,n,t)=>{let o=0,r=~(t-1);for(let t=0;t<16;t++)o=r&(e[t]^n[t]),e[t]^=o,n[t]^=o},y=(e,n)=>{const w=new t(80),y=new t(l),h=new t(r),g=new t(r),k=new t(l),p=new t(r),S=new t(r),m=new o(e);let A=0;((e,n)=>{for(let t=0;t<16;t++)e[t]=n[2*t]+(n[2*t+1]<<8)})(w,n),d(h,w);for(let e=254;e>=0;--e)A=m[e>>>3]>>>(7&e)&1,i(y,h,A),i(g,k,A),s(p,y,g),c(y,y,g),s(g,h,k),c(h,h,k),b(k,p),b(S,y),a(y,g,y),a(g,h,p),s(p,y,g),c(y,y,g),b(h,y),c(g,k,S),a(y,g,f),s(y,y,k),a(g,g,y),a(y,k,S),a(k,h,w),b(h,p),i(y,h,A),i(g,k,A);for(let e=0;e<16;e++)w[e+16]=y[e],w[e+32]=g[e],w[e+48]=h[e],w[e+64]=k[e];const T=w.subarray(32),E=w.subarray(16);((e,n)=>{const o=new t(16);d(o,n);for(let e=253;e>=0;e--)b(o,o),2!==e&&4!==e&&a(o,o,n);d(e,o)})(T,T),a(E,E,T);const F=new o(32);return((e,n)=>{const o=new t(16),r=new t(16);let l=0,w=0;d(r,n),u(r),u(r),u(r);for(let e=0;e<2;e++){for(o[0]=r[0]-65517,l=1;l<15;l++)o[l]=r[l]-65535-(o[l-1]>>16&1),o[l-1]&=65535;o[15]=r[15]-32767-(o[14]>>16&1),w=o[15]>>16&1,o[14]&=65535,i(r,o,1-w)}for(l=0;l<16;l++)e[2*l]=255&r[l],e[2*l+1]=r[l]>>8})(F,E),F},h=e=>{e[0]&=248,e[31]=127&e[31]|64},g={getPublic:e=>{if(32!==e.length)throw new n("Secret key should be 32 bytes.");const t=new o(e);return h(t),y(t,w)},getShared:(e,t)=>{if(32!==e.length||32!==t.length)throw new n("Secret key and public key should be 32 bytes.");const r=new o(e);return h(r),y(r,t)}};"undefined"!=typeof module?module.exports=g:e.X25519=g})()