diff --git a/chacha20poly1305/docs/classes/Chacha20Poly1305.html b/chacha20poly1305/docs/classes/Chacha20Poly1305.html index 2d7a77ec1..016101fa9 100644 --- a/chacha20poly1305/docs/classes/Chacha20Poly1305.html +++ b/chacha20poly1305/docs/classes/Chacha20Poly1305.html @@ -7,17 +7,17 @@

This class is implemented using @noble/ciphers.

-

Implements

Constructors

Implements

Constructors

Properties

id: AeadId = AeadId.Chacha20Poly1305

AeadId.Chacha20Poly1305 (0x0003)

-
keySize: number = 32

32

-
nonceSize: number = 12

12

-
tagSize: number = 16

16

-

Methods

  • Creates an AEAD encryption context which has seal/open operation.

    +
keySize: number = 32

32

+
nonceSize: number = 12

12

+
tagSize: number = 16

16

+

Methods

  • Creates an AEAD encryption context which has seal/open operation.

    Parameters

    • key: ArrayBuffer

      A byte string of the raw key.

    Returns AeadEncryptionContext

    An AEAD encryption context.

    -
+
diff --git a/chacha20poly1305/src/hpke-chacha20poly1305.js b/chacha20poly1305/src/hpke-chacha20poly1305.js index 7ba88d803..d96995e0e 100644 --- a/chacha20poly1305/src/hpke-chacha20poly1305.js +++ b/chacha20poly1305/src/hpke-chacha20poly1305.js @@ -1,4 +1,4 @@ -function J(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function se(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function ae(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function C(r,...e){if(!ae(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function oe(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function xe(r,e){C(r);let s=e.outputLen;if(r.lengthnew Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),me=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),je=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!je)throw new Error("Non little-endian hardware is not supported");function He(r){if(typeof r!="string")throw new Error(`string expected, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Q(r){if(typeof r=="string")r=He(r);else if(ae(r))r=r.slice();else throw new Error(`Uint8Array expected, got ${typeof r}`);return r}function ge(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function _e(r,e){if(r.length!==e.length)return!1;let s=0;for(let t=0;t(Object.assign(e,r),e);function ue(r,e,s,t){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,s,t);let a=BigInt(32),i=BigInt(4294967295),o=Number(s>>a&i),n=Number(s&i),u=t?4:0,l=t?0:4;r.setUint32(e+u,o,t),r.setUint32(e+l,n,t)}var B=(r,e)=>r[e++]&255|(r[e++]&255)<<8,fe=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=Q(e),C(e,32);let s=B(e,0),t=B(e,2),a=B(e,4),i=B(e,6),o=B(e,8),n=B(e,10),u=B(e,12),l=B(e,14);this.r[0]=s&8191,this.r[1]=(s>>>13|t<<3)&8191,this.r[2]=(t>>>10|a<<6)&7939,this.r[3]=(a>>>7|i<<9)&8191,this.r[4]=(i>>>4|o<<12)&255,this.r[5]=o>>>1&8190,this.r[6]=(o>>>14|n<<2)&8191,this.r[7]=(n>>>11|u<<5)&8065,this.r[8]=(u>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let h=0;h<8;h++)this.pad[h]=B(e,16+2*h)}process(e,s,t=!1){let a=t?0:2048,{h:i,r:o}=this,n=o[0],u=o[1],l=o[2],h=o[3],p=o[4],x=o[5],w=o[6],y=o[7],b=o[8],d=o[9],m=B(e,s+0),g=B(e,s+2),O=B(e,s+4),H=B(e,s+6),R=B(e,s+8),T=B(e,s+10),N=B(e,s+12),D=B(e,s+14),_=i[0]+(m&8191),P=i[1]+((m>>>13|g<<3)&8191),k=i[2]+((g>>>10|O<<6)&8191),K=i[3]+((O>>>7|H<<9)&8191),v=i[4]+((H>>>4|R<<12)&8191),A=i[5]+(R>>>1&8191),S=i[6]+((R>>>14|T<<2)&8191),E=i[7]+((T>>>11|N<<5)&8191),U=i[8]+((N>>>8|D<<8)&8191),L=i[9]+(D>>>5|a),f=0,z=f+_*n+P*(5*d)+k*(5*b)+K*(5*y)+v*(5*w);f=z>>>13,z&=8191,z+=A*(5*x)+S*(5*p)+E*(5*h)+U*(5*l)+L*(5*u),f+=z>>>13,z&=8191;let j=f+_*u+P*n+k*(5*d)+K*(5*b)+v*(5*y);f=j>>>13,j&=8191,j+=A*(5*w)+S*(5*x)+E*(5*p)+U*(5*h)+L*(5*l),f+=j>>>13,j&=8191;let I=f+_*l+P*u+k*n+K*(5*d)+v*(5*b);f=I>>>13,I&=8191,I+=A*(5*y)+S*(5*w)+E*(5*x)+U*(5*p)+L*(5*h),f+=I>>>13,I&=8191;let M=f+_*h+P*l+k*u+K*n+v*(5*d);f=M>>>13,M&=8191,M+=A*(5*b)+S*(5*y)+E*(5*w)+U*(5*x)+L*(5*p),f+=M>>>13,M&=8191;let q=f+_*p+P*h+k*l+K*u+v*n;f=q>>>13,q&=8191,q+=A*(5*d)+S*(5*b)+E*(5*y)+U*(5*w)+L*(5*x),f+=q>>>13,q&=8191;let Y=f+_*x+P*p+k*h+K*l+v*u;f=Y>>>13,Y&=8191,Y+=A*n+S*(5*d)+E*(5*b)+U*(5*y)+L*(5*w),f+=Y>>>13,Y&=8191;let X=f+_*w+P*x+k*p+K*h+v*l;f=X>>>13,X&=8191,X+=A*u+S*n+E*(5*d)+U*(5*b)+L*(5*y),f+=X>>>13,X&=8191;let Z=f+_*y+P*w+k*x+K*p+v*h;f=Z>>>13,Z&=8191,Z+=A*l+S*u+E*n+U*(5*d)+L*(5*b),f+=Z>>>13,Z&=8191;let V=f+_*b+P*y+k*w+K*x+v*p;f=V>>>13,V&=8191,V+=A*h+S*l+E*u+U*n+L*(5*d),f+=V>>>13,V&=8191;let W=f+_*d+P*b+k*y+K*w+v*x;f=W>>>13,W&=8191,W+=A*p+S*h+E*l+U*u+L*n,f+=W>>>13,W&=8191,f=(f<<2)+f|0,f=f+z|0,z=f&8191,f=f>>>13,j+=f,i[0]=z,i[1]=j,i[2]=I,i[3]=M,i[4]=q,i[5]=Y,i[6]=X,i[7]=Z,i[8]=V,i[9]=W}finalize(){let{h:e,pad:s}=this,t=new Uint16Array(10),a=e[1]>>>13;e[1]&=8191;for(let n=2;n<10;n++)e[n]+=a,a=e[n]>>>13,e[n]&=8191;e[0]+=a*5,a=e[0]>>>13,e[0]&=8191,e[1]+=a,a=e[1]>>>13,e[1]&=8191,e[2]+=a,t[0]=e[0]+5,a=t[0]>>>13,t[0]&=8191;for(let n=1;n<10;n++)t[n]=e[n]+a,a=t[n]>>>13,t[n]&=8191;t[9]-=8192;let i=(a^1)-1;for(let n=0;n<10;n++)t[n]&=i;i=~i;for(let n=0;n<10;n++)e[n]=e[n]&i|t[n];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let o=e[0]+s[0];e[0]=o&65535;for(let n=1;n<8;n++)o=(e[n]+s[n]|0)+(o>>>16)|0,e[n]=o&65535}update(e){oe(this);let{buffer:s,blockLen:t}=this;e=Q(e);let a=e.length;for(let i=0;i>>0,e[i++]=t[o]>>>8;return e}digest(){let{buffer:e,outputLen:s}=this;this.digestInto(e);let t=e.slice(0,s);return this.destroy(),t}};function Be(r){let e=(t,a)=>r(a).update(Q(t)).digest(),s=r(new Uint8Array(32));return e.outputLen=s.outputLen,e.blockLen=s.blockLen,e.create=t=>r(t),e}var Pe=Be(r=>new fe(r));var Ke=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),Te=Ke("expand 16-byte k"),Ne=Ke("expand 32-byte k"),De=G(Te),ve=G(Ne),mt=ve.slice();function c(r,e){return r<>>32-e}function le(r){return r.byteOffset%4===0}var ee=64,Ce=16,Ae=2**32-1,ke=new Uint32Array;function Re(r,e,s,t,a,i,o,n){let u=a.length,l=new Uint8Array(ee),h=G(l),p=le(a)&&le(i),x=p?G(a):ke,w=p?G(i):ke;for(let y=0;y=Ae)throw new Error("arx: counter overflow");let b=Math.min(ee,u-y);if(p&&b===ee){let d=y/4;if(y%4!==0)throw new Error("arx: invalid block position");for(let m=0,g;m{C(n),C(u),C(l);let x=l.length;if(h||(h=new Uint8Array(x)),C(h),J(p),p<0||p>=Ae)throw new Error("arx: counter overflow");if(h.length0;)w.pop().fill(0);return h}}function Ue(r,e,s,t,a,i=20){let o=r[0],n=r[1],u=r[2],l=r[3],h=e[0],p=e[1],x=e[2],w=e[3],y=e[4],b=e[5],d=e[6],m=e[7],g=a,O=s[0],H=s[1],R=s[2],T=o,N=n,D=u,_=l,P=h,k=p,K=x,v=w,A=y,S=b,E=d,U=m,L=g,f=O,z=H,j=R;for(let M=0;M{r.update(e);let s=e.length%16;s&&r.update(Fe.subarray(s))},qe=new Uint8Array(32);function Ee(r,e,s,t,a){let i=r(e,s,qe),o=Pe.create(i);a&&Se(o,a),Se(o,t);let n=new Uint8Array(16),u=me(n);ue(u,0,BigInt(a?a.length:0),!0),ue(u,8,BigInt(t.length),!0),o.update(n);let l=o.digest();return i.fill(0),l}var Le=r=>(e,s,t)=>(C(e,32),C(s),{encrypt:(i,o)=>{let n=i.length,u=n+16;o?C(o,u):o=new Uint8Array(u),r(e,s,i,o,1);let l=Ee(r,e,s,o.subarray(0,-16),t);return o.set(l,n),o},decrypt:(i,o)=>{let n=i.length,u=n-16;if(n<16)throw new Error("encrypted data must be at least 16 bytes");o?C(o,u):o=new Uint8Array(u);let l=i.subarray(0,-16),h=i.subarray(-16),p=Ee(r,e,s,l,t);if(!_e(h,p))throw new Error("invalid tag");return r(e,s,l,o,1),o}}),de=ce({blockSize:64,nonceLength:12,tagLength:16},Le(Ge)),vt=ce({blockSize:64,nonceLength:24,tagLength:16},Le($e));var Ye={},Xe=Ze(globalThis,Ye);function Ze(r,e){return new Proxy(r,{get(s,t,a){return t in e?e[t]:r[t]},set(s,t,a){return t in e&&delete e[t],r[t]=a,!0},deleteProperty(s,t){let a=!1;return t in e&&(delete e[t],a=!0),t in r&&(delete r[t],a=!0),a},ownKeys(s){let t=Reflect.ownKeys(r),a=Reflect.ownKeys(e),i=new Set(a);return[...t.filter(o=>!i.has(o)),...a]},defineProperty(s,t,a){return t in e&&delete e[t],Reflect.defineProperty(r,t,a),!0},getOwnPropertyDescriptor(s,t){return t in e?Reflect.getOwnPropertyDescriptor(e,t):Reflect.getOwnPropertyDescriptor(r,t)},has(s,t){return t in e||t in r}})}var $={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var F=new Uint8Array(0);var Vt=new Uint8Array([115,101,99]);var Er=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),Ur=new Uint8Array([101,120,112]),Lr=new Uint8Array([105,110,102,111,95,104,97,115,104]),Ir=new Uint8Array([107,101,121]),zr=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Or=new Uint8Array([115,101,99,114,101,116]),jr=new Uint8Array([72,80,75,69,0,0,0,0,0,0]);var Cr=new Uint8Array([72,80,75,69,45,118,49]);var ze=new Uint8Array([75,69,77,0,0]);var Zr=new Uint8Array([101,97,101,95,112,114,107]),Vr=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);var Oe=new Uint8Array([100,107,112,95,112,114,107]),rt=new Uint8Array([115,107]);var li=new Uint8Array([99,97,110,100,105,100,97,116,101]),hi=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),di=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),yi=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),bi=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),pi=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),wi=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]);var pe=class{constructor(e){Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._key=new Uint8Array(e)}async seal(e,s,t){return await this._seal(e,s,t)}async open(e,s,t){return await this._open(e,s,t)}_seal(e,s,t){return new Promise(a=>{let i=de(this._key,new Uint8Array(e),new Uint8Array(t)).encrypt(new Uint8Array(s));a(i.buffer)})}_open(e,s,t){return new Promise(a=>{let i=de(this._key,new Uint8Array(e),new Uint8Array(t)).decrypt(new Uint8Array(s));a(i.buffer)})}},we=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:$.Chacha20Poly1305}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new pe(e)}};export{we as Chacha20Poly1305}; +function te(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function se(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function oe(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function C(r,...e){if(!oe(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function ce(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function ge(r,e){C(r);let a=e.outputLen;if(r.lengthnew Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),me=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),De=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!De)throw new Error("Non little-endian hardware is not supported");function Ce(r){if(typeof r!="string")throw new Error(`string expected, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function re(r){if(typeof r=="string")r=Ce(r);else if(oe(r))r=r.slice();else throw new Error(`Uint8Array expected, got ${typeof r}`);return r}function Pe(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function Ke(r,e){if(r.length!==e.length)return!1;let a=0;for(let t=0;t(Object.assign(e,r),e);function fe(r,e,a,t){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,a,t);let s=BigInt(32),i=BigInt(4294967295),o=Number(a>>s&i),n=Number(a&i),u=t?4:0,l=t?0:4;r.setUint32(e+u,o,t),r.setUint32(e+l,n,t)}var B=(r,e)=>r[e++]&255|(r[e++]&255)<<8,le=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=re(e),C(e,32);let a=B(e,0),t=B(e,2),s=B(e,4),i=B(e,6),o=B(e,8),n=B(e,10),u=B(e,12),l=B(e,14);this.r[0]=a&8191,this.r[1]=(a>>>13|t<<3)&8191,this.r[2]=(t>>>10|s<<6)&7939,this.r[3]=(s>>>7|i<<9)&8191,this.r[4]=(i>>>4|o<<12)&255,this.r[5]=o>>>1&8190,this.r[6]=(o>>>14|n<<2)&8191,this.r[7]=(n>>>11|u<<5)&8065,this.r[8]=(u>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let h=0;h<8;h++)this.pad[h]=B(e,16+2*h)}process(e,a,t=!1){let s=t?0:2048,{h:i,r:o}=this,n=o[0],u=o[1],l=o[2],h=o[3],p=o[4],x=o[5],w=o[6],y=o[7],b=o[8],d=o[9],_=B(e,a+0),g=B(e,a+2),O=B(e,a+4),H=B(e,a+6),R=B(e,a+8),T=B(e,a+10),N=B(e,a+12),D=B(e,a+14),m=i[0]+(_&8191),P=i[1]+((_>>>13|g<<3)&8191),K=i[2]+((g>>>10|O<<6)&8191),k=i[3]+((O>>>7|H<<9)&8191),v=i[4]+((H>>>4|R<<12)&8191),A=i[5]+(R>>>1&8191),S=i[6]+((R>>>14|T<<2)&8191),E=i[7]+((T>>>11|N<<5)&8191),U=i[8]+((N>>>8|D<<8)&8191),L=i[9]+(D>>>5|s),f=0,z=f+m*n+P*(5*d)+K*(5*b)+k*(5*y)+v*(5*w);f=z>>>13,z&=8191,z+=A*(5*x)+S*(5*p)+E*(5*h)+U*(5*l)+L*(5*u),f+=z>>>13,z&=8191;let j=f+m*u+P*n+K*(5*d)+k*(5*b)+v*(5*y);f=j>>>13,j&=8191,j+=A*(5*w)+S*(5*x)+E*(5*p)+U*(5*h)+L*(5*l),f+=j>>>13,j&=8191;let I=f+m*l+P*u+K*n+k*(5*d)+v*(5*b);f=I>>>13,I&=8191,I+=A*(5*y)+S*(5*w)+E*(5*x)+U*(5*p)+L*(5*h),f+=I>>>13,I&=8191;let M=f+m*h+P*l+K*u+k*n+v*(5*d);f=M>>>13,M&=8191,M+=A*(5*b)+S*(5*y)+E*(5*w)+U*(5*x)+L*(5*p),f+=M>>>13,M&=8191;let q=f+m*p+P*h+K*l+k*u+v*n;f=q>>>13,q&=8191,q+=A*(5*d)+S*(5*b)+E*(5*y)+U*(5*w)+L*(5*x),f+=q>>>13,q&=8191;let Y=f+m*x+P*p+K*h+k*l+v*u;f=Y>>>13,Y&=8191,Y+=A*n+S*(5*d)+E*(5*b)+U*(5*y)+L*(5*w),f+=Y>>>13,Y&=8191;let X=f+m*w+P*x+K*p+k*h+v*l;f=X>>>13,X&=8191,X+=A*u+S*n+E*(5*d)+U*(5*b)+L*(5*y),f+=X>>>13,X&=8191;let V=f+m*y+P*w+K*x+k*p+v*h;f=V>>>13,V&=8191,V+=A*l+S*u+E*n+U*(5*d)+L*(5*b),f+=V>>>13,V&=8191;let Z=f+m*b+P*y+K*w+k*x+v*p;f=Z>>>13,Z&=8191,Z+=A*h+S*l+E*u+U*n+L*(5*d),f+=Z>>>13,Z&=8191;let W=f+m*d+P*b+K*y+k*w+v*x;f=W>>>13,W&=8191,W+=A*p+S*h+E*l+U*u+L*n,f+=W>>>13,W&=8191,f=(f<<2)+f|0,f=f+z|0,z=f&8191,f=f>>>13,j+=f,i[0]=z,i[1]=j,i[2]=I,i[3]=M,i[4]=q,i[5]=Y,i[6]=X,i[7]=V,i[8]=Z,i[9]=W}finalize(){let{h:e,pad:a}=this,t=new Uint16Array(10),s=e[1]>>>13;e[1]&=8191;for(let n=2;n<10;n++)e[n]+=s,s=e[n]>>>13,e[n]&=8191;e[0]+=s*5,s=e[0]>>>13,e[0]&=8191,e[1]+=s,s=e[1]>>>13,e[1]&=8191,e[2]+=s,t[0]=e[0]+5,s=t[0]>>>13,t[0]&=8191;for(let n=1;n<10;n++)t[n]=e[n]+s,s=t[n]>>>13,t[n]&=8191;t[9]-=8192;let i=(s^1)-1;for(let n=0;n<10;n++)t[n]&=i;i=~i;for(let n=0;n<10;n++)e[n]=e[n]&i|t[n];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let o=e[0]+a[0];e[0]=o&65535;for(let n=1;n<8;n++)o=(e[n]+a[n]|0)+(o>>>16)|0,e[n]=o&65535}update(e){ce(this);let{buffer:a,blockLen:t}=this;e=re(e);let s=e.length;for(let i=0;i>>0,e[i++]=t[o]>>>8;return e}digest(){let{buffer:e,outputLen:a}=this;this.digestInto(e);let t=e.slice(0,a);return this.destroy(),t}};function Re(r){let e=(t,s)=>r(s).update(re(t)).digest(),a=r(new Uint8Array(32));return e.outputLen=a.outputLen,e.blockLen=a.blockLen,e.create=t=>r(t),e}var ke=Re(r=>new le(r));var Ae=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),Me=Ae("expand 16-byte k"),Ge=Ae("expand 32-byte k"),$e=G(Me),Se=G(Ge),Et=Se.slice();function c(r,e){return r<>>32-e}function he(r){return r.byteOffset%4===0}var ie=64,Fe=16,Ee=2**32-1,ve=new Uint32Array;function qe(r,e,a,t,s,i,o,n){let u=s.length,l=new Uint8Array(ie),h=G(l),p=he(s)&&he(i),x=p?G(s):ve,w=p?G(i):ve;for(let y=0;y=Ee)throw new Error("arx: counter overflow");let b=Math.min(ie,u-y);if(p&&b===ie){let d=y/4;if(y%4!==0)throw new Error("arx: invalid block position");for(let _=0,g;_{C(n),C(u),C(l);let x=l.length;if(h||(h=new Uint8Array(x)),C(h),te(p),p<0||p>=Ee)throw new Error("arx: counter overflow");if(h.length0;)w.pop().fill(0);return h}}function Ie(r,e,a,t,s,i=20){let o=r[0],n=r[1],u=r[2],l=r[3],h=e[0],p=e[1],x=e[2],w=e[3],y=e[4],b=e[5],d=e[6],_=e[7],g=s,O=a[0],H=a[1],R=a[2],T=o,N=n,D=u,m=l,P=h,K=p,k=x,v=w,A=y,S=b,E=d,U=_,L=g,f=O,z=H,j=R;for(let M=0;M{r.update(e);let a=e.length%16;a&&r.update(Ze.subarray(a))},We=new Uint8Array(32);function Le(r,e,a,t,s){let i=r(e,a,We),o=ke.create(i);s&&Ue(o,s),Ue(o,t);let n=new Uint8Array(16),u=me(n);fe(u,0,BigInt(s?s.length:0),!0),fe(u,8,BigInt(t.length),!0),o.update(n);let l=o.digest();return i.fill(0),l}var ze=r=>(e,a,t)=>(C(e,32),C(a),{encrypt:(i,o)=>{let n=i.length,u=n+16;o?C(o,u):o=new Uint8Array(u),r(e,a,i,o,1);let l=Le(r,e,a,o.subarray(0,-16),t);return o.set(l,n),o},decrypt:(i,o)=>{let n=i.length,u=n-16;if(n<16)throw new Error("encrypted data must be at least 16 bytes");o?C(o,u):o=new Uint8Array(u);let l=i.subarray(0,-16),h=i.subarray(-16),p=Le(r,e,a,l,t);if(!Ke(h,p))throw new Error("invalid tag");return r(e,a,l,o,1),o}}),ye=ue({blockSize:64,nonceLength:12,tagLength:16},ze(Xe)),jt=ue({blockSize:64,nonceLength:24,tagLength:16},ze(Ve));var Je={},Qe=et(globalThis,Je);function et(r,e){return new Proxy(r,{get(a,t,s){return t in e?e[t]:r[t]},set(a,t,s){return t in e&&delete e[t],r[t]=s,!0},deleteProperty(a,t){let s=!1;return t in e&&(delete e[t],s=!0),t in r&&(delete r[t],s=!0),s},ownKeys(a){let t=Reflect.ownKeys(r),s=Reflect.ownKeys(e),i=new Set(s);return[...t.filter(o=>!i.has(o)),...s]},defineProperty(a,t,s){return t in e&&delete e[t],Reflect.defineProperty(r,t,s),!0},getOwnPropertyDescriptor(a,t){return t in e?Reflect.getOwnPropertyDescriptor(e,t):Reflect.getOwnPropertyDescriptor(r,t)},has(a,t){return t in e||t in r}})}var F={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var $=new Uint8Array(0);var be=new Uint8Array([75,69,77,0,0]);var Yt=new Uint8Array([101,97,101,95,112,114,107]),Xt=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);var we=new Uint8Array([100,107,112,95,112,114,107]),He=new Uint8Array([115,107]);var cr=new Uint8Array([99,97,110,100,105,100,97,116,101]),ur=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),fr=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),lr=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),hr=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),dr=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),yr=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]);var Dr=new Uint8Array([115,101,99]);var ai=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),si=new Uint8Array([101,120,112]),oi=new Uint8Array([105,110,102,111,95,104,97,115,104]),ci=new Uint8Array([107,101,121]),ui=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),fi=new Uint8Array([115,101,99,114,101,116]),li=new Uint8Array([72,80,75,69,0,0,0,0,0,0]);var yi=new Uint8Array([72,80,75,69,45,118,49]);var xe=class{constructor(e){Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._key=new Uint8Array(e)}async seal(e,a,t){return await this._seal(e,a,t)}async open(e,a,t){return await this._open(e,a,t)}_seal(e,a,t){return new Promise(s=>{let i=ye(this._key,new Uint8Array(e),new Uint8Array(t)).encrypt(new Uint8Array(a));s(i.buffer)})}_open(e,a,t){return new Promise(s=>{let i=ye(this._key,new Uint8Array(e),new Uint8Array(t)).decrypt(new Uint8Array(a));s(i.buffer)})}},_e=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:F.Chacha20Poly1305}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new xe(e)}};export{_e as Chacha20Poly1305}; /*! Bundled license information: @noble/ciphers/esm/utils.js: diff --git a/chacha20poly1305/src/hpke-common.js b/chacha20poly1305/src/hpke-common.js index 0aff511e4..d6dcc8e83 100644 --- a/chacha20poly1305/src/hpke-common.js +++ b/chacha20poly1305/src/hpke-common.js @@ -1 +1 @@ -var e={Base:0,Psk:1,Auth:2,AuthPsk:3},x={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},d={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},h={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var k=["encrypt","decrypt"];export{k as AEAD_USAGES,h as AeadId,d as KdfId,x as KemId,e as Mode}; +var v=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},o=class extends v{},b=class extends o{},D=class extends o{},u=class extends o{},h=class extends o{},m=class extends o{},K=class extends o{},T=class extends o{},z=class extends o{},H=class extends o{},R=class extends o{},P=class extends o{},x=class extends o{};var B={},C=N(globalThis,B);function N(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),s=new Set(n);return[...r.filter(a=>!s.has(a)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}async function j(){if(C!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new x(i)}}var _=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await j())}};var F={Base:0,Psk:1,Auth:2,AuthPsk:3},g={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},Y={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},X={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var E=8192,J=32,w=new Uint8Array(0);var S=new Uint8Array([75,69,77,0,0]);var l=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function p(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function y(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function M(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;n8192)throw new b("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():l(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let s;if(e.senderKey===void 0)s=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let c=l(e.senderKey)?e.senderKey.privateKey:e.senderKey,d=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),G=new Uint8Array(await this._prim.dh(c,e.recipientPublicKey));s=y(d,G)}let a;if(e.senderKey===void 0)a=y(new Uint8Array(r),new Uint8Array(n));else{let c=l(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),d=await this._prim.serializePublicKey(c);a=q(new Uint8Array(r),new Uint8Array(n),new Uint8Array(d))}let f=await this._generateSharedSecret(s,a);return{enc:r,sharedSecret:f}}catch(s){throw new m(s)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=l(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=l(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),s=await this._prim.serializePublicKey(n);try{let a;if(e.senderPublicKey===void 0)a=new Uint8Array(await this._prim.dh(r,t));else{let c=new Uint8Array(await this._prim.dh(r,t)),d=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));a=y(c,d)}let f;if(e.senderPublicKey===void 0)f=y(new Uint8Array(e.enc),new Uint8Array(s));else{let c=await this._prim.serializePublicKey(e.senderPublicKey);f=new Uint8Array(e.enc.byteLength+s.byteLength+c.byteLength),f.set(new Uint8Array(e.enc),0),f.set(new Uint8Array(s),e.enc.byteLength),f.set(new Uint8Array(c),e.enc.byteLength+s.byteLength)}return await this._generateSharedSecret(a,f)}catch(a){throw new K(a)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Z,e),n=this._kdf.buildLabeledInfo($,t,this.secretSize);return await this._kdf.extractAndExpand(w,r,n,this.secretSize)}};var k=["deriveBits"],I=new Uint8Array([100,107,112,95,112,114,107]),Q=new Uint8Array([115,107]);var A=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var V=new Uint8Array([99,97,110,100,105,100,97,116,101]),ee=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),te=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),re=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),ie=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),ne=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),se=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),L=class extends _{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case g.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=ee,this._bitmask=255,this._pkcs8AlgId=ie;break;case g.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=te,this._bitmask=255,this._pkcs8AlgId=ne;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=re,this._bitmask=1,this._pkcs8AlgId=se;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new u(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new h(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return M(t.d)}catch(t){throw new u(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new h(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new h(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,k)}catch(e){throw new x(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(w,I,new Uint8Array(e)),r=new A(this._nSk);for(let s=0;r.isZero()||!r.lessThan(this._order);s++){if(s>255)throw new Error("Faild to derive a key pair");let a=new Uint8Array(await this._hkdf.labeledExpand(t,V,p(s,1),this._nSk));a[0]=a[0]&this._bitmask,r.set(a)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new P(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new h(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new u(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,k)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,k)}};var ae=["encrypt","decrypt"];export{ae as AEAD_USAGES,X as AeadId,v as BaseError,K as DecapError,P as DeriveKeyPairError,h as DeserializeError,U as Dhkem,w as EMPTY,L as Ec,m as EncapError,T as ExportError,o as HpkeError,E as INPUT_LENGTH_LIMIT,b as InvalidParamError,Y as KdfId,g as KemId,I as LABEL_DKP_PRK,Q as LABEL_SK,J as MINIMUM_PSK_LENGTH,R as MessageLimitReachedError,F as Mode,_ as NativeAlgorithm,x as NotSupportedError,H as OpenError,S as SUITE_ID_HEADER_KEM,z as SealError,u as SerializeError,D as ValidationError,y as concat,p as i2Osp,l as isCryptoKeyPair,W as xor}; diff --git a/chacha20poly1305/src/hpke-core.js b/chacha20poly1305/src/hpke-core.js index a61ab417f..2daa361d0 100644 --- a/chacha20poly1305/src/hpke-core.js +++ b/chacha20poly1305/src/hpke-core.js @@ -1 +1 @@ -var Se={},we=Ee(globalThis,Se);function Ee(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),a=new Set(n);return[...r.filter(s=>!a.has(s)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}var ie=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},f=class extends ie{},l=class extends f{},_e=class extends f{},P=class extends f{},m=class extends f{},N=class extends f{},T=class extends f{},B=class extends f{},C=class extends f{},M=class extends f{},R=class extends f{},G=class extends f{},p=class extends f{};async function ze(){if(we!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new p(i)}}var x=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await ze())}};var g={Base:0,Psk:1,Auth:2,AuthPsk:3},h={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},A={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},k={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var ne=["encrypt","decrypt"];var ae=class extends x{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(n,this._key,t)}async open(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(n,this._key,t)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,ne)}},F=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new ae(e)}},se=class extends F{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var oe=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new p("Export only")}};var K=8192;var c=new Uint8Array(0);function ue(){return new Promise((i,e)=>{e(new p("Not supported"))})}var Ue=new Uint8Array([115,101,99]),z=class{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await ue()}async open(e,t){return await ue()}async export(e,t){if(e.byteLength>8192)throw new l("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Ue,new Uint8Array(e),t)}catch(r){throw new B(r)}}},q=class extends z{},Y=class extends z{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}};var v=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function w(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function d(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function me(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;nNumber.MAX_SAFE_INTEGER)throw new R("Message limit reached");e.seq+=1}};var $=class extends U{async open(e,t=c){let r;try{r=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(n){throw new M(n)}return this.incrementSeq(this._ctx),r}};var X=class extends U{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}async seal(e,t=c){let r;try{r=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(n){throw new C(n)}return this.incrementSeq(this._ctx),r}};var Oe=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),je=new Uint8Array([101,120,112]),He=new Uint8Array([105,110,102,111,95,104,97,115,104]),De=new Uint8Array([107,101,121]),Ne=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Te=new Uint8Array([115,101,99,114,101,116]),Be=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),J=class extends x{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new l("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new l("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new l("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Be),this._suiteId.set(w(this._kem.id,2),4),this._suiteId.set(w(this._kdf.id,2),6),this._suiteId.set(w(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.encap(e),r;return e.psk!==void 0?r=e.senderKey!==void 0?g.AuthPsk:g.Psk:r=e.senderKey!==void 0?g.Auth:g.Base,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.decap(e),r;return e.psk!==void 0?r=e.senderPublicKey!==void 0?g.AuthPsk:g.Psk:r=e.senderPublicKey!==void 0?g.Auth:g.Base,await this._keyScheduleR(r,t,e)}async seal(e,t,r=c){let n=await this.createSenderContext(e);return{ct:await n.seal(t,r),enc:n.enc}}async open(e,t,r=c){return await(await this.createRecipientContext(e)).open(t,r)}async _keySchedule(e,t,r){let n=r.psk===void 0?c:new Uint8Array(r.psk.id),a=await this._kdf.labeledExtract(c,Ne,n),s=r.info===void 0?c:new Uint8Array(r.info),o=await this._kdf.labeledExtract(c,He,s),u=new Uint8Array(1+a.byteLength+o.byteLength);u.set(new Uint8Array([e]),0),u.set(new Uint8Array(a),1),u.set(new Uint8Array(o),1+a.byteLength);let y=r.psk===void 0?c:new Uint8Array(r.psk.key),b=this._kdf.buildLabeledIkm(Te,y),I=this._kdf.buildLabeledInfo(je,u,this._kdf.hashSize),_=await this._kdf.extractAndExpand(t,b,I,this._kdf.hashSize);if(this._aead.id===k.ExportOnly)return{aead:this._aead,exporterSecret:_};let ke=this._kdf.buildLabeledInfo(De,u,this._aead.keySize),Ke=await this._kdf.extractAndExpand(t,b,ke,this._aead.keySize),ve=this._kdf.buildLabeledInfo(Oe,u,this._aead.nonceSize),Ae=await this._kdf.extractAndExpand(t,b,ve,this._aead.nonceSize);return{aead:this._aead,exporterSecret:_,key:Ke,baseNonce:new Uint8Array(Ae),seq:0}}async _keyScheduleS(e,t,r,n){let a=await this._keySchedule(e,t,n);return a.key===void 0?new Y(this._api,this._kdf,a.exporterSecret,r):new X(this._api,this._kdf,a,r)}async _keyScheduleR(e,t,r){let n=await this._keySchedule(e,t,r);return n.key===void 0?new q(this._api,this._kdf,n.exporterSecret):new $(this._api,this._kdf,n)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new l("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new l(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new l("Too long psk.key");if(e.psk.id.byteLength>8192)throw new l("Too long psk.id")}}};var ge=new Uint8Array([72,80,75,69,45,118,49]),D=class extends x{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:c}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(ge,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();let n=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set(new Uint8Array([0,r]),0),n.set(ge,2),n.set(this._suiteId,9),n.set(e,9+this._suiteId.byteLength),n.set(t,9+this._suiteId.byteLength+e.byteLength),n}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new l("The salt length must be the same as the hashSize");let r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),a=new ArrayBuffer(r),s=new Uint8Array(a),o=c,u=new Uint8Array(t),y=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");let b=new Uint8Array(this.hashSize+u.length+1);for(let I=1,_=0;_=o.length?(s.set(o,_),_+=o.length):(s.set(o.slice(0,s.length-_),_),_+=s.length-_);return a}async extractAndExpand(e,t,r,n){await this._setup();let a=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},a,n*8)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r))}async labeledExpand(e,t,r,n){return await this.expand(e,this.buildLabeledInfo(t,r,n),n)}_checkInit(){if(this._suiteId===c)throw new Error("Not initialized. Call init()")}},L=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},O=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},j=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var W=new Uint8Array([75,69,77,0,0]);var Ce=new Uint8Array([101,97,101,95,112,114,107]),Me=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function Re(i,e,t){let r=new Uint8Array(i.length+e.length+t.length);return r.set(i,0),r.set(e,i.length),r.set(t,i.length+e.length),r}var S=class{constructor(e,t,r){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=t,this._kdf=r;let n=new Uint8Array(W);n.set(w(this.id,2),3),this._kdf.init(n)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,t,r=!0){return await this._prim.importKey(e,t,r)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new l("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():v(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let a;if(e.senderKey===void 0)a=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let u=v(e.senderKey)?e.senderKey.privateKey:e.senderKey,y=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),b=new Uint8Array(await this._prim.dh(u,e.recipientPublicKey));a=d(y,b)}let s;if(e.senderKey===void 0)s=d(new Uint8Array(r),new Uint8Array(n));else{let u=v(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),y=await this._prim.serializePublicKey(u);s=Re(new Uint8Array(r),new Uint8Array(n),new Uint8Array(y))}let o=await this._generateSharedSecret(a,s);return{enc:r,sharedSecret:o}}catch(a){throw new N(a)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=v(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=v(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),a=await this._prim.serializePublicKey(n);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(r,t));else{let u=new Uint8Array(await this._prim.dh(r,t)),y=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));s=d(u,y)}let o;if(e.senderPublicKey===void 0)o=d(new Uint8Array(e.enc),new Uint8Array(a));else{let u=await this._prim.serializePublicKey(e.senderPublicKey);o=new Uint8Array(e.enc.byteLength+a.byteLength+u.byteLength),o.set(new Uint8Array(e.enc),0),o.set(new Uint8Array(a),e.enc.byteLength),o.set(new Uint8Array(u),e.enc.byteLength+a.byteLength)}return await this._generateSharedSecret(s,o)}catch(s){throw new T(s)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Ce,e),n=this._kdf.buildLabeledInfo(Me,t,this.secretSize);return await this._kdf.extractAndExpand(c,r,n,this.secretSize)}};var Z=["deriveBits"],Q=new Uint8Array([100,107,112,95,112,114,107]),Pe=new Uint8Array([115,107]);var V=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var Ge=new Uint8Array([99,97,110,100,105,100,97,116,101]),Fe=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),qe=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Ye=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),$e=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Xe=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Je=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),E=class extends x{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case h.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=Fe,this._bitmask=255,this._pkcs8AlgId=$e;break;case h.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=qe,this._bitmask=255,this._pkcs8AlgId=Xe;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Ye,this._bitmask=1,this._pkcs8AlgId=Je;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new P(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new m(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return me(t.d)}catch(t){throw new P(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new m(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new m(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,Z)}catch(e){throw new p(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(c,Q,new Uint8Array(e)),r=new V(this._nSk);for(let a=0;r.isZero()||!r.lessThan(this._order);a++){if(a>255)throw new Error("Faild to derive a key pair");let s=new Uint8Array(await this._hkdf.labeledExpand(t,Ge,w(a,1),this._nSk));s[0]=s[0]&this._bitmask,r.set(s)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new G(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new m(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new P(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,Z)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,Z)}};var ee=class extends S{constructor(){let e=new L,t=new E(h.DhkemP256HkdfSha256,e);super(h.DhkemP256HkdfSha256,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}},te=class extends S{constructor(){let e=new O,t=new E(h.DhkemP384HkdfSha384,e);super(h.DhkemP384HkdfSha384,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}},re=class extends S{constructor(){let e=new j,t=new E(h.DhkemP521HkdfSha512,e);super(h.DhkemP521HkdfSha512,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var ce=class extends J{},le=class extends ee{},he=class extends te{},fe=class extends re{},de=class extends L{},ye=class extends O{},be=class extends j{};var H=class{constructor(e,t,r,n=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=r,this.algorithm={name:e},this.usages=n,r==="public"&&(this.usages=[])}};var pe=class{constructor(e,t,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=t,this._b=r,this._kdf=n;let a=new Uint8Array(W);a.set(w(this.id,2),3),this._kdf.init(a)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new P(t)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(t){throw new m(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new P(t)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(t){throw new m(t)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),t=await this._b.generateKeyPair(),r=await this._a.serializePublicKey(e.publicKey),n=await this._a.serializePrivateKey(e.privateKey),a=await this._b.serializePublicKey(t.publicKey),s=await this._b.serializePrivateKey(t.privateKey);return{publicKey:await this.deserializePublicKey(d(new Uint8Array(r),new Uint8Array(a))),privateKey:await this.deserializePrivateKey(d(new Uint8Array(n),new Uint8Array(s)))}}async deriveKeyPair(e){let t=await this._kdf.labeledExtract(c,Q,new Uint8Array(e)),r=new Uint8Array(await this._kdf.labeledExpand(t,Pe,c,96)),n=r.slice(0,32),a=r.slice(32,96),s=await this._a.deriveKeyPair(n),o=await this._b.deriveKeyPair(a),u=await this._a.serializePublicKey(s.publicKey),y=await this._a.serializePrivateKey(s.privateKey),b=await this._b.serializePublicKey(o.publicKey),I=await this._b.serializePrivateKey(o.privateKey);return{publicKey:await this.deserializePublicKey(d(new Uint8Array(u),new Uint8Array(b))),privateKey:await this.deserializePrivateKey(d(new Uint8Array(y),new Uint8Array(I)))}}async importKey(e,t,r=!0){if(e!=="raw")throw new p("'jwk' is not supported");if(!(t instanceof ArrayBuffer))throw new l("Invalid type of key");return r?await this.deserializePublicKey(t):await this.deserializePrivateKey(t)}async encap(e){let t,r;if(e.ekm!==void 0&&!v(e.ekm)){if(e.ekm.byteLength!==64)throw new l("ekm must be 64 bytes in length");t=e.ekm.slice(0,32),r=e.ekm.slice(32)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),a=await this._a.deserializePublicKey(n.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(n.slice(this._a.publicKeySize)),o=await this._a.encap({recipientPublicKey:a,ekm:t}),u=await this._b.encap({recipientPublicKey:s,ekm:r});return{sharedSecret:d(new Uint8Array(o.sharedSecret),new Uint8Array(u.sharedSecret)),enc:d(new Uint8Array(o.enc),new Uint8Array(u.enc))}}async decap(e){let t=v(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,r=new Uint8Array(await this.serializePrivateKey(t)),n=await this._a.deserializePrivateKey(r.slice(0,this._a.privateKeySize)),a=await this._b.deserializePrivateKey(r.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:n,enc:e.enc.slice(0,this._a.encSize)}),o=await this._b.decap({recipientKey:a,enc:e.enc.slice(this._a.encSize)});return d(new Uint8Array(s),new Uint8Array(o))}_serializePublicKey(e){return new Promise((t,r)=>{e.type!=="public"&&r(new Error("Not public key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePublicKey(e){return new Promise((t,r)=>{e.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((t,r)=>{e.type!=="private"&&r(new Error("Not private key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((t,r)=>{e.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};export{k as AeadId,F as Aes128Gcm,se as Aes256Gcm,ie as BaseError,ce as CipherSuite,T as DecapError,G as DeriveKeyPairError,m as DeserializeError,S as Dhkem,le as DhkemP256HkdfSha256,he as DhkemP384HkdfSha384,fe as DhkemP521HkdfSha512,E as Ec,N as EncapError,B as ExportError,oe as ExportOnly,de as HkdfSha256,ye as HkdfSha384,be as HkdfSha512,f as HpkeError,pe as Hybridkem,K as INPUT_LENGTH_LIMIT,l as InvalidParamError,A as KdfId,h as KemId,R as MessageLimitReachedError,p as NotSupportedError,M as OpenError,C as SealError,P as SerializeError,_e as ValidationError,H as XCryptoKey}; +var Y=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},d=class extends Y{},l=class extends d{},ne=class extends d{},g=class extends d{},x=class extends d{},D=class extends d{},N=class extends d{},T=class extends d{},B=class extends d{},M=class extends d{},C=class extends d{},R=class extends d{},y=class extends d{};var Ee={},ge=Ie(globalThis,Ee);function Ie(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),a=new Set(n);return[...r.filter(s=>!a.has(s)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}async function Ue(){if(ge!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new y(i)}}var m=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await Ue())}};var P={Base:0,Psk:1,Auth:2,AuthPsk:3},h={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},A={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},K={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var c=new Uint8Array(0);var G=new Uint8Array([75,69,77,0,0]);var k=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function b(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function f(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function Pe(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;n8192)throw new l("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():k(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let a;if(e.senderKey===void 0)a=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let o=k(e.senderKey)?e.senderKey.privateKey:e.senderKey,p=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),w=new Uint8Array(await this._prim.dh(o,e.recipientPublicKey));a=f(p,w)}let s;if(e.senderKey===void 0)s=f(new Uint8Array(r),new Uint8Array(n));else{let o=k(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),p=await this._prim.serializePublicKey(o);s=je(new Uint8Array(r),new Uint8Array(n),new Uint8Array(p))}let u=await this._generateSharedSecret(a,s);return{enc:r,sharedSecret:u}}catch(a){throw new D(a)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=k(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),a=await this._prim.serializePublicKey(n);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(r,t));else{let o=new Uint8Array(await this._prim.dh(r,t)),p=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));s=f(o,p)}let u;if(e.senderPublicKey===void 0)u=f(new Uint8Array(e.enc),new Uint8Array(a));else{let o=await this._prim.serializePublicKey(e.senderPublicKey);u=new Uint8Array(e.enc.byteLength+a.byteLength+o.byteLength),u.set(new Uint8Array(e.enc),0),u.set(new Uint8Array(a),e.enc.byteLength),u.set(new Uint8Array(o),e.enc.byteLength+a.byteLength)}return await this._generateSharedSecret(s,u)}catch(s){throw new N(s)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Le,e),n=this._kdf.buildLabeledInfo(Oe,t,this.secretSize);return await this._kdf.extractAndExpand(c,r,n,this.secretSize)}};var $=["deriveBits"],F=new Uint8Array([100,107,112,95,112,114,107]),se=new Uint8Array([115,107]);var X=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var He=new Uint8Array([99,97,110,100,105,100,97,116,101]),De=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),Ne=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Te=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Be=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Me=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Ce=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),E=class extends m{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case h.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=De,this._bitmask=255,this._pkcs8AlgId=Be;break;case h.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=Ne,this._bitmask=255,this._pkcs8AlgId=Me;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Te,this._bitmask=1,this._pkcs8AlgId=Ce;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new g(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new x(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return Pe(t.d)}catch(t){throw new g(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new x(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new x(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,$)}catch(e){throw new y(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(c,F,new Uint8Array(e)),r=new X(this._nSk);for(let a=0;r.isZero()||!r.lessThan(this._order);a++){if(a>255)throw new Error("Faild to derive a key pair");let s=new Uint8Array(await this._hkdf.labeledExpand(t,He,b(a,1),this._nSk));s[0]=s[0]&this._bitmask,r.set(s)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new R(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new x(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new g(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,$)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,$)}};var ue=["encrypt","decrypt"];var ce=class extends m{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(n,this._key,t)}async open(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(n,this._key,t)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,ue)}},J=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new ce(e)}},le=class extends J{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var he=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new y("Export only")}};function de(){return new Promise((i,e)=>{e(new y("Not supported"))})}var Re=new Uint8Array([115,101,99]),z=class{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await de()}async open(e,t){return await de()}async export(e,t){if(e.byteLength>8192)throw new l("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Re,new Uint8Array(e),t)}catch(r){throw new T(r)}}},W=class extends z{},Z=class extends z{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}};var U=class extends z{constructor(e,t,r){if(super(e,t,r.exporterSecret),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nK",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nN",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_ctx",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),r.key===void 0||r.baseNonce===void 0||r.seq===void 0)throw new Error("Required parameters are missing");this._aead=r.aead,this._nK=this._aead.keySize,this._nN=this._aead.nonceSize,this._nT=this._aead.tagSize;let n=this._aead.createEncryptionContext(r.key);this._ctx={key:n,baseNonce:r.baseNonce,seq:r.seq}}computeNonce(e){let t=b(e.seq,e.baseNonce.byteLength);return ae(e.baseNonce,t)}incrementSeq(e){if(e.seq>Number.MAX_SAFE_INTEGER)throw new C("Message limit reached");e.seq+=1}};var V=class extends U{async open(e,t=c){let r;try{r=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(n){throw new M(n)}return this.incrementSeq(this._ctx),r}};var Q=class extends U{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}async seal(e,t=c){let r;try{r=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(n){throw new B(n)}return this.incrementSeq(this._ctx),r}};var Ge=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),Fe=new Uint8Array([101,120,112]),qe=new Uint8Array([105,110,102,111,95,104,97,115,104]),Ye=new Uint8Array([107,101,121]),$e=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Xe=new Uint8Array([115,101,99,114,101,116]),Je=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),ee=class extends m{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new l("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new l("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new l("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Je),this._suiteId.set(b(this._kem.id,2),4),this._suiteId.set(b(this._kdf.id,2),6),this._suiteId.set(b(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.encap(e),r;return e.psk!==void 0?r=e.senderKey!==void 0?P.AuthPsk:P.Psk:r=e.senderKey!==void 0?P.Auth:P.Base,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.decap(e),r;return e.psk!==void 0?r=e.senderPublicKey!==void 0?P.AuthPsk:P.Psk:r=e.senderPublicKey!==void 0?P.Auth:P.Base,await this._keyScheduleR(r,t,e)}async seal(e,t,r=c){let n=await this.createSenderContext(e);return{ct:await n.seal(t,r),enc:n.enc}}async open(e,t,r=c){return await(await this.createRecipientContext(e)).open(t,r)}async _keySchedule(e,t,r){let n=r.psk===void 0?c:new Uint8Array(r.psk.id),a=await this._kdf.labeledExtract(c,$e,n),s=r.info===void 0?c:new Uint8Array(r.info),u=await this._kdf.labeledExtract(c,qe,s),o=new Uint8Array(1+a.byteLength+u.byteLength);o.set(new Uint8Array([e]),0),o.set(new Uint8Array(a),1),o.set(new Uint8Array(u),1+a.byteLength);let p=r.psk===void 0?c:new Uint8Array(r.psk.key),w=this._kdf.buildLabeledIkm(Xe,p),I=this._kdf.buildLabeledInfo(Fe,o,this._kdf.hashSize),_=await this._kdf.extractAndExpand(t,w,I,this._kdf.hashSize);if(this._aead.id===K.ExportOnly)return{aead:this._aead,exporterSecret:_};let Ke=this._kdf.buildLabeledInfo(Ye,o,this._aead.keySize),ve=await this._kdf.extractAndExpand(t,w,Ke,this._aead.keySize),Ae=this._kdf.buildLabeledInfo(Ge,o,this._aead.nonceSize),Se=await this._kdf.extractAndExpand(t,w,Ae,this._aead.nonceSize);return{aead:this._aead,exporterSecret:_,key:ve,baseNonce:new Uint8Array(Se),seq:0}}async _keyScheduleS(e,t,r,n){let a=await this._keySchedule(e,t,n);return a.key===void 0?new Z(this._api,this._kdf,a.exporterSecret,r):new Q(this._api,this._kdf,a,r)}async _keyScheduleR(e,t,r){let n=await this._keySchedule(e,t,r);return n.key===void 0?new W(this._api,this._kdf,n.exporterSecret):new V(this._api,this._kdf,n)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new l("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new l(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new l("Too long psk.key");if(e.psk.id.byteLength>8192)throw new l("Too long psk.id")}}};var ke=new Uint8Array([72,80,75,69,45,118,49]),q=class extends m{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:c}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(ke,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();let n=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set(new Uint8Array([0,r]),0),n.set(ke,2),n.set(this._suiteId,9),n.set(e,9+this._suiteId.byteLength),n.set(t,9+this._suiteId.byteLength+e.byteLength),n}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new l("The salt length must be the same as the hashSize");let r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),a=new ArrayBuffer(r),s=new Uint8Array(a),u=c,o=new Uint8Array(t),p=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");let w=new Uint8Array(this.hashSize+o.length+1);for(let I=1,_=0;_=u.length?(s.set(u,_),_+=u.length):(s.set(u.slice(0,s.length-_),_),_+=s.length-_);return a}async extractAndExpand(e,t,r,n){await this._setup();let a=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},a,n*8)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r))}async labeledExpand(e,t,r,n){return await this.expand(e,this.buildLabeledInfo(t,r,n),n)}_checkInit(){if(this._suiteId===c)throw new Error("Not initialized. Call init()")}},L=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},O=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},j=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var te=class extends S{constructor(){let e=new L,t=new E(h.DhkemP256HkdfSha256,e);super(h.DhkemP256HkdfSha256,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}},re=class extends S{constructor(){let e=new O,t=new E(h.DhkemP384HkdfSha384,e);super(h.DhkemP384HkdfSha384,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}},ie=class extends S{constructor(){let e=new j,t=new E(h.DhkemP521HkdfSha512,e);super(h.DhkemP521HkdfSha512,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var fe=class extends ee{},ye=class extends te{},be=class extends re{},pe=class extends ie{},we=class extends L{},_e=class extends O{},xe=class extends j{};var H=class{constructor(e,t,r,n=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=r,this.algorithm={name:e},this.usages=n,r==="public"&&(this.usages=[])}};var me=class{constructor(e,t,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=t,this._b=r,this._kdf=n;let a=new Uint8Array(G);a.set(b(this.id,2),3),this._kdf.init(a)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new g(t)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(t){throw new x(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new g(t)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(t){throw new x(t)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),t=await this._b.generateKeyPair(),r=await this._a.serializePublicKey(e.publicKey),n=await this._a.serializePrivateKey(e.privateKey),a=await this._b.serializePublicKey(t.publicKey),s=await this._b.serializePrivateKey(t.privateKey);return{publicKey:await this.deserializePublicKey(f(new Uint8Array(r),new Uint8Array(a))),privateKey:await this.deserializePrivateKey(f(new Uint8Array(n),new Uint8Array(s)))}}async deriveKeyPair(e){let t=await this._kdf.labeledExtract(c,F,new Uint8Array(e)),r=new Uint8Array(await this._kdf.labeledExpand(t,se,c,96)),n=r.slice(0,32),a=r.slice(32,96),s=await this._a.deriveKeyPair(n),u=await this._b.deriveKeyPair(a),o=await this._a.serializePublicKey(s.publicKey),p=await this._a.serializePrivateKey(s.privateKey),w=await this._b.serializePublicKey(u.publicKey),I=await this._b.serializePrivateKey(u.privateKey);return{publicKey:await this.deserializePublicKey(f(new Uint8Array(o),new Uint8Array(w))),privateKey:await this.deserializePrivateKey(f(new Uint8Array(p),new Uint8Array(I)))}}async importKey(e,t,r=!0){if(e!=="raw")throw new y("'jwk' is not supported");if(!(t instanceof ArrayBuffer))throw new l("Invalid type of key");return r?await this.deserializePublicKey(t):await this.deserializePrivateKey(t)}async encap(e){let t,r;if(e.ekm!==void 0&&!k(e.ekm)){if(e.ekm.byteLength!==64)throw new l("ekm must be 64 bytes in length");t=e.ekm.slice(0,32),r=e.ekm.slice(32)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),a=await this._a.deserializePublicKey(n.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(n.slice(this._a.publicKeySize)),u=await this._a.encap({recipientPublicKey:a,ekm:t}),o=await this._b.encap({recipientPublicKey:s,ekm:r});return{sharedSecret:f(new Uint8Array(u.sharedSecret),new Uint8Array(o.sharedSecret)),enc:f(new Uint8Array(u.enc),new Uint8Array(o.enc))}}async decap(e){let t=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,r=new Uint8Array(await this.serializePrivateKey(t)),n=await this._a.deserializePrivateKey(r.slice(0,this._a.privateKeySize)),a=await this._b.deserializePrivateKey(r.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:n,enc:e.enc.slice(0,this._a.encSize)}),u=await this._b.decap({recipientKey:a,enc:e.enc.slice(this._a.encSize)});return f(new Uint8Array(s),new Uint8Array(u))}_serializePublicKey(e){return new Promise((t,r)=>{e.type!=="public"&&r(new Error("Not public key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePublicKey(e){return new Promise((t,r)=>{e.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((t,r)=>{e.type!=="private"&&r(new Error("Not private key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((t,r)=>{e.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};export{K as AeadId,J as Aes128Gcm,le as Aes256Gcm,Y as BaseError,fe as CipherSuite,N as DecapError,R as DeriveKeyPairError,x as DeserializeError,ye as DhkemP256HkdfSha256,be as DhkemP384HkdfSha384,pe as DhkemP521HkdfSha512,D as EncapError,T as ExportError,he as ExportOnly,we as HkdfSha256,_e as HkdfSha384,xe as HkdfSha512,d as HpkeError,me as Hybridkem,l as InvalidParamError,A as KdfId,h as KemId,C as MessageLimitReachedError,y as NotSupportedError,M as OpenError,B as SealError,g as SerializeError,ne as ValidationError,H as XCryptoKey}; diff --git a/common/docs/assets/navigation.js b/common/docs/assets/navigation.js index 495aee48a..144a5057e 100644 --- a/common/docs/assets/navigation.js +++ b/common/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA4XQXQuCMBgF4P/yXtuXYZF3oyQiupKuImK5iSOdYiOS6L/HBjZntt2es+fA3tMLBH0KCAFRTCKe1E0lWMnXJVe5BxUWGYTAuKB1ihN6nwy+HGeiyMGDG+MEQj9YvD1jetf6v5PfF84pojdEU7Wc9Nx0tZwFfsfuSfpLVeiUtBiQMnTJQ0loH8rM5VCENpdjjLZRrPkD1wxfc/lhXZtLc99yrI5XzWhmwb1raasKOzXP1aGysFLzXlrKfACeP7tlsRXAAgAA" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA42WXW+bMBSG/wvX2bJkbbbljjZWgwgpCsmkaZqQByfFCgFkO1Gyqf99Mkv5tA+99fs+j/AHmJ9/LQkXac2tByqAcJ5za2QVVCbW3IpSKgSIcRV9TOQxtUbWgWWxNZ9Mv76OKn4BES0MgjrDDZydwYWrTxk3mrod3CiAM5qyP6apdRuoLTnAUaNQwxhHoj5EIpTIzGtZZ6jhUuRcmhR1iDmWxcG0bFWE8U52pimLfcrp0eDpVTCfB0LQF1ixI5MboFECsUFramL2NZXsDHb6knMmE80+dwqoK5fBqVCLbHzEXgXzPReQGTxVhPEB0NTAVxHO429R8O536LvabipZbppPp4C5bKAxySJ+LVT9Mc/K8crIMgl8TyMQY22zrZ7ezzpq5403KqsGpio/D7irXRmU+Vyda3YGYbbVHUznxnv8yZoFVDQ0RfedE3ThGqjX9ZRC+VHQT7HXwpQ+hyChHGIXrlpbs4CJNhCxgkEmbwcIeUB9FZMHkMXAh82a3uBBjmuTvBZvhzfucJ++fZncTzuno4eWg4MkHDWkGhwivTyGLqjGhjib2ItwF9hPJKjxM+WM/k7VhOu4bfo8RRarwZfJhwkCE8/f/tCxZYCAztrfbcMVWT9tl+HK8ZytztJvIcrOztWWMkCn0dm6BqoCFF3ZD2QVLlw/9DeuTtEqDIoCxBFguOesHW/nhX7g3hZMJ+q3MGXrWDYkeQzomgQ7Z0tCZxEuib0gm9Alns6jqSHSKM8i2rjp9qcsUhebGP9P2ujsroGy6bModGQZYKB4VNdnfvv11iraFUR2ybWCS/e+n929/voHd2JnVaIMAAA=" \ No newline at end of file diff --git a/common/docs/assets/search.js b/common/docs/assets/search.js index 2c8b00c69..1a20af2a8 100644 --- a/common/docs/assets/search.js +++ b/common/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAA62aYW+jOBCG/4v7lctmZoCQfMvtVrur1d2tVN3pJFRVNLhNlASiQHvNVf3vKxsCNjaJafqpFfH7znj8MBA7r2yf/1ewWfzK1qssZTMMQo9lyZazGZvzJL3OFvvDrlzl2ec8K/lLyTz2tN+wGVtlJd8/JAtefLIOHC3L7YZ5bLFJioIXbMbYm9eEGftRE6fgyWaY7VUtUbw9tkv2PCt78+4Jnu94NjB4LXln8E6Bvx9D9iXRDDhZUBij3/iuUjezKzmwfx5tbj2B1vxws/rfMfWrdvQFIbM8W/ABQdXxF4Qtk8cBQdvRw0JqZC72PCm58w3YSaFfPSwlQh3XFq3nZL9K7jfH8OlvcJLQMAioRf/urjzs+Dmvq2bYiaTTvjWb8wIw+rrYOoYZqYJTAUd1Wv1xMQiHxW0EF8T9vEwWywTHP/PNAWgcuIa36C7I4vpll+/Lv7LNwTW+phgWGcfTCQS9iIrRx6An4VQo/5E+WCGX1z+GcdXqHOJVOj21/rZOH26WCQahW5SRJjgR8Mwa1zYU+cPiVoKL4waAw+JWgkFxu2TpWFRgVVJXrvjWzpW4/kFcKVZnuZLp9NT5z7ycF8XqMePnMj4WWlecCHlmhb8s13z7E4PwNNqWDOzKSzOhyD8Ne28mXeWlmQQIp/HvzaSrvDCTG77YYRCu4X1LZJdfmNO/GAQwfV9CFu2l2fh+9L61MpTvz+Tb4X6/Spv5/Tjc8/0kjByz6VcPysjooloTrLuolDp20T/y1Nb5xOWP6aGK07kWKnPpqf7vSeHmPqpH9oc4s84/i7VboGrgu+PMn8qlW6B65EWRnGfVDh4Sr8ulhlWFpRQ6Ujm/nn+5+/tm/vX6xvbS235qM7z12CpL+QubvbJnvi9WecZmDEc0mjKPPaz4JhU7NFUsjy3y7VZMzWNpvniS/97Ww/7hizLfi8HV6E9j5sVjj2hEiLe3XnwUyw/khaNHe0UKgXkx2IRgCEETIvNitAnREKImJObFZBOSISRN6DMv9m1C3xD6mjBgXhzYhIEhDDRhyLw4tAlDQxhqwgnz4olNODGEE00YMS+ObMLIEEaacMq8eOphNELwNeHUEE51AAQPMPYQR0ShjoAJD3TokfjY+bEApBMkHnsxWBkCEyLQKQLBBlg5AhMk0EkCwQdYWQITJtBpgqCv1GDyBDpQIDCBwCo2mQIdKpj0r5TJFehggcAFrDCDyRbocIFABqxAg8kX6IChBMwKNZqAoQ4YQm/B0AQMOy1KAmZdKrR0KR0wpN5qowkY6oChQAatDRlNwFAHDAUzaL2p0CQMdcJQMIP2xmwShjphKJhB602FJmGoE4aCGbTeVGgShjphKJhBa5NGkzDUCSPBDFrZJpMw0gkjwQxa2SaTMNIJo37CyCSMOg9CwQxGVrHlWagTRn4vnmQSRjphJAmbWudsEkY6YSSYISvbZBJGOmEkmCEr22QSRjphJJghK9tkEkY6YTTtr7ZJGOmE+YIZst4YvklYfUm+7j3zfcnT79VrXxw3X0de2V39Lgjj49vlK4Mxm72+eQwm1V+k6i/54u9b+04orzavheIzkUHCk/TuqUgeeaFGIGoj+GNnJ94cKSyORwqtp5K0u6M4hWotpq3FtJ524G7VnqYpE20dydFJnAM8iv14ZUFAWRBw9cEg7Pqg4oNuPvILlTIhJRWaOFvsxNckxUVJhCInl3v5XbW1QGWxyG2VFvVhw645bFBKo6wUuC1Vdcx1ksmoNXWbZSp2YsQe1XKdPhT1npAyaaX66DbpypEiv3aUO4KKo7ISGA5wDBBqR7lbpDgqlUQ3QqRjcdyc65m6r9gOKOaL3ETq8QwUz+kAT9+PeiYfKlS6tSEuj6ByeQSl8KhMF9x6rX2OoGQEbnWzkwITxcitWPYagXJXoFuNlsctwWo1182WoFJ5JT1y65F681cK7lbvdfqgO4CCE4T189ItlTXfdryU9oZYP3PdWvaaHwr5C4DWTUnMrWts5aaUUl1lzej4CuAGgfwVRDchBUq3ppPlZdIc8ih5KU99dFu26ic0ioXi4GTQfZYpKZDbZKqfECmLrXDjZFAmj92KKvg7NN1bj+1WO75ZZZzN4tu3t18iIt4+jiUAAA=="; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAA61dbW/buLL+KxfKV2/WI4milG8522Ab9GWDTffgXhiFodpsLcSxDdvpbU7R/35ASrKG5FAe2f7UIuK8kHw4HM4jUz+j7fr/d9HN5Gf0VK3m0U0sslG0Kp9VdBPdqnJ+t5ptXzf7ar36Y73aqx/7aBS9bJfRTVSt9mr7tZyp3e9kw+vF/nkZjaLZstzt1C66iaJfo4OZcZof7OxUuRym9qoRQbpH0abcqtU+6HfA+HqjVgONNyInGncG+L41GXLi0KB3QGEcpwe91Zyn7Mo0DPej8y1g6Em9Plb/Ybp+1bU+w+RqvZqpAUZx+zPM7stvA4x2rYeZtJA526pyr9gL0HEhLD3QJYTXN4sn9fywrZ6rffVd7ShPnCZDgsC2KpfVf9TDy5dlNXunXrnqr0hRupduDwLOzNUZ7gSEz3Ko07itvpd7ddrwYNmLjc9wh0LSZ7lUPW/W2/0QN7DEWaa/qZXa1r14KKst2wFf7sxJ2VbfBzvhSl3AhVOWjCt3nhsLvuXFKcbcmNi7idst+Lv40/wrU91V3bSnG0f3NzploGw5OcN+N/+t2v1WrRZqW+3VfLjpnZpt1T60u1IuWBKXdEWtZkP86Jpf0olNuwyGuOIKXdShQ5Ae5JErdaZLp2YLHnZ69+bzXRuUOzjOHU0dLjlyxzfu4NDRu/Zlx26we8fTivMdPJ5luNGSTDLOd4Sbczju9KUcl5g+TgbiTVsoATnfIbWalZsB0dw0vuyIDHCgbXyuAyg7eTf/2pub4Ofn1hc8XX3lBcuxgJlFuVuEdhzfGGo9yKS9vlcVecAm+la3PN3Ul5dqOX9fflFLNb9/euZZ9YUu5MDq6/oED2qp011QP/bbcsYc8a7xOQY35YqJ3kPbs/t3u5rfDTLsSZ3uwrKeqrshI+3JXMA8v/uuyDDjOPgdOZi9O+lYFgh+x85Jlu9nn4p8c4Ez0VCzPScg3yZ1/hlq8OhpxzcbPusMNn70ZENYD59rGOZPOMVQc82uL3Lc4J5YfEcGlTqHjUhv+t83JMcrikPHZKArw8qbHGd6Tx1E5Dla2OQYZZwwfNPckiZvCo6cJqih5xQzOcaDJwcyCjpp+/Ceso35ZwSOMWtTfH2cLdT8Zakeym35TLI4XqMB22MokyRVXlW9KaTnayiO754G2KxbDzeJh/Fhqx4X5VbNA6sSPz83t/B09eUWlmNh2pZn56knhgQM4UH6W82qTaVW+4Z8DAOObskfuG0rH5iOHv1Xjizd20BXwlnUUC9qkUsY36nVXG17d/I+R3zxSzgVCgt9nnixoa8cMsydQMDo88aNGmc5g1fJoxnwo0uEaHbC+uiFRcjEFSlOw4LqTS9Qh/qCpc52QdGFl6Bx1VNzGWA2tBqCdgcthQGOBNZB0I8hi+CIG3GX/3wsNcN6u/y23lb7RTcjjZ3fnee9sBcQd2/QrFe7/fZltl9vWTqvbAF6ml1nAyM7LTcVz2jT0hvUzXa9VzNnUMPWrYxyulP7lw3Tftv2XA+SbuTN20RdMvO93Fbll2X7ptL8N+idw0yIpIuP0+n+daOO6bo6NOt5v2kemq1btYM4/3P2zDRzjQX6DF43boXtxiIbZvcgcIbdPxblbFHG44f18hWSseCaJ+TO8OLuhz6o/rVavnLtWxLDLMfjQoIIQlS3bo32ghOhXNcgKZCbv18G41jVMYjX7gTG+u3T/OvjooxFxrNybQn0GDwyx42aJE+H2a0FzrYrIB5mtxYYZNdFlg2LGli1KBdX6pnGlf77hXCFVB3FlXEnMM4f1/vb3a76tlLHPG4H2pboMXlkhuv3s2KR9UOb8ICWPNeTJE/7wR70xJU81xMRQz/8g564kmd68qhmm1hkT3DaFNHiZ/r0v7EQUJzmECF7rjdpmp82V57k6Z68ff2yreaH/r17/aK2MsuZ3oSlB3nkRVErCDZR1Igyo+iH9ZyKfPrPl4mhSNOxEGp8CYz+v8odT/t10zJs4sg8P6DTXq+hh54KKcPO7ct+wTPUtDzLErtXXeMh9lxcWrCqYWkEe2sx6LBrFq93MjN/vcjBttPEOs7W7hyvRxPqe6rQvVoJapvQziC0e624TDZh4hh/3aufJq4JKzy6ut8WzVNTxnjsdK+16WZb9SH0qm3AKxj028JvuVOm3Ffbh1jiku0k+ob9hOckbp2wO/zHQ6dQ6b0dZv4k5zTm/EiXz7TtE+VU2OL97mcoL05YGvQDn2E0ODmO7F/y8FhvOmL20M9H+nFEdz+17UURtKXezTy9d7OLbKaNGtZOejc7I/S0hgas/rA9VtBpLQ6KOJw+hhe938nj653Xy+M2h0WZsNVwiGktHY8vYe3HgktrgxtZ+kavL6x0o8aJKcescEDI+wFgj6VFWHn4iGHpO87ftBqPUjb/00eMhTsRoG0OZo8zNXzDmK25u30z/efx9s+7R6oQ3z3lHr3f3/7r7v30zbuH6cPf7wiV1vNhSh/D+h7Zqh7/uf90N71/M317d/vm7u/pu7sPhFaiFdfA3YeHT/9HqDR/5yq5//jwz6fp+7uPf356O31//+H+E6HRb8Suj9x/vP/wz4fpw+O7Rp46RnuN+isnKd5WZ2X3wvnXl9VM30Ow+71+wFVTxX/tNoQW83e2kt0f+hqEtRvukDq7BVfxjzWl7Me6XwHOXXRN5267JXKPw5OLZDK2NlZC07lGu/528xRw/fDkIq7b2liud67Rrt+vvpfLam7eSqC74LW4SFdorawu+S7TXfu3blVqINIdc55fpFuUTlanXGfpLj22mRvdI/vxRTpEqGT1x/E0UAHsUlG6Q26Dy9QFKaW8EqHrb+AUps+GdIe6R5c5ldnqeKezzrvQrATd7x5daCaGu4+8C4y+eTMiMPzds8uMv6OPNwHIwdAyL5ehFd48udDixtqY67p1jXb9r40KhNvDk4u4bmtjud65Rrv+Qe125Tf1Xt9z8rcq9cvvdE9CDS/SsV7lrH4G+xFa7uhkG1r2bpMLLX9SLTMMeF4HXqlc7x9fNnrFhabTa3GZ1ypJrbwXKz2Xf30eRdVqrn5ENz+j72q7q9ar6CaKr5PrIhpFXyu1nOvLC2vHRtFs/fysdY2i+Xr2Yv77uWn2b6Vt68Z169/H0WgyHqX5NaTF58+jSStsHpg/tDq6vxhBiEYToATBEwRLMI5Gk5gSjD3B2BJMotEkoQQTTzCxBNNoNElHSXKd5pklmHqCqSUootFEUBaFJygswSwaTTJKMPMEM0tQRqOJpASlJygtwTwaTXJKMPcEc0uwiEaTghIsPMHCBoDGA4xHibgGYY8r+OABBz0GPkAKEwCyEaRf85hATAr7IAIbRaCxAQkp7AMJbCSBxgekpLAPJrDRBBojIEhhH1BgIwo0TiAjhX1QgY0q0FgBOUqT63EKtrAPLLCRBRovkJPCPrjARhdozACJL/ABBjbCYo2ZmIxOsY+w2EZYDKFVH/sAi50QZWIUjJLiOpOOMBGlbIDFGjJxTAr7AIttgMUaMnFCCvsAi22AxRoycUoK+wCLbYDFWXA5xz7AYhtgsQwu59gHWGwDLM6Dyzn2ARbbAIuL4HKOfYDFNsCScXA5Jz7AEhtgCQSXc+IjLLERlsTB5Zz4CEucjdAgTFDznBB7oY2wxCAsI4V9hCU2whKDMHKDSnyEJTbCkiy0IhMfYIkNsERDJiY3uMQHWGIDLNGQickglPgAS2yAJRoyCRmEEh9giQ2wVEMmIdOk1AdYagMs1ZBJyFQp9QGW2gBLNWQSMl1KfYClNsBSk2qlpLAPsNTJtjRkEjJtSomEywZYqiGTkKlT6gMstQGWaswkJDpTH2GpjbBUBrNEH2CpDbA0D+4XqQ+w1AZYWgT3i9QHWGoDTIyD+4XwASZsgAkI7hfCB5iwASbi4H4hfIAJG2AiCe4XwgeYsAEm0uB+IXyACSelF8H9QhBZvQ0wkQX3C+EDTNgAEzK4XwgfYcJGmMiD+4XwESZshIkiuF8IH2HCRlg2Du4XmY+wzEZYZkIYGbYzH2GZjbDMhLCCtOwjLLMRlmnMpONRIq8hS2xhH2GZjbDMnBjJsJ35CMtshGUiFEgyH2CZc240WyQZ8jPi6GgDLDMRjAz5mQ+wzAaYflF9kpIhP/MBltkAyzRkUjLkZz7AMhtgUkMmJUO+9AEmbYBJCGJE+gCTNsBkHMSI9AEmbYBJAzD6rO4DTNoAkwZg5LqQPsCkDTBpAEamM9JHmLQRJjVmBJnOSB9h0qlOyPBoEwUKG2EyD4+2jzBpI0xqzAhyRUofYdJGWK4xI+JRnFyLPLaEcx9huY2wXGNGJNTxN/cRltsIyzVmREoK+wjLbYTlGjNCkMI+wnIbYfoHVBORUaOd+wjLbYTlpvBFYjv3EZbbCMsNwuhalI+w3EZYrjEjSGznPsJypwamMZOR2M6JMpiNsLwIj7aPsNxGWKExkwElXPgIK2yEFRCcqsJHWGEjrNCYycgdo/ARVtgIKzRmMnLHKHyEFTbCCo2ZjNwxCh9hhY2wQoQHzEdYYSOsMOVVcqoKH2GFjbBChkfbR1hhI6wwCCP3qsJHWOFUWjVmMnJVFUSx1a22GoiRy6p+ZoujvzXyGjcZXYkbEyXXsVNzHWvoSHJx1c9ceafsOtbokTRjMCYKr2On8jrWAJIk0OtnrrxTfNU/0p9IEuv1M1feqb+Ow6Crn7nyTgl2bEr75FZQP3PlnSrsOA/itn7myjuF2LHGkyRztPqZK+/gzxTw6e0bqHq/V/DXeJLk0gGy5O/gz5TxJbl6gKr6u2V/U8kPjD9V+Hcr/6aYL+n1R9X+3eK/qefTSQhQ5X+3/g/B6hlQBIDLAJiiPl2iAIoDcEkAU9enqxRA0QAuD2BK+3ShAigmwKECoOYCyFoFEGQAOGwAmAq/pMMfQQiAwwiAKfLndPgjOAFwSAEwdf4AW0bQAuDwAmBK/QHCjGAGwKEGwFT7Q5wZAT+HHYCaHqBpM4IfAIcggJohoJkzgiIAhyOAmiSgyTOCJQCHJoCaJ6D5M4IoAIcpAFP8p2soQHAF4JAFYOr/dBkFCLoAHL4ADAWQ09snwRiAQxmAYQEC4YcgDcBhDcAQAQH8ErwBOMQBGC4ggF+COgCHOwDDBwTwS9AH4PAHYCiBEO1L4M+hEMCwAgH8EiQCOCwCGGIggF+CRwCHSADDDQTwS1AJ4HAJYOiBAAVMsAng0AlgGIIAC0wQCuAwCmBIAvoYDQSnAA6pAIYnoE/SQNAK4PAKYKiCnE4fCWYBHGoBDFuQ0+kjQS6Awy6AYQxy8rQEBMEADsMAhjTI6fSN4BjAIRnA8AY5nX4RNAM4PAMY6iCn0y+CaQCHagDDHuR0+kSQDeCwDWAIhJzevwm+ARzCAQyHUND7N0E5gMM5gKERCjr+EqwDOLQDGCahoPFHEA/gMA9gyISCxh/BPYBDPoDhEwLxn6AfwOEfwFAKBY1fgoEAh4IAwyqE7BP4c1gIMMRCQeOf4CHAISLAcAsB+wQVAQ4XAYZeKOj1Q7AR4NARkPXsvwQhAQ4jAYZkKOj1R3AS4JASkPUcPwheAhxiAgzXUNDrl6AmwOEmIOvBH8FOgENPgGEcCnr9EwQFOAwFZD34IzgKcEgKkPXbbnQAIXgKcIgKkD0AJKgKcLgKkDXfSkcggq4Ah68A2YNAgrEAh7IAWWeAdAgjWAtwaAuQPRAkiAtwmAuQ9RtKdAwkyAtw2AuQPRgk+AtwCAwwnASM6SBIcBjgkBgge0BI0Bjg8BiQ1yCkoyBBZYDDZUDeA0KCzQCHzoC8BiEdBglGAxxKA/IeEBKkRvs38wL0d6Vfib6vX4SeTA4XUv2Mps3b0d1t0j+jPI1ufv4aRQU0/8r6X10Yu/n561f3mrT5c2vSPNM+1L9tRroTpLvRqbNUli5ze0unKx93unSlgKWjvmymUyILrAR4SppfTqNupahbcdutlKWtVOV8+qJ/bbCzehcjx1LBVqUOH+metR/p7pSiERuzNeqbmVBXBepqUovlBV9Z9w2lTicCBQ8Kpbkw99vMmkohkWfcAdMX4Lp6cqQn4+kxN48hVKElpGuwXB3mRmykRmI1PIR/Mde6IR1ovnQ5mqtD1b/z6BQVaJZ0YsxSpL/v1nyCq3qyRjlBWEyYbmFt5g5zpA46dSkP27Pm+uHN4fphhAEUFnLJU9f8RB0tYRxbBG/6rN+2IH9QNMjHTYAB0fwnadahPm80/yma/2RtkM3aNlkrlbWNs7axbBvLtrFsG8u2sWwbH8J3zluzs60q96o3POGFx9LZ3PLTaYjRwkuavStrxyvhLUSj1IO/zlq72ZQ8iNU3kTyp1425KABpwwEiq6WTZuMQeeNv3A41E9CWNaIDOBLkQ1TWl86Z77cgfTg4tehIuUN8+BGwH2dyPDS8OIP0NXfWuc7i4NWAux1e0WI8zlqg8FY8tkqOEODw3RhtRkq0KyxOW6O8LWtubTSAB6vFTcoLNfP67ki0VWBlwMtejBJyUwcc/XgB3ijTl/QunuZfd82luJ3GDCGuGKIxydNGo7kSGWnEPR4zl4RRKWJoVJr7cpFK3O0xczkYlVv9Y9Pqu50GIm0Derxr7zqmB1LiUDYegJYf5lLegFKM9jFvT6iVpmlOj6XEOfCYB0g1s3YU7FTC66myExWBBkvywpF63uytSJDjcJ/yJtJ8w6lTkaLonbE1OLsj0tHmDIdMIeHB3yj1gzZGfcbbvNVqtjPXiiIH0YTHjYNp6yAw1TafekW5IQr+zNiozP0CxB6K8SSH6Fqbz0ygOIFglXN71nxCF3UNDRhz7220lFqBN1LoHMs8lbeXx1FJDk44mk02afbBQ6Yat7sW8xCgv8ztwQaFcebeHdhh0HAWvNkNbCwIcgVvIAPbCZqRghcBF5snIqtK8Vzw8LZo72Kvw/7T4S52FKFxXjXmZTBVvN5ZYanA25HgjZZdlMCwbfKsBmdJk9OlDd4Opx/ghfL6/kU3scOD2RhMmlOGaJPINtPTJDbLknuiRSE1a44G7QFN8kBef1YerROkku3V5mU/XarVt/1iutQZirWv4TOA4G0gVX311EZfPeXDFIeMjKlwZ46UayICFThcC97ycaqMMQJnzHPoaf7VhmeG3CganBS8xaJ1Udl1jEaeeXLQibrtFhrsooXtmLcuQll/gvxKuaqsxZWiGMw8/j2p113zndVN88lD5BHaHDLeFqn1OVsMGireaJs61XT+tJlutlZRL8chkzlEtTK7OJhbQYgXEJriGbHxowSVWWw+6PKTEjRYzCL4c33fjgkw2/q+HSL5wj2WvPj1XK2q55fn6Wb31EQxawzx+U/wwPFsPtmAtkDs1bgN+sDbxlbm+3dl97FChDgUNCQvN1qtVzPlIhfNLA9sq/W+PHxSCelBigre4K/W+117CQ8xnfhQlPOyrfVGrawwiIIzWwHhCl6TzEPeZqt25pPFbvxC85bx0N/VrLzMFoErblIX0RZemduRQyqkaENri8KyzS/aZByYqtuyl+c3GtC2wiUOdWsemg/fiW0qxX5oT5GVjBcBD0rdWUMDzTy/HlSRxb8UhRbJg8FOlUsLlgiUbAUEuHEVhe2K/l6KN6vIo7iBTHqADG8C6i/uhqcU5Q+SF0Nrje7wo1RX8ja0Wg89mShUMUv/PQVunDQzI8Sx8jae4mZi2oO1aAvM8YEu4gW4I8Vtq4bYmGySSNFS4G0NBxJmN1+qvZpW8+lCM9nbqVOgzvHpIOWt0n35zYUxhhhLx/fDxbL+ZFpEDm8P+uGowJMnGFj9PIo21UYtq5WKbiaff/36LxOnO/h5nwAA"; \ No newline at end of file diff --git a/common/docs/classes/BaseError.html b/common/docs/classes/BaseError.html new file mode 100644 index 000000000..ced9d7758 --- /dev/null +++ b/common/docs/classes/BaseError.html @@ -0,0 +1,7 @@ +BaseError | @hpke/common

Class BaseError

The base error class of hpke-js.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/classes/DecapError.html b/common/docs/classes/DecapError.html new file mode 100644 index 000000000..23230d191 --- /dev/null +++ b/common/docs/classes/DecapError.html @@ -0,0 +1,7 @@ +DecapError | @hpke/common

Class DecapError

decap() failure.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/classes/DeriveKeyPairError.html b/common/docs/classes/DeriveKeyPairError.html new file mode 100644 index 000000000..dcc20e474 --- /dev/null +++ b/common/docs/classes/DeriveKeyPairError.html @@ -0,0 +1,7 @@ +DeriveKeyPairError | @hpke/common

Class DeriveKeyPairError

Key pair derivation failure.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/classes/DeserializeError.html b/common/docs/classes/DeserializeError.html new file mode 100644 index 000000000..1dd6b3b08 --- /dev/null +++ b/common/docs/classes/DeserializeError.html @@ -0,0 +1,7 @@ +DeserializeError | @hpke/common

Class DeserializeError

Public or private key deserialization failure.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/classes/Dhkem.html b/common/docs/classes/Dhkem.html new file mode 100644 index 000000000..f021a8bd0 --- /dev/null +++ b/common/docs/classes/Dhkem.html @@ -0,0 +1,77 @@ +Dhkem | @hpke/common

The KEM interface.

+

Implements

Constructors

Properties

encSize: number = 0

The length in bytes of an encapsulated key produced by this KEM (Nenc).

+
id: KemId

The KEM identifier.

+
privateKeySize: number = 0

The length in bytes of an encoded private key for this KEM (Nsk).

+
publicKeySize: number = 0

The length in bytes of an encoded public key for this KEM (Npk).

+
secretSize: number = 0

The length in bytes of a KEM shared secret produced by this KEM (Nsecret).

+

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    +

    If the error occurred, throws DecapError.

    +

    Parameters

    Returns Promise<ArrayBuffer>

    A shared secret as the output of the decapsulation step.

    +

    DecapError

    +
  • Generates an ephemeral, fixed-length symmetric key and +a fixed-length encapsulation of the key that can be decapsulated +by the holder of the private key corresponding to pkR.

    +

    If the error occurred, throws EncapError.

    +

    Parameters

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    +

    EncapError

    +
  • Imports a public or private key and converts to a CryptoKey.

    +

    Since key parameters for createSenderContext or createRecipientContext +are CryptoKey format, you have to use this function to convert provided keys +to CryptoKey.

    +

    Basically, this is a thin wrapper function of +SubtleCrypto.importKey.

    +

    If the error occurred, throws DeserializeError.

    +

    Parameters

    • format: "raw" | "jwk"

      For now, 'raw' and 'jwk' are supported.

      +
    • key: ArrayBuffer | JsonWebKey

      A byte string of a raw key or A JsonWebKey object.

      +
    • isPublic: boolean = true

      The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

      +

    Returns Promise<CryptoKey>

    A public or private CryptoKey.

    +
diff --git a/common/docs/classes/Ec.html b/common/docs/classes/Ec.html new file mode 100644 index 000000000..80d18601f --- /dev/null +++ b/common/docs/classes/Ec.html @@ -0,0 +1,13 @@ +Ec | @hpke/common

Hierarchy (view full)

Implements

Constructors

Properties

_api: SubtleCrypto = undefined

Methods

diff --git a/common/docs/classes/EncapError.html b/common/docs/classes/EncapError.html new file mode 100644 index 000000000..bef8ed07a --- /dev/null +++ b/common/docs/classes/EncapError.html @@ -0,0 +1,7 @@ +EncapError | @hpke/common

Class EncapError

encap() failure.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/classes/ExportError.html b/common/docs/classes/ExportError.html new file mode 100644 index 000000000..7b3bb8dd3 --- /dev/null +++ b/common/docs/classes/ExportError.html @@ -0,0 +1,7 @@ +ExportError | @hpke/common

Class ExportError

Secret export failure.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/classes/HpkeError.html b/common/docs/classes/HpkeError.html new file mode 100644 index 000000000..9dcc30b5d --- /dev/null +++ b/common/docs/classes/HpkeError.html @@ -0,0 +1,7 @@ +HpkeError | @hpke/common

Class HpkeError

The base error class of hpke-js.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/classes/InvalidParamError.html b/common/docs/classes/InvalidParamError.html new file mode 100644 index 000000000..9007051c3 --- /dev/null +++ b/common/docs/classes/InvalidParamError.html @@ -0,0 +1,7 @@ +InvalidParamError | @hpke/common

Class InvalidParamError

Invalid parameter.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/classes/MessageLimitReachedError.html b/common/docs/classes/MessageLimitReachedError.html new file mode 100644 index 000000000..205b41060 --- /dev/null +++ b/common/docs/classes/MessageLimitReachedError.html @@ -0,0 +1,7 @@ +MessageLimitReachedError | @hpke/common

Class MessageLimitReachedError

Sequence number overflow on the encryption context.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/classes/NativeAlgorithm.html b/common/docs/classes/NativeAlgorithm.html new file mode 100644 index 000000000..d592d487e --- /dev/null +++ b/common/docs/classes/NativeAlgorithm.html @@ -0,0 +1,4 @@ +NativeAlgorithm | @hpke/common

Class NativeAlgorithm

Hierarchy (view full)

  • NativeAlgorithm

Constructors

Properties

Methods

Constructors

Properties

_api: SubtleCrypto = undefined

Methods

diff --git a/common/docs/classes/NotSupportedError.html b/common/docs/classes/NotSupportedError.html new file mode 100644 index 000000000..c8e499c31 --- /dev/null +++ b/common/docs/classes/NotSupportedError.html @@ -0,0 +1,7 @@ +NotSupportedError | @hpke/common

Class NotSupportedError

Not supported failure.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/classes/OpenError.html b/common/docs/classes/OpenError.html new file mode 100644 index 000000000..0d7670cb9 --- /dev/null +++ b/common/docs/classes/OpenError.html @@ -0,0 +1,7 @@ +OpenError | @hpke/common

Class OpenError

open() failure.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/classes/SealError.html b/common/docs/classes/SealError.html new file mode 100644 index 000000000..7c404a445 --- /dev/null +++ b/common/docs/classes/SealError.html @@ -0,0 +1,7 @@ +SealError | @hpke/common

Class SealError

seal() failure.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/classes/SerializeError.html b/common/docs/classes/SerializeError.html new file mode 100644 index 000000000..1368424bf --- /dev/null +++ b/common/docs/classes/SerializeError.html @@ -0,0 +1,7 @@ +SerializeError | @hpke/common

Class SerializeError

Public or private key serialization failure.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/classes/ValidationError.html b/common/docs/classes/ValidationError.html new file mode 100644 index 000000000..2eee1921a --- /dev/null +++ b/common/docs/classes/ValidationError.html @@ -0,0 +1,7 @@ +ValidationError | @hpke/common

Class ValidationError

KEM input or output validation failure.

+

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/common/docs/functions/concat.html b/common/docs/functions/concat.html new file mode 100644 index 000000000..b1bbdec5a --- /dev/null +++ b/common/docs/functions/concat.html @@ -0,0 +1,2 @@ +concat | @hpke/common

Function concat

  • Concatenates two Uint8Arrays.

    +

    Parameters

    • a: Uint8Array
    • b: Uint8Array

    Returns Uint8Array

diff --git a/common/docs/functions/i2Osp.html b/common/docs/functions/i2Osp.html new file mode 100644 index 000000000..f9ba3ea04 --- /dev/null +++ b/common/docs/functions/i2Osp.html @@ -0,0 +1,2 @@ +i2Osp | @hpke/common

Function i2Osp

  • Converts integer to octet string. I2OSP implementation.

    +

    Parameters

    • n: number
    • w: number

    Returns Uint8Array

diff --git a/common/docs/functions/isCryptoKeyPair.html b/common/docs/functions/isCryptoKeyPair.html new file mode 100644 index 000000000..abc7f8cb4 --- /dev/null +++ b/common/docs/functions/isCryptoKeyPair.html @@ -0,0 +1,2 @@ +isCryptoKeyPair | @hpke/common

Function isCryptoKeyPair

Checks whetehr the type of input is CryptoKeyPair or not.

+
  • Parameters

    • x: unknown

    Returns x is CryptoKeyPair

diff --git a/common/docs/functions/xor.html b/common/docs/functions/xor.html new file mode 100644 index 000000000..738574410 --- /dev/null +++ b/common/docs/functions/xor.html @@ -0,0 +1,2 @@ +xor | @hpke/common

Function xor

  • XOR for Uint8Array.

    +

    Parameters

    • a: Uint8Array
    • b: Uint8Array

    Returns Uint8Array

diff --git a/common/docs/hierarchy.html b/common/docs/hierarchy.html new file mode 100644 index 000000000..f13c4211b --- /dev/null +++ b/common/docs/hierarchy.html @@ -0,0 +1 @@ +@hpke/common
diff --git a/common/docs/interfaces/AeadEncryptionContext.html b/common/docs/interfaces/AeadEncryptionContext.html index 6ee32cc03..c82382b22 100644 --- a/common/docs/interfaces/AeadEncryptionContext.html +++ b/common/docs/interfaces/AeadEncryptionContext.html @@ -1,14 +1,14 @@ AeadEncryptionContext | @hpke/common

Interface AeadEncryptionContext

The AEAD encryption context interface.

-
interface AeadEncryptionContext {
    open(iv: ArrayBuffer, data: ArrayBuffer, aad: ArrayBuffer): Promise<ArrayBuffer>;
    seal(iv: ArrayBuffer, data: ArrayBuffer, aad: ArrayBuffer): Promise<ArrayBuffer>;
}

Methods

interface AeadEncryptionContext {
    open(iv: ArrayBuffer, data: ArrayBuffer, aad: ArrayBuffer): Promise<ArrayBuffer>;
    seal(iv: ArrayBuffer, data: ArrayBuffer, aad: ArrayBuffer): Promise<ArrayBuffer>;
}

Methods

Methods

  • Decrypts data with an initialization vector and additional authenticated data.

    Parameters

    • iv: ArrayBuffer

      An initialization vector.

    • data: ArrayBuffer

      A plain text as bytes to be encrypted.

    • aad: ArrayBuffer

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A decrypted plain text as bytes.

    -
  • Encrypts data with an initialization vector and additional authenticated data.

    Parameters

    • iv: ArrayBuffer

      An initialization vector.

    • data: ArrayBuffer

      A plain text as bytes to be encrypted.

    • aad: ArrayBuffer

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A cipher text as bytes.

    -
+
diff --git a/common/docs/interfaces/AeadInterface.html b/common/docs/interfaces/AeadInterface.html index d474ebb78..12d716704 100644 --- a/common/docs/interfaces/AeadInterface.html +++ b/common/docs/interfaces/AeadInterface.html @@ -1,14 +1,14 @@ AeadInterface | @hpke/common

Interface AeadInterface

The AEAD interface.

-
interface AeadInterface {
    id: AeadId;
    keySize: number;
    nonceSize: number;
    tagSize: number;
    createEncryptionContext(key: ArrayBuffer): AeadEncryptionContext;
}

Properties

id +
interface AeadInterface {
    id: AeadId;
    keySize: number;
    nonceSize: number;
    tagSize: number;
    createEncryptionContext(key: ArrayBuffer): AeadEncryptionContext;
}

Properties

id: AeadId

The KDF identifier.

-
keySize: number

The length in bytes of an AEAD key (Nk).

-
nonceSize: number

The length in bytes of an AEAD nonce (Nn).

-
tagSize: number

The length in bytes of an AEAD authentication tag (Nt).

-

Methods

keySize: number

The length in bytes of an AEAD key (Nk).

+
nonceSize: number

The length in bytes of an AEAD nonce (Nn).

+
tagSize: number

The length in bytes of an AEAD authentication tag (Nt).

+

Methods

+
diff --git a/core/docs/interfaces/DhkemInterface.html b/common/docs/interfaces/DhkemInterface.html similarity index 53% rename from core/docs/interfaces/DhkemInterface.html rename to common/docs/interfaces/DhkemInterface.html index 1075bd0ad..f0226574b 100644 --- a/core/docs/interfaces/DhkemInterface.html +++ b/common/docs/interfaces/DhkemInterface.html @@ -1,5 +1,5 @@ -DhkemInterface | @hpke/core

Interface DhkemInterface

The DHKEM interface.

-
interface DhkemInterface {
    encSize: number;
    id: KemId;
    kdf: KdfInterface;
    privateKeySize: number;
    publicKeySize: number;
    secretSize: number;
    decap(params: RecipientContextParams): Promise<ArrayBuffer>;
    deriveKeyPair(ikm: ArrayBuffer): Promise<CryptoKeyPair>;
    deserializePrivateKey(key: ArrayBuffer): Promise<CryptoKey>;
    deserializePublicKey(key: ArrayBuffer): Promise<CryptoKey>;
    encap(params: SenderContextParams): Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>;
    generateKeyPair(): Promise<CryptoKeyPair>;
    importKey(format: "raw" | "jwk", key: ArrayBuffer | JsonWebKey, isPublic?: boolean): Promise<CryptoKey>;
    serializePrivateKey(key: CryptoKey): Promise<ArrayBuffer>;
    serializePublicKey(key: CryptoKey): Promise<ArrayBuffer>;
}

Hierarchy (view full)

Properties

encSize +DhkemInterface | @hpke/common

Interface DhkemInterface

The DHKEM interface.

+
interface DhkemInterface {
    encSize: number;
    id: KemId;
    kdf: KdfInterface;
    privateKeySize: number;
    publicKeySize: number;
    secretSize: number;
    decap(params: RecipientContextParams): Promise<ArrayBuffer>;
    deriveKeyPair(ikm: ArrayBuffer): Promise<CryptoKeyPair>;
    deserializePrivateKey(key: ArrayBuffer): Promise<CryptoKey>;
    deserializePublicKey(key: ArrayBuffer): Promise<CryptoKey>;
    encap(params: SenderContextParams): Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>;
    generateKeyPair(): Promise<CryptoKeyPair>;
    importKey(format: "raw" | "jwk", key: ArrayBuffer | JsonWebKey, isPublic?: boolean): Promise<CryptoKey>;
    serializePrivateKey(key: CryptoKey): Promise<ArrayBuffer>;
    serializePublicKey(key: CryptoKey): Promise<ArrayBuffer>;
}

Hierarchy (view full)

Properties

encSize: number

The length in bytes of an encapsulated key produced by this KEM (Nenc).

-
id: KemId

The KEM identifier.

-
privateKeySize: number

The length in bytes of an encoded private key for this KEM (Nsk).

-
publicKeySize: number

The length in bytes of an encoded public key for this KEM (Npk).

-
secretSize: number

The length in bytes of a KEM shared secret produced by this KEM (Nsecret).

-

Methods

id: KemId

The KEM identifier.

+
privateKeySize: number

The length in bytes of an encoded private key for this KEM (Nsk).

+
publicKeySize: number

The length in bytes of an encoded public key for this KEM (Npk).

+
secretSize: number

The length in bytes of a KEM shared secret produced by this KEM (Nsecret).

+

Methods

  • Derives a key pair from the byte string ikm.

    +
  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    +
  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    +
  • Generates an ephemeral, fixed-length symmetric key and +

  • Generates an ephemeral, fixed-length symmetric key and a fixed-length encapsulation of the key that can be decapsulated by the holder of the private key corresponding to pkR.

    If the error occurred, throws EncapError.

    Parameters

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    EncapError

    -
  • Imports a public or private key and converts to a CryptoKey.

    Since key parameters for createSenderContext or createRecipientContext are CryptoKey format, you have to use this function to convert provided keys to CryptoKey.

    @@ -62,14 +62,14 @@
  • OptionalisPublic: boolean

    The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

Returns Promise<CryptoKey>

A public or private CryptoKey.

+
diff --git a/common/docs/interfaces/DhkemPrimitives.html b/common/docs/interfaces/DhkemPrimitives.html new file mode 100644 index 000000000..fc98635e4 --- /dev/null +++ b/common/docs/interfaces/DhkemPrimitives.html @@ -0,0 +1,10 @@ +DhkemPrimitives | @hpke/common

Interface DhkemPrimitives

interface DhkemPrimitives {
    deriveKeyPair(ikm: ArrayBuffer): Promise<CryptoKeyPair>;
    derivePublicKey(key: CryptoKey): Promise<CryptoKey>;
    deserializePrivateKey(key: ArrayBuffer): Promise<CryptoKey>;
    deserializePublicKey(key: ArrayBuffer): Promise<CryptoKey>;
    dh(sk: CryptoKey, pk: CryptoKey): Promise<ArrayBuffer>;
    generateKeyPair(): Promise<CryptoKeyPair>;
    importKey(format: "raw" | "jwk", key: ArrayBuffer | JsonWebKey, isPublic: boolean): Promise<CryptoKey>;
    serializePrivateKey(key: CryptoKey): Promise<ArrayBuffer>;
    serializePublicKey(key: CryptoKey): Promise<ArrayBuffer>;
}

Implemented by

Methods

  • Parameters

    • format: "raw" | "jwk"
    • key: ArrayBuffer | JsonWebKey
    • isPublic: boolean

    Returns Promise<CryptoKey>

diff --git a/common/docs/interfaces/KdfInterface.html b/common/docs/interfaces/KdfInterface.html new file mode 100644 index 000000000..260de90dd --- /dev/null +++ b/common/docs/interfaces/KdfInterface.html @@ -0,0 +1,50 @@ +KdfInterface | @hpke/common

Interface KdfInterface

The KDF interface.

+
interface KdfInterface {
    hashSize: number;
    id: KdfId;
    buildLabeledIkm(label: Uint8Array, ikm: Uint8Array): Uint8Array;
    buildLabeledInfo(label: Uint8Array, info: Uint8Array, len: number): Uint8Array;
    expand(prk: ArrayBuffer, info: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    extract(salt: ArrayBuffer, ikm: ArrayBuffer): Promise<ArrayBuffer>;
    extractAndExpand(salt: ArrayBuffer, ikm: ArrayBuffer, info: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    init(suiteId: Uint8Array): void;
    labeledExpand(prk: ArrayBuffer, label: Uint8Array, info: Uint8Array, len: number): Promise<ArrayBuffer>;
    labeledExtract(salt: ArrayBuffer, label: Uint8Array, ikm: Uint8Array): Promise<ArrayBuffer>;
}

Properties

hashSize: number

The output size of the extract() function in bytes (Nh).

+
id: KdfId

The KDF identifier.

+

Methods

  • Builds a labeled input keying material.

    +

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

      +
    • ikm: Uint8Array

    Returns Uint8Array

    An input keying material as bytes.

    +
  • Builds a labeled info string.

    +

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

      +
    • info: Uint8Array

      An additional byte string.

      +
    • len: number

      The length of the output byte string.

      +

    Returns Uint8Array

    An info string as bytes.

    +
  • Expands a pseudorandom key prk.

    +

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

      +
    • info: ArrayBuffer

      An additional byte string.

      +
    • len: number

      The length in bytes of the output keying material.

      +

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    +
  • Extracts a pseudorandom key of fixed length (Nh) bytes.

    +

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

      +
    • ikm: ArrayBuffer

      An input keying material

      +

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    +
  • Extracts a pseudorandom key and expand it to a specified length keying material.

    +

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

      +
    • ikm: ArrayBuffer

      An input keying material

      +
    • info: ArrayBuffer

      An additional byte string.

      +
    • len: number

      The length in bytes of the output keying material.

      +

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    +
  • Initializes the instance by setting a suite_id defined in RFC9180.

    +

    Parameters

    • suiteId: Uint8Array

      A suite_id defined in RFC9180.

      +

    Returns void

  • Extracts a pseudorandom key with label.

    +

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

      +
    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

      +
    • info: Uint8Array

      An additional byte string.

      +
    • len: number

      The length in bytes of the output keying material.

      +

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    +
  • Extracts a pseudorandom key with label.

    +

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

      +
    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

      +
    • ikm: Uint8Array

      An input keying material

      +

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    +
diff --git a/common/docs/interfaces/KemInterface.html b/common/docs/interfaces/KemInterface.html new file mode 100644 index 000000000..fa05529f1 --- /dev/null +++ b/common/docs/interfaces/KemInterface.html @@ -0,0 +1,74 @@ +KemInterface | @hpke/common

Interface KemInterface

The KEM interface.

+
interface KemInterface {
    encSize: number;
    id: KemId;
    privateKeySize: number;
    publicKeySize: number;
    secretSize: number;
    decap(params: RecipientContextParams): Promise<ArrayBuffer>;
    deriveKeyPair(ikm: ArrayBuffer): Promise<CryptoKeyPair>;
    deserializePrivateKey(key: ArrayBuffer): Promise<CryptoKey>;
    deserializePublicKey(key: ArrayBuffer): Promise<CryptoKey>;
    encap(params: SenderContextParams): Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>;
    generateKeyPair(): Promise<CryptoKeyPair>;
    importKey(format: "raw" | "jwk", key: ArrayBuffer | JsonWebKey, isPublic?: boolean): Promise<CryptoKey>;
    serializePrivateKey(key: CryptoKey): Promise<ArrayBuffer>;
    serializePublicKey(key: CryptoKey): Promise<ArrayBuffer>;
}

Hierarchy (view full)

Implemented by

Properties

encSize: number

The length in bytes of an encapsulated key produced by this KEM (Nenc).

+
id: KemId

The KEM identifier.

+
privateKeySize: number

The length in bytes of an encoded private key for this KEM (Nsk).

+
publicKeySize: number

The length in bytes of an encoded public key for this KEM (Npk).

+
secretSize: number

The length in bytes of a KEM shared secret produced by this KEM (Nsecret).

+

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    +

    If the error occurred, throws DecapError.

    +

    Parameters

    Returns Promise<ArrayBuffer>

    A shared secret as the output of the decapsulation step.

    +

    DecapError

    +
  • Generates an ephemeral, fixed-length symmetric key and +a fixed-length encapsulation of the key that can be decapsulated +by the holder of the private key corresponding to pkR.

    +

    If the error occurred, throws EncapError.

    +

    Parameters

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    +

    EncapError

    +
  • Imports a public or private key and converts to a CryptoKey.

    +

    Since key parameters for createSenderContext or createRecipientContext +are CryptoKey format, you have to use this function to convert provided keys +to CryptoKey.

    +

    Basically, this is a thin wrapper function of +SubtleCrypto.importKey.

    +

    If the error occurred, throws DeserializeError.

    +

    Parameters

    • format: "raw" | "jwk"

      For now, 'raw' and 'jwk' are supported.

      +
    • key: ArrayBuffer | JsonWebKey

      A byte string of a raw key or A JsonWebKey object.

      +
    • OptionalisPublic: boolean

      The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

      +

    Returns Promise<CryptoKey>

    A public or private CryptoKey.

    +
  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    +

    If the error occurred, throws SerializeError.

    +

    Parameters

    • key: CryptoKey

      A CryptoKey.

      +

    Returns Promise<ArrayBuffer>

    A key as bytes.

    +
  • Serializes a public key as CryptoKey to a byte string of length Npk.

    +

    If the error occurred, throws SerializeError.

    +

    Parameters

    • key: CryptoKey

      A CryptoKey.

      +

    Returns Promise<ArrayBuffer>

    A key as bytes.

    +
diff --git a/common/docs/interfaces/KeyScheduleParams.html b/common/docs/interfaces/KeyScheduleParams.html new file mode 100644 index 000000000..cd9786dea --- /dev/null +++ b/common/docs/interfaces/KeyScheduleParams.html @@ -0,0 +1,7 @@ +KeyScheduleParams | @hpke/common

Interface KeyScheduleParams

The common parameters used to setup the EncryptionContext.

+
interface KeyScheduleParams {
    info?: ArrayBuffer;
    psk?: PreSharedKey;
}

Hierarchy (view full)

Properties

Properties

info?: ArrayBuffer

Application supplied information. The maximum length is 128 bytes.

+

A pre-shared key (PSK) held by both the sender and recipient. +The PSK should have at least 32 bytes :and the maxmum length of the PSK is 128 bytes.

+
diff --git a/common/docs/interfaces/PreSharedKey.html b/common/docs/interfaces/PreSharedKey.html new file mode 100644 index 000000000..f86af2ab6 --- /dev/null +++ b/common/docs/interfaces/PreSharedKey.html @@ -0,0 +1,6 @@ +PreSharedKey | @hpke/common

Interface PreSharedKey

The pre-shared key interface.

+
interface PreSharedKey {
    id: ArrayBuffer;
    key: ArrayBuffer;
}

Properties

id +key +

Properties

id: ArrayBuffer

The key identifier.

+
key: ArrayBuffer

The body of the pre-shared key.

+
diff --git a/common/docs/interfaces/RecipientContextParams.html b/common/docs/interfaces/RecipientContextParams.html new file mode 100644 index 000000000..3f385faa7 --- /dev/null +++ b/common/docs/interfaces/RecipientContextParams.html @@ -0,0 +1,13 @@ +RecipientContextParams | @hpke/common

Interface RecipientContextParams

The parameters used to setup the RecipientContext.

+
interface RecipientContextParams {
    enc: ArrayBuffer;
    info?: ArrayBuffer;
    psk?: PreSharedKey;
    recipientKey: CryptoKeyPair | CryptoKey;
    senderPublicKey?: CryptoKey;
}

Hierarchy (view full)

Properties

enc: ArrayBuffer

A byte string of the encapsulated key received from a sender.

+
info?: ArrayBuffer

Application supplied information. The maximum length is 128 bytes.

+

A pre-shared key (PSK) held by both the sender and recipient. +The PSK should have at least 32 bytes :and the maxmum length of the PSK is 128 bytes.

+
recipientKey: CryptoKeyPair | CryptoKey

A recipient private key or a key pair.

+
senderPublicKey?: CryptoKey

A sender public key for Auth mode.

+
diff --git a/common/docs/interfaces/SenderContextParams.html b/common/docs/interfaces/SenderContextParams.html new file mode 100644 index 000000000..d799051a9 --- /dev/null +++ b/common/docs/interfaces/SenderContextParams.html @@ -0,0 +1,13 @@ +SenderContextParams | @hpke/common

Interface SenderContextParams

The parameters used to setup the SenderContext.

+
interface SenderContextParams {
    ekm?: ArrayBuffer | CryptoKeyPair;
    info?: ArrayBuffer;
    psk?: PreSharedKey;
    recipientPublicKey: CryptoKey;
    senderKey?: CryptoKeyPair | CryptoKey;
}

Hierarchy (view full)

Properties

ekm?: ArrayBuffer | CryptoKeyPair

DO NOT USE. FOR DEBUGGING/TESTING PURPOSES ONLY.

+
info?: ArrayBuffer

Application supplied information. The maximum length is 128 bytes.

+

A pre-shared key (PSK) held by both the sender and recipient. +The PSK should have at least 32 bytes :and the maxmum length of the PSK is 128 bytes.

+
recipientPublicKey: CryptoKey

A recipient public key.

+
senderKey?: CryptoKeyPair | CryptoKey

A sender private key or a key pair for Auth mode.

+
diff --git a/common/docs/modules.html b/common/docs/modules.html index a76c74e8d..4c4767329 100644 --- a/common/docs/modules.html +++ b/common/docs/modules.html @@ -1,12 +1,47 @@ -@hpke/common

@hpke/common

Index

Interfaces

AeadEncryptionContext +@hpke/common
diff --git a/common/docs/types/AeadId.html b/common/docs/types/AeadId.html index f632c7663..b575e66f5 100644 --- a/common/docs/types/AeadId.html +++ b/common/docs/types/AeadId.html @@ -1,2 +1,2 @@ AeadId | @hpke/common

Type Alias AeadId

AeadId: typeof AeadId[keyof typeof AeadId]

The type alias of the supported AEAD identifiers.

-
+
diff --git a/common/docs/types/KdfId.html b/common/docs/types/KdfId.html index 2df27b905..dba8c278d 100644 --- a/common/docs/types/KdfId.html +++ b/common/docs/types/KdfId.html @@ -1,2 +1,2 @@ KdfId | @hpke/common

Type Alias KdfId

KdfId: typeof KdfId[keyof typeof KdfId]

The type alias of the supported KDF identifiers.

-
+
diff --git a/common/docs/types/KemId.html b/common/docs/types/KemId.html index 596e65a11..f820030a1 100644 --- a/common/docs/types/KemId.html +++ b/common/docs/types/KemId.html @@ -1,2 +1,2 @@ KemId | @hpke/common

Type Alias KemId

KemId: typeof KemId[keyof typeof KemId]

The type alias of the supported KEM identifiers.

-
+
diff --git a/common/docs/types/Mode.html b/common/docs/types/Mode.html index 1dcd0e368..1563c9c3f 100644 --- a/common/docs/types/Mode.html +++ b/common/docs/types/Mode.html @@ -1,2 +1,2 @@ Mode | @hpke/common

Type Alias Mode

Mode: typeof Mode[keyof typeof Mode]

The type alias of the supported HPKE modes.

-
+
diff --git a/common/docs/variables/AEAD_USAGES.html b/common/docs/variables/AEAD_USAGES.html index f4ae5be19..2db0ccfa5 100644 --- a/common/docs/variables/AEAD_USAGES.html +++ b/common/docs/variables/AEAD_USAGES.html @@ -1 +1 @@ -AEAD_USAGES | @hpke/common

Variable AEAD_USAGESConst

AEAD_USAGES: KeyUsage[] = ...
+AEAD_USAGES | @hpke/common

Variable AEAD_USAGESConst

AEAD_USAGES: KeyUsage[] = ...
diff --git a/common/docs/variables/AeadId-1.html b/common/docs/variables/AeadId-1.html index e32e308fa..abb80e968 100644 --- a/common/docs/variables/AeadId-1.html +++ b/common/docs/variables/AeadId-1.html @@ -1,2 +1,2 @@ AeadId | @hpke/common

Variable AeadIdConst

AeadId: {
    Aes128Gcm: 1;
    Aes256Gcm: 2;
    Chacha20Poly1305: 3;
    ExportOnly: 65535;
} = ...

The supported Authenticated Encryption with Associated Data (AEAD) identifiers.

-
+
diff --git a/common/docs/variables/EMPTY.html b/common/docs/variables/EMPTY.html new file mode 100644 index 000000000..124248470 --- /dev/null +++ b/common/docs/variables/EMPTY.html @@ -0,0 +1 @@ +EMPTY | @hpke/common

Variable EMPTYConst

EMPTY: Uint8Array = ...
diff --git a/common/docs/variables/INPUT_LENGTH_LIMIT.html b/common/docs/variables/INPUT_LENGTH_LIMIT.html new file mode 100644 index 000000000..ae1ddb2bd --- /dev/null +++ b/common/docs/variables/INPUT_LENGTH_LIMIT.html @@ -0,0 +1 @@ +INPUT_LENGTH_LIMIT | @hpke/common

Variable INPUT_LENGTH_LIMITConst

INPUT_LENGTH_LIMIT = 8192
diff --git a/common/docs/variables/KdfId-1.html b/common/docs/variables/KdfId-1.html index eafe82f15..10b330cec 100644 --- a/common/docs/variables/KdfId-1.html +++ b/common/docs/variables/KdfId-1.html @@ -1,2 +1,2 @@ KdfId | @hpke/common

Variable KdfIdConst

KdfId: {
    HkdfSha256: 1;
    HkdfSha384: 2;
    HkdfSha512: 3;
} = ...

The supported Key Derivation Function (KDF) identifiers.

-
+
diff --git a/common/docs/variables/KemId-1.html b/common/docs/variables/KemId-1.html index 90c78e780..cd25794d5 100644 --- a/common/docs/variables/KemId-1.html +++ b/common/docs/variables/KemId-1.html @@ -1,2 +1,2 @@ KemId | @hpke/common

Variable KemIdConst

KemId: {
    DhkemP256HkdfSha256: 16;
    DhkemP384HkdfSha384: 17;
    DhkemP521HkdfSha512: 18;
    DhkemSecp256k1HkdfSha256: 19;
    DhkemX25519HkdfSha256: 32;
    DhkemX448HkdfSha512: 33;
    HybridkemX25519Kyber768: 48;
    NotAssigned: 0;
} = ...

The supported Key Encapsulation Mechanism (KEM) identifiers.

-
+
diff --git a/common/docs/variables/LABEL_DKP_PRK.html b/common/docs/variables/LABEL_DKP_PRK.html new file mode 100644 index 000000000..d793ac795 --- /dev/null +++ b/common/docs/variables/LABEL_DKP_PRK.html @@ -0,0 +1 @@ +LABEL_DKP_PRK | @hpke/common

Variable LABEL_DKP_PRKConst

LABEL_DKP_PRK: Uint8Array = ...
diff --git a/common/docs/variables/LABEL_SK.html b/common/docs/variables/LABEL_SK.html new file mode 100644 index 000000000..785529ed9 --- /dev/null +++ b/common/docs/variables/LABEL_SK.html @@ -0,0 +1 @@ +LABEL_SK | @hpke/common

Variable LABEL_SKConst

LABEL_SK: Uint8Array = ...
diff --git a/common/docs/variables/MINIMUM_PSK_LENGTH.html b/common/docs/variables/MINIMUM_PSK_LENGTH.html new file mode 100644 index 000000000..ffc14381f --- /dev/null +++ b/common/docs/variables/MINIMUM_PSK_LENGTH.html @@ -0,0 +1 @@ +MINIMUM_PSK_LENGTH | @hpke/common

Variable MINIMUM_PSK_LENGTHConst

MINIMUM_PSK_LENGTH = 32
diff --git a/common/docs/variables/Mode-1.html b/common/docs/variables/Mode-1.html index c1f50b425..e26936e55 100644 --- a/common/docs/variables/Mode-1.html +++ b/common/docs/variables/Mode-1.html @@ -1,2 +1,2 @@ Mode | @hpke/common

Variable ModeConst

Mode: {
    Auth: 2;
    AuthPsk: 3;
    Base: 0;
    Psk: 1;
} = ...

The supported HPKE modes.

-
+
diff --git a/common/docs/variables/SUITE_ID_HEADER_KEM.html b/common/docs/variables/SUITE_ID_HEADER_KEM.html new file mode 100644 index 000000000..54c564cc1 --- /dev/null +++ b/common/docs/variables/SUITE_ID_HEADER_KEM.html @@ -0,0 +1 @@ +SUITE_ID_HEADER_KEM | @hpke/common

Variable SUITE_ID_HEADER_KEMConst

SUITE_ID_HEADER_KEM: Uint8Array = ...
diff --git a/core/docs/assets/navigation.js b/core/docs/assets/navigation.js index 33065dff6..7c6fd4ccc 100644 --- a/core/docs/assets/navigation.js +++ b/core/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WVW4/aMBCF/0ue6SVhQylvLUULgmUjQqtKVbXyxkNjERzL9qKl1f73Kimbi2NP0lefcz7ZMx77xx9Pw7P2Zt4nUH4wvU1O3sgTRKfezEsyohSod5X0NtWnzBt5R8apN/OD6cuomQ/CiSv/T8Lyn4mChZS57OYrCcvPmUhBxk9MQ5fQEDHGF0iIcGyi1nCCZGdYwyUiTDpJpgcnKpCMZOy3qzymA6WlR7B0qFzuzUVBOFke6SFOSRBOHJS2qZ85nt5c7ePpjYvZMvUzw8C/2kM/cDFbJoy5SLqIRYImuPse1RpKeBa51C5ELfYz7nl2cSEKDSNgzR7WY6y1wzqKNXJY/5bi6BqdSkLzl0fJqHVuKgnLr/iZZIxGRJKTYx8dC8a7A6XIL9iwE9M7IEkK1IF1OTH6NtfxkyhuhxPbsWC8ewHcwakkLB8DyRz5SsLz+OsZD347vxUtIprlrvMYBoz1fS4vQudrsMxmreH/LaELnhRWlvN5zsv1Csa4BnkgSfn9WpxtdBBODPTqNe9EVg4M1fh4y8utrLiOayCyuAA7UCLnyr5PhxfDl58Dfvq2pRcWyWL+2Bnshzc8GG5Yv/+r12t6wA/bNKCgvqqtB9YskhCnRAJtDUcD1DRgoB0kTDDg+loG5ALarRg8Bk5BYm1oOQajkE1afL1TTGuSvojXyaVG7v3HD34YGLeiEy0Xe5NwsiSLxb6k2QMTYup9PPP8ZyIZecyqGrzx24RxM7zaRl/3D5vF9na/fNis7lZ7G6jrQpBGTWtKKaC7MYraiBaCJfrzL0d8vA/YDQAA" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WVX2/TMBTFv4ufCyPpUkrfoFRs6mBVI6FJEw9efEusJI5le9UC4rujhC5/HPsmvPqc85N977X9+JsYeDFkQz6CDsL1l6QgCyKpScmGJDnVGvRVK71NTZGTBcm4YGQThOs/i34+jFa+/D8Jy3+iGnZKlWqcbyUsv+UyBRU/cwNjQk/EGJ8hodKziU7DCYqfYQ/VgXLlJdkenKhBcZrzX77y2A6UlmZQHMJodZOxU5zSMFo5gGPTNHO5vr7Yl+trH3NgmmZGYXCxR0HoYw5MGHMn/N3tNJTwIktlfIhOnGbci7zyIWoNI2Ctm9cxrFHz+oO1ZV43bmTmG+hWQvPVk+IsA8d700pY/lacac7ZgSpaePYxsmC8r6A1/Ql3vODmCDRJgXmwPidG/1aa+FnW0+HFjiwY716C8HBaCcvHQHNPvpXwPP6mxbNftO91i6jhpe88lgFjPWxVJU25B8fd7DT8F6RsJ5LaykuxLUWz3sK4MKBONGk+RYdziA6jlYW+fc17ka0DQ/W+w2a4tRM3cs1E1gNwBC1Lod379Hgx/Lya/lc99+yEl7NvQEFQTIB6Bgx0UBCnVAEbDGAP1DdgoCMkXHIQ5lIGpMluKwaPQTBQWBsGjtkoZJMO3+RNYR3JVPL1djAr9+7D+yAKrakYRZvFySQUjmS9OJW0e2BDbH2KZ5//TBWnT3lbgzfBkLBECtBlGwGPDivQi9aCI/rjLxq8Ugt/DAAA" \ No newline at end of file diff --git a/core/docs/assets/search.js b/core/docs/assets/search.js index 1a851c737..2773b96c7 100644 --- a/core/docs/assets/search.js +++ b/core/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAA7Wdb4/bOJLGv8rBedubURUlWcq7ubnBTrCzs8Fkb7FAYxA4tpI2uuM2bCeX7GC++0GUKZPFhxT1Z16lEYusEvWoWKwfJf2+Oj3/33n16v731eP+sFu94qK8Wx02n5rVq9X3zWb342F7+na87J8PPzwfLs3Xy+pu9fn0tHq12h8uzenDZtucv4MHvny4fHpa3a22T5vzuTmvXq1Wf9z1ZrK86u2cm83TuG5fXJtYfd+tjptTc7gE/Q4Yfz42h5HGr00mGhcD/NqYDDnRHxAdUMo47/vd79I6e6EPDJ/HzbeAocfm29v9fxJdf3E7eobJw/Nh24wwah8/w+xl83GE0dvR40w6ytyems2lSb4BhQvh1iNdsvT6w/740Jzeft5fmjeb0+bTGfniHZSu28fmU3qPL7qj8dn4noZM7j6MMamPnmly02zg/RmweT18vFH7yiWp6E8I4VPC9+zQPSVsJxttvh6fTyOG70Xf4Gb4ct79ZX/+y/7w0Jz2l2aX7ki9poJ7X35ttvvjvjlc5EW9fDs25+/kz/HLaanlbXPYNaeIUpwD0u/v5rBN6+1FdyS+VK53IwUJbHlijF2eJOMhYQLjnihnGw8LFI3zOHEGHbDE87fdh2hOY/8+N6Xx+oplNI5jATMPm/NDaJ73jVlHjzLpXK/9YQ+vFji37sjppt5/3j/tft68b56a3etHONf6Vv1GCzlw+PA8wYOu1XQXmq+X02abOOK3g+cYPG4Oiertj519ft8fdj+OMuy1mu7CU3epfhwz0l6bBcynn75sMs64HfyaT/HgZ/0+O/jJvqLBz3YsYObcbE/NJRj+PHPO8dPNNodtus3bwdMNHj+/f9pv/xZeu/pmZZMZxk/7L5tLM866bDPKvMiLTvvN0/4/zRtzRqnXGrSb7saumepIoOUSI9KP8tghsRsuMyYjXQk1ne7M/lObGCY7YB8+3ejH5tCcOuffbPanNNN+ozmX4LT/Ms68bDLdeHPYbo7JUVAfOudMk42ZQ8cZsybFN6fm7cPm1OwCcrJ/nzspen3FJkXHsXCJM83OY0T8AUP2IMnFerjAho9MH7iTaR+4HJH+X4i2+GwDpzKuKBDzIlYdGGf8rBe00Sko5ojffAmn9oGVUcyTvVwXxZbx49w5nh/HetM1WciZQAX6bbN5+rU5H58PZ5hGBQ5Nv0/w0iXW7YvIyiXk+bi7Imo9dlsMmw8WAMORCBw2IQxF776QiReweULBMCUejPXFbjXbhQYXZoLGm0hNZoTZUNAJ2h0VcUY4Egg3QT/GxJoBN/iWH33fnImrv25v1+Jq4bv+l6jUC7qV6bfPh/Pl9Hl7eT4N9PbCPTRE6oxrw5lRwEyU+w70LplvwMQw7B2w44PegKUUwjtgS9LdgKVhrOvbGYV0Q6oYzXLB+bri5qIMiLv7ZSlxW72livvq2ihx22bi4o73HhG3bSJB3HE7UXHblpLEHbcVEbdtKUHcnp2p4nZUkSDuWEyH52+J/UeNuP5xePrmeXL7aRG5i+6S9G55ly54aSii+OH+Q5KXRoY0P2wpLHppa1j1w9ZCspe2hnQPLU0SvqePkWEdeqLYCuub3eubWr5sTvvN+yezPWj3F4qqvCwKdVsBvHvX7iEY6utFf1hkU9EudIX8HCtu5qXdIGbw5dWtsF0x/Q3b7RvMsPvDw2b7sOHszfPTN1JZkWoetJvhBYiHA/adFuMsyx0rQqLdPpVr45g4LZW3FA6JXP//Mhq3uxqSeOdOYKx/etx9ePuw4aJMs/LSaRAxOHCNr92oKh9nt2sw225BPM5u12CUXaksVxadsLqmqbpqPmFdtf+/kK6srgZ1pd0JjPMvz5fvz+f9x0Mz5LEZaLdFxOTAFf6fh8fm0xsuyri0gQe45VxPVJXHxR70RLac60nBFJd/0BPZcqYnb5vtkYvykaZdItx8pk//5qKgeppDoO1cb/K8mnatvJbTPfnp2/vTftef39++vW9O67JK9CbcepRHXhR1guA1iuqm0bqutdyyCs1eAmz9tsiCS/aXtOKyHQxcmnf2RvSgsXdyA/p1lXo8PV+a7aXZ/Vds2Yrd4JIpxxvig34E3Jhh1doTH7YqtsLPtupsiw+a9XbDT7Drr93whuewzGCjhX0Kbu4ecAu0W8wzZ1d10I9RG6oTrDrbqYNWR+2kTgkCm+M+IQh0Ry0bBOyTf3duLp+PCY6Y4xZ1xY7ssdTPuAWOWSTSh/pNivjI8fRiW9D0Pj0QjfAAbMIc9CSwEXMhj+T+zEF30B7NhXzBWzcHPQpv31zKL7yrc9ix8M7OhTx7dzzt/SQi6JA5fGIUGeMYSjPCfgXyjSXcSt0gm3AfRnemLuRhdO/soI+D+2cXH0d/L+uIgcS7Wf+EkZzg5fCu24X89DfjDk9OcEPuQv6E9ukOehXbq7vYNUVbeBOuZWgb70J+ubt7U+bQDczm5o/PKD/8zb8zwr+XTOLqneuUc8yCyaTf74hk0nV8bDIJTI9OJpM8GEwmgSeTk8kkj+LJJHBnWjKZ5EtKMgk8mpNMpvmVkkwix+Ykk0mexZJJ4NAiyWSaY+FkEvm1QDIZcmtaMgnvw5lpWpKHI5JJ4OMCyeTIcRxK06IDOTVJGz2SE7xcIplM8nMomUST08RkMsmftGQSeDUvmUy8psPJJLyW05PJJL9iySSeQ0cncYnjM8qPKclkMPx7ySQGsK5TzjELJpN+vyOSSdfxsckkMD06mUzyYDCZBJ5MTiaTPIonk8Cdaclkki8pySTwaE4ymeZXSjKJHJuTTCZ5FksmgUOLJJNpjoWTSeTXAslkyK1pySS8D2emaUkejkgmgY8LJJMjx3EoTYsO5NQkbfRITvByiWQyyc+hZBJNThOTySR/0pJJ4NW8ZDLxmg4nk/BaTk8mk/yKJZN4Dh2dxCWOzyg/piSTwfBvJZMRur0w1J7Csich7Bnketie98q0kFX4trR5tjdPH3/anB8GTd+OmzhNJ+DMc7t14vXw4FsHLulM+J1yQRXI18nNsxl6uVzIfOy9cgt6Yj/WnOTKmMeaE7CPeAlayAX0prm5lp33n4UNe+88W+SM/RfQDZw6fvfcPF8Cb6ILeRJ5Cd1CfiQNSPhtdPO8eLd9aLaPr1Nig3Ponxcz0RY7z5VZO+wSRgVvsPPD9rz9dYNENAJCF+afU7DnJNo5A3IO2xvKO3qrU/OOiO2BvKM3vVTeESNfA3nHDXotlXfE2EIkttxUMCHviNhMzDt68zPzjlRPInkHdmVC3hEjBPEp74YGps11UcuxSc4yPGV2Gz7jwbxDnvrkvCPiS1re0XsyL+9I8SNpQGblHREvhvOOW5BaLu+IxcxI3nFzZYm8IzYq0bzDCtuL5B1heBZhZgujsimEbBIYm8HDhu0N5R291al5R8T2QN7Rm14q74hBkoG848ZHlso7YmXoSGy5qWBC3hGxmZh39OZn5h2pnkTyDuzKhLwjVkyOT3m3KvK0uS5qOTbJWYanzG7DZzyYd8hTn5x3RHxJyzt6T+blHSl+JA3IrLwj4sVw3nELUsvlHbGYGck7bq4skXfERiWad1hhe5G8QzhivWNUE5noxxLcI+JPoCd80wt0F/2gl3BwOP0YsDV2V87M7zUgF6Zux5nzDQfkx6R9OPO/64BcmbEBZ4FvPUCPZuy8Wej7D1g78zZnLPZNCOTc/L0jS30nIj50EzdjLPftiKHB+7McjH5PAkbLadtElvjGBHJn1v6Q+d+dwJdt8saQ6d+iCETzsTsxpn+fAo/EMg7I7OTNaf9pf9l/aeDbz8Uh0fxkagwW3Y/5DI88gyWirnRn1Md4Eh0aE8jCwzP8FZwJ4zPeoXEf5kl0aTiWSjeGP8+TaDo1ekoHUj/Sk3xRUuKlfzFSPtUzyoUpt4xsN8+Nh3TLDxOMeY9Z4A16yz1KMfLhibGPS8ClWHKvQ49ARFdZyVaijzWEF1DJ/Sc8qjC0Nkq3lfD4weCyJ9la5JGC1IcI0m0FnxJIfC4gZmnSxv9pKcL8zfxTc4HZG/QnTvoLbLqfPLtP3Eg/ahqftTl+wnw9Y8P76Il5wib20CJlxHkM9B3/Qp4XReyPE2y9fn/cLjKZXrtJ+wjBdkboMYZG3P1he0lBx1gcFXFSzjF80/snOXy/p53lsM1xUSZsNRxijKXh+BLufSi4GBupkSU2erGwchu1lJgyZCVFhGn5fMSSz/P7zsMpu9PfMGUyPc6jS+GTCFCl3uxMmuSerb17xbwH2Qda5pdl9q44vaVtXeldG7FzxTUTWacM9q7/Gej/esxEC5HVkLCTsCIatBZaFQlTQyujQTvx1ZGwlrZCGrYZXyVJo2krpUGr7zZDlvQRaSuYYWvvB629X9AaWp1Je2NWaMji2FTJuyuSs5dB60mJk7A/Kn8acf7hlCY4AMN5zagRSPZgXG416MNQEiSsp+ZCCeceS4m8c07JjAZthtNJOYkNZpWDtvDqzo/8kVVYwhgm2Iiv9GBUspKVf//QfunrGY3Z7adF0hXRXVK+YnkX2lgz7Hj0M+jDFpwP54RMRL+bM2zjuv+u/bbGoCn32KkWN08fn0/7y4OfpEp79pFTrX0+bz5axDJkqj9shB3rc0mvf3nzv/989/OPv/z1nz+9+/n131//s7d4+3KJf1B8F5d1r/z35tz8eDoBbfe/LHKnuL0l3Sg31wJrkuNjwPX+l2XWJE5vaWuS3jXs+uvDl83Tfqc/jYxPwTtikVPBvSadku8yPrV/tUdt2u8s4hMTvy9yWqjPpJOSzuJTemtyF3xG7s+LnBDoMul8hKcBvnhLxvAJyQOWoY6o0zQAKf0N1HjbvASf0O2nZWq+bndptd+bd6GrEnT/9tNCV2K8+5Z3gdHXH68MDP/tt2XGX/Q34gvA8dt88xS6w6+/LHRz270l3tfGNez6P45NINz2vyziuttbkus317Drf2/ObYb0c7sp4tdms31odvhMQgcucmLRzpPOM3geodvdWh2Gbnt5yEK3P+w2MQx4XuPT++X58vbzsb3jQpfTO2KRk8O9Jp2b7/Ifv92t9odd83X16vfVl+Z03j8fVq9W/FK9rFd3qw/75ml3Xr26NzXg7fOnT21fd6vd8/az/vO362H/alrb7cHd0d9lq7v77K7IXypWv/12d28a6x/0f5g+bv+jG9Lq7p7ucvVSqbXTkLyG5DTk1d09o4bsNWSnoVrd3SvkqvIaKqdhvrq7z+9U9lLludMw9xrmTsNidXdfIFcLr2HhNCxXd/clalh6DUun4Xp1d79GDddew7XTsFrd3VeoYeU1rJyG9eruvkajWnsNa1cArR4ou8vrl0zuuJIvHhLq0fKhu7x4WRVuW6AfV0Dtk8v3xNCwryFyRUStNAjKiHwdkSskyoOi96VErpaoCOmefDWRKydqRUI5PGNfUeRKilqhUAHP2FcVubKiVixUwsa+ssiVFrWCoTW6yL64yFUXZ6GhZl9c7IqLKRhifHGxiE4cHGoGAcoVF2txVWi02BcXu+LiYJhiX1zsiotbvVANT9lXF7vq4lYvnMHGvrrYVRe3emF8oXx1sasubvXC+Er56mJXXdwKhhVs7MuLXXmpVjGco8bK15dy9aW0vuDEoHyBKVdgSs9/cHJQvsCUmAJbyTCcIBSYBV2BqVYzDNWpfIUpV2GqCKlT+QJTrsCUFlh9p6qXzJXb2BeYcgWmWsmoDDb2BaZcgalWMopgY19gyhWYaiWjGDb2BaZcgeWtZJS6U8XLqhRZhy+w3BVY3kpG5bCxL7DcFVjeSkYVsLEvsNwVWK6TrBI29gWWizyrlYxaw8Yg1XIFlreaURVs7CssdxWWt5pRNWzsKyx3FZa3msmhwnJfYbmrsLzVTA4VlvsKy12F5a1mckZ3ZO4rLHcVVmShO7LwBVa4AitayeQKzXKFL7DCFVjRSibPkdeFL7DCFVjRSiaH2UjhC6xwBVbkoYSi8PVViFxeBzCYyRQgnXf11b4c+D5fw/Hy9VW4+iq0virY2NdX4eqr0PqCCXrh66tw9VW0iing8q7w9VW4+iqz0GCXvr5KV19lq5iCkOHS11fp6qtsFVPAu6L09VW6+ipbxRQwvy99fZWuvspWMgVUdukLrHQFVhZBjZS+wEqxYCyDGinBmtEVWNlKpihgY19gpSuwspVMUd5x/rJauwGs9AVWugIr61AMKn19la6+1llodb329bV29bWm0AJ77ctr7cprzcE1tq+utauutQots9e+uNauuNZaXFAfa19ca1dc6yJ4lda+uNauuNZl6CqtfW2tRUFiHbxKoCThSmtdBa+Sr6y1q6x1HbxKvrLWrrKqLFgM8ZVVucqqdOSCN2LlS6typVVx8CpVvrYqV1uVCl2lytdW5WqrykNXqfKlVbnSqorQVap8ZVWusqoydJUqX1mVq6xqHbxKvrIqUe3SQauGVwkUvFxpVa1aygxMbJUvrcqVVp0FQ23ta6t2tVVTMALUvrZqV1t1q5YSTqm1r63a1VatgqqufXHVrrjqPDjYta+u2lVXrdUFi3W1L6/alVddhq5U7curduVVt4opYYpb+/qqXX3VOnLBKlDt66sWFVWtL6wRUFSVVdUsOGDdb25z6/+u7fXUWOL2oLaaieJqxqEx736SzUV5NWu1U65hwTADBdZMVFizVj4lVGr3m2wvqqyZ1hsUa/ebbC8qrZmOaIGqNqi1ZqLYmukKPrxNu99ke1FvzVotrWHy2/0m24uSa6bnTVzfzkDVNRPy03X6NUyBCZX1vbp+RH6wtC/kp8v1a1ytRtV9Wd7XFXs8BRMq8MsKv67ar3HBGxX5ZZVfV+4DVAQV+mWlvyv1YzAC5Cdr/V2xH0cPVO2X5X5dwV/j2xcV/GXFX1fx17DGSKjoL6r+FC77E6j7kyj8U7jyT6D0T6L2T7qcv67vcnqphPOg+E+i+k+6oF9lsDmQnqj/E0dCH0AAJBgAcXiNQIACkMAAxMFlAgEOQAIEUEcCYJWXAAogwQJIl/dxoZcADSCBA0hX+HGtlwAQIEEESBf5cbmXABMgAQVI1/krrF2ABUhwAdKl/oqRegAYIEEGSBf7ccGZABsgAQdI1/txzZkAHiDBB0jX/HHZmQAiIMEISJf9ceWZACUggQmo4wSw+EwAFJAgBdShAlh/JsAKSMAC6mgBLEETwAUkeAFpBICr0ASIAQlkQJoC4EI0AWhAghqQBgGBxAlwAxLggPLIxAvQAQl2QHkQfxKAByToAWkgEIg+gB+QAAjUEYTA8AP5CYZAGgsEog+gCCQwAmkyEIg+ACSQIAmk4UAg+gCWQAImkAYEOPoAnECCJ5BGBIHoA4gCCaRAmhIEog+ACiSoAmlQEIg+gCuQAAukYUEg+gC2QAIukOYFgegD8AIJvkAaGQSiDyAMJBADaWoQiD4AMpCgDNRhBix/wBlIgAbS7CAQfQBqIMEaSPODwLIL4AYSvIE64ICjDyAOJJADaYqAow9gDiSgA2mOEIg+ADuQ4A6kUUIg+gDyQAI9kKYJgegD4AMJ+kAaKASiD+APJAAEaaYQiD4AQZBgEKSxAo4+AEKQoBCkyUIg+gAQQYJEkKYLgegDYAQJGkGaMASiDwASJIgEacoQiD4ASpCgEqRJQyD6ADBBgkyQhg2B6APYBAk4QZo3BKIPwBMk+AR1gALLHyAKEoyCNHcIRB+AKUhwCupABawVEkAVJFgFaf4QiD4AV5DgFVQFUT4BYkECWZCmEHj3FwFoQYJakAYRlUI1B4AtSHAL0iyiymFzID6BLkjjCLz9jAC9IIEvSCMJvAONAMEggTBIYwm8CY0AxSCBMUijCbwPjQDJIIEySNMJvBWNAMwgQTNIEwq8G40A0CBBNEhDCrwhjQDTIAE1SHMKvCeNANYgwTVIo4qqgLtEgfoE2SANK3DNBqANEmyDNK7ANRsAN0jQDerwBt6ZC/gGCcBBGloEIgdgHCQgB2lugSMHoBwkMAdpchGIHAB0kCAdpOEFjhwAdZBgHazZBYwcDFAHC9TBGl0ENq4C1MECdbBmF4G9q4B1sGAdrNlFYPsqYB0sWAdrdhHYwQpYBwvWwZpd4MjBgHWwYB2s2QWOHAxYBwvWwZpd4MjBgHWwYB2s2QWOHAxYBwvWwZpdwMjBAHWwQB3coQ4UORiQDhakgzW5gJGDAehgATpYgwtMCRmADhaggyOggwHoYAE6mMLbzQHnYME5mCI7zgHnYME5WIMLGDkYcA4WnIM1t8CRA2AOFpiDNbYIRA6AOVhgDtbYIhA5AOZg+XCD5haByIGeb5APOHScA0cO9IyD95ADhyMHfMxBiE+ji0DkQE86yEcdNLoIRA70tIN83EGji0DkQA88yCceNLvAkQM98iCfedDoAkcO9NCDfOpBkwscOdBjD/K5Bw0uKogoGT35IEAHa3ABESMDzsGCc7DmFjhwAMzBAnNw9/wDLJUw4BwsOAd3nAOuFRlwDhacgzvOAdeKDDgHC87BHeeApRIGnIMF5+COc8BaBQPOwYJzcMc5YK2CAedgwTm44xywVsGAc7DgHNxxDlirYMA5WHAO7h6MgLUKBpyDBefg7tkIWKtgwDlYcA7uHo+AtQoGnIMF52DNLXCtggHnYME5uOMcWH8AdLAAHazBRQUJPQPQwQJ0cB7RHwAdLEAH5xH9AdDBAnRwHtEfAB0sQAfnEf0B0MECdHAR0R8gHSxIBxcR/QHSwYJ0cBHRHyAdLEgHa3JRwV0CDEgHC9LBmlxUkPMxIB0sSAdrclHDZwoYkA4WpIOL8IqXAelgQTq4CK54GYAOFqCDNbgITD8AdLAAHazBRWD6AaCDBehgDS4C0w8AHSxAB2twEZh+AOhgATpYkwtcqWdAOliQDtbkAlbqGYAOFqCDO9CBow8AHSxAB3egA0cfADpYgA7uQAeOPgB0sAAdrMFFIPoA0MECdLAmF4HoA0gHC9LBHenA0QeQDhakgzvSgaMPIB0sSAdrchGY/QDpYEE6WJOLwOwHSAcL0sGaXNRweyUD0sGCdHD3EAaOPoB0sCAd3JEOrF9AOliQDtbkIqBfQDpYkA7W5CKgX0A6WJAO1uQioF9AOliQDtbkIqBfQDpYkA7W6CKgX4A6WKAO1ugioF+AOligDu5QB549AetgwTq4Yx149gSwgwXsYA0v8MoRsA4WrIM1u8ArR4A6WKAO1uiihpuLGaAOFqiDNboI3D0AdbBAHazRBZ67AelgQTpYk4sa7m1mQDpYkA7uSAee+wHpYEE6WJOLwNwPSAcL0sEaXQTmfoA6WKAO1uwiMPcD1sGCdbCGFzXc280AdrCAHazhRQ33ZjOAHSxgB2t4gXMHwDpYsA7W8CIQewHsYAE7WMOLQOwFsIMF7GBNLwKxF9AOFrRDaXyBY68CuEMJ3KGy8MpDAdyhBO5QWXjloQDuUAJ3qCy8y0AB3KEE7lAaX+DcQQHcoQTuUBpf4NxBAdyhBO5QGl/UsG6mAO5QAneoLBz9FMAdSuAOpfEFfuheAdyhBO5Qml/UcOWvAO9QgncoDTBq/P4PADyUAB5KE4waPoquAPFQgnio7r1NGVw6KoA8lEAeqnt3UwazPwWYhxLMQ3Xvb8rgBKgA9VCCeigKb7FXgHooQT1U93RHht9iBriHEtxDUUSDAHwoAT5U9z6nDM4BCpAPJciHovBWFwXIhxLkQ3UPeGRwElEAfSiBPhSHd/opgD6UQB+qe8FThsMAYB9KsA/FYfCmAPtQgn0o7kSI72MAP5SAHyrynIcC8EMJ+KG4EyEOBAB/KIE/FEdECPiHEvxDcSdCHEkAAVGCgCiOiBAQECVf/nQlIDgSofc/yRdAqYgI0Sug5DugNNQgwpEMvQbKew9URITwTVBChJpqEOFIiN4GJV8HpSIiRG+Ekq+EUt1zbjgSordCyddCqYgI0Yuh5JuhNNcgwpEQvRxKvh1KRUSI3g8lQIjKOxHiSAhIiBIkROUREQISYv5Pv0z0S9O+XvR191LR+/vVu3fdVxZ+X727vmm0zMyLTn9fVfXq1e9/3K3qsvu3fer31e9//HF71aj+b2NK/9babr8ndOuxzm89tmuLtB7a75fd+ljXtz7a5+86d2rV/dHu0ej+4PX1jyrRznvH08L2tEjrYfvQbB/3h/3F7qmyemq3rnVOZbVxs0zrW3+5yOqVrV6VGYXievLt9uiu+9KMS51qp/2wmjXapWWHEkey++Su5SzZztLVx7w2zporVSZq6vppOctAZmtCGU3kRhNkBtsMS5V4Rc+f95em/SabZcvScLuT9Xo9jexondTzptk4vZJ9Pc3lHNFXc9i2X+/YPx+2z4dL89WRoDU6WXKP7lkX1l1XXUcx8QbWnZkvldt9qluXKrGnM3H1ceuIq7DuL6OkOvU0z1yUsr/1rb/1VUE1pfX39PFhc35w1KJstfTRytz9lHZXWh+JsUKUdUkUpXn4fnNumu4l2Jb2MrZ7Sruq7z/vn3ZPm/fNU7PbPzqOsXW7myhM3R3X3ikmBFI93tDhw7NjyXLc3Nvt7uyrJXNzcpoctg+b7cOGs+Pz0zfStQNrLrTOqU4LU9v98aE56QjiRFR7PqDRXR3br56cHR1Yno3t7dxsnk7N+fh8ODtO5lanRZXWq/1ic+t2siYQMyutr1ro7wcyIZsLMzmY/ynNdLE204VJQdi0agFx94e5X9uys/6jrcB0f1Bh/uj/59phuz68/qHMH+ZgI992/dD9YaavNp++/mEOVuZgZQ7O0+7K7anZXJpoCK+s8HsdxKv96jrzVGmTRWfr1Gz3x31zuABT68oWaKKkdK/n5rBrTqjLtd1lop6cHgprDivSfLp+uc0StXUP5yZa5EZfhdHX2qQjuVHTmo2a0tIGbRmEWTtgc9oodJ/ue2y+HfWn+6zJ0+osN0m5EV77cOf1ZEzYzU3YLcwfa5OyVEbSiTm945N/mmQlSO2SKb3L7tuq+ntylvItObZbWa4+p7raf7AHXI+1fT3Spj2rw+tHWYW7yop3fRBT5gIVubku5iqYS8YmHeY+HV5X5rqkzV+2b2gklXVhetkr45HRBfW6UP2N0CfoRk1rE3HrxOvrJkW1fUn7mJ2WBO4exBKlzuzeEu/QthOYlFbW9WNOjDRtb0cuyofH3Yfzw0bvWLJyBzugZma8UwWn+1ZVfu1btUDY6tteDWf97Jl4d+i+C6Zr30Vbbreitr2qyoyEy0Qx6r5P7Tdo9l8aJ2GprPuu3ZyY3N252baj/Eh4nNf2MjNLmw51v1+5KKgOdGovzLJUtbed5nkVGFd7TZClSazZOpJ3Muy0+6Zxk/TCCgZlmhSbg+ME2ZP6NXiZmzlRJNcPuFpTtCU5E3Xa95xcQ5SZtPvwYyJsu8voGiuTzwVO0ZU9JaQtzqJ5G9nXOvFCHbZn/ZVvK3Jbw2KiMvULnn76L00oVX1mbCaVxBVs8/W4OTgLf7Znc3MhTAWATcRhTos4jf70mTNAdjnFXNYxnYEExB4tlahE3dfz4cmZMQs77b4qrE68it13ZJ2htLRg1hNkVipsJgbm1EtlfajWCg22gin15Luu2h6861/Y/Rmnjayy/oqljYr5/jVKaC3HczORKaNxs8SjfolnMph2e/U1OzFemSVRu/8hxau2aCNvOXJyFHPeZgBqcwNQ2vQVSAwsQdR9xp42xwTSAetuMj5SYvkaT1aldf1vZau0G/Th+IjSbrvul1gAe+i/s21L3an+jOyom/Mfv71vTut2i601PdsRKfEOcouldp5t1HpV5FVJplBvJGsmtKovhBi9m0UolSY/N+omIxmmPu7390QPP9LU1H2xXa4XrAm+d6OffgpzU5hCBJt5ms3ZcY8hTPFGZWlxQhb6cssVEwrKNFlLHsP2csGMcmVGMDMjmFil2B+Ony/vnprDx8vDu6c223W1TrbWU89df95YF/rA3WPPx4lOCnZEdp5sIlo/9yZOmI+7D67oS+turI02EleubWdoMUb22j9t9ESMIGcNY841TTntEtE9RRuGZf3IpU0yoQUn2xN2WvIq7tPcCqhFnwcnSqP5Jmc+K+BfL6OpCJjKWCJRvRbtQU5hF156WmfuvMwEDU67TL0ZP+GyrlfPSGsTnExpmBNX4p+6z6rqm/zUfVYV5J725KbS5iR9vD2v2XlilbY+PDwfto28knbp/XoFr4NsSkuJHPTwfNmcz/uPh8a9H+wVYGJkPzxfzubbpmD47GwzTwsez8fm4Fx1a/TMXGWCupld027Ztmfgo03LEu/Y46k5P2xOzU7eulZfedqVvpUdvVWi7ZhZX/Rrtr7iXfaR3gyLYSycuLY5nh+dk7AimEk8yjTp93VK71zsidN43i+a+tJAX5A0ZUwuze2dSOliJMRWYyKLl935uC63JvBipI9SPXaoTrt0fVewQlxYCkrcjNESRGfMrCEzV8sEXHMZ0+7rtmdw99nCUKk+bk/NRUqMbRxjEsGeV/dL0H4HjeoJipmgErcZBLEY2flE2nzt9OWLq7BGp0wLcl2PUgjWFFSmKavrB8oqt84zsUAfwzbOrJ6qgDi0sW4kA8rIhEcy0InM7MkmIrEJqtwH1Z4e1mnhfADZWNehL4P2KZNJ9qivfKi+MGr+6GuCPQms0yLZZfNR3jH2zphrHnEdLLO+S1yFy52GtZ0QJlbEP7fJ2NlVhl34S6xR6LXWpq3eAqXZ2Uhi1Pqqi8HP4jrWtmazhEH67W513B+bp/2hWb26/+2PP/4fdrvCFbgfAQA="; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAA7VdXY8bN7L9Kxfy66xXVf3tt9xscBPs3t0gBhYLDAJDltoeYWYkQZJz7Q3y3y+aEltk8RSb3ep9GmHUZB2Sh8XqOiT1++K4/7/T4t3j74vn7W6zeMdF+bDYrV7bxbvFd+1q88Nuffx2OG/3u+/3u3P79bx4WHw5vizeLba7c3v8tFq3pz/DB98+nV9fFg+L9cvqdGpPi3eLxR8PvZllXvd2Tu3qZVy1b65FnLofFofVsd2dVdyK8f2h3Y00fi0y0bjo4J+sSQ1E/0C0Q2nJeV/vdpNW2RvzoN6OGzbF0HP77f3234nQ39yevsPkbr9btyOMus/fYfa8+jzC6O3pcSY9Zq6P7ercJk9AAUEvPRKSw9e/bj5F6ep+fy9bg7piZPWAKWaeVqcnbQhDY87To0x6I7jdbeFwgbZdnpxu6uOX7cvmb6uP7Uu7+en5Nc1qWGgmALtP+wkILqWmQ2i/no+rdWKP3x6+x+BhtUtkb//s3e37brf5YZThoNR0CC+XofphTE8HZWYwn958WWSccdf5ta9x5+d8f7fzk3VFnZ8LTDFzatfH9qy6v8Cc9/x0s+1unW7z9vB0g4cvH1+267/qYUloVha5w/hx+9vq3I6zLsuMMi/C6ON29bL9d/uzbVHqWINy02Fs2qlAlJJz9Ejfy2O7xC04T5+MhKIVnQ5m+3rYH8/JANzHpxv93O7a4wX8z6vtMc10WOieIThufxtnXhaZbrzdrVeHZC9oHr2npcnG7KPjjDmL4s/H9v3T6thuFDq539+7KAZ1xRZFD5j+9ppm5zlCfsWQ20m/tOvtYdvuztd3sJ9Xx9XrCZnGT6Z33NGWV4YjUv8bURa3VmmKvvyPRXEpMofxU7vbtMfoEhQDEhafA9RWeTOKIdnK96LzafOn7elP291Te9ye2810OIfT81g0lyIzgXFnyXvT4YNTBDw2YX5EaaGZeAOLY1qg1kSJOhaLW+puCC3OGKjG20iyYIRZbTaodkdNhRFAlHmg4hgzCeIw3Bnw/fbw1B7ff9meW53/wUPp7H9u4SjjGt9cnsZjHCLVTG4+jTFpnr7T5KpdwfBBsXl9fLxRd+SSkrT/AYVkijpytzIyRRVJNtp+7d42RpjtC6TNxjiQpqKC1bitR3X+dgCrZHw4tZVu0O+kz28l3Apri0ZZPrqRhAS2AjImO8uxxATGA1LebVwnKOrnceRUAeBF4n27evmlPR32uxPMNimPphMKZ3hj1b6JJHg15OPYHLUe4/Ww+ew29Y0adltGflsdt6uPL1Zp2/yJop1YFkV2G7EPHzp/MVTXm/6xiD630Trru/ZEXP/P+jXRzFu3QMzg2yss3S4X5Ti7fYE77H7/tFo/rXj58/7lG2XLItU8KHcHih/M9P7H7uVbqn2vxDjLcnUSFL2sSdfC0RnON2f236tT+8PxuL8lxK5F/tx/E62roBue9X53Oh+/rM+Dtb3xH8XdcIOGof+lS11h7LevZgEvqktC76DT4Du5Ra0Z8pGZmgOrTWxWgFprXp+11hrnPzBT00CliQ0TeHGzftippLt9NUtTRHVJjXDQKfCN91Hw376bpwGivrQWOABxE348PCuM6r+ZBb5fWxL4GzQM/afdb6uX7ca8SOImBE/M0hRca1KTQsgwWurUcxQsmf/PEyu5VQ2FShc4ypr94/Pm0/unFRdlmpW3XoGIwYFY4VpNVufj7F4K3G23IB5n91JglF0Zofi0uAQol6IxQri8al8xr7r/z8Qrp6pBXhk4Sj//fX/+7nTaft61Q4htR/slIiYHRvgvT8/t689clHFqAwS45L1IsjqPk11FIkvei6RgitNfRSJL3onkfbs+cFE+07QhwsXvxPQvLgpqpgECZe9Fk+f1tLEKSk5H8uO3j8ftpm/fX799bI9VWSei0UuPQhR4Uc8JXr2oKZr6lve/7em0+tz+bfu6Pf/SrtZP7QbHH9qDs4Qh0cqTohG1HbjZf9+f3385dAGl1t7giVkaimtNamEIGTftH4d2h5vUfzNLU/zakppwg4ahd7k3DL3/Zhbofm1J0G/QNOjRV9r387/QgioTW5LwMvvPLrRfdVIIbo/4fpYGoTqTWiTB4iaFaVBruP9mlmb4tSU14AZteNOTYiZ6WmegdnlSRzExfERnwE54PEexlHIuZ8CWPJOjWBo+jBPaGXUQR2PF6BM4oL0+uUWu3TF8+WYucju1pZL7Cm0UuV0zcXLHa4+Q2zWRQO64nSi5XUtJ5I7bipDbtZRA7sDOVHJ7rEggd0zqhO0PUpWetOJnFruvZkxU9tWNyFMadOmEl4YijB+uX6O8NDLE+WFLOumlrWHWD1vTaC9tDfEeWppE/IAfI906brNDdUeYDow7381CdllfEttdgMqwfXD3lqnGPsg9ZVcPcTjuz+363G7+K+YyMAwumXK8x03FocC4w6qzzU23Kna33W3V2+mmmg02uE2wG84bvIdJpxksNDMmdb/WACxQbjZk3kYpFceoPVIJVr0dUqrVUZujUpzA6rBNcAKXp+Z1Am7jP5za85dDAhD73KxQPBU8kpnvNevwmXm0cKXeNDkcAE8PdFTT23RHNAIBONs6iEQ53zoTInnsdRAOOvo6ExZ8InYQkX4qdi5c+LDsMDD9wOxMyD4cjtswiFAB2ccnepExwFCYoeNS4o05YKWeO06Yh9EDvzMhjB5JHsQ4eCx59n4MjwiP6Eh8SPg/0JMTUA4fZp4JZ3jGeXhxguecZ8KjHX8eRBU7Aj3bmKKT0QljqZ2OngmXf2g6ZQ1dwWju/v4ZhSM8U32H+w+CSby5wgflPTNjMBnWOyKY9IGPDSaB6dHBZBKCwWASIJkcTCYhigeTAM60YDIJS0owCRDdE0ym4UoJJhGwe4LJJGSxYBIAmiWYTAOmB5MI1wzBpAZrWjAJ5+GdYVoSwhHBJMA4QzA5sh+HwrRoR04N0kb35ASUcwSTSTiHgkm0OE0MJpPwpAWTANV9wWTimA4Hk3AspweTSbhiwSReQ0cHcYn9MwrHlGBSdf9BMIn3x/qgvGdmDCbDekcEkz7wscEkMD06mExCMBhMAiSTg8kkRPFgEsCZFkwmYUkJJgGie4LJNFwpwSQCdk8wmYQsFkwCQLMEk2nA9GAS4ZohmNRgTQsm4Ty8M0xLQjgimAQYZwgmR/bjUJgW7cipQdronpyAco5gMgnnUDCJFqeJwWQSnrRgEqC6L5hMHNPhYBKO5fRgMglXLJjEa+joIC6xf0bhmBJMqu7fPZOrq9szi9pTtOxJEvYdyvWwveAmes0qvIT+Pturl88/rk5Pg6Zvz01cphPkzFO3deKn4c53HpwTjH5Vv8oCeUv/fTa1O/s187Hr+mdE4l7KlwRlzKV8CbKPuFteg4Au8L/XsnetvG44uEp+lhaH9/oPNB1f6X8fFuWCfw1J5G7/mXAkdYh+yf99KD6sn9r1808pvsF79D/nM9EWuwDKXTvsEnoFb7AL3fZ9++sGFdGIEDqz/jlF9pykdt4hcg7bG4o7eqtT446I7YG4ozc9V9wRU74G4o6b6DVX3BHTFiK+5caCCXFHxGZi3NGbvzPuSEUSiTswlAlxR0whiC95N2lg2loXtRxb5BzDU1a34RYPxh2y6ZPjjgiWtLijR3Jf3JGCI6lD7oo7IiiG446bk5ov7oj5zEjccYMyR9wR65Vo3OG47VniDl08i2hmM0tlUxSyScLYHXrYsL2huKO3OjXuiNgeiDt603PFHTGRZCDuuOkjc8UdsTR0xLfcWDAh7ojYTIw7evN3xh2pSCJxB4YyIe6IJZPjS94tizxtrYtaji1yjuEpq9twiwfjDtn0yXFHBEta3NEjuS/uSMGR1CF3xR0RFMNxx81JzRd3xHxmJO64QZkj7oj1SjTucNz2LHFHRGexF4yFUOw380QdXm1pQUcPbUTM4ZuJXIcwWLv5M1D/9ZmJFiJbeYSdhJ/OHLSmbdMRpoZ+MXPQTnwLjrCW9kOZwzbj22uk0bTfxxy0+mE1ZMk8oU/dcdY+Dlr7OKM1tPtG2hvaczNkcezGmmBWJP+y56D1pE0zwv6o3xYd0X59q4naAcO/4jmqB5IRjPsl0UEMQxtHhPXU3/JMaHtsU0jQ5pSf8By0qW/akYvY4I+lDtrCm0tCzx/54c6EPkywEf9xUOiVnGDlX9939+PsUZ/dvpolXBHVJcUrDjrFqT4PA4/+LuiwBe9Gas1E9ELqYRvXN6fu0tpBU/6zUy2uXj7vj9vzUxikSnvuk1OtfekuhD0NmuofG7bz68Niu9u0Xxfvfl/81h5P2/1u8W7Bb7O3zeJh8WnbvmxOi3ePNuRc719fu0oeFpv9+ov5+Ov1sX+2HQW7hy9P/3m5eHhcPhT8Nq9+/fXh0ZY1/zf/sFXc/mPK0eLhkR5yepvXuVeQgoLkFeTFwyOjghwUZK9gtnh4zADSLCiXeeXyxcNj/sDN26rOvIJ5UDD3ChaLh8cCIS2CgoVXsFw8PJaoYBkULL2C1eLhsUIFq6Bg5RWsFw+PNSpYBwVrr2CzeHhsQKc2QbnGH/6l1qsUMocEdQx3lpA8gD0+fbr89iNh5oUMIp9C1DGDIPsopBH5PKKOHZTBwiGVyOcSdQyhHBYO6UQ+n6hjCUEqUkgp8jlFHVMI0pFCWpHPK+rYQpCSFFKLfG5RRxmCtKSQX+QTjDvOEKImhwRjn2BMGjk55BcL92T80/Iha97mlTAMPJTPL+4YwwQLh/xin1/cMYYZFg75xT6/uGMMZ7BwyC/2+cUdYziHhUN+sc8v7hjDBSwc8ot9fnHHGC5h4ZBf7POLO8ZwBQuH/GKfX1lHGa5R4SwkWOYTLOs4ww0sHDIs8xmWdZzJIMOykGGZWATNKggZloGF0GdY1nEmgwzLQoZlPsOyjjMZXIBDgmU+wbJSm5BZyK/M51fWMSbLH/LqbVayXzjkV+bzK+sYkxUIdEivzKdX1hEmK1HZkF2Zz66840tWPeTZ26bxC+chu3KfXXnHl6wGhvOQXLlPrtyQq0G9lYfkyn1y5R1d8iUsHJIrF2GWibMIoQaBls+tvKNLzqhsyK3c51ZuuIV4mYfcyn1u5R1b8hyVDamV+9TKa72nQ27lPrfyRu/pkFy5T67CxF6I1EXIrcLnVmGWxhIZLkJyFT65io4ueQULh+QqfHIVhlw1LBySq/DJVRhyoWigCMlViDC+0F5VChDI++QqSu1tpQjJVfjkKjq+FHCMi5Bdhc+uouNLgWZTEZKr8MlVdHQp0GwqQm4VPrdK3XGVIblKn1yl+lJYhtwqfW6V6nthGVKr9KlVZmpPlyG1Sp9aZceWAvmPMqRW6VOrNK+IyH+UIbVK8ZJY6j0N3hN9bpWGWwVsccit0udWabhVQsshuUqfXKUhF/QBZciu0mdX1fGlgD6gCtlV+eyqOsIUyAdUIbsqn11VR5gSMqQK6VX59KoytbOrkF6VT6+qY0yJJnIV0qvy6VV1jCn5gbO3VeHHTVXIr8rnV2WyEIjXVUivSuQhKt0wSEX49Ko6wpRoUlQhuyqfXVWjGw7ZVfnsqju+lGhdrENy1T65alIN1yG7ap9dtWEXihTrkFy1T6460w2H5Kp9ctWGXBUyHJKr9slV6+SqQ3LVPrlqQy4UotYhuWqfXLVOrjokVy0SXYZcyAnUINXlk6vWyVWH5Kp9cjUdXyroQZqQXY3ProZUj9uE7Gp8djUdYSqClkN6NT69mo4wFcPCIb0an15Nx5gqg4VDfjU+v5pC77CQX43Pr6ajTAVf+pqQYI1PsKbSezskWOMTrOk4UyEn0oQEa0QytaNMBYPrBiRUZUbVMAyurJfv/OLO/67lO9pUcHG9fCfLi8Tq0vAMTa3LV7K4SK0uO+7USEq4fCWLi+TqsmNPjdbJy1eyuEivLjv+1CjmvXwli4sE61Ln2+U7WV7kWJcdiWq02F6+ksVFlnVZq57p8p0sLxKty45KNVpyL1/J4oJ5Jj+vmEfp/CCf3zGpRnOGYEJfEM8k6TXzgHkyqW/y9DVafgll9WVa32TqNfOAejKzb5L1NVqECaX2ZW7fpOs184B6Mr1vMvY1WooJ5fdlgp8i1EMpfpnjJ/19gFCWX6T5iSPcA5l+Eql+0nP9BJL9JLL9ZBL4WFkB6X4S+X4yKXysrYCEP4mMP5kkPlZXQMqfRM6fTBof6ysg6U8i608mkY/fxgjk/Ukk/on1QI5A6p9E7p9MOl8ZOsA8kf0nk9BXhg4QT+T/yaT08dABAYCEAkAmqY+HDkgAJDQAMml9PHRABCChApBJ7OP3WQI6AAkhgLKIzwNSAAktgEx+Hw8dUANIyAFkUvx46IAgQEIRIJPkV4YO8E5oAmTy/MrQAd4JWYBMql8ZOsA7oQyQSfbXMMwC0gAJbYBy/UWVgDxAQh8gk/JvYJgGBAISCgFdJAIY4hLQCEiIBHRRCfByAXQCEkIBXZQC7LOAVkBCLCAjADQwzARyAQm9gIwG0MAwEygGJCQDMioA3rsANAMSogEZHQDvXgCqAQnZgIwU0OANDEA5ICEdkFEDGmUPA6CeUA/ICAL49YiAfkBCQKBCT5UQkBBIaAhUqDuBCKgIJGQEMtIA3hlAQEkgISXQRUuA0i0BNYGEnEBGIcD7AwgICiQUBTIqAd4iQEBUIKEqkFEKmgK9VhMQFkgoC2TEgga7baAtkBAXyAgGeJcCAX2BhMBAF4UBblQgoDGQEBnI6AZ4rwIBmYGEzkBGO8DbFQhIDSS0BjL6Ad6xQEBuIKE3kJEQ8KYFAooDCcmBjIqA9y0QEB1IqA5khAS8dYGA7kBCeCCjJeDdCwSkBxLaA1WR/ApQH0jID1RFVl6gQJCQIMioCtj9AA2ChAhBRldQ3A+QIUjoEGS0BcX9ACmChBZBRl5Q3A9QI0jIEWQkBsX9AEWChCRBRmVQ3A8QJUioEmSUBsX9AGGChDJBRmxQ3A/QJkiIE2QEB8X9AH2ChEBBRnNQ3A+QKEhoFGR0B8X9AJmChE5BRnpQ3A9QKkhIFWTkB8X9ALWChFxBRoFQ3A8QLEgoFmRUCMX9ANGChGpBRohQ3A/QLUgIF2TECCU9C7QLEuIFRdQLAvIFCf2CGn3HLhAwSCgYZEQJxf0ADYOEiEFGl1DcD5AxSOgYZKQJxf0AJYOElEFGnVDcDxAzSKgZZAQKxf0APYOEoEFGo1DcD5A0SGgaZGQKxf0AVYOErEFGqlDcD1A2SEgbZNQKxf0AcYOEusFGrVA2awJ1g4W6wUatwO6HgbrBQt1gI1dg98NA3mAhb7DRK7D7YaBvsNA32AgW2P0wEDhYCBxsFAvsfhgoHCwUDr4oHFBFZKBwsFA4eKkn+xhIHCwkDl6qyT4GCgcLhYONZIHPDDCQOFhIHGwkiwbutmEgcbCQONhoFk2Ny6NN5YJ+kWMLDDQOFhoHR04uMBA5WIgcHDm8wEDkYCFycOT8AgOVg4XKwZEjDAxUDhYqB0dOMTCQOVjIHBw5yMBA5mAhc3DkLAMDmYPlaQYjWzQN5A860CBPNBjdAuduGB1qCE41sJq7YXiuQfCP9X0EjI42yLMNrCecGZ1ukMcbWE04MzrfIA84GOlCcR/oiIM842CkC8V9oFMO8piD0S4U94EOOsiTDka8UNwHOusgxA426oXiPoDawULtYCNfKO4DyB0s5A42+oXiPoDewULvYKNfKO4D6B0s9A42+oXiPoDewULvYCNgKO4DCB4sBA82CobiPoDiwULxYCNhKO4DSB4sJA82GobiPoDmwULzYCNiKO4DiB4sRA82KgbeScRA9WChenBE9WCgerBQPThXcy8MVA8WqgcbFUNxH0D1YKF6sFExFPcBVA8WqgcbFUNxH0D1YKF6sJExFPcBZA8WsgcbHUNxH0D3YKF78EX3wPQDwgcL4YONkqG4D6B8sFA+2CgZivsAygcL5YONkqG4D6B8sFA+2CgZivsAygcL5YONkqG4D6B8sFA+2EgZivsA0gcL6YONlKG4DyB9sJA+zI9waO4DSB8spA82UgYtkWrJQPpgIX1woW9yYSB9sJA+2EgZ2H0A5YOF8sFGyaAlUh0ZKB8slA8u9dwLA+WDhfLBpZ57YaB8sFA+uNRzLwyUDxbKB5d67oWB8sFC+WCjZNASya4MlA8WygeXl+gPbc9joHywUD7YKBk4d8NA+WChfLBRMrTztYB+Qvlgo2QoR2yB8sFC+WCjZCinbIHywUL5YKNkKLkboHywUD64iuRegPTBQvrgKpJ7AdIHC+mDL9IHzh0B6YOF9MFGylByN0D6YCF9sJEylNwNkD5YSB9cXdwf2t/JQPpgIX1wFXF/QPpgIX2wkTLwEVwG0gcL6YPri/9DG0QZSB8spA+uLxdGoB2eDKQPFtIHGymDlmiLJgPpg4X0wfUl/EN7LBlIH/Z/5taW39rjubue1dze8vi4+PDhcnvO74sP1ytditLeHPP7oqwX737/42HR0PVv1f3943ali/mvtWS+60x318TdKuw8ZV9j5wzTqujuq7xV0mS3OrqdIKZUl1a4fMiuQLulPqn6jz7CzEVYplVhLve8XP/r4GycmtjizCoLL0+r29xE59TqjEm3EcGU6iTBy4emvFZfJo6PuR/TqX7pVJ9zWh2XH850KincEWosxspiTByY6wWhTr25W68dcGbbtY3t2sRhMxdHdxdpOiZqZ9CoN2E5ladBX7Urr9bcqbXIrt0woq52t+6uXNrud+v97tx+9XjmjNgyuUa/1YUzYOV1mKosvbLduT1+Wq095+HMo9SaTsT157VHpaJykFkmUZNaIRelrNAZispOH04jzOrl85O59dzhS+XypXdGdpLnaZPcudvLdUVu3XXaXPy4OrXt8djd5XarqSSnzWmIzA3e13uTt88+LseH05XM3H/IbB/kaQ7IM2SuCncsuZ4+t5bsh8zOzrxOsrR+Wq2fVrw87F++UdapUA4rHF9dUVp128NTezQuxK2pblzMaRPSqeqwOq5eT57vcOZmMbq+U7t6Obanw3538pd2p2vLNEp4FwU65HLoUBVX32F9yHXG1tehqq8sqa/P1dfnajuzl3Yds1OpO1Jz/ZDbD6X9YB/mfh7bJSazD+dXy9S73cr+xxrtBMHrtLXUsqW61+3LhyqRY8d2dW6j7trxPz3+wsK2jc3SPNzF3LFdbw/bdncG1hp3siZOyUutp3a3aY+oSnKrTPOca6+GwlnHE4PA6+2azvLiNKwf7X6FsMTqxObrAKYBNXZCB+rMluSKuqtUn9tvB3OVqgPcWa/78baLLtmZ0an0V+Bpq6dnL2yA0+OJVHbuvw2rc3xSneaTnOqul1Sb60BvdbK72tlxLO3I1jbIW9r1JdFNu3bNTcbSrNOU3n2Udlxq61ka6wjKtJm56X4O+MBF+fS8+XS6/trvzWrlRPGNbWyRtsRfqs7q/Fq1+UE/p2qnH2nZvyAkjpKpu2C61m1+tMepu3br7h1pIqG6uk/tuuuVZ1L6xV09lyP64ysXBTW40tp9p1kmTidTaZ7XuCNq1wcu09bP1g+jcmdKJjrmdrf2PIkz0vl1oO0bYeKb6/ViZKdOp2GZXTLtu3+38/A6C+1KWaW5b2MndCPOLEiMb6NLa+6wJ/H1ut2tT+amfMcjOF3AtgsKG3RU1iM11iOVicivvz7ihLfua7Lt2f6D7X1ODPrar91d2t4y6/C+uLq2Mo3+l8rCAXMYVyd2sKlpv3vxvG7pQKv6oCcV2/XXZJye9BIDtiftB7vKduLbCAOXm53d9zGHrlynLT+2rq6KYPzdVI4NWPoPNqjhIs2SvTEehBzszAv71kSlZXRtDS1tP1VpjO7eheXkIdfX2ih6aSNttuTO04ZaWSScCdrPwmWaw1PWTCeYbOy841EY5UrpRIxN/1qRNpOfDs8g5HLfGxLbevsBHHeAnBHiIm3h6Wu6LLPP3z62x6rTgpwV0X3RWKatCn4Syl0Pr9S0sd6VSJmlrP0H2cRcd4736qht2d6tNLYW+3LJ9n2Lc8ueIs0zXH6vQEaQzsjY7AeVFo995WUbLnFiBkYmQzJnElvciZkPmZkmN3qxXdB/sME3J77bbXe/rV62G5O5CGnroE6ME0XCO3fWnMKOaWJe7XnzyedY5ZDf8iIxHd3VhfKcTgPTSCQmZO6sAjanTYn+8bl9Fe1zJpGVAijRNXaVoQaSq2OkeTAxQzIHVa9/VKm99U2uMW5CzPoBS4z+zTFLa/Q18wgWZ/dVx86I/oP1RFykDVRvJgxd3Nc166D6D9atceK74Wt76n674WX7uj0f29X6qd0EU7J2s6rLtAXAPO+tIm6QXKaxYrffrVs5mK7EaMfQBt29N80SUe7Pq9Np+3nX+pPCIUyT5oN2+/Ppy8HEwKAD3WhzmUbj/aHdeYuG032XIvYNo889JEarXc0hRPfVgtICyMOxPT2tju1Gzl5XyUnzlbcMT/By5cqr/ZptV/HKUqAPmRJz04fTs+dTHTefX9mU2J19kihA7g6ZDTLsaxXZzDf14WPim1YseVs4k6xII66sLtQTMoca2chKJTOcyZuYse6rgsm43OnjRHm0Ezg8z+QQ/zqxrkNT9otrWqu7msOJ5b6zUdoQX37iMOCTG4fbOW+xUmV9oN1vwWXaLFbT9oXTt4nhrlcXUKacvk4MyC41ylF3fEJizHmpB3IocxbuPLXPtER37a7OlMrIeJ7byyJcR7m0w22VMrJZYU7M3A5kuXN3ubZGrS0r01Fjg7MybYqcV58lrZ0Os76x95Z97iHR78j9SN1GLafv0jrG/piVW427yaNOm8TmHWfVJR5DkrihIqWFKl9NGnMvhqnbSeeoEQlV/fqwOGwP7ct21y7ePf76xx//D5Gvoamj8gAA"; \ No newline at end of file diff --git a/core/docs/classes/Aes128Gcm.html b/core/docs/classes/Aes128Gcm.html index d710c1049..7ae5fd687 100644 --- a/core/docs/classes/Aes128Gcm.html +++ b/core/docs/classes/Aes128Gcm.html @@ -4,17 +4,17 @@
import {
Aes128Gcm,
CipherSuite,
DhkemP256HkdfSha256,
HkdfSha256,
} from "http://deno.land/x/hpke/core/mod.ts";

const suite = new CipherSuite({
kem: new DhkemP256HkdfSha256(),
kdf: new HkdfSha256(),
aead: new Aes128Gcm(),
});
-

Hierarchy (view full)

Implements

Constructors

Hierarchy (view full)

Implements

Constructors

Properties

id: AeadId = AeadId.Aes128Gcm

AeadId.Aes128Gcm (0x0001)

-
keySize: number = 16

16

-
nonceSize: number = 12

12

-
tagSize: number = 16

16

-

Methods

keySize: number = 16

16

+
nonceSize: number = 12

12

+
tagSize: number = 16

16

+

Methods

+
diff --git a/core/docs/classes/Aes256Gcm.html b/core/docs/classes/Aes256Gcm.html index 0d7077292..a159ea9a9 100644 --- a/core/docs/classes/Aes256Gcm.html +++ b/core/docs/classes/Aes256Gcm.html @@ -5,17 +5,17 @@
import {
Aes256Gcm,
CipherSuite,
DhkemP256HkdfSha256,
HkdfSha256,
} from "http://deno.land/x/hpke/core/mod.ts";

const suite = new CipherSuite({
kem: new DhkemP256HkdfSha256(),
kdf: new HkdfSha256(),
aead: new Aes256Gcm(),
});
-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

id: AeadId = AeadId.Aes256Gcm

AeadId.Aes256Gcm (0x0002)

-
keySize: number = 32

32

-
nonceSize: number = 12

12

-
tagSize: number = 16

16

-

Methods

keySize: number = 32

32

+
nonceSize: number = 12

12

+
tagSize: number = 16

16

+

Methods

+
diff --git a/core/docs/classes/BaseError.html b/core/docs/classes/BaseError.html index bf9596636..56b3ecf39 100644 --- a/core/docs/classes/BaseError.html +++ b/core/docs/classes/BaseError.html @@ -1,7 +1,7 @@ BaseError | @hpke/core

Class BaseError

The base error class of hpke-js.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/CipherSuite.html b/core/docs/classes/CipherSuite.html index 923e38eac..11170a893 100644 --- a/core/docs/classes/CipherSuite.html +++ b/core/docs/classes/CipherSuite.html @@ -39,7 +39,7 @@
import { Aes128Gcm, HkdfSha256, CipherSuite } from "http://deno.land/x/hpke/core/mod.ts";
import { DhkemX25519HkdfSha256 } from "https://deno.land/x/hpke/x/dhkem-x25519/mod.ts";
const suite = new CipherSuite({
kem: new DhkemX25519HkdfSha256(),
kdf: new HkdfSha256(),
aead: new Aes128Gcm(),
});
-

Hierarchy

  • CipherSuiteNative
    • CipherSuite

Constructors

Hierarchy

  • CipherSuiteNative
    • CipherSuite

Constructors

Properties

Accessors

aead @@ -53,32 +53,32 @@

Constructors

Properties

_api: SubtleCrypto = undefined

Accessors

Methods

  • Returns Promise<void>

Properties

_api: SubtleCrypto = undefined

Accessors

Methods

  • Decrypts a message from a sender.

    +
  • Decrypts a message from a sender.

    If the error occurred, throws DecapError | DeserializeError | OpenError | ValidationError.

    Parameters

    • params: RecipientContextParams

      A set of parameters for building a recipient encryption context.

    • ct: ArrayBuffer

      An encrypted text as bytes to be decrypted.

    • aad: ArrayBuffer = EMPTY

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A decrypted plain text as bytes.

+
diff --git a/core/docs/classes/DecapError.html b/core/docs/classes/DecapError.html index 2a2b3f5d6..485822eb4 100644 --- a/core/docs/classes/DecapError.html +++ b/core/docs/classes/DecapError.html @@ -1,7 +1,7 @@ DecapError | @hpke/core

Class DecapError

decap() failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/DeriveKeyPairError.html b/core/docs/classes/DeriveKeyPairError.html index 929de4369..44acde31b 100644 --- a/core/docs/classes/DeriveKeyPairError.html +++ b/core/docs/classes/DeriveKeyPairError.html @@ -1,7 +1,7 @@ DeriveKeyPairError | @hpke/core

Class DeriveKeyPairError

Key pair derivation failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/DeserializeError.html b/core/docs/classes/DeserializeError.html index 0a6fada6a..e7b5cd920 100644 --- a/core/docs/classes/DeserializeError.html +++ b/core/docs/classes/DeserializeError.html @@ -1,7 +1,7 @@ DeserializeError | @hpke/core

Class DeserializeError

Public or private key deserialization failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/Dhkem.html b/core/docs/classes/Dhkem.html deleted file mode 100644 index 91bcfd8a5..000000000 --- a/core/docs/classes/Dhkem.html +++ /dev/null @@ -1,77 +0,0 @@ -Dhkem | @hpke/core

Class Dhkem

The KEM interface.

-

Implements

Constructors

Properties

encSize: number = 0

The length in bytes of an encapsulated key produced by this KEM (Nenc).

-
id: KemId

The KEM identifier.

-
privateKeySize: number = 0

The length in bytes of an encoded private key for this KEM (Nsk).

-
publicKeySize: number = 0

The length in bytes of an encoded public key for this KEM (Npk).

-
secretSize: number = 0

The length in bytes of a KEM shared secret produced by this KEM (Nsecret).

-

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    -

    If the error occurred, throws DecapError.

    -

    Parameters

    Returns Promise<ArrayBuffer>

    A shared secret as the output of the decapsulation step.

    -

    DecapError

    -
  • Generates an ephemeral, fixed-length symmetric key and -a fixed-length encapsulation of the key that can be decapsulated -by the holder of the private key corresponding to pkR.

    -

    If the error occurred, throws EncapError.

    -

    Parameters

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    -

    EncapError

    -
  • Imports a public or private key and converts to a CryptoKey.

    -

    Since key parameters for createSenderContext or createRecipientContext -are CryptoKey format, you have to use this function to convert provided keys -to CryptoKey.

    -

    Basically, this is a thin wrapper function of -SubtleCrypto.importKey.

    -

    If the error occurred, throws DeserializeError.

    -

    Parameters

    • format: "raw" | "jwk"

      For now, 'raw' and 'jwk' are supported.

      -
    • key: ArrayBuffer | JsonWebKey

      A byte string of a raw key or A JsonWebKey object.

      -
    • isPublic: boolean = true

      The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

      -

    Returns Promise<CryptoKey>

    A public or private CryptoKey.

    -
diff --git a/core/docs/classes/DhkemP256HkdfSha256.html b/core/docs/classes/DhkemP256HkdfSha256.html index f15b44b4f..4f5a25669 100644 --- a/core/docs/classes/DhkemP256HkdfSha256.html +++ b/core/docs/classes/DhkemP256HkdfSha256.html @@ -5,7 +5,7 @@
import {
Aes128Gcm,
CipherSuite,
DhkemP256HkdfSha256,
HkdfSha256,
} from "http://deno.land/x/hpke/core/mod.ts";

const suite = new CipherSuite({
kem: new DhkemP256HkdfSha256(),
kdf: new HkdfSha256(),
aead: new Aes128Gcm(),
});
-

Hierarchy

  • DhkemP256HkdfSha256Native
    • DhkemP256HkdfSha256

Constructors

Hierarchy

  • DhkemP256HkdfSha256Native
    • DhkemP256HkdfSha256

Constructors

Properties

Constructors

Properties

encSize: number = 65
id: KemId = KemId.DhkemP256HkdfSha256
privateKeySize: number = 32
publicKeySize: number = 65
secretSize: number = 32

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    +

Constructors

Properties

_prim: DhkemPrimitives
encSize: number = 65
id: KemId = KemId.DhkemP256HkdfSha256
privateKeySize: number = 32
publicKeySize: number = 65
secretSize: number = 32

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    If the error occurred, throws DecapError.

    Parameters

    Returns Promise<ArrayBuffer>

    A shared secret as the output of the decapsulation step.

    DecapError

    -
  • Derives a key pair from the byte string ikm.

    +
  • Derives a key pair from the byte string ikm.

    If the error occurred, throws DeriveKeyPairError.

    Parameters

    • ikm: ArrayBuffer

      An input keying material.

    Returns Promise<CryptoKeyPair>

    A key pair derived.

  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    +
  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    +
  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

  • Generates an ephemeral, fixed-length symmetric key and +

  • Generates an ephemeral, fixed-length symmetric key and a fixed-length encapsulation of the key that can be decapsulated by the holder of the private key corresponding to pkR.

    If the error occurred, throws EncapError.

    Parameters

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    EncapError

    -
  • Generates a key pair.

    +
  • Generates a key pair.

    If the error occurred, throws NotSupportedError.

    Returns Promise<CryptoKeyPair>

    A key pair generated.

  • Imports a public or private key and converts to a CryptoKey.

    +
  • Imports a public or private key and converts to a CryptoKey.

    Since key parameters for createSenderContext or createRecipientContext are CryptoKey format, you have to use this function to convert provided keys to CryptoKey.

    @@ -65,14 +65,14 @@
  • isPublic: boolean = true

    The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

Returns Promise<CryptoKey>

A public or private CryptoKey.

  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    +
  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

  • Serializes a public key as CryptoKey to a byte string of length Npk.

    +
  • Serializes a public key as CryptoKey to a byte string of length Npk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

+
diff --git a/core/docs/classes/DhkemP384HkdfSha384.html b/core/docs/classes/DhkemP384HkdfSha384.html index 743a4137a..c4b76b183 100644 --- a/core/docs/classes/DhkemP384HkdfSha384.html +++ b/core/docs/classes/DhkemP384HkdfSha384.html @@ -5,7 +5,7 @@
import {
Aes128Gcm,
CipherSuite,
DhkemP384HkdfSha384,
HkdfSha384,
} from "http://deno.land/x/hpke/core/mod.ts";

const suite = new CipherSuite({
kem: new DhkemP384HkdfSha384(),
kdf: new HkdfSha384(),
aead: new Aes128Gcm(),
});
-

Hierarchy

  • DhkemP384HkdfSha384Native
    • DhkemP384HkdfSha384

Constructors

Hierarchy

  • DhkemP384HkdfSha384Native
    • DhkemP384HkdfSha384

Constructors

Properties

Constructors

Properties

encSize: number = 97
id: KemId = KemId.DhkemP384HkdfSha384
privateKeySize: number = 48
publicKeySize: number = 97
secretSize: number = 48

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    +

Constructors

Properties

_prim: DhkemPrimitives
encSize: number = 97
id: KemId = KemId.DhkemP384HkdfSha384
privateKeySize: number = 48
publicKeySize: number = 97
secretSize: number = 48

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    If the error occurred, throws DecapError.

    Parameters

    Returns Promise<ArrayBuffer>

    A shared secret as the output of the decapsulation step.

    DecapError

    -
  • Derives a key pair from the byte string ikm.

    +
  • Derives a key pair from the byte string ikm.

    If the error occurred, throws DeriveKeyPairError.

    Parameters

    • ikm: ArrayBuffer

      An input keying material.

    Returns Promise<CryptoKeyPair>

    A key pair derived.

  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    +
  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    +
  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

  • Generates an ephemeral, fixed-length symmetric key and +

  • Generates an ephemeral, fixed-length symmetric key and a fixed-length encapsulation of the key that can be decapsulated by the holder of the private key corresponding to pkR.

    If the error occurred, throws EncapError.

    Parameters

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    EncapError

    -
  • Generates a key pair.

    +
  • Generates a key pair.

    If the error occurred, throws NotSupportedError.

    Returns Promise<CryptoKeyPair>

    A key pair generated.

  • Imports a public or private key and converts to a CryptoKey.

    +
  • Imports a public or private key and converts to a CryptoKey.

    Since key parameters for createSenderContext or createRecipientContext are CryptoKey format, you have to use this function to convert provided keys to CryptoKey.

    @@ -65,14 +65,14 @@
  • isPublic: boolean = true

    The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

Returns Promise<CryptoKey>

A public or private CryptoKey.

  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    +
  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

  • Serializes a public key as CryptoKey to a byte string of length Npk.

    +
  • Serializes a public key as CryptoKey to a byte string of length Npk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

+
diff --git a/core/docs/classes/DhkemP521HkdfSha512.html b/core/docs/classes/DhkemP521HkdfSha512.html index c85186228..410b0b04b 100644 --- a/core/docs/classes/DhkemP521HkdfSha512.html +++ b/core/docs/classes/DhkemP521HkdfSha512.html @@ -5,7 +5,7 @@
import {
Aes256Gcm,
CipherSuite,
DhkemP521HkdfSha512,
HkdfSha512,
} from "http://deno.land/x/hpke/core/mod.ts";

const suite = new CipherSuite({
kem: new DhkemP521HkdfSha512(),
kdf: new HkdfSha512(),
aead: new Aes256Gcm(),
});
-

Hierarchy

  • DhkemP521HkdfSha512Native
    • DhkemP521HkdfSha512

Constructors

Hierarchy

  • DhkemP521HkdfSha512Native
    • DhkemP521HkdfSha512

Constructors

Properties

Constructors

Properties

encSize: number = 133
id: KemId = KemId.DhkemP521HkdfSha512
privateKeySize: number = 64
publicKeySize: number = 133
secretSize: number = 64

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    +

Constructors

Properties

_prim: DhkemPrimitives
encSize: number = 133
id: KemId = KemId.DhkemP521HkdfSha512
privateKeySize: number = 64
publicKeySize: number = 133
secretSize: number = 64

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    If the error occurred, throws DecapError.

    Parameters

    Returns Promise<ArrayBuffer>

    A shared secret as the output of the decapsulation step.

    DecapError

    -
  • Derives a key pair from the byte string ikm.

    +
  • Derives a key pair from the byte string ikm.

    If the error occurred, throws DeriveKeyPairError.

    Parameters

    • ikm: ArrayBuffer

      An input keying material.

    Returns Promise<CryptoKeyPair>

    A key pair derived.

  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    +
  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    +
  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

  • Generates an ephemeral, fixed-length symmetric key and +

  • Generates an ephemeral, fixed-length symmetric key and a fixed-length encapsulation of the key that can be decapsulated by the holder of the private key corresponding to pkR.

    If the error occurred, throws EncapError.

    Parameters

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    EncapError

    -
  • Generates a key pair.

    +
  • Generates a key pair.

    If the error occurred, throws NotSupportedError.

    Returns Promise<CryptoKeyPair>

    A key pair generated.

  • Imports a public or private key and converts to a CryptoKey.

    +
  • Imports a public or private key and converts to a CryptoKey.

    Since key parameters for createSenderContext or createRecipientContext are CryptoKey format, you have to use this function to convert provided keys to CryptoKey.

    @@ -65,14 +65,14 @@
  • isPublic: boolean = true

    The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

Returns Promise<CryptoKey>

A public or private CryptoKey.

  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    +
  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

  • Serializes a public key as CryptoKey to a byte string of length Npk.

    +
  • Serializes a public key as CryptoKey to a byte string of length Npk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

+
diff --git a/core/docs/classes/Ec.html b/core/docs/classes/Ec.html deleted file mode 100644 index c0f4d0c23..000000000 --- a/core/docs/classes/Ec.html +++ /dev/null @@ -1,13 +0,0 @@ -Ec | @hpke/core

Hierarchy

  • NativeAlgorithm
    • Ec

Implements

Constructors

Properties

_api: SubtleCrypto = undefined

Methods

  • Returns Promise<void>

diff --git a/core/docs/classes/EncapError.html b/core/docs/classes/EncapError.html index 621d0ebf0..9393382a2 100644 --- a/core/docs/classes/EncapError.html +++ b/core/docs/classes/EncapError.html @@ -1,7 +1,7 @@ EncapError | @hpke/core

Class EncapError

encap() failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/ExportError.html b/core/docs/classes/ExportError.html index df7b94d4a..5742572f0 100644 --- a/core/docs/classes/ExportError.html +++ b/core/docs/classes/ExportError.html @@ -1,7 +1,7 @@ ExportError | @hpke/core

Class ExportError

Secret export failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/ExportOnly.html b/core/docs/classes/ExportOnly.html index c44f0cb99..16c89ddec 100644 --- a/core/docs/classes/ExportOnly.html +++ b/core/docs/classes/ExportOnly.html @@ -5,16 +5,16 @@
import {
CipherSuite,
DhkemP256HkdfSha256,
ExportOnly,
HkdfSha256,
} from "http://deno.land/x/hpke/core/mod.ts";

const suite = new CipherSuite({
kem: new DhkemP256HkdfSha256(),
kdf: new HkdfSha256(),
aead: new ExportOnly(),
});
-

Implements

Constructors

Implements

Constructors

Properties

id: AeadId = AeadId.ExportOnly

The KDF identifier.

-
keySize: number = 0

The length in bytes of an AEAD key (Nk).

-
nonceSize: number = 0

The length in bytes of an AEAD nonce (Nn).

-
tagSize: number = 0

The length in bytes of an AEAD authentication tag (Nt).

-

Methods

keySize: number = 0

The length in bytes of an AEAD key (Nk).

+
nonceSize: number = 0

The length in bytes of an AEAD nonce (Nn).

+
tagSize: number = 0

The length in bytes of an AEAD authentication tag (Nt).

+

Methods

+
diff --git a/core/docs/classes/HkdfSha256.html b/core/docs/classes/HkdfSha256.html index c233c32e0..a130628f1 100644 --- a/core/docs/classes/HkdfSha256.html +++ b/core/docs/classes/HkdfSha256.html @@ -7,7 +7,7 @@
import {
Aes128Gcm,
CipherSuite,
DhkemP256HkdfSha256,
HkdfSha256,
} from "http://deno.land/x/hpke/core/mod.ts";

const suite = new CipherSuite({
kem: new DhkemP256HkdfSha256(),
kdf: new HkdfSha256(),
aead: new Aes128Gcm(),
});
-

Hierarchy

  • HkdfSha256Native
    • HkdfSha256

Constructors

Hierarchy

  • HkdfSha256Native
    • HkdfSha256

Constructors

Properties

Constructors

Properties

_api: SubtleCrypto = undefined
_suiteId: Uint8Array = EMPTY
algHash: HmacKeyGenParams = ...

The parameters for Web Cryptography API

-
hashSize: number = 32

32

-
id: KdfId = KdfId.HkdfSha256

KdfId.HkdfSha256 (0x0001)

-

Methods

  • Returns void

  • Returns Promise<void>

  • Builds a labeled input keying material.

    +

Constructors

Properties

_api: SubtleCrypto = undefined
_suiteId: Uint8Array = EMPTY
algHash: HmacKeyGenParams = ...

The parameters for Web Cryptography API

+
hashSize: number = 32

32

+
id: KdfId = KdfId.HkdfSha256

KdfId.HkdfSha256 (0x0001)

+

Methods

  • Returns void

  • Builds a labeled input keying material.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

    Returns Uint8Array

    An input keying material as bytes.

    -
  • Builds a labeled info string.

    +
  • Builds a labeled info string.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length of the output byte string.

    Returns Uint8Array

    An info string as bytes.

    -
  • Expands a pseudorandom key prk.

    +
  • Expands a pseudorandom key prk.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Extracts a pseudorandom key of fixed length (Nh) bytes.

    +
  • Extracts a pseudorandom key of fixed length (Nh) bytes.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • ikm: ArrayBuffer

      An input keying material

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    -
  • Extracts a pseudorandom key and expand it to a specified length keying material.

    +
  • Extracts a pseudorandom key and expand it to a specified length keying material.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • ikm: ArrayBuffer

      An input keying material

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Initializes the instance by setting a suite_id defined in RFC9180.

    +
  • Initializes the instance by setting a suite_id defined in RFC9180.

    Parameters

    • suiteId: Uint8Array

      A suite_id defined in RFC9180.

      -

    Returns void

  • Extracts a pseudorandom key with label.

    +

Returns void

  • Extracts a pseudorandom key with label.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Extracts a pseudorandom key with label.

    +
  • Extracts a pseudorandom key with label.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

      An input keying material

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    -
+
diff --git a/core/docs/classes/HkdfSha384.html b/core/docs/classes/HkdfSha384.html index 5ccd5553c..b00b834cf 100644 --- a/core/docs/classes/HkdfSha384.html +++ b/core/docs/classes/HkdfSha384.html @@ -7,7 +7,7 @@
import {
Aes128Gcm,
CipherSuite,
DhkemP384HkdfSha384,
HkdfSha384,
} from "http://deno.land/x/hpke/core/mod.ts";

const suite = new CipherSuite({
kem: new DhkemP384HkdfSha384(),
kdf: new HkdfSha384(),
aead: new Aes128Gcm(),
});
-

Hierarchy

  • HkdfSha384Native
    • HkdfSha384

Constructors

Hierarchy

  • HkdfSha384Native
    • HkdfSha384

Constructors

Properties

Constructors

Properties

_api: SubtleCrypto = undefined
_suiteId: Uint8Array = EMPTY
algHash: HmacKeyGenParams = ...

The parameters for Web Cryptography API

-
hashSize: number = 48

48

-
id: KdfId = KdfId.HkdfSha384

KdfId.HkdfSha384 (0x0002)

-

Methods

  • Returns void

  • Returns Promise<void>

  • Builds a labeled input keying material.

    +

Constructors

Properties

_api: SubtleCrypto = undefined
_suiteId: Uint8Array = EMPTY
algHash: HmacKeyGenParams = ...

The parameters for Web Cryptography API

+
hashSize: number = 48

48

+
id: KdfId = KdfId.HkdfSha384

KdfId.HkdfSha384 (0x0002)

+

Methods

  • Returns void

  • Builds a labeled input keying material.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

    Returns Uint8Array

    An input keying material as bytes.

    -
  • Builds a labeled info string.

    +
  • Builds a labeled info string.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length of the output byte string.

    Returns Uint8Array

    An info string as bytes.

    -
  • Expands a pseudorandom key prk.

    +
  • Expands a pseudorandom key prk.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Extracts a pseudorandom key of fixed length (Nh) bytes.

    +
  • Extracts a pseudorandom key of fixed length (Nh) bytes.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • ikm: ArrayBuffer

      An input keying material

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    -
  • Extracts a pseudorandom key and expand it to a specified length keying material.

    +
  • Extracts a pseudorandom key and expand it to a specified length keying material.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • ikm: ArrayBuffer

      An input keying material

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Initializes the instance by setting a suite_id defined in RFC9180.

    +
  • Initializes the instance by setting a suite_id defined in RFC9180.

    Parameters

    • suiteId: Uint8Array

      A suite_id defined in RFC9180.

      -

    Returns void

  • Extracts a pseudorandom key with label.

    +

Returns void

  • Extracts a pseudorandom key with label.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Extracts a pseudorandom key with label.

    +
  • Extracts a pseudorandom key with label.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

      An input keying material

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    -
+
diff --git a/core/docs/classes/HkdfSha512.html b/core/docs/classes/HkdfSha512.html index 1f9783ac0..8c21f2b17 100644 --- a/core/docs/classes/HkdfSha512.html +++ b/core/docs/classes/HkdfSha512.html @@ -7,7 +7,7 @@
import {
Aes256Gcm,
CipherSuite,
DhkemP521HkdfSha512,
HkdfSha512,
} from "http://deno.land/x/hpke/core/mod.ts";

const suite = new CipherSuite({
kem: new DhkemP521HkdfSha512(),
kdf: new HkdfSha512(),
aead: new Aes256Gcm(),
});
-

Hierarchy

  • HkdfSha512Native
    • HkdfSha512

Constructors

Hierarchy

  • HkdfSha512Native
    • HkdfSha512

Constructors

Properties

Constructors

Properties

_api: SubtleCrypto = undefined
_suiteId: Uint8Array = EMPTY
algHash: HmacKeyGenParams = ...

The parameters for Web Cryptography API

-
hashSize: number = 64

64

-
id: KdfId = KdfId.HkdfSha512

KdfId.HkdfSha512 (0x0003)

-

Methods

  • Returns void

  • Returns Promise<void>

  • Builds a labeled input keying material.

    +

Constructors

Properties

_api: SubtleCrypto = undefined
_suiteId: Uint8Array = EMPTY
algHash: HmacKeyGenParams = ...

The parameters for Web Cryptography API

+
hashSize: number = 64

64

+
id: KdfId = KdfId.HkdfSha512

KdfId.HkdfSha512 (0x0003)

+

Methods

  • Returns void

  • Builds a labeled input keying material.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

    Returns Uint8Array

    An input keying material as bytes.

    -
  • Builds a labeled info string.

    +
  • Builds a labeled info string.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length of the output byte string.

    Returns Uint8Array

    An info string as bytes.

    -
  • Expands a pseudorandom key prk.

    +
  • Expands a pseudorandom key prk.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Extracts a pseudorandom key of fixed length (Nh) bytes.

    +
  • Extracts a pseudorandom key of fixed length (Nh) bytes.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • ikm: ArrayBuffer

      An input keying material

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    -
  • Extracts a pseudorandom key and expand it to a specified length keying material.

    +
  • Extracts a pseudorandom key and expand it to a specified length keying material.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • ikm: ArrayBuffer

      An input keying material

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Initializes the instance by setting a suite_id defined in RFC9180.

    +
  • Initializes the instance by setting a suite_id defined in RFC9180.

    Parameters

    • suiteId: Uint8Array

      A suite_id defined in RFC9180.

      -

    Returns void

  • Extracts a pseudorandom key with label.

    +

Returns void

  • Extracts a pseudorandom key with label.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Extracts a pseudorandom key with label.

    +
  • Extracts a pseudorandom key with label.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

      An input keying material

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    -
+
diff --git a/core/docs/classes/HpkeError.html b/core/docs/classes/HpkeError.html index e2e9465be..c47567baf 100644 --- a/core/docs/classes/HpkeError.html +++ b/core/docs/classes/HpkeError.html @@ -1,7 +1,7 @@ HpkeError | @hpke/core

Class HpkeError

The base error class of hpke-js.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/Hybridkem.html b/core/docs/classes/Hybridkem.html index be29cc5c0..f347c479d 100644 --- a/core/docs/classes/Hybridkem.html +++ b/core/docs/classes/Hybridkem.html @@ -1,5 +1,5 @@ Hybridkem | @hpke/core

Class Hybridkem

The KEM interface.

-

Implements

Constructors

Implements

Constructors

Properties

Constructors

Properties

encSize: number = 0

The length in bytes of an encapsulated key produced by this KEM (Nenc).

-
id: KemId = KemId.NotAssigned

The KEM identifier.

-
name: string = ""
privateKeySize: number = 0

The length in bytes of an encoded private key for this KEM (Nsk).

-
publicKeySize: number = 0

The length in bytes of an encoded public key for this KEM (Npk).

-
secretSize: number = 0

The length in bytes of a KEM shared secret produced by this KEM (Nsecret).

-

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    +

Constructors

Properties

_a: DhkemInterface
encSize: number = 0

The length in bytes of an encapsulated key produced by this KEM (Nenc).

+
id: KemId = KemId.NotAssigned

The KEM identifier.

+
name: string = ""
privateKeySize: number = 0

The length in bytes of an encoded private key for this KEM (Nsk).

+
publicKeySize: number = 0

The length in bytes of an encoded public key for this KEM (Npk).

+
secretSize: number = 0

The length in bytes of a KEM shared secret produced by this KEM (Nsecret).

+

Methods

  • Derives a key pair from the byte string ikm.

    +
  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    +
  • Generates an ephemeral, fixed-length symmetric key and a fixed-length encapsulation of the key that can be decapsulated by the holder of the private key corresponding to pkR.

    If the error occurred, throws EncapError.

    Parameters

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    EncapError

    -
  • Imports a public or private key and converts to a CryptoKey.

    Since key parameters for createSenderContext or createRecipientContext are CryptoKey format, you have to use this function to convert provided keys to CryptoKey.

    @@ -66,14 +66,14 @@
  • isPublic: boolean = true

    The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

Returns Promise<CryptoKey>

A public or private CryptoKey.

+
diff --git a/core/docs/classes/InvalidParamError.html b/core/docs/classes/InvalidParamError.html index 266d9fb8f..797d274ee 100644 --- a/core/docs/classes/InvalidParamError.html +++ b/core/docs/classes/InvalidParamError.html @@ -1,7 +1,7 @@ InvalidParamError | @hpke/core

Class InvalidParamError

Invalid parameter.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/MessageLimitReachedError.html b/core/docs/classes/MessageLimitReachedError.html index 84f286576..a0f74ed6b 100644 --- a/core/docs/classes/MessageLimitReachedError.html +++ b/core/docs/classes/MessageLimitReachedError.html @@ -1,7 +1,7 @@ MessageLimitReachedError | @hpke/core

Class MessageLimitReachedError

Sequence number overflow on the encryption context.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/NotSupportedError.html b/core/docs/classes/NotSupportedError.html index acebb45d5..427409f7a 100644 --- a/core/docs/classes/NotSupportedError.html +++ b/core/docs/classes/NotSupportedError.html @@ -1,7 +1,7 @@ NotSupportedError | @hpke/core

Class NotSupportedError

Not supported failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/OpenError.html b/core/docs/classes/OpenError.html index 1a69637e0..2b37cd155 100644 --- a/core/docs/classes/OpenError.html +++ b/core/docs/classes/OpenError.html @@ -1,7 +1,7 @@ OpenError | @hpke/core

Class OpenError

open() failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/SealError.html b/core/docs/classes/SealError.html index f09cb22ce..47843c531 100644 --- a/core/docs/classes/SealError.html +++ b/core/docs/classes/SealError.html @@ -1,7 +1,7 @@ SealError | @hpke/core

Class SealError

seal() failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/SerializeError.html b/core/docs/classes/SerializeError.html index 9ea40bc4f..cf599bf04 100644 --- a/core/docs/classes/SerializeError.html +++ b/core/docs/classes/SerializeError.html @@ -1,7 +1,7 @@ SerializeError | @hpke/core

Class SerializeError

Public or private key serialization failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/ValidationError.html b/core/docs/classes/ValidationError.html index ad9ad0f45..a33e23814 100644 --- a/core/docs/classes/ValidationError.html +++ b/core/docs/classes/ValidationError.html @@ -1,7 +1,7 @@ ValidationError | @hpke/core

Class ValidationError

KEM input or output validation failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/core/docs/classes/XCryptoKey.html b/core/docs/classes/XCryptoKey.html index 0229fbb04..a92343c2a 100644 --- a/core/docs/classes/XCryptoKey.html +++ b/core/docs/classes/XCryptoKey.html @@ -1,11 +1,11 @@ -XCryptoKey | @hpke/core

Class XCryptoKey

Implements

  • CryptoKey

Constructors

constructor +XCryptoKey | @hpke/core

Class XCryptoKey

Implements

  • CryptoKey

Constructors

Properties

algorithm: KeyAlgorithm
extractable: boolean = true
key: Uint8Array
type: "private" | "public"
usages: KeyUsage[]
+

Constructors

Properties

algorithm: KeyAlgorithm
extractable: boolean = true
key: Uint8Array
type: "private" | "public"
usages: KeyUsage[]
diff --git a/core/docs/hierarchy.html b/core/docs/hierarchy.html index 7773e1752..21d66b102 100644 --- a/core/docs/hierarchy.html +++ b/core/docs/hierarchy.html @@ -1 +1 @@ -@hpke/core
+@hpke/core
diff --git a/core/docs/interfaces/AeadEncryptionContext.html b/core/docs/interfaces/AeadEncryptionContext.html index 830761da9..d5245069d 100644 --- a/core/docs/interfaces/AeadEncryptionContext.html +++ b/core/docs/interfaces/AeadEncryptionContext.html @@ -1,14 +1,14 @@ AeadEncryptionContext | @hpke/core

Interface AeadEncryptionContext

The AEAD encryption context interface.

-
interface AeadEncryptionContext {
    open(iv: ArrayBuffer, data: ArrayBuffer, aad: ArrayBuffer): Promise<ArrayBuffer>;
    seal(iv: ArrayBuffer, data: ArrayBuffer, aad: ArrayBuffer): Promise<ArrayBuffer>;
}

Methods

interface AeadEncryptionContext {
    open(iv: ArrayBuffer, data: ArrayBuffer, aad: ArrayBuffer): Promise<ArrayBuffer>;
    seal(iv: ArrayBuffer, data: ArrayBuffer, aad: ArrayBuffer): Promise<ArrayBuffer>;
}

Methods

Methods

  • Decrypts data with an initialization vector and additional authenticated data.

    Parameters

    • iv: ArrayBuffer

      An initialization vector.

    • data: ArrayBuffer

      A plain text as bytes to be encrypted.

    • aad: ArrayBuffer

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A decrypted plain text as bytes.

    -
  • Encrypts data with an initialization vector and additional authenticated data.

    Parameters

    • iv: ArrayBuffer

      An initialization vector.

    • data: ArrayBuffer

      A plain text as bytes to be encrypted.

    • aad: ArrayBuffer

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A cipher text as bytes.

    -
+
diff --git a/core/docs/interfaces/AeadInterface.html b/core/docs/interfaces/AeadInterface.html index ccb77d4a4..92d6a9c7c 100644 --- a/core/docs/interfaces/AeadInterface.html +++ b/core/docs/interfaces/AeadInterface.html @@ -1,14 +1,14 @@ AeadInterface | @hpke/core

Interface AeadInterface

The AEAD interface.

-
interface AeadInterface {
    id: AeadId;
    keySize: number;
    nonceSize: number;
    tagSize: number;
    createEncryptionContext(key: ArrayBuffer): AeadEncryptionContext;
}

Implemented by

Properties

id +
interface AeadInterface {
    id: AeadId;
    keySize: number;
    nonceSize: number;
    tagSize: number;
    createEncryptionContext(key: ArrayBuffer): AeadEncryptionContext;
}

Implemented by

Properties

id: AeadId

The KDF identifier.

-
keySize: number

The length in bytes of an AEAD key (Nk).

-
nonceSize: number

The length in bytes of an AEAD nonce (Nn).

-
tagSize: number

The length in bytes of an AEAD authentication tag (Nt).

-

Methods

keySize: number

The length in bytes of an AEAD key (Nk).

+
nonceSize: number

The length in bytes of an AEAD nonce (Nn).

+
tagSize: number

The length in bytes of an AEAD authentication tag (Nt).

+

Methods

+
diff --git a/core/docs/interfaces/CipherSuiteParams.html b/core/docs/interfaces/CipherSuiteParams.html index 1cb635abc..38ae4de6a 100644 --- a/core/docs/interfaces/CipherSuiteParams.html +++ b/core/docs/interfaces/CipherSuiteParams.html @@ -1,8 +1,8 @@ CipherSuiteParams | @hpke/core

Interface CipherSuiteParams

The parameters used to configure the CipherSuite.

-
interface CipherSuiteParams {
    aead: AeadId | AeadInterface;
    kdf: KdfId | KdfInterface;
    kem: KemId | KemInterface;
}

Properties

interface CipherSuiteParams {
    aead: AeadId | AeadInterface;
    kdf: KdfId | KdfInterface;
    kem: KemId | KemInterface;
}

Properties

Properties

The AEAD (Authenticated Encryption with Addtional Data) identifier or the AEAD object.

-

The KDF (Key Derivation Function) identifier or the KDF object.

-

The KEM (Key Encapsulation Mechanism) identifier or the KEM object.

-
+

The KDF (Key Derivation Function) identifier or the KDF object.

+

The KEM (Key Encapsulation Mechanism) identifier or the KEM object.

+
diff --git a/core/docs/interfaces/CipherSuiteSealResponse.html b/core/docs/interfaces/CipherSuiteSealResponse.html index 9517fd0cd..3cf951b12 100644 --- a/core/docs/interfaces/CipherSuiteSealResponse.html +++ b/core/docs/interfaces/CipherSuiteSealResponse.html @@ -1,6 +1,6 @@ CipherSuiteSealResponse | @hpke/core

Interface CipherSuiteSealResponse

The response of the single-shot seal API.

-
interface CipherSuiteSealResponse {
    ct: ArrayBuffer;
    enc: ArrayBuffer;
}

Properties

ct +
interface CipherSuiteSealResponse {
    ct: ArrayBuffer;
    enc: ArrayBuffer;
}

Properties

Properties

ct: ArrayBuffer

The ciphertext as bytes.

-
enc: ArrayBuffer

The encapsulated key.

-
+
enc: ArrayBuffer

The encapsulated key.

+
diff --git a/core/docs/interfaces/DhkemPrimitives.html b/core/docs/interfaces/DhkemPrimitives.html deleted file mode 100644 index 392d0401a..000000000 --- a/core/docs/interfaces/DhkemPrimitives.html +++ /dev/null @@ -1,10 +0,0 @@ -DhkemPrimitives | @hpke/core

Interface DhkemPrimitives

interface DhkemPrimitives {
    deriveKeyPair(ikm: ArrayBuffer): Promise<CryptoKeyPair>;
    derivePublicKey(key: CryptoKey): Promise<CryptoKey>;
    deserializePrivateKey(key: ArrayBuffer): Promise<CryptoKey>;
    deserializePublicKey(key: ArrayBuffer): Promise<CryptoKey>;
    dh(sk: CryptoKey, pk: CryptoKey): Promise<ArrayBuffer>;
    generateKeyPair(): Promise<CryptoKeyPair>;
    importKey(format: "raw" | "jwk", key: ArrayBuffer | JsonWebKey, isPublic: boolean): Promise<CryptoKey>;
    serializePrivateKey(key: CryptoKey): Promise<ArrayBuffer>;
    serializePublicKey(key: CryptoKey): Promise<ArrayBuffer>;
}

Implemented by

Methods

  • Parameters

    • format: "raw" | "jwk"
    • key: ArrayBuffer | JsonWebKey
    • isPublic: boolean

    Returns Promise<CryptoKey>

diff --git a/core/docs/interfaces/EncryptionContext.html b/core/docs/interfaces/EncryptionContext.html index ce812c751..38b86e7dc 100644 --- a/core/docs/interfaces/EncryptionContext.html +++ b/core/docs/interfaces/EncryptionContext.html @@ -1,5 +1,5 @@ EncryptionContext | @hpke/core

Interface EncryptionContext

The encryption context interface for a recipient and a sender.

-
interface EncryptionContext {
    export(exporterContext: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    open(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
    seal(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
}

Hierarchy (view full)

Methods

interface EncryptionContext {
    export(exporterContext: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    open(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
    seal(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
}

Hierarchy (view full)

Methods

Methods

  • Exports a secret using a variable-length pseudorandom function.

    @@ -8,16 +8,16 @@
  • len: number

    A desired length in bytes of the output secret.

Returns Promise<ArrayBuffer>

A secret string as bytes.

ExportError

-
  • Decrypts data.

    +
  • Decrypts data.

    If the error occurred, throws OpenError.

    Parameters

    • data: ArrayBuffer

      An encrypted text as bytes to be decrypted.

    • Optionalaad: ArrayBuffer

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A decrypted plain text as bytes.

    OpenError

    -
  • Encrypts data.

    +
  • Encrypts data.

    If the error occurred, throws SealError | MessageLimitReachedError.

    Parameters

    • data: ArrayBuffer

      A plain text as bytes to be encrypted.

    • Optionalaad: ArrayBuffer

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A cipher text as bytes.

+
diff --git a/core/docs/interfaces/KdfInterface.html b/core/docs/interfaces/KdfInterface.html index ac1e4024e..0b6f45773 100644 --- a/core/docs/interfaces/KdfInterface.html +++ b/core/docs/interfaces/KdfInterface.html @@ -1,5 +1,5 @@ KdfInterface | @hpke/core

Interface KdfInterface

The KDF interface.

-
interface KdfInterface {
    hashSize: number;
    id: KdfId;
    buildLabeledIkm(label: Uint8Array, ikm: Uint8Array): Uint8Array;
    buildLabeledInfo(label: Uint8Array, info: Uint8Array, len: number): Uint8Array;
    expand(prk: ArrayBuffer, info: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    extract(salt: ArrayBuffer, ikm: ArrayBuffer): Promise<ArrayBuffer>;
    extractAndExpand(salt: ArrayBuffer, ikm: ArrayBuffer, info: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    init(suiteId: Uint8Array): void;
    labeledExpand(prk: ArrayBuffer, label: Uint8Array, info: Uint8Array, len: number): Promise<ArrayBuffer>;
    labeledExtract(salt: ArrayBuffer, label: Uint8Array, ikm: Uint8Array): Promise<ArrayBuffer>;
}

Properties

interface KdfInterface {
    hashSize: number;
    id: KdfId;
    buildLabeledIkm(label: Uint8Array, ikm: Uint8Array): Uint8Array;
    buildLabeledInfo(label: Uint8Array, info: Uint8Array, len: number): Uint8Array;
    expand(prk: ArrayBuffer, info: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    extract(salt: ArrayBuffer, ikm: ArrayBuffer): Promise<ArrayBuffer>;
    extractAndExpand(salt: ArrayBuffer, ikm: ArrayBuffer, info: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    init(suiteId: Uint8Array): void;
    labeledExpand(prk: ArrayBuffer, label: Uint8Array, info: Uint8Array, len: number): Promise<ArrayBuffer>;
    labeledExtract(salt: ArrayBuffer, label: Uint8Array, ikm: Uint8Array): Promise<ArrayBuffer>;
}

Properties

hashSize: number

The output size of the extract() function in bytes (Nh).

-
id: KdfId

The KDF identifier.

-

Methods

id: KdfId

The KDF identifier.

+

Methods

  • Builds a labeled input keying material.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

    Returns Uint8Array

    An input keying material as bytes.

    -
  • Builds a labeled info string.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length of the output byte string.

    Returns Uint8Array

    An info string as bytes.

    -
  • Expands a pseudorandom key prk.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Extracts a pseudorandom key of fixed length (Nh) bytes.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • ikm: ArrayBuffer

      An input keying material

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    -
  • Extracts a pseudorandom key and expand it to a specified length keying material.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • ikm: ArrayBuffer

      An input keying material

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Initializes the instance by setting a suite_id defined in RFC9180.

    Parameters

    • suiteId: Uint8Array

      A suite_id defined in RFC9180.

      -

    Returns void

  • Extracts a pseudorandom key with label.

    +

Returns void

  • Extracts a pseudorandom key with label.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Extracts a pseudorandom key with label.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

      An input keying material

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    -
+
diff --git a/core/docs/interfaces/KemInterface.html b/core/docs/interfaces/KemInterface.html index 30981f059..856a0929b 100644 --- a/core/docs/interfaces/KemInterface.html +++ b/core/docs/interfaces/KemInterface.html @@ -1,5 +1,5 @@ KemInterface | @hpke/core

Interface KemInterface

The KEM interface.

-
interface KemInterface {
    encSize: number;
    id: KemId;
    privateKeySize: number;
    publicKeySize: number;
    secretSize: number;
    decap(params: RecipientContextParams): Promise<ArrayBuffer>;
    deriveKeyPair(ikm: ArrayBuffer): Promise<CryptoKeyPair>;
    deserializePrivateKey(key: ArrayBuffer): Promise<CryptoKey>;
    deserializePublicKey(key: ArrayBuffer): Promise<CryptoKey>;
    encap(params: SenderContextParams): Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>;
    generateKeyPair(): Promise<CryptoKeyPair>;
    importKey(format: "raw" | "jwk", key: ArrayBuffer | JsonWebKey, isPublic?: boolean): Promise<CryptoKey>;
    serializePrivateKey(key: CryptoKey): Promise<ArrayBuffer>;
    serializePublicKey(key: CryptoKey): Promise<ArrayBuffer>;
}

Hierarchy (view full)

Implemented by

Properties

interface KemInterface {
    encSize: number;
    id: KemId;
    privateKeySize: number;
    publicKeySize: number;
    secretSize: number;
    decap(params: RecipientContextParams): Promise<ArrayBuffer>;
    deriveKeyPair(ikm: ArrayBuffer): Promise<CryptoKeyPair>;
    deserializePrivateKey(key: ArrayBuffer): Promise<CryptoKey>;
    deserializePublicKey(key: ArrayBuffer): Promise<CryptoKey>;
    encap(params: SenderContextParams): Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>;
    generateKeyPair(): Promise<CryptoKeyPair>;
    importKey(format: "raw" | "jwk", key: ArrayBuffer | JsonWebKey, isPublic?: boolean): Promise<CryptoKey>;
    serializePrivateKey(key: CryptoKey): Promise<ArrayBuffer>;
    serializePublicKey(key: CryptoKey): Promise<ArrayBuffer>;
}

Implemented by

Properties

encSize: number

The length in bytes of an encapsulated key produced by this KEM (Nenc).

-
id: KemId

The KEM identifier.

-
privateKeySize: number

The length in bytes of an encoded private key for this KEM (Nsk).

-
publicKeySize: number

The length in bytes of an encoded public key for this KEM (Npk).

-
secretSize: number

The length in bytes of a KEM shared secret produced by this KEM (Nsecret).

-

Methods

id: KemId

The KEM identifier.

+
privateKeySize: number

The length in bytes of an encoded private key for this KEM (Nsk).

+
publicKeySize: number

The length in bytes of an encoded public key for this KEM (Npk).

+
secretSize: number

The length in bytes of a KEM shared secret produced by this KEM (Nsecret).

+

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    If the error occurred, throws DecapError.

    Parameters

    Returns Promise<ArrayBuffer>

    A shared secret as the output of the decapsulation step.

    DecapError

    -
  • Derives a key pair from the byte string ikm.

    +
  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    +
  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    +
  • Generates an ephemeral, fixed-length symmetric key and a fixed-length encapsulation of the key that can be decapsulated by the holder of the private key corresponding to pkR.

    If the error occurred, throws EncapError.

    Parameters

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    EncapError

    -
  • Imports a public or private key and converts to a CryptoKey.

    Since key parameters for createSenderContext or createRecipientContext are CryptoKey format, you have to use this function to convert provided keys to CryptoKey.

    @@ -61,14 +61,14 @@
  • OptionalisPublic: boolean

    The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

Returns Promise<CryptoKey>

A public or private CryptoKey.

  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

  • Serializes a public key as CryptoKey to a byte string of length Npk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

+
diff --git a/core/docs/interfaces/PreSharedKey.html b/core/docs/interfaces/PreSharedKey.html index 806b1bb05..0476a37f0 100644 --- a/core/docs/interfaces/PreSharedKey.html +++ b/core/docs/interfaces/PreSharedKey.html @@ -1,6 +1,6 @@ PreSharedKey | @hpke/core

Interface PreSharedKey

The pre-shared key interface.

-
interface PreSharedKey {
    id: ArrayBuffer;
    key: ArrayBuffer;
}

Properties

id +
interface PreSharedKey {
    id: ArrayBuffer;
    key: ArrayBuffer;
}

Properties

Properties

id: ArrayBuffer

The key identifier.

-
key: ArrayBuffer

The body of the pre-shared key.

-
+
key: ArrayBuffer

The body of the pre-shared key.

+
diff --git a/core/docs/interfaces/RecipientContextParams.html b/core/docs/interfaces/RecipientContextParams.html index e263629d7..ddb17cc34 100644 --- a/core/docs/interfaces/RecipientContextParams.html +++ b/core/docs/interfaces/RecipientContextParams.html @@ -1,13 +1,13 @@ RecipientContextParams | @hpke/core

Interface RecipientContextParams

The parameters used to setup the RecipientContext.

-
interface RecipientContextParams {
    enc: ArrayBuffer;
    info?: ArrayBuffer;
    psk?: PreSharedKey;
    recipientKey: CryptoKeyPair | CryptoKey;
    senderPublicKey?: CryptoKey;
}

Hierarchy

  • KeyScheduleParams
    • RecipientContextParams

Properties

enc +
interface RecipientContextParams {
    enc: ArrayBuffer;
    info?: ArrayBuffer;
    psk?: PreSharedKey;
    recipientKey: CryptoKeyPair | CryptoKey;
    senderPublicKey?: CryptoKey;
}

Hierarchy

  • KeyScheduleParams
    • RecipientContextParams

Properties

enc: ArrayBuffer

A byte string of the encapsulated key received from a sender.

-
info?: ArrayBuffer

Application supplied information. The maximum length is 128 bytes.

-

A pre-shared key (PSK) held by both the sender and recipient. +

info?: ArrayBuffer

Application supplied information. The maximum length is 128 bytes.

+

A pre-shared key (PSK) held by both the sender and recipient. The PSK should have at least 32 bytes :and the maxmum length of the PSK is 128 bytes.

-
recipientKey: CryptoKeyPair | CryptoKey

A recipient private key or a key pair.

-
senderPublicKey?: CryptoKey

A sender public key for Auth mode.

-
+
recipientKey: CryptoKeyPair | CryptoKey

A recipient private key or a key pair.

+
senderPublicKey?: CryptoKey

A sender public key for Auth mode.

+
diff --git a/core/docs/interfaces/SenderContext.html b/core/docs/interfaces/SenderContext.html index d1391ac95..583f29701 100644 --- a/core/docs/interfaces/SenderContext.html +++ b/core/docs/interfaces/SenderContext.html @@ -1,25 +1,25 @@ SenderContext | @hpke/core

Interface SenderContext

The sender encryption context.

-
interface SenderContext {
    enc: ArrayBuffer;
    export(exporterContext: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    open(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
    seal(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
}

Hierarchy (view full)

Properties

enc +
interface SenderContext {
    enc: ArrayBuffer;
    export(exporterContext: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    open(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
    seal(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
}

Hierarchy (view full)

Properties

Methods

Properties

enc: ArrayBuffer

The encapsulated key generated by the sender.

-

Methods

Methods

  • Exports a secret using a variable-length pseudorandom function.

    If the error occurred, throws ExportError.

    Parameters

    • exporterContext: ArrayBuffer

      An exporter context string as bytes. The maximum length is 128 bytes.

    • len: number

      A desired length in bytes of the output secret.

    Returns Promise<ArrayBuffer>

    A secret string as bytes.

    ExportError

    -
  • Decrypts data.

    +
  • Decrypts data.

    If the error occurred, throws OpenError.

    Parameters

    • data: ArrayBuffer

      An encrypted text as bytes to be decrypted.

    • Optionalaad: ArrayBuffer

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A decrypted plain text as bytes.

    OpenError

    -
  • Encrypts data.

    +
+
diff --git a/core/docs/interfaces/SenderContextParams.html b/core/docs/interfaces/SenderContextParams.html index fdaa5be71..1289c54a7 100644 --- a/core/docs/interfaces/SenderContextParams.html +++ b/core/docs/interfaces/SenderContextParams.html @@ -1,13 +1,13 @@ SenderContextParams | @hpke/core

Interface SenderContextParams

The parameters used to setup the SenderContext.

-
interface SenderContextParams {
    ekm?: ArrayBuffer | CryptoKeyPair;
    info?: ArrayBuffer;
    psk?: PreSharedKey;
    recipientPublicKey: CryptoKey;
    senderKey?: CryptoKeyPair | CryptoKey;
}

Hierarchy

  • KeyScheduleParams
    • SenderContextParams

Properties

interface SenderContextParams {
    ekm?: ArrayBuffer | CryptoKeyPair;
    info?: ArrayBuffer;
    psk?: PreSharedKey;
    recipientPublicKey: CryptoKey;
    senderKey?: CryptoKeyPair | CryptoKey;
}

Hierarchy

  • KeyScheduleParams
    • SenderContextParams

Properties

ekm?: ArrayBuffer | CryptoKeyPair

DO NOT USE. FOR DEBUGGING/TESTING PURPOSES ONLY.

-
info?: ArrayBuffer

Application supplied information. The maximum length is 128 bytes.

-

A pre-shared key (PSK) held by both the sender and recipient. +

info?: ArrayBuffer

Application supplied information. The maximum length is 128 bytes.

+

A pre-shared key (PSK) held by both the sender and recipient. The PSK should have at least 32 bytes :and the maxmum length of the PSK is 128 bytes.

-
recipientPublicKey: CryptoKey

A recipient public key.

-
senderKey?: CryptoKeyPair | CryptoKey

A sender private key or a key pair for Auth mode.

-
+
recipientPublicKey: CryptoKey

A recipient public key.

+
senderKey?: CryptoKeyPair | CryptoKey

A sender private key or a key pair for Auth mode.

+
diff --git a/core/docs/modules.html b/core/docs/modules.html index e49375aed..a1eac202f 100644 --- a/core/docs/modules.html +++ b/core/docs/modules.html @@ -5,11 +5,9 @@ DecapError DeriveKeyPairError DeserializeError -Dhkem DhkemP256HkdfSha256 DhkemP384HkdfSha384 DhkemP521HkdfSha512 -Ec EncapError ExportError ExportOnly @@ -30,8 +28,6 @@ AeadInterface CipherSuiteParams CipherSuiteSealResponse -DhkemInterface -DhkemPrimitives EncryptionContext KdfInterface KemInterface @@ -44,7 +40,6 @@ KemId RecipientContext

Variables

diff --git a/core/docs/types/AeadId.html b/core/docs/types/AeadId.html index 6679b2691..9ed23be87 100644 --- a/core/docs/types/AeadId.html +++ b/core/docs/types/AeadId.html @@ -1,2 +1,2 @@ AeadId | @hpke/core

Type Alias AeadId

AeadId: typeof AeadId[keyof typeof AeadId]

The type alias of the supported AEAD identifiers.

-
+
diff --git a/core/docs/types/KdfId.html b/core/docs/types/KdfId.html index 2a1b81cad..32755f6c3 100644 --- a/core/docs/types/KdfId.html +++ b/core/docs/types/KdfId.html @@ -1,2 +1,2 @@ KdfId | @hpke/core

Type Alias KdfId

KdfId: typeof KdfId[keyof typeof KdfId]

The type alias of the supported KDF identifiers.

-
+
diff --git a/core/docs/types/KemId.html b/core/docs/types/KemId.html index c025038e4..e5bb3203c 100644 --- a/core/docs/types/KemId.html +++ b/core/docs/types/KemId.html @@ -1,2 +1,2 @@ KemId | @hpke/core

Type Alias KemId

KemId: typeof KemId[keyof typeof KemId]

The type alias of the supported KEM identifiers.

-
+
diff --git a/core/docs/types/RecipientContext.html b/core/docs/types/RecipientContext.html index 0994e9bc7..7f23e19d9 100644 --- a/core/docs/types/RecipientContext.html +++ b/core/docs/types/RecipientContext.html @@ -1,2 +1,2 @@ RecipientContext | @hpke/core

Type Alias RecipientContext

RecipientContext: EncryptionContext

The recipient encryption context.

-
+
diff --git a/core/docs/variables/AeadId-1.html b/core/docs/variables/AeadId-1.html index f33743b1d..be2f02245 100644 --- a/core/docs/variables/AeadId-1.html +++ b/core/docs/variables/AeadId-1.html @@ -1,2 +1,2 @@ AeadId | @hpke/core

Variable AeadIdConst

AeadId: {
    Aes128Gcm: 1;
    Aes256Gcm: 2;
    Chacha20Poly1305: 3;
    ExportOnly: 65535;
} = ...

The supported Authenticated Encryption with Associated Data (AEAD) identifiers.

-
+
diff --git a/core/docs/variables/INPUT_LENGTH_LIMIT.html b/core/docs/variables/INPUT_LENGTH_LIMIT.html deleted file mode 100644 index 91026b4f5..000000000 --- a/core/docs/variables/INPUT_LENGTH_LIMIT.html +++ /dev/null @@ -1 +0,0 @@ -INPUT_LENGTH_LIMIT | @hpke/core

Variable INPUT_LENGTH_LIMITConst

INPUT_LENGTH_LIMIT = 8192
diff --git a/core/docs/variables/KdfId-1.html b/core/docs/variables/KdfId-1.html index 0e3629bab..093bfd683 100644 --- a/core/docs/variables/KdfId-1.html +++ b/core/docs/variables/KdfId-1.html @@ -1,2 +1,2 @@ KdfId | @hpke/core

Variable KdfIdConst

KdfId: {
    HkdfSha256: 1;
    HkdfSha384: 2;
    HkdfSha512: 3;
} = ...

The supported Key Derivation Function (KDF) identifiers.

-
+
diff --git a/core/docs/variables/KemId-1.html b/core/docs/variables/KemId-1.html index f12300c93..cff15e198 100644 --- a/core/docs/variables/KemId-1.html +++ b/core/docs/variables/KemId-1.html @@ -1,2 +1,2 @@ KemId | @hpke/core

Variable KemIdConst

KemId: {
    DhkemP256HkdfSha256: 16;
    DhkemP384HkdfSha384: 17;
    DhkemP521HkdfSha512: 18;
    DhkemSecp256k1HkdfSha256: 19;
    DhkemX25519HkdfSha256: 32;
    DhkemX448HkdfSha512: 33;
    HybridkemX25519Kyber768: 48;
    NotAssigned: 0;
} = ...

The supported Key Encapsulation Mechanism (KEM) identifiers.

-
+
diff --git a/core/src/hpke-common.js b/core/src/hpke-common.js index 0aff511e4..d6dcc8e83 100644 --- a/core/src/hpke-common.js +++ b/core/src/hpke-common.js @@ -1 +1 @@ -var e={Base:0,Psk:1,Auth:2,AuthPsk:3},x={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},d={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},h={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var k=["encrypt","decrypt"];export{k as AEAD_USAGES,h as AeadId,d as KdfId,x as KemId,e as Mode}; +var v=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},o=class extends v{},b=class extends o{},D=class extends o{},u=class extends o{},h=class extends o{},m=class extends o{},K=class extends o{},T=class extends o{},z=class extends o{},H=class extends o{},R=class extends o{},P=class extends o{},x=class extends o{};var B={},C=N(globalThis,B);function N(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),s=new Set(n);return[...r.filter(a=>!s.has(a)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}async function j(){if(C!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new x(i)}}var _=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await j())}};var F={Base:0,Psk:1,Auth:2,AuthPsk:3},g={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},Y={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},X={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var E=8192,J=32,w=new Uint8Array(0);var S=new Uint8Array([75,69,77,0,0]);var l=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function p(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function y(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function M(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;n8192)throw new b("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():l(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let s;if(e.senderKey===void 0)s=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let c=l(e.senderKey)?e.senderKey.privateKey:e.senderKey,d=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),G=new Uint8Array(await this._prim.dh(c,e.recipientPublicKey));s=y(d,G)}let a;if(e.senderKey===void 0)a=y(new Uint8Array(r),new Uint8Array(n));else{let c=l(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),d=await this._prim.serializePublicKey(c);a=q(new Uint8Array(r),new Uint8Array(n),new Uint8Array(d))}let f=await this._generateSharedSecret(s,a);return{enc:r,sharedSecret:f}}catch(s){throw new m(s)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=l(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=l(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),s=await this._prim.serializePublicKey(n);try{let a;if(e.senderPublicKey===void 0)a=new Uint8Array(await this._prim.dh(r,t));else{let c=new Uint8Array(await this._prim.dh(r,t)),d=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));a=y(c,d)}let f;if(e.senderPublicKey===void 0)f=y(new Uint8Array(e.enc),new Uint8Array(s));else{let c=await this._prim.serializePublicKey(e.senderPublicKey);f=new Uint8Array(e.enc.byteLength+s.byteLength+c.byteLength),f.set(new Uint8Array(e.enc),0),f.set(new Uint8Array(s),e.enc.byteLength),f.set(new Uint8Array(c),e.enc.byteLength+s.byteLength)}return await this._generateSharedSecret(a,f)}catch(a){throw new K(a)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Z,e),n=this._kdf.buildLabeledInfo($,t,this.secretSize);return await this._kdf.extractAndExpand(w,r,n,this.secretSize)}};var k=["deriveBits"],I=new Uint8Array([100,107,112,95,112,114,107]),Q=new Uint8Array([115,107]);var A=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var V=new Uint8Array([99,97,110,100,105,100,97,116,101]),ee=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),te=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),re=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),ie=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),ne=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),se=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),L=class extends _{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case g.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=ee,this._bitmask=255,this._pkcs8AlgId=ie;break;case g.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=te,this._bitmask=255,this._pkcs8AlgId=ne;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=re,this._bitmask=1,this._pkcs8AlgId=se;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new u(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new h(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return M(t.d)}catch(t){throw new u(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new h(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new h(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,k)}catch(e){throw new x(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(w,I,new Uint8Array(e)),r=new A(this._nSk);for(let s=0;r.isZero()||!r.lessThan(this._order);s++){if(s>255)throw new Error("Faild to derive a key pair");let a=new Uint8Array(await this._hkdf.labeledExpand(t,V,p(s,1),this._nSk));a[0]=a[0]&this._bitmask,r.set(a)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new P(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new h(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new u(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,k)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,k)}};var ae=["encrypt","decrypt"];export{ae as AEAD_USAGES,X as AeadId,v as BaseError,K as DecapError,P as DeriveKeyPairError,h as DeserializeError,U as Dhkem,w as EMPTY,L as Ec,m as EncapError,T as ExportError,o as HpkeError,E as INPUT_LENGTH_LIMIT,b as InvalidParamError,Y as KdfId,g as KemId,I as LABEL_DKP_PRK,Q as LABEL_SK,J as MINIMUM_PSK_LENGTH,R as MessageLimitReachedError,F as Mode,_ as NativeAlgorithm,x as NotSupportedError,H as OpenError,S as SUITE_ID_HEADER_KEM,z as SealError,u as SerializeError,D as ValidationError,y as concat,p as i2Osp,l as isCryptoKeyPair,W as xor}; diff --git a/core/src/hpke-core.js b/core/src/hpke-core.js index a61ab417f..2daa361d0 100644 --- a/core/src/hpke-core.js +++ b/core/src/hpke-core.js @@ -1 +1 @@ -var Se={},we=Ee(globalThis,Se);function Ee(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),a=new Set(n);return[...r.filter(s=>!a.has(s)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}var ie=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},f=class extends ie{},l=class extends f{},_e=class extends f{},P=class extends f{},m=class extends f{},N=class extends f{},T=class extends f{},B=class extends f{},C=class extends f{},M=class extends f{},R=class extends f{},G=class extends f{},p=class extends f{};async function ze(){if(we!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new p(i)}}var x=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await ze())}};var g={Base:0,Psk:1,Auth:2,AuthPsk:3},h={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},A={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},k={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var ne=["encrypt","decrypt"];var ae=class extends x{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(n,this._key,t)}async open(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(n,this._key,t)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,ne)}},F=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new ae(e)}},se=class extends F{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var oe=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new p("Export only")}};var K=8192;var c=new Uint8Array(0);function ue(){return new Promise((i,e)=>{e(new p("Not supported"))})}var Ue=new Uint8Array([115,101,99]),z=class{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await ue()}async open(e,t){return await ue()}async export(e,t){if(e.byteLength>8192)throw new l("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Ue,new Uint8Array(e),t)}catch(r){throw new B(r)}}},q=class extends z{},Y=class extends z{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}};var v=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function w(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function d(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function me(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;nNumber.MAX_SAFE_INTEGER)throw new R("Message limit reached");e.seq+=1}};var $=class extends U{async open(e,t=c){let r;try{r=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(n){throw new M(n)}return this.incrementSeq(this._ctx),r}};var X=class extends U{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}async seal(e,t=c){let r;try{r=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(n){throw new C(n)}return this.incrementSeq(this._ctx),r}};var Oe=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),je=new Uint8Array([101,120,112]),He=new Uint8Array([105,110,102,111,95,104,97,115,104]),De=new Uint8Array([107,101,121]),Ne=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Te=new Uint8Array([115,101,99,114,101,116]),Be=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),J=class extends x{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new l("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new l("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new l("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Be),this._suiteId.set(w(this._kem.id,2),4),this._suiteId.set(w(this._kdf.id,2),6),this._suiteId.set(w(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.encap(e),r;return e.psk!==void 0?r=e.senderKey!==void 0?g.AuthPsk:g.Psk:r=e.senderKey!==void 0?g.Auth:g.Base,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.decap(e),r;return e.psk!==void 0?r=e.senderPublicKey!==void 0?g.AuthPsk:g.Psk:r=e.senderPublicKey!==void 0?g.Auth:g.Base,await this._keyScheduleR(r,t,e)}async seal(e,t,r=c){let n=await this.createSenderContext(e);return{ct:await n.seal(t,r),enc:n.enc}}async open(e,t,r=c){return await(await this.createRecipientContext(e)).open(t,r)}async _keySchedule(e,t,r){let n=r.psk===void 0?c:new Uint8Array(r.psk.id),a=await this._kdf.labeledExtract(c,Ne,n),s=r.info===void 0?c:new Uint8Array(r.info),o=await this._kdf.labeledExtract(c,He,s),u=new Uint8Array(1+a.byteLength+o.byteLength);u.set(new Uint8Array([e]),0),u.set(new Uint8Array(a),1),u.set(new Uint8Array(o),1+a.byteLength);let y=r.psk===void 0?c:new Uint8Array(r.psk.key),b=this._kdf.buildLabeledIkm(Te,y),I=this._kdf.buildLabeledInfo(je,u,this._kdf.hashSize),_=await this._kdf.extractAndExpand(t,b,I,this._kdf.hashSize);if(this._aead.id===k.ExportOnly)return{aead:this._aead,exporterSecret:_};let ke=this._kdf.buildLabeledInfo(De,u,this._aead.keySize),Ke=await this._kdf.extractAndExpand(t,b,ke,this._aead.keySize),ve=this._kdf.buildLabeledInfo(Oe,u,this._aead.nonceSize),Ae=await this._kdf.extractAndExpand(t,b,ve,this._aead.nonceSize);return{aead:this._aead,exporterSecret:_,key:Ke,baseNonce:new Uint8Array(Ae),seq:0}}async _keyScheduleS(e,t,r,n){let a=await this._keySchedule(e,t,n);return a.key===void 0?new Y(this._api,this._kdf,a.exporterSecret,r):new X(this._api,this._kdf,a,r)}async _keyScheduleR(e,t,r){let n=await this._keySchedule(e,t,r);return n.key===void 0?new q(this._api,this._kdf,n.exporterSecret):new $(this._api,this._kdf,n)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new l("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new l(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new l("Too long psk.key");if(e.psk.id.byteLength>8192)throw new l("Too long psk.id")}}};var ge=new Uint8Array([72,80,75,69,45,118,49]),D=class extends x{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:c}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(ge,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();let n=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set(new Uint8Array([0,r]),0),n.set(ge,2),n.set(this._suiteId,9),n.set(e,9+this._suiteId.byteLength),n.set(t,9+this._suiteId.byteLength+e.byteLength),n}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new l("The salt length must be the same as the hashSize");let r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),a=new ArrayBuffer(r),s=new Uint8Array(a),o=c,u=new Uint8Array(t),y=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");let b=new Uint8Array(this.hashSize+u.length+1);for(let I=1,_=0;_=o.length?(s.set(o,_),_+=o.length):(s.set(o.slice(0,s.length-_),_),_+=s.length-_);return a}async extractAndExpand(e,t,r,n){await this._setup();let a=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},a,n*8)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r))}async labeledExpand(e,t,r,n){return await this.expand(e,this.buildLabeledInfo(t,r,n),n)}_checkInit(){if(this._suiteId===c)throw new Error("Not initialized. Call init()")}},L=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},O=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},j=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var W=new Uint8Array([75,69,77,0,0]);var Ce=new Uint8Array([101,97,101,95,112,114,107]),Me=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function Re(i,e,t){let r=new Uint8Array(i.length+e.length+t.length);return r.set(i,0),r.set(e,i.length),r.set(t,i.length+e.length),r}var S=class{constructor(e,t,r){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=t,this._kdf=r;let n=new Uint8Array(W);n.set(w(this.id,2),3),this._kdf.init(n)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,t,r=!0){return await this._prim.importKey(e,t,r)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new l("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():v(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let a;if(e.senderKey===void 0)a=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let u=v(e.senderKey)?e.senderKey.privateKey:e.senderKey,y=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),b=new Uint8Array(await this._prim.dh(u,e.recipientPublicKey));a=d(y,b)}let s;if(e.senderKey===void 0)s=d(new Uint8Array(r),new Uint8Array(n));else{let u=v(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),y=await this._prim.serializePublicKey(u);s=Re(new Uint8Array(r),new Uint8Array(n),new Uint8Array(y))}let o=await this._generateSharedSecret(a,s);return{enc:r,sharedSecret:o}}catch(a){throw new N(a)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=v(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=v(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),a=await this._prim.serializePublicKey(n);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(r,t));else{let u=new Uint8Array(await this._prim.dh(r,t)),y=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));s=d(u,y)}let o;if(e.senderPublicKey===void 0)o=d(new Uint8Array(e.enc),new Uint8Array(a));else{let u=await this._prim.serializePublicKey(e.senderPublicKey);o=new Uint8Array(e.enc.byteLength+a.byteLength+u.byteLength),o.set(new Uint8Array(e.enc),0),o.set(new Uint8Array(a),e.enc.byteLength),o.set(new Uint8Array(u),e.enc.byteLength+a.byteLength)}return await this._generateSharedSecret(s,o)}catch(s){throw new T(s)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Ce,e),n=this._kdf.buildLabeledInfo(Me,t,this.secretSize);return await this._kdf.extractAndExpand(c,r,n,this.secretSize)}};var Z=["deriveBits"],Q=new Uint8Array([100,107,112,95,112,114,107]),Pe=new Uint8Array([115,107]);var V=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var Ge=new Uint8Array([99,97,110,100,105,100,97,116,101]),Fe=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),qe=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Ye=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),$e=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Xe=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Je=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),E=class extends x{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case h.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=Fe,this._bitmask=255,this._pkcs8AlgId=$e;break;case h.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=qe,this._bitmask=255,this._pkcs8AlgId=Xe;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Ye,this._bitmask=1,this._pkcs8AlgId=Je;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new P(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new m(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return me(t.d)}catch(t){throw new P(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new m(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new m(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,Z)}catch(e){throw new p(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(c,Q,new Uint8Array(e)),r=new V(this._nSk);for(let a=0;r.isZero()||!r.lessThan(this._order);a++){if(a>255)throw new Error("Faild to derive a key pair");let s=new Uint8Array(await this._hkdf.labeledExpand(t,Ge,w(a,1),this._nSk));s[0]=s[0]&this._bitmask,r.set(s)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new G(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new m(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new P(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,Z)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,Z)}};var ee=class extends S{constructor(){let e=new L,t=new E(h.DhkemP256HkdfSha256,e);super(h.DhkemP256HkdfSha256,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}},te=class extends S{constructor(){let e=new O,t=new E(h.DhkemP384HkdfSha384,e);super(h.DhkemP384HkdfSha384,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}},re=class extends S{constructor(){let e=new j,t=new E(h.DhkemP521HkdfSha512,e);super(h.DhkemP521HkdfSha512,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var ce=class extends J{},le=class extends ee{},he=class extends te{},fe=class extends re{},de=class extends L{},ye=class extends O{},be=class extends j{};var H=class{constructor(e,t,r,n=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=r,this.algorithm={name:e},this.usages=n,r==="public"&&(this.usages=[])}};var pe=class{constructor(e,t,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=t,this._b=r,this._kdf=n;let a=new Uint8Array(W);a.set(w(this.id,2),3),this._kdf.init(a)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new P(t)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(t){throw new m(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new P(t)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(t){throw new m(t)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),t=await this._b.generateKeyPair(),r=await this._a.serializePublicKey(e.publicKey),n=await this._a.serializePrivateKey(e.privateKey),a=await this._b.serializePublicKey(t.publicKey),s=await this._b.serializePrivateKey(t.privateKey);return{publicKey:await this.deserializePublicKey(d(new Uint8Array(r),new Uint8Array(a))),privateKey:await this.deserializePrivateKey(d(new Uint8Array(n),new Uint8Array(s)))}}async deriveKeyPair(e){let t=await this._kdf.labeledExtract(c,Q,new Uint8Array(e)),r=new Uint8Array(await this._kdf.labeledExpand(t,Pe,c,96)),n=r.slice(0,32),a=r.slice(32,96),s=await this._a.deriveKeyPair(n),o=await this._b.deriveKeyPair(a),u=await this._a.serializePublicKey(s.publicKey),y=await this._a.serializePrivateKey(s.privateKey),b=await this._b.serializePublicKey(o.publicKey),I=await this._b.serializePrivateKey(o.privateKey);return{publicKey:await this.deserializePublicKey(d(new Uint8Array(u),new Uint8Array(b))),privateKey:await this.deserializePrivateKey(d(new Uint8Array(y),new Uint8Array(I)))}}async importKey(e,t,r=!0){if(e!=="raw")throw new p("'jwk' is not supported");if(!(t instanceof ArrayBuffer))throw new l("Invalid type of key");return r?await this.deserializePublicKey(t):await this.deserializePrivateKey(t)}async encap(e){let t,r;if(e.ekm!==void 0&&!v(e.ekm)){if(e.ekm.byteLength!==64)throw new l("ekm must be 64 bytes in length");t=e.ekm.slice(0,32),r=e.ekm.slice(32)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),a=await this._a.deserializePublicKey(n.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(n.slice(this._a.publicKeySize)),o=await this._a.encap({recipientPublicKey:a,ekm:t}),u=await this._b.encap({recipientPublicKey:s,ekm:r});return{sharedSecret:d(new Uint8Array(o.sharedSecret),new Uint8Array(u.sharedSecret)),enc:d(new Uint8Array(o.enc),new Uint8Array(u.enc))}}async decap(e){let t=v(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,r=new Uint8Array(await this.serializePrivateKey(t)),n=await this._a.deserializePrivateKey(r.slice(0,this._a.privateKeySize)),a=await this._b.deserializePrivateKey(r.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:n,enc:e.enc.slice(0,this._a.encSize)}),o=await this._b.decap({recipientKey:a,enc:e.enc.slice(this._a.encSize)});return d(new Uint8Array(s),new Uint8Array(o))}_serializePublicKey(e){return new Promise((t,r)=>{e.type!=="public"&&r(new Error("Not public key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePublicKey(e){return new Promise((t,r)=>{e.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((t,r)=>{e.type!=="private"&&r(new Error("Not private key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((t,r)=>{e.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};export{k as AeadId,F as Aes128Gcm,se as Aes256Gcm,ie as BaseError,ce as CipherSuite,T as DecapError,G as DeriveKeyPairError,m as DeserializeError,S as Dhkem,le as DhkemP256HkdfSha256,he as DhkemP384HkdfSha384,fe as DhkemP521HkdfSha512,E as Ec,N as EncapError,B as ExportError,oe as ExportOnly,de as HkdfSha256,ye as HkdfSha384,be as HkdfSha512,f as HpkeError,pe as Hybridkem,K as INPUT_LENGTH_LIMIT,l as InvalidParamError,A as KdfId,h as KemId,R as MessageLimitReachedError,p as NotSupportedError,M as OpenError,C as SealError,P as SerializeError,_e as ValidationError,H as XCryptoKey}; +var Y=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},d=class extends Y{},l=class extends d{},ne=class extends d{},g=class extends d{},x=class extends d{},D=class extends d{},N=class extends d{},T=class extends d{},B=class extends d{},M=class extends d{},C=class extends d{},R=class extends d{},y=class extends d{};var Ee={},ge=Ie(globalThis,Ee);function Ie(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),a=new Set(n);return[...r.filter(s=>!a.has(s)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}async function Ue(){if(ge!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new y(i)}}var m=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await Ue())}};var P={Base:0,Psk:1,Auth:2,AuthPsk:3},h={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},A={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},K={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var c=new Uint8Array(0);var G=new Uint8Array([75,69,77,0,0]);var k=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function b(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function f(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function Pe(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;n8192)throw new l("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():k(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let a;if(e.senderKey===void 0)a=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let o=k(e.senderKey)?e.senderKey.privateKey:e.senderKey,p=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),w=new Uint8Array(await this._prim.dh(o,e.recipientPublicKey));a=f(p,w)}let s;if(e.senderKey===void 0)s=f(new Uint8Array(r),new Uint8Array(n));else{let o=k(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),p=await this._prim.serializePublicKey(o);s=je(new Uint8Array(r),new Uint8Array(n),new Uint8Array(p))}let u=await this._generateSharedSecret(a,s);return{enc:r,sharedSecret:u}}catch(a){throw new D(a)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=k(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),a=await this._prim.serializePublicKey(n);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(r,t));else{let o=new Uint8Array(await this._prim.dh(r,t)),p=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));s=f(o,p)}let u;if(e.senderPublicKey===void 0)u=f(new Uint8Array(e.enc),new Uint8Array(a));else{let o=await this._prim.serializePublicKey(e.senderPublicKey);u=new Uint8Array(e.enc.byteLength+a.byteLength+o.byteLength),u.set(new Uint8Array(e.enc),0),u.set(new Uint8Array(a),e.enc.byteLength),u.set(new Uint8Array(o),e.enc.byteLength+a.byteLength)}return await this._generateSharedSecret(s,u)}catch(s){throw new N(s)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Le,e),n=this._kdf.buildLabeledInfo(Oe,t,this.secretSize);return await this._kdf.extractAndExpand(c,r,n,this.secretSize)}};var $=["deriveBits"],F=new Uint8Array([100,107,112,95,112,114,107]),se=new Uint8Array([115,107]);var X=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var He=new Uint8Array([99,97,110,100,105,100,97,116,101]),De=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),Ne=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Te=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Be=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Me=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Ce=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),E=class extends m{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case h.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=De,this._bitmask=255,this._pkcs8AlgId=Be;break;case h.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=Ne,this._bitmask=255,this._pkcs8AlgId=Me;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Te,this._bitmask=1,this._pkcs8AlgId=Ce;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new g(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new x(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return Pe(t.d)}catch(t){throw new g(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new x(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new x(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,$)}catch(e){throw new y(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(c,F,new Uint8Array(e)),r=new X(this._nSk);for(let a=0;r.isZero()||!r.lessThan(this._order);a++){if(a>255)throw new Error("Faild to derive a key pair");let s=new Uint8Array(await this._hkdf.labeledExpand(t,He,b(a,1),this._nSk));s[0]=s[0]&this._bitmask,r.set(s)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new R(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new x(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new g(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,$)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,$)}};var ue=["encrypt","decrypt"];var ce=class extends m{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(n,this._key,t)}async open(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(n,this._key,t)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,ue)}},J=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new ce(e)}},le=class extends J{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var he=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new y("Export only")}};function de(){return new Promise((i,e)=>{e(new y("Not supported"))})}var Re=new Uint8Array([115,101,99]),z=class{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await de()}async open(e,t){return await de()}async export(e,t){if(e.byteLength>8192)throw new l("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Re,new Uint8Array(e),t)}catch(r){throw new T(r)}}},W=class extends z{},Z=class extends z{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}};var U=class extends z{constructor(e,t,r){if(super(e,t,r.exporterSecret),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nK",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nN",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_ctx",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),r.key===void 0||r.baseNonce===void 0||r.seq===void 0)throw new Error("Required parameters are missing");this._aead=r.aead,this._nK=this._aead.keySize,this._nN=this._aead.nonceSize,this._nT=this._aead.tagSize;let n=this._aead.createEncryptionContext(r.key);this._ctx={key:n,baseNonce:r.baseNonce,seq:r.seq}}computeNonce(e){let t=b(e.seq,e.baseNonce.byteLength);return ae(e.baseNonce,t)}incrementSeq(e){if(e.seq>Number.MAX_SAFE_INTEGER)throw new C("Message limit reached");e.seq+=1}};var V=class extends U{async open(e,t=c){let r;try{r=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(n){throw new M(n)}return this.incrementSeq(this._ctx),r}};var Q=class extends U{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}async seal(e,t=c){let r;try{r=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(n){throw new B(n)}return this.incrementSeq(this._ctx),r}};var Ge=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),Fe=new Uint8Array([101,120,112]),qe=new Uint8Array([105,110,102,111,95,104,97,115,104]),Ye=new Uint8Array([107,101,121]),$e=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Xe=new Uint8Array([115,101,99,114,101,116]),Je=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),ee=class extends m{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new l("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new l("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new l("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Je),this._suiteId.set(b(this._kem.id,2),4),this._suiteId.set(b(this._kdf.id,2),6),this._suiteId.set(b(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.encap(e),r;return e.psk!==void 0?r=e.senderKey!==void 0?P.AuthPsk:P.Psk:r=e.senderKey!==void 0?P.Auth:P.Base,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.decap(e),r;return e.psk!==void 0?r=e.senderPublicKey!==void 0?P.AuthPsk:P.Psk:r=e.senderPublicKey!==void 0?P.Auth:P.Base,await this._keyScheduleR(r,t,e)}async seal(e,t,r=c){let n=await this.createSenderContext(e);return{ct:await n.seal(t,r),enc:n.enc}}async open(e,t,r=c){return await(await this.createRecipientContext(e)).open(t,r)}async _keySchedule(e,t,r){let n=r.psk===void 0?c:new Uint8Array(r.psk.id),a=await this._kdf.labeledExtract(c,$e,n),s=r.info===void 0?c:new Uint8Array(r.info),u=await this._kdf.labeledExtract(c,qe,s),o=new Uint8Array(1+a.byteLength+u.byteLength);o.set(new Uint8Array([e]),0),o.set(new Uint8Array(a),1),o.set(new Uint8Array(u),1+a.byteLength);let p=r.psk===void 0?c:new Uint8Array(r.psk.key),w=this._kdf.buildLabeledIkm(Xe,p),I=this._kdf.buildLabeledInfo(Fe,o,this._kdf.hashSize),_=await this._kdf.extractAndExpand(t,w,I,this._kdf.hashSize);if(this._aead.id===K.ExportOnly)return{aead:this._aead,exporterSecret:_};let Ke=this._kdf.buildLabeledInfo(Ye,o,this._aead.keySize),ve=await this._kdf.extractAndExpand(t,w,Ke,this._aead.keySize),Ae=this._kdf.buildLabeledInfo(Ge,o,this._aead.nonceSize),Se=await this._kdf.extractAndExpand(t,w,Ae,this._aead.nonceSize);return{aead:this._aead,exporterSecret:_,key:ve,baseNonce:new Uint8Array(Se),seq:0}}async _keyScheduleS(e,t,r,n){let a=await this._keySchedule(e,t,n);return a.key===void 0?new Z(this._api,this._kdf,a.exporterSecret,r):new Q(this._api,this._kdf,a,r)}async _keyScheduleR(e,t,r){let n=await this._keySchedule(e,t,r);return n.key===void 0?new W(this._api,this._kdf,n.exporterSecret):new V(this._api,this._kdf,n)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new l("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new l(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new l("Too long psk.key");if(e.psk.id.byteLength>8192)throw new l("Too long psk.id")}}};var ke=new Uint8Array([72,80,75,69,45,118,49]),q=class extends m{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:c}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(ke,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();let n=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set(new Uint8Array([0,r]),0),n.set(ke,2),n.set(this._suiteId,9),n.set(e,9+this._suiteId.byteLength),n.set(t,9+this._suiteId.byteLength+e.byteLength),n}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new l("The salt length must be the same as the hashSize");let r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),a=new ArrayBuffer(r),s=new Uint8Array(a),u=c,o=new Uint8Array(t),p=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");let w=new Uint8Array(this.hashSize+o.length+1);for(let I=1,_=0;_=u.length?(s.set(u,_),_+=u.length):(s.set(u.slice(0,s.length-_),_),_+=s.length-_);return a}async extractAndExpand(e,t,r,n){await this._setup();let a=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},a,n*8)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r))}async labeledExpand(e,t,r,n){return await this.expand(e,this.buildLabeledInfo(t,r,n),n)}_checkInit(){if(this._suiteId===c)throw new Error("Not initialized. Call init()")}},L=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},O=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},j=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var te=class extends S{constructor(){let e=new L,t=new E(h.DhkemP256HkdfSha256,e);super(h.DhkemP256HkdfSha256,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}},re=class extends S{constructor(){let e=new O,t=new E(h.DhkemP384HkdfSha384,e);super(h.DhkemP384HkdfSha384,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}},ie=class extends S{constructor(){let e=new j,t=new E(h.DhkemP521HkdfSha512,e);super(h.DhkemP521HkdfSha512,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var fe=class extends ee{},ye=class extends te{},be=class extends re{},pe=class extends ie{},we=class extends L{},_e=class extends O{},xe=class extends j{};var H=class{constructor(e,t,r,n=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=r,this.algorithm={name:e},this.usages=n,r==="public"&&(this.usages=[])}};var me=class{constructor(e,t,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=t,this._b=r,this._kdf=n;let a=new Uint8Array(G);a.set(b(this.id,2),3),this._kdf.init(a)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new g(t)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(t){throw new x(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new g(t)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(t){throw new x(t)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),t=await this._b.generateKeyPair(),r=await this._a.serializePublicKey(e.publicKey),n=await this._a.serializePrivateKey(e.privateKey),a=await this._b.serializePublicKey(t.publicKey),s=await this._b.serializePrivateKey(t.privateKey);return{publicKey:await this.deserializePublicKey(f(new Uint8Array(r),new Uint8Array(a))),privateKey:await this.deserializePrivateKey(f(new Uint8Array(n),new Uint8Array(s)))}}async deriveKeyPair(e){let t=await this._kdf.labeledExtract(c,F,new Uint8Array(e)),r=new Uint8Array(await this._kdf.labeledExpand(t,se,c,96)),n=r.slice(0,32),a=r.slice(32,96),s=await this._a.deriveKeyPair(n),u=await this._b.deriveKeyPair(a),o=await this._a.serializePublicKey(s.publicKey),p=await this._a.serializePrivateKey(s.privateKey),w=await this._b.serializePublicKey(u.publicKey),I=await this._b.serializePrivateKey(u.privateKey);return{publicKey:await this.deserializePublicKey(f(new Uint8Array(o),new Uint8Array(w))),privateKey:await this.deserializePrivateKey(f(new Uint8Array(p),new Uint8Array(I)))}}async importKey(e,t,r=!0){if(e!=="raw")throw new y("'jwk' is not supported");if(!(t instanceof ArrayBuffer))throw new l("Invalid type of key");return r?await this.deserializePublicKey(t):await this.deserializePrivateKey(t)}async encap(e){let t,r;if(e.ekm!==void 0&&!k(e.ekm)){if(e.ekm.byteLength!==64)throw new l("ekm must be 64 bytes in length");t=e.ekm.slice(0,32),r=e.ekm.slice(32)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),a=await this._a.deserializePublicKey(n.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(n.slice(this._a.publicKeySize)),u=await this._a.encap({recipientPublicKey:a,ekm:t}),o=await this._b.encap({recipientPublicKey:s,ekm:r});return{sharedSecret:f(new Uint8Array(u.sharedSecret),new Uint8Array(o.sharedSecret)),enc:f(new Uint8Array(u.enc),new Uint8Array(o.enc))}}async decap(e){let t=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,r=new Uint8Array(await this.serializePrivateKey(t)),n=await this._a.deserializePrivateKey(r.slice(0,this._a.privateKeySize)),a=await this._b.deserializePrivateKey(r.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:n,enc:e.enc.slice(0,this._a.encSize)}),u=await this._b.decap({recipientKey:a,enc:e.enc.slice(this._a.encSize)});return f(new Uint8Array(s),new Uint8Array(u))}_serializePublicKey(e){return new Promise((t,r)=>{e.type!=="public"&&r(new Error("Not public key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePublicKey(e){return new Promise((t,r)=>{e.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((t,r)=>{e.type!=="private"&&r(new Error("Not private key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((t,r)=>{e.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};export{K as AeadId,J as Aes128Gcm,le as Aes256Gcm,Y as BaseError,fe as CipherSuite,N as DecapError,R as DeriveKeyPairError,x as DeserializeError,ye as DhkemP256HkdfSha256,be as DhkemP384HkdfSha384,pe as DhkemP521HkdfSha512,D as EncapError,T as ExportError,he as ExportOnly,we as HkdfSha256,_e as HkdfSha384,xe as HkdfSha512,d as HpkeError,me as Hybridkem,l as InvalidParamError,A as KdfId,h as KemId,C as MessageLimitReachedError,y as NotSupportedError,M as OpenError,B as SealError,g as SerializeError,ne as ValidationError,H as XCryptoKey}; diff --git a/dhkem-secp256k1/docs/classes/DhkemSecp256k1HkdfSha256.html b/dhkem-secp256k1/docs/classes/DhkemSecp256k1HkdfSha256.html index 14b3e5667..93ba53a1a 100644 --- a/dhkem-secp256k1/docs/classes/DhkemSecp256k1HkdfSha256.html +++ b/dhkem-secp256k1/docs/classes/DhkemSecp256k1HkdfSha256.html @@ -13,7 +13,7 @@

Note that it is experimental and not standardized.

-

Hierarchy

  • Dhkem
    • DhkemSecp256k1HkdfSha256

Constructors

Hierarchy

  • Dhkem
    • DhkemSecp256k1HkdfSha256

Constructors

Properties

Constructors

Properties

_kdf: KdfInterface
_prim: DhkemPrimitives
encSize: number = 33

33

-
id: KemId = KemId.DhkemSecp256k1HkdfSha256

KemId.DhkemSecp256k1HkdfSha256 (0x0013) EXPERIMENTAL

-
privateKeySize: number = 32

32

-
publicKeySize: number = 33

33

-
secretSize: number = 32

32

-

Methods

  • Experimental

    Recovers the ephemeral symmetric key from its encapsulated representation enc.

    +

Constructors

Properties

_kdf: KdfInterface
_prim: DhkemPrimitives
encSize: number = 33

33

+
id: KemId = KemId.DhkemSecp256k1HkdfSha256

KemId.DhkemSecp256k1HkdfSha256 (0x0013) EXPERIMENTAL

+
privateKeySize: number = 32

32

+
publicKeySize: number = 33

33

+
secretSize: number = 32

32

+

Methods

  • Experimental

    Recovers the ephemeral symmetric key from its encapsulated representation enc.

    If the error occurred, throws DecapError.

    Parameters

    • params: RecipientContextParams

      A set of parameters for the recipient context.

    Returns Promise<ArrayBuffer>

    A shared secret as the output of the decapsulation step.

    DecapError

    -
  • Experimental

    Derives a key pair from the byte string ikm.

    +
  • Experimental

    Derives a key pair from the byte string ikm.

    If the error occurred, throws DeriveKeyPairError.

    Parameters

    • ikm: ArrayBuffer

      An input keying material.

    Returns Promise<CryptoKeyPair>

    A key pair derived.

    DeriveKeyPairError

    -
  • Experimental

    Deserializes a private key as a byte string of length Nsk to CryptoKey.

    +
  • Experimental

    Deserializes a private key as a byte string of length Nsk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

    DeserializeError

    -
  • Experimental

    Deserializes a public key as a byte string of length Npk to CryptoKey.

    +
  • Experimental

    Deserializes a public key as a byte string of length Npk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

    DeserializeError

    -
  • Experimental

    Generates an ephemeral, fixed-length symmetric key and +

  • Experimental

    Generates an ephemeral, fixed-length symmetric key and a fixed-length encapsulation of the key that can be decapsulated by the holder of the private key corresponding to pkR.

    If the error occurred, throws EncapError.

    Parameters

    • params: SenderContextParams

      A set of parameters for the sender context.

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    EncapError

    -
  • Experimental

    Generates a key pair.

    +
  • Experimental

    Generates a key pair.

    If the error occurred, throws NotSupportedError.

    Returns Promise<CryptoKeyPair>

    A key pair generated.

    NotSupportedError

    -
  • Experimental

    Imports a public or private key and converts to a CryptoKey.

    +
  • Experimental

    Imports a public or private key and converts to a CryptoKey.

    Since key parameters for createSenderContext or createRecipientContext are CryptoKey format, you have to use this function to convert provided keys to CryptoKey.

    @@ -78,14 +78,14 @@
  • isPublic: boolean = true

    The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

Returns Promise<CryptoKey>

A public or private CryptoKey.

DeserializeError

-
  • Experimental

    Serializes a private key as CryptoKey to a byte string of length Nsk.

    +
  • Experimental

    Serializes a private key as CryptoKey to a byte string of length Nsk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

    SerializeError

    -
  • Experimental

    Serializes a public key as CryptoKey to a byte string of length Npk.

    +
  • Experimental

    Serializes a public key as CryptoKey to a byte string of length Npk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

    SerializeError

    -
+
diff --git a/dhkem-secp256k1/src/hpke-common.js b/dhkem-secp256k1/src/hpke-common.js index 0aff511e4..d6dcc8e83 100644 --- a/dhkem-secp256k1/src/hpke-common.js +++ b/dhkem-secp256k1/src/hpke-common.js @@ -1 +1 @@ -var e={Base:0,Psk:1,Auth:2,AuthPsk:3},x={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},d={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},h={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var k=["encrypt","decrypt"];export{k as AEAD_USAGES,h as AeadId,d as KdfId,x as KemId,e as Mode}; +var v=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},o=class extends v{},b=class extends o{},D=class extends o{},u=class extends o{},h=class extends o{},m=class extends o{},K=class extends o{},T=class extends o{},z=class extends o{},H=class extends o{},R=class extends o{},P=class extends o{},x=class extends o{};var B={},C=N(globalThis,B);function N(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),s=new Set(n);return[...r.filter(a=>!s.has(a)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}async function j(){if(C!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new x(i)}}var _=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await j())}};var F={Base:0,Psk:1,Auth:2,AuthPsk:3},g={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},Y={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},X={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var E=8192,J=32,w=new Uint8Array(0);var S=new Uint8Array([75,69,77,0,0]);var l=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function p(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function y(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function M(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;n8192)throw new b("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():l(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let s;if(e.senderKey===void 0)s=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let c=l(e.senderKey)?e.senderKey.privateKey:e.senderKey,d=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),G=new Uint8Array(await this._prim.dh(c,e.recipientPublicKey));s=y(d,G)}let a;if(e.senderKey===void 0)a=y(new Uint8Array(r),new Uint8Array(n));else{let c=l(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),d=await this._prim.serializePublicKey(c);a=q(new Uint8Array(r),new Uint8Array(n),new Uint8Array(d))}let f=await this._generateSharedSecret(s,a);return{enc:r,sharedSecret:f}}catch(s){throw new m(s)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=l(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=l(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),s=await this._prim.serializePublicKey(n);try{let a;if(e.senderPublicKey===void 0)a=new Uint8Array(await this._prim.dh(r,t));else{let c=new Uint8Array(await this._prim.dh(r,t)),d=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));a=y(c,d)}let f;if(e.senderPublicKey===void 0)f=y(new Uint8Array(e.enc),new Uint8Array(s));else{let c=await this._prim.serializePublicKey(e.senderPublicKey);f=new Uint8Array(e.enc.byteLength+s.byteLength+c.byteLength),f.set(new Uint8Array(e.enc),0),f.set(new Uint8Array(s),e.enc.byteLength),f.set(new Uint8Array(c),e.enc.byteLength+s.byteLength)}return await this._generateSharedSecret(a,f)}catch(a){throw new K(a)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Z,e),n=this._kdf.buildLabeledInfo($,t,this.secretSize);return await this._kdf.extractAndExpand(w,r,n,this.secretSize)}};var k=["deriveBits"],I=new Uint8Array([100,107,112,95,112,114,107]),Q=new Uint8Array([115,107]);var A=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var V=new Uint8Array([99,97,110,100,105,100,97,116,101]),ee=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),te=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),re=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),ie=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),ne=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),se=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),L=class extends _{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case g.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=ee,this._bitmask=255,this._pkcs8AlgId=ie;break;case g.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=te,this._bitmask=255,this._pkcs8AlgId=ne;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=re,this._bitmask=1,this._pkcs8AlgId=se;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new u(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new h(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return M(t.d)}catch(t){throw new u(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new h(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new h(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,k)}catch(e){throw new x(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(w,I,new Uint8Array(e)),r=new A(this._nSk);for(let s=0;r.isZero()||!r.lessThan(this._order);s++){if(s>255)throw new Error("Faild to derive a key pair");let a=new Uint8Array(await this._hkdf.labeledExpand(t,V,p(s,1),this._nSk));a[0]=a[0]&this._bitmask,r.set(a)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new P(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new h(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new u(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,k)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,k)}};var ae=["encrypt","decrypt"];export{ae as AEAD_USAGES,X as AeadId,v as BaseError,K as DecapError,P as DeriveKeyPairError,h as DeserializeError,U as Dhkem,w as EMPTY,L as Ec,m as EncapError,T as ExportError,o as HpkeError,E as INPUT_LENGTH_LIMIT,b as InvalidParamError,Y as KdfId,g as KemId,I as LABEL_DKP_PRK,Q as LABEL_SK,J as MINIMUM_PSK_LENGTH,R as MessageLimitReachedError,F as Mode,_ as NativeAlgorithm,x as NotSupportedError,H as OpenError,S as SUITE_ID_HEADER_KEM,z as SealError,u as SerializeError,D as ValidationError,y as concat,p as i2Osp,l as isCryptoKeyPair,W as xor}; diff --git a/dhkem-secp256k1/src/hpke-core.js b/dhkem-secp256k1/src/hpke-core.js index a61ab417f..2daa361d0 100644 --- a/dhkem-secp256k1/src/hpke-core.js +++ b/dhkem-secp256k1/src/hpke-core.js @@ -1 +1 @@ -var Se={},we=Ee(globalThis,Se);function Ee(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),a=new Set(n);return[...r.filter(s=>!a.has(s)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}var ie=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},f=class extends ie{},l=class extends f{},_e=class extends f{},P=class extends f{},m=class extends f{},N=class extends f{},T=class extends f{},B=class extends f{},C=class extends f{},M=class extends f{},R=class extends f{},G=class extends f{},p=class extends f{};async function ze(){if(we!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new p(i)}}var x=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await ze())}};var g={Base:0,Psk:1,Auth:2,AuthPsk:3},h={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},A={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},k={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var ne=["encrypt","decrypt"];var ae=class extends x{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(n,this._key,t)}async open(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(n,this._key,t)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,ne)}},F=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new ae(e)}},se=class extends F{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var oe=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new p("Export only")}};var K=8192;var c=new Uint8Array(0);function ue(){return new Promise((i,e)=>{e(new p("Not supported"))})}var Ue=new Uint8Array([115,101,99]),z=class{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await ue()}async open(e,t){return await ue()}async export(e,t){if(e.byteLength>8192)throw new l("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Ue,new Uint8Array(e),t)}catch(r){throw new B(r)}}},q=class extends z{},Y=class extends z{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}};var v=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function w(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function d(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function me(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;nNumber.MAX_SAFE_INTEGER)throw new R("Message limit reached");e.seq+=1}};var $=class extends U{async open(e,t=c){let r;try{r=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(n){throw new M(n)}return this.incrementSeq(this._ctx),r}};var X=class extends U{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}async seal(e,t=c){let r;try{r=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(n){throw new C(n)}return this.incrementSeq(this._ctx),r}};var Oe=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),je=new Uint8Array([101,120,112]),He=new Uint8Array([105,110,102,111,95,104,97,115,104]),De=new Uint8Array([107,101,121]),Ne=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Te=new Uint8Array([115,101,99,114,101,116]),Be=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),J=class extends x{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new l("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new l("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new l("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Be),this._suiteId.set(w(this._kem.id,2),4),this._suiteId.set(w(this._kdf.id,2),6),this._suiteId.set(w(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.encap(e),r;return e.psk!==void 0?r=e.senderKey!==void 0?g.AuthPsk:g.Psk:r=e.senderKey!==void 0?g.Auth:g.Base,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.decap(e),r;return e.psk!==void 0?r=e.senderPublicKey!==void 0?g.AuthPsk:g.Psk:r=e.senderPublicKey!==void 0?g.Auth:g.Base,await this._keyScheduleR(r,t,e)}async seal(e,t,r=c){let n=await this.createSenderContext(e);return{ct:await n.seal(t,r),enc:n.enc}}async open(e,t,r=c){return await(await this.createRecipientContext(e)).open(t,r)}async _keySchedule(e,t,r){let n=r.psk===void 0?c:new Uint8Array(r.psk.id),a=await this._kdf.labeledExtract(c,Ne,n),s=r.info===void 0?c:new Uint8Array(r.info),o=await this._kdf.labeledExtract(c,He,s),u=new Uint8Array(1+a.byteLength+o.byteLength);u.set(new Uint8Array([e]),0),u.set(new Uint8Array(a),1),u.set(new Uint8Array(o),1+a.byteLength);let y=r.psk===void 0?c:new Uint8Array(r.psk.key),b=this._kdf.buildLabeledIkm(Te,y),I=this._kdf.buildLabeledInfo(je,u,this._kdf.hashSize),_=await this._kdf.extractAndExpand(t,b,I,this._kdf.hashSize);if(this._aead.id===k.ExportOnly)return{aead:this._aead,exporterSecret:_};let ke=this._kdf.buildLabeledInfo(De,u,this._aead.keySize),Ke=await this._kdf.extractAndExpand(t,b,ke,this._aead.keySize),ve=this._kdf.buildLabeledInfo(Oe,u,this._aead.nonceSize),Ae=await this._kdf.extractAndExpand(t,b,ve,this._aead.nonceSize);return{aead:this._aead,exporterSecret:_,key:Ke,baseNonce:new Uint8Array(Ae),seq:0}}async _keyScheduleS(e,t,r,n){let a=await this._keySchedule(e,t,n);return a.key===void 0?new Y(this._api,this._kdf,a.exporterSecret,r):new X(this._api,this._kdf,a,r)}async _keyScheduleR(e,t,r){let n=await this._keySchedule(e,t,r);return n.key===void 0?new q(this._api,this._kdf,n.exporterSecret):new $(this._api,this._kdf,n)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new l("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new l(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new l("Too long psk.key");if(e.psk.id.byteLength>8192)throw new l("Too long psk.id")}}};var ge=new Uint8Array([72,80,75,69,45,118,49]),D=class extends x{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:c}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(ge,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();let n=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set(new Uint8Array([0,r]),0),n.set(ge,2),n.set(this._suiteId,9),n.set(e,9+this._suiteId.byteLength),n.set(t,9+this._suiteId.byteLength+e.byteLength),n}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new l("The salt length must be the same as the hashSize");let r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),a=new ArrayBuffer(r),s=new Uint8Array(a),o=c,u=new Uint8Array(t),y=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");let b=new Uint8Array(this.hashSize+u.length+1);for(let I=1,_=0;_=o.length?(s.set(o,_),_+=o.length):(s.set(o.slice(0,s.length-_),_),_+=s.length-_);return a}async extractAndExpand(e,t,r,n){await this._setup();let a=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},a,n*8)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r))}async labeledExpand(e,t,r,n){return await this.expand(e,this.buildLabeledInfo(t,r,n),n)}_checkInit(){if(this._suiteId===c)throw new Error("Not initialized. Call init()")}},L=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},O=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},j=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var W=new Uint8Array([75,69,77,0,0]);var Ce=new Uint8Array([101,97,101,95,112,114,107]),Me=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function Re(i,e,t){let r=new Uint8Array(i.length+e.length+t.length);return r.set(i,0),r.set(e,i.length),r.set(t,i.length+e.length),r}var S=class{constructor(e,t,r){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=t,this._kdf=r;let n=new Uint8Array(W);n.set(w(this.id,2),3),this._kdf.init(n)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,t,r=!0){return await this._prim.importKey(e,t,r)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new l("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():v(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let a;if(e.senderKey===void 0)a=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let u=v(e.senderKey)?e.senderKey.privateKey:e.senderKey,y=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),b=new Uint8Array(await this._prim.dh(u,e.recipientPublicKey));a=d(y,b)}let s;if(e.senderKey===void 0)s=d(new Uint8Array(r),new Uint8Array(n));else{let u=v(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),y=await this._prim.serializePublicKey(u);s=Re(new Uint8Array(r),new Uint8Array(n),new Uint8Array(y))}let o=await this._generateSharedSecret(a,s);return{enc:r,sharedSecret:o}}catch(a){throw new N(a)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=v(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=v(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),a=await this._prim.serializePublicKey(n);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(r,t));else{let u=new Uint8Array(await this._prim.dh(r,t)),y=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));s=d(u,y)}let o;if(e.senderPublicKey===void 0)o=d(new Uint8Array(e.enc),new Uint8Array(a));else{let u=await this._prim.serializePublicKey(e.senderPublicKey);o=new Uint8Array(e.enc.byteLength+a.byteLength+u.byteLength),o.set(new Uint8Array(e.enc),0),o.set(new Uint8Array(a),e.enc.byteLength),o.set(new Uint8Array(u),e.enc.byteLength+a.byteLength)}return await this._generateSharedSecret(s,o)}catch(s){throw new T(s)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Ce,e),n=this._kdf.buildLabeledInfo(Me,t,this.secretSize);return await this._kdf.extractAndExpand(c,r,n,this.secretSize)}};var Z=["deriveBits"],Q=new Uint8Array([100,107,112,95,112,114,107]),Pe=new Uint8Array([115,107]);var V=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var Ge=new Uint8Array([99,97,110,100,105,100,97,116,101]),Fe=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),qe=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Ye=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),$e=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Xe=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Je=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),E=class extends x{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case h.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=Fe,this._bitmask=255,this._pkcs8AlgId=$e;break;case h.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=qe,this._bitmask=255,this._pkcs8AlgId=Xe;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Ye,this._bitmask=1,this._pkcs8AlgId=Je;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new P(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new m(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return me(t.d)}catch(t){throw new P(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new m(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new m(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,Z)}catch(e){throw new p(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(c,Q,new Uint8Array(e)),r=new V(this._nSk);for(let a=0;r.isZero()||!r.lessThan(this._order);a++){if(a>255)throw new Error("Faild to derive a key pair");let s=new Uint8Array(await this._hkdf.labeledExpand(t,Ge,w(a,1),this._nSk));s[0]=s[0]&this._bitmask,r.set(s)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new G(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new m(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new P(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,Z)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,Z)}};var ee=class extends S{constructor(){let e=new L,t=new E(h.DhkemP256HkdfSha256,e);super(h.DhkemP256HkdfSha256,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}},te=class extends S{constructor(){let e=new O,t=new E(h.DhkemP384HkdfSha384,e);super(h.DhkemP384HkdfSha384,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}},re=class extends S{constructor(){let e=new j,t=new E(h.DhkemP521HkdfSha512,e);super(h.DhkemP521HkdfSha512,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var ce=class extends J{},le=class extends ee{},he=class extends te{},fe=class extends re{},de=class extends L{},ye=class extends O{},be=class extends j{};var H=class{constructor(e,t,r,n=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=r,this.algorithm={name:e},this.usages=n,r==="public"&&(this.usages=[])}};var pe=class{constructor(e,t,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=t,this._b=r,this._kdf=n;let a=new Uint8Array(W);a.set(w(this.id,2),3),this._kdf.init(a)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new P(t)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(t){throw new m(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new P(t)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(t){throw new m(t)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),t=await this._b.generateKeyPair(),r=await this._a.serializePublicKey(e.publicKey),n=await this._a.serializePrivateKey(e.privateKey),a=await this._b.serializePublicKey(t.publicKey),s=await this._b.serializePrivateKey(t.privateKey);return{publicKey:await this.deserializePublicKey(d(new Uint8Array(r),new Uint8Array(a))),privateKey:await this.deserializePrivateKey(d(new Uint8Array(n),new Uint8Array(s)))}}async deriveKeyPair(e){let t=await this._kdf.labeledExtract(c,Q,new Uint8Array(e)),r=new Uint8Array(await this._kdf.labeledExpand(t,Pe,c,96)),n=r.slice(0,32),a=r.slice(32,96),s=await this._a.deriveKeyPair(n),o=await this._b.deriveKeyPair(a),u=await this._a.serializePublicKey(s.publicKey),y=await this._a.serializePrivateKey(s.privateKey),b=await this._b.serializePublicKey(o.publicKey),I=await this._b.serializePrivateKey(o.privateKey);return{publicKey:await this.deserializePublicKey(d(new Uint8Array(u),new Uint8Array(b))),privateKey:await this.deserializePrivateKey(d(new Uint8Array(y),new Uint8Array(I)))}}async importKey(e,t,r=!0){if(e!=="raw")throw new p("'jwk' is not supported");if(!(t instanceof ArrayBuffer))throw new l("Invalid type of key");return r?await this.deserializePublicKey(t):await this.deserializePrivateKey(t)}async encap(e){let t,r;if(e.ekm!==void 0&&!v(e.ekm)){if(e.ekm.byteLength!==64)throw new l("ekm must be 64 bytes in length");t=e.ekm.slice(0,32),r=e.ekm.slice(32)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),a=await this._a.deserializePublicKey(n.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(n.slice(this._a.publicKeySize)),o=await this._a.encap({recipientPublicKey:a,ekm:t}),u=await this._b.encap({recipientPublicKey:s,ekm:r});return{sharedSecret:d(new Uint8Array(o.sharedSecret),new Uint8Array(u.sharedSecret)),enc:d(new Uint8Array(o.enc),new Uint8Array(u.enc))}}async decap(e){let t=v(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,r=new Uint8Array(await this.serializePrivateKey(t)),n=await this._a.deserializePrivateKey(r.slice(0,this._a.privateKeySize)),a=await this._b.deserializePrivateKey(r.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:n,enc:e.enc.slice(0,this._a.encSize)}),o=await this._b.decap({recipientKey:a,enc:e.enc.slice(this._a.encSize)});return d(new Uint8Array(s),new Uint8Array(o))}_serializePublicKey(e){return new Promise((t,r)=>{e.type!=="public"&&r(new Error("Not public key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePublicKey(e){return new Promise((t,r)=>{e.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((t,r)=>{e.type!=="private"&&r(new Error("Not private key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((t,r)=>{e.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};export{k as AeadId,F as Aes128Gcm,se as Aes256Gcm,ie as BaseError,ce as CipherSuite,T as DecapError,G as DeriveKeyPairError,m as DeserializeError,S as Dhkem,le as DhkemP256HkdfSha256,he as DhkemP384HkdfSha384,fe as DhkemP521HkdfSha512,E as Ec,N as EncapError,B as ExportError,oe as ExportOnly,de as HkdfSha256,ye as HkdfSha384,be as HkdfSha512,f as HpkeError,pe as Hybridkem,K as INPUT_LENGTH_LIMIT,l as InvalidParamError,A as KdfId,h as KemId,R as MessageLimitReachedError,p as NotSupportedError,M as OpenError,C as SealError,P as SerializeError,_e as ValidationError,H as XCryptoKey}; +var Y=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},d=class extends Y{},l=class extends d{},ne=class extends d{},g=class extends d{},x=class extends d{},D=class extends d{},N=class extends d{},T=class extends d{},B=class extends d{},M=class extends d{},C=class extends d{},R=class extends d{},y=class extends d{};var Ee={},ge=Ie(globalThis,Ee);function Ie(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),a=new Set(n);return[...r.filter(s=>!a.has(s)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}async function Ue(){if(ge!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new y(i)}}var m=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await Ue())}};var P={Base:0,Psk:1,Auth:2,AuthPsk:3},h={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},A={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},K={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var c=new Uint8Array(0);var G=new Uint8Array([75,69,77,0,0]);var k=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function b(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function f(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function Pe(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;n8192)throw new l("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():k(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let a;if(e.senderKey===void 0)a=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let o=k(e.senderKey)?e.senderKey.privateKey:e.senderKey,p=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),w=new Uint8Array(await this._prim.dh(o,e.recipientPublicKey));a=f(p,w)}let s;if(e.senderKey===void 0)s=f(new Uint8Array(r),new Uint8Array(n));else{let o=k(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),p=await this._prim.serializePublicKey(o);s=je(new Uint8Array(r),new Uint8Array(n),new Uint8Array(p))}let u=await this._generateSharedSecret(a,s);return{enc:r,sharedSecret:u}}catch(a){throw new D(a)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=k(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),a=await this._prim.serializePublicKey(n);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(r,t));else{let o=new Uint8Array(await this._prim.dh(r,t)),p=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));s=f(o,p)}let u;if(e.senderPublicKey===void 0)u=f(new Uint8Array(e.enc),new Uint8Array(a));else{let o=await this._prim.serializePublicKey(e.senderPublicKey);u=new Uint8Array(e.enc.byteLength+a.byteLength+o.byteLength),u.set(new Uint8Array(e.enc),0),u.set(new Uint8Array(a),e.enc.byteLength),u.set(new Uint8Array(o),e.enc.byteLength+a.byteLength)}return await this._generateSharedSecret(s,u)}catch(s){throw new N(s)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Le,e),n=this._kdf.buildLabeledInfo(Oe,t,this.secretSize);return await this._kdf.extractAndExpand(c,r,n,this.secretSize)}};var $=["deriveBits"],F=new Uint8Array([100,107,112,95,112,114,107]),se=new Uint8Array([115,107]);var X=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var He=new Uint8Array([99,97,110,100,105,100,97,116,101]),De=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),Ne=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Te=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Be=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Me=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Ce=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),E=class extends m{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case h.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=De,this._bitmask=255,this._pkcs8AlgId=Be;break;case h.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=Ne,this._bitmask=255,this._pkcs8AlgId=Me;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Te,this._bitmask=1,this._pkcs8AlgId=Ce;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new g(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new x(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return Pe(t.d)}catch(t){throw new g(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new x(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new x(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,$)}catch(e){throw new y(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(c,F,new Uint8Array(e)),r=new X(this._nSk);for(let a=0;r.isZero()||!r.lessThan(this._order);a++){if(a>255)throw new Error("Faild to derive a key pair");let s=new Uint8Array(await this._hkdf.labeledExpand(t,He,b(a,1),this._nSk));s[0]=s[0]&this._bitmask,r.set(s)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new R(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new x(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new g(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,$)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,$)}};var ue=["encrypt","decrypt"];var ce=class extends m{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(n,this._key,t)}async open(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(n,this._key,t)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,ue)}},J=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new ce(e)}},le=class extends J{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var he=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new y("Export only")}};function de(){return new Promise((i,e)=>{e(new y("Not supported"))})}var Re=new Uint8Array([115,101,99]),z=class{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await de()}async open(e,t){return await de()}async export(e,t){if(e.byteLength>8192)throw new l("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Re,new Uint8Array(e),t)}catch(r){throw new T(r)}}},W=class extends z{},Z=class extends z{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}};var U=class extends z{constructor(e,t,r){if(super(e,t,r.exporterSecret),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nK",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nN",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_ctx",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),r.key===void 0||r.baseNonce===void 0||r.seq===void 0)throw new Error("Required parameters are missing");this._aead=r.aead,this._nK=this._aead.keySize,this._nN=this._aead.nonceSize,this._nT=this._aead.tagSize;let n=this._aead.createEncryptionContext(r.key);this._ctx={key:n,baseNonce:r.baseNonce,seq:r.seq}}computeNonce(e){let t=b(e.seq,e.baseNonce.byteLength);return ae(e.baseNonce,t)}incrementSeq(e){if(e.seq>Number.MAX_SAFE_INTEGER)throw new C("Message limit reached");e.seq+=1}};var V=class extends U{async open(e,t=c){let r;try{r=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(n){throw new M(n)}return this.incrementSeq(this._ctx),r}};var Q=class extends U{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}async seal(e,t=c){let r;try{r=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(n){throw new B(n)}return this.incrementSeq(this._ctx),r}};var Ge=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),Fe=new Uint8Array([101,120,112]),qe=new Uint8Array([105,110,102,111,95,104,97,115,104]),Ye=new Uint8Array([107,101,121]),$e=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Xe=new Uint8Array([115,101,99,114,101,116]),Je=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),ee=class extends m{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new l("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new l("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new l("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Je),this._suiteId.set(b(this._kem.id,2),4),this._suiteId.set(b(this._kdf.id,2),6),this._suiteId.set(b(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.encap(e),r;return e.psk!==void 0?r=e.senderKey!==void 0?P.AuthPsk:P.Psk:r=e.senderKey!==void 0?P.Auth:P.Base,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.decap(e),r;return e.psk!==void 0?r=e.senderPublicKey!==void 0?P.AuthPsk:P.Psk:r=e.senderPublicKey!==void 0?P.Auth:P.Base,await this._keyScheduleR(r,t,e)}async seal(e,t,r=c){let n=await this.createSenderContext(e);return{ct:await n.seal(t,r),enc:n.enc}}async open(e,t,r=c){return await(await this.createRecipientContext(e)).open(t,r)}async _keySchedule(e,t,r){let n=r.psk===void 0?c:new Uint8Array(r.psk.id),a=await this._kdf.labeledExtract(c,$e,n),s=r.info===void 0?c:new Uint8Array(r.info),u=await this._kdf.labeledExtract(c,qe,s),o=new Uint8Array(1+a.byteLength+u.byteLength);o.set(new Uint8Array([e]),0),o.set(new Uint8Array(a),1),o.set(new Uint8Array(u),1+a.byteLength);let p=r.psk===void 0?c:new Uint8Array(r.psk.key),w=this._kdf.buildLabeledIkm(Xe,p),I=this._kdf.buildLabeledInfo(Fe,o,this._kdf.hashSize),_=await this._kdf.extractAndExpand(t,w,I,this._kdf.hashSize);if(this._aead.id===K.ExportOnly)return{aead:this._aead,exporterSecret:_};let Ke=this._kdf.buildLabeledInfo(Ye,o,this._aead.keySize),ve=await this._kdf.extractAndExpand(t,w,Ke,this._aead.keySize),Ae=this._kdf.buildLabeledInfo(Ge,o,this._aead.nonceSize),Se=await this._kdf.extractAndExpand(t,w,Ae,this._aead.nonceSize);return{aead:this._aead,exporterSecret:_,key:ve,baseNonce:new Uint8Array(Se),seq:0}}async _keyScheduleS(e,t,r,n){let a=await this._keySchedule(e,t,n);return a.key===void 0?new Z(this._api,this._kdf,a.exporterSecret,r):new Q(this._api,this._kdf,a,r)}async _keyScheduleR(e,t,r){let n=await this._keySchedule(e,t,r);return n.key===void 0?new W(this._api,this._kdf,n.exporterSecret):new V(this._api,this._kdf,n)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new l("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new l(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new l("Too long psk.key");if(e.psk.id.byteLength>8192)throw new l("Too long psk.id")}}};var ke=new Uint8Array([72,80,75,69,45,118,49]),q=class extends m{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:c}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(ke,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();let n=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set(new Uint8Array([0,r]),0),n.set(ke,2),n.set(this._suiteId,9),n.set(e,9+this._suiteId.byteLength),n.set(t,9+this._suiteId.byteLength+e.byteLength),n}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new l("The salt length must be the same as the hashSize");let r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),a=new ArrayBuffer(r),s=new Uint8Array(a),u=c,o=new Uint8Array(t),p=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");let w=new Uint8Array(this.hashSize+o.length+1);for(let I=1,_=0;_=u.length?(s.set(u,_),_+=u.length):(s.set(u.slice(0,s.length-_),_),_+=s.length-_);return a}async extractAndExpand(e,t,r,n){await this._setup();let a=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},a,n*8)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r))}async labeledExpand(e,t,r,n){return await this.expand(e,this.buildLabeledInfo(t,r,n),n)}_checkInit(){if(this._suiteId===c)throw new Error("Not initialized. Call init()")}},L=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},O=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},j=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var te=class extends S{constructor(){let e=new L,t=new E(h.DhkemP256HkdfSha256,e);super(h.DhkemP256HkdfSha256,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}},re=class extends S{constructor(){let e=new O,t=new E(h.DhkemP384HkdfSha384,e);super(h.DhkemP384HkdfSha384,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}},ie=class extends S{constructor(){let e=new j,t=new E(h.DhkemP521HkdfSha512,e);super(h.DhkemP521HkdfSha512,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var fe=class extends ee{},ye=class extends te{},be=class extends re{},pe=class extends ie{},we=class extends L{},_e=class extends O{},xe=class extends j{};var H=class{constructor(e,t,r,n=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=r,this.algorithm={name:e},this.usages=n,r==="public"&&(this.usages=[])}};var me=class{constructor(e,t,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=t,this._b=r,this._kdf=n;let a=new Uint8Array(G);a.set(b(this.id,2),3),this._kdf.init(a)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new g(t)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(t){throw new x(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new g(t)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(t){throw new x(t)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),t=await this._b.generateKeyPair(),r=await this._a.serializePublicKey(e.publicKey),n=await this._a.serializePrivateKey(e.privateKey),a=await this._b.serializePublicKey(t.publicKey),s=await this._b.serializePrivateKey(t.privateKey);return{publicKey:await this.deserializePublicKey(f(new Uint8Array(r),new Uint8Array(a))),privateKey:await this.deserializePrivateKey(f(new Uint8Array(n),new Uint8Array(s)))}}async deriveKeyPair(e){let t=await this._kdf.labeledExtract(c,F,new Uint8Array(e)),r=new Uint8Array(await this._kdf.labeledExpand(t,se,c,96)),n=r.slice(0,32),a=r.slice(32,96),s=await this._a.deriveKeyPair(n),u=await this._b.deriveKeyPair(a),o=await this._a.serializePublicKey(s.publicKey),p=await this._a.serializePrivateKey(s.privateKey),w=await this._b.serializePublicKey(u.publicKey),I=await this._b.serializePrivateKey(u.privateKey);return{publicKey:await this.deserializePublicKey(f(new Uint8Array(o),new Uint8Array(w))),privateKey:await this.deserializePrivateKey(f(new Uint8Array(p),new Uint8Array(I)))}}async importKey(e,t,r=!0){if(e!=="raw")throw new y("'jwk' is not supported");if(!(t instanceof ArrayBuffer))throw new l("Invalid type of key");return r?await this.deserializePublicKey(t):await this.deserializePrivateKey(t)}async encap(e){let t,r;if(e.ekm!==void 0&&!k(e.ekm)){if(e.ekm.byteLength!==64)throw new l("ekm must be 64 bytes in length");t=e.ekm.slice(0,32),r=e.ekm.slice(32)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),a=await this._a.deserializePublicKey(n.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(n.slice(this._a.publicKeySize)),u=await this._a.encap({recipientPublicKey:a,ekm:t}),o=await this._b.encap({recipientPublicKey:s,ekm:r});return{sharedSecret:f(new Uint8Array(u.sharedSecret),new Uint8Array(o.sharedSecret)),enc:f(new Uint8Array(u.enc),new Uint8Array(o.enc))}}async decap(e){let t=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,r=new Uint8Array(await this.serializePrivateKey(t)),n=await this._a.deserializePrivateKey(r.slice(0,this._a.privateKeySize)),a=await this._b.deserializePrivateKey(r.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:n,enc:e.enc.slice(0,this._a.encSize)}),u=await this._b.decap({recipientKey:a,enc:e.enc.slice(this._a.encSize)});return f(new Uint8Array(s),new Uint8Array(u))}_serializePublicKey(e){return new Promise((t,r)=>{e.type!=="public"&&r(new Error("Not public key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePublicKey(e){return new Promise((t,r)=>{e.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((t,r)=>{e.type!=="private"&&r(new Error("Not private key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((t,r)=>{e.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};export{K as AeadId,J as Aes128Gcm,le as Aes256Gcm,Y as BaseError,fe as CipherSuite,N as DecapError,R as DeriveKeyPairError,x as DeserializeError,ye as DhkemP256HkdfSha256,be as DhkemP384HkdfSha384,pe as DhkemP521HkdfSha512,D as EncapError,T as ExportError,he as ExportOnly,we as HkdfSha256,_e as HkdfSha384,xe as HkdfSha512,d as HpkeError,me as Hybridkem,l as InvalidParamError,A as KdfId,h as KemId,C as MessageLimitReachedError,y as NotSupportedError,M as OpenError,B as SealError,g as SerializeError,ne as ValidationError,H as XCryptoKey}; diff --git a/dhkem-secp256k1/src/hpke-dhkem-secp256k1.js b/dhkem-secp256k1/src/hpke-dhkem-secp256k1.js index 0a9104925..c0f71d997 100644 --- a/dhkem-secp256k1/src/hpke-dhkem-secp256k1.js +++ b/dhkem-secp256k1/src/hpke-dhkem-secp256k1.js @@ -1,4 +1,4 @@ -var ar=Object.defineProperty;var cr=(r,e)=>{for(var t in e)ar(r,t,{get:e[t],enumerable:!0})};var ur={},Ut=fr(globalThis,ur);function fr(r,e){return new Proxy(r,{get(t,n,i){return n in e?e[n]:r[n]},set(t,n,i){return n in e&&delete e[n],r[n]=i,!0},deleteProperty(t,n){let i=!1;return n in e&&(delete e[n],i=!0),n in r&&(delete r[n],i=!0),i},ownKeys(t){let n=Reflect.ownKeys(r),i=Reflect.ownKeys(e),o=new Set(i);return[...n.filter(a=>!o.has(a)),...i]},defineProperty(t,n,i){return n in e&&delete e[n],Reflect.defineProperty(r,n,i),!0},getOwnPropertyDescriptor(t,n){return n in e?Reflect.getOwnPropertyDescriptor(e,n):Reflect.getOwnPropertyDescriptor(r,n)},has(t,n){return n in e||n in r}})}var ct=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},Q=class extends ct{},J=class extends Q{};var F=class extends Q{},W=class extends Q{},Ge=class extends Q{},Ze=class extends Q{};var Pe=class extends Q{},G=class extends Q{};async function dr(){if(Ut!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:r}=await import("crypto");return r.subtle}catch(r){throw new G(r)}}var be=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await dr())}};var ee={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},Te={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3};var Z=new Uint8Array(0);var Bn=new Uint8Array([115,101,99]);var we=r=>typeof r=="object"&&r!==null&&typeof r.privateKey=="object"&&typeof r.publicKey=="object";function Ae(r,e){if(e<=0)throw new Error("i2Osp: too small size");if(r>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let n=0;n>8;return t}function Ke(r,e){let t=new Uint8Array(r.length+e.length);return t.set(r,0),t.set(e,r.length),t}var ai=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),ci=new Uint8Array([101,120,112]),ui=new Uint8Array([105,110,102,111,95,104,97,115,104]),fi=new Uint8Array([107,101,121]),li=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),di=new Uint8Array([115,101,99,114,101,116]),hi=new Uint8Array([72,80,75,69,0,0,0,0,0,0]);var zt=new Uint8Array([72,80,75,69,45,118,49]),ut=class extends be{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:Te.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:Z}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let n=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set(zt,0),n.set(this._suiteId,7),n.set(e,7+this._suiteId.byteLength),n.set(t,7+this._suiteId.byteLength+e.byteLength),n}buildLabeledInfo(e,t,n){this._checkInit();let i=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return i.set(new Uint8Array([0,n]),0),i.set(zt,2),i.set(this._suiteId,9),i.set(e,9+this._suiteId.byteLength),i.set(t,9+this._suiteId.byteLength+e.byteLength),i}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new J("The salt length must be the same as the hashSize");let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,t)}async expand(e,t,n){await this._setup();let i=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),o=new ArrayBuffer(n),a=new Uint8Array(o),c=Z,s=new Uint8Array(t),u=new Uint8Array(1);if(n>255*this.hashSize)throw new Error("Entropy limit reached");let h=new Uint8Array(this.hashSize+s.length+1);for(let d=1,l=0;l=c.length?(a.set(c,l),l+=c.length):(a.set(c.slice(0,a.length-l),l),l+=a.length-l);return o}async extractAndExpand(e,t,n,i){await this._setup();let o=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:n},o,i*8)}async labeledExtract(e,t,n){return await this.extract(e,this.buildLabeledIkm(t,n))}async labeledExpand(e,t,n,i){return await this.expand(e,this.buildLabeledInfo(t,n,i),i)}_checkInit(){if(this._suiteId===Z)throw new Error("Not initialized. Call init()")}},Ne=class extends ut{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:Te.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}};var ft=new Uint8Array([75,69,77,0,0]);var wr=new Uint8Array([101,97,101,95,112,114,107]),pr=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function mr(r,e,t){let n=new Uint8Array(r.length+e.length+t.length);return n.set(r,0),n.set(e,r.length),n.set(t,r.length+e.length),n}var pe=class{constructor(e,t,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=t,this._kdf=n;let i=new Uint8Array(ft);i.set(Ae(this.id,2),3),this._kdf.init(i)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,t,n=!0){return await this._prim.importKey(e,t,n)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new J("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():we(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let n=await this._prim.serializePublicKey(t.publicKey),i=await this._prim.serializePublicKey(e.recipientPublicKey);try{let o;if(e.senderKey===void 0)o=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let s=we(e.senderKey)?e.senderKey.privateKey:e.senderKey,u=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),h=new Uint8Array(await this._prim.dh(s,e.recipientPublicKey));o=Ke(u,h)}let a;if(e.senderKey===void 0)a=Ke(new Uint8Array(n),new Uint8Array(i));else{let s=we(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),u=await this._prim.serializePublicKey(s);a=mr(new Uint8Array(n),new Uint8Array(i),new Uint8Array(u))}let c=await this._generateSharedSecret(o,a);return{enc:n,sharedSecret:c}}catch(o){throw new Ge(o)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),n=we(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,i=we(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),o=await this._prim.serializePublicKey(i);try{let a;if(e.senderPublicKey===void 0)a=new Uint8Array(await this._prim.dh(n,t));else{let s=new Uint8Array(await this._prim.dh(n,t)),u=new Uint8Array(await this._prim.dh(n,e.senderPublicKey));a=Ke(s,u)}let c;if(e.senderPublicKey===void 0)c=Ke(new Uint8Array(e.enc),new Uint8Array(o));else{let s=await this._prim.serializePublicKey(e.senderPublicKey);c=new Uint8Array(e.enc.byteLength+o.byteLength+s.byteLength),c.set(new Uint8Array(e.enc),0),c.set(new Uint8Array(o),e.enc.byteLength),c.set(new Uint8Array(s),e.enc.byteLength+o.byteLength)}return await this._generateSharedSecret(a,c)}catch(a){throw new Ze(a)}}async _generateSharedSecret(e,t){let n=this._kdf.buildLabeledIkm(wr,e),i=this._kdf.buildLabeledInfo(pr,t,this.secretSize);return await this._kdf.extractAndExpand(Z,n,i,this.secretSize)}};var Ht=new Uint8Array([100,107,112,95,112,114,107]),gr=new Uint8Array([115,107]);var ji=new Uint8Array([99,97,110,100,105,100,97,116,101]),Ri=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),qi=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Di=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Ci=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Mi=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),$i=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]);var je=class extends Ne{};var X=class{constructor(e,t,n,i=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=n,this.algorithm={name:e},this.usages=i,n==="public"&&(this.usages=[])}};function Tt(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function Er(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Be(r,...e){if(!Er(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Nt(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");Tt(r.outputLen),Tt(r.blockLen)}function Ie(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function jt(r,e){Be(r);let t=e.outputLen;if(r.lengthnew DataView(r.buffer,r.byteOffset,r.byteLength),V=(r,e)=>r<<32-e|r>>>e;var qo=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function kr(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Re(r){return typeof r=="string"&&(r=kr(r)),Be(r),r}function Rt(...r){let e=0;for(let n=0;nr().update(Re(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Dt(r=32){if(me&&typeof me.getRandomValues=="function")return me.getRandomValues(new Uint8Array(r));if(me&&typeof me.randomBytes=="function")return me.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}var Xe=class extends Le{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,Nt(e);let n=Re(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(n.length>i?e.create().update(n).digest():n);for(let a=0;anew Xe(r,e).update(t).digest();qe.create=(r,e)=>new Xe(r,e);function Sr(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),a=Number(t>>i&o),c=Number(t&o),s=n?4:0,u=n?0:4;r.setUint32(e+s,a,n),r.setUint32(e+u,c,n)}var Ct=(r,e,t)=>r&e^~r&t,Mt=(r,e,t)=>r&e^r&t^e&t,Qe=class extends Le{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=We(this.buffer)}update(e){Ie(this);let{view:t,buffer:n,blockLen:i}=this;e=Re(e);let o=e.length;for(let a=0;ai-a&&(this.process(n,0),a=0);for(let d=a;dh.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d>>3,m=V(k,17)^V(k,19)^k>>>10;ue[d]=m+ue[d-7]+O+ue[d-16]|0}let{A:n,B:i,C:o,D:a,E:c,F:s,G:u,H:h}=this;for(let d=0;d<64;d++){let l=V(c,6)^V(c,11)^V(c,25),k=h+l+Ct(c,s,u)+Pr[d]+ue[d]|0,m=(V(n,2)^V(n,13)^V(n,22))+Mt(n,i,o)|0;h=u,u=s,s=c,c=a+k|0,a=o,o=i,i=n,n=k+m|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,a=a+this.D|0,c=c+this.E|0,s=s+this.F|0,u=u+this.G|0,h=h+this.H|0,this.set(n,i,o,a,c,s,u,h)}roundClean(){ue.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Je=qt(()=>new lt);var Oe=class extends je{async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return qe(Je,new Uint8Array(e),new Uint8Array(t));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,t)}};var mt={};cr(mt,{aInRange:()=>de,abool:()=>ge,abytes:()=>Ue,bitGet:()=>Or,bitLen:()=>wt,bitMask:()=>Ce,bitSet:()=>Ur,bytesToHex:()=>xe,bytesToNumberBE:()=>re,bytesToNumberLE:()=>et,concatBytes:()=>ze,createHmacDrbg:()=>pt,ensureBytes:()=>D,equalBytes:()=>Ir,hexToBytes:()=>ve,hexToNumber:()=>bt,inRange:()=>De,isBytes:()=>fe,memoized:()=>rt,notImplemented:()=>Hr,numberToBytesBE:()=>le,numberToBytesLE:()=>tt,numberToHexUnpadded:()=>_e,numberToVarBytesBE:()=>Br,utf8ToBytes:()=>Lr,validateObject:()=>he});var yt=BigInt(0),Fe=BigInt(1),Ar=BigInt(2);function fe(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Ue(r){if(!fe(r))throw new Error("Uint8Array expected")}function ge(r,e){if(typeof e!="boolean")throw new Error(`${r} must be valid boolean, got "${e}".`)}var Kr=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function xe(r){Ue(r);let e="";for(let t=0;t=te._0&&r<=te._9)return r-te._0;if(r>=te._A&&r<=te._F)return r-(te._A-10);if(r>=te._a&&r<=te._f)return r-(te._a-10)}function ve(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let i=0,o=0;itypeof r=="bigint"&&yt<=r;function De(r,e,t){return dt(r)&&dt(e)&&dt(t)&&e<=r&&ryt;r>>=Fe,e+=1);return e}function Or(r,e){return r>>BigInt(e)&Fe}function Ur(r,e,t){return r|(t?Fe:yt)<(Ar<new Uint8Array(r),Gt=r=>Uint8Array.from(r);function pt(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=ht(r),i=ht(r),o=0,a=()=>{n.fill(1),i.fill(0),o=0},c=(...d)=>t(i,n,...d),s=(d=ht())=>{i=c(Gt([0]),d),n=c(),d.length!==0&&(i=c(Gt([1]),d),n=c())},u=()=>{if(o++>=1e3)throw new Error("drbg: tried 1000 values");let d=0,l=[];for(;d{a(),s(d);let k;for(;!(k=l(u()));)s();return a(),k}}var zr={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||fe(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function he(r,e,t={}){let n=(i,o,a)=>{let c=zr[o];if(typeof c!="function")throw new Error(`Invalid validator "${o}", expected function`);let s=r[i];if(!(a&&s===void 0)&&!c(s,r))throw new Error(`Invalid param ${String(i)}=${s} (${typeof s}), expected ${o}`)};for(let[i,o]of Object.entries(e))n(i,o,!1);for(let[i,o]of Object.entries(t))n(i,o,!0);return r}var Hr=()=>{throw new Error("not implemented")};function rt(r){let e=new WeakMap;return(t,...n)=>{let i=e.get(t);if(i!==void 0)return i;let o=r(t,...n);return e.set(t,o),o}}var z=BigInt(0),U=BigInt(1),Ee=BigInt(2),Tr=BigInt(3),gt=BigInt(4),Zt=BigInt(5),Vt=BigInt(8),Nr=BigInt(9),jr=BigInt(16);function N(r,e){let t=r%e;return t>=z?t:e+t}function Rr(r,e,t){if(t<=z||e 0");if(t===U)return z;let n=U;for(;e>z;)e&U&&(n=n*r%t),r=r*r%t,e>>=U;return n}function C(r,e,t){let n=r;for(;e-- >z;)n*=n,n%=t;return n}function nt(r,e){if(r===z||e<=z)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=N(r,e),n=e,i=z,o=U,a=U,c=z;for(;t!==z;){let u=n/t,h=n%t,d=i-a*u,l=o-c*u;n=t,t=h,i=a,o=c,a=d,c=l}if(n!==U)throw new Error("invert: does not exist");return N(i,e)}function qr(r){let e=(r-U)/Ee,t,n,i;for(t=r-U,n=0;t%Ee===z;t/=Ee,n++);for(i=Ee;i(n[i]="function",n),e);return he(r,t)}function Mr(r,e,t){if(t 0");if(t===z)return r.ONE;if(t===U)return e;let n=r.ONE,i=e;for(;t>z;)t&U&&(n=r.mul(n,i)),i=r.sqr(i),t>>=U;return n}function $r(r,e){let t=new Array(e.length),n=e.reduce((o,a,c)=>r.is0(a)?o:(t[c]=o,r.mul(o,a)),r.ONE),i=r.inv(n);return e.reduceRight((o,a,c)=>r.is0(a)?o:(t[c]=r.mul(o,t[c]),r.mul(o,a)),i),t}function _t(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function it(r,e,t=!1,n={}){if(r<=z)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:i,nByteLength:o}=_t(r,e);if(o>2048)throw new Error("Field lengths over 2048 bytes are not supported");let a=Dr(r),c=Object.freeze({ORDER:r,BITS:i,BYTES:o,MASK:Ce(i),ZERO:z,ONE:U,create:s=>N(s,r),isValid:s=>{if(typeof s!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof s}`);return z<=s&&ss===z,isOdd:s=>(s&U)===U,neg:s=>N(-s,r),eql:(s,u)=>s===u,sqr:s=>N(s*s,r),add:(s,u)=>N(s+u,r),sub:(s,u)=>N(s-u,r),mul:(s,u)=>N(s*u,r),pow:(s,u)=>Mr(c,s,u),div:(s,u)=>N(s*nt(u,r),r),sqrN:s=>s*s,addN:(s,u)=>s+u,subN:(s,u)=>s-u,mulN:(s,u)=>s*u,inv:s=>nt(s,r),sqrt:n.sqrt||(s=>a(c,s)),invertBatch:s=>$r(c,s),cmov:(s,u,h)=>h?u:s,toBytes:s=>t?tt(s,o):le(s,o),fromBytes:s=>{if(s.length!==o)throw new Error(`Fp.fromBytes: expected ${o}, got ${s.length}`);return t?et(s):re(s)}});return Object.freeze(c)}function Yt(r){if(typeof r!="bigint")throw new Error("field order must be bigint");let e=r.toString(2).length;return Math.ceil(e/8)}function vt(r){let e=Yt(r);return e+Math.ceil(e/2)}function Wt(r,e,t=!1){let n=r.length,i=Yt(e),o=vt(e);if(n<16||n1024)throw new Error(`expected ${o}-1024 bytes of input, got ${n}`);let a=t?re(r):et(r),c=N(a,e-U)+U;return t?tt(c,i):le(c,i)}var Zr=BigInt(0),Et=BigInt(1),kt=new WeakMap,Xt=new WeakMap;function Qt(r,e){let t=(o,a)=>{let c=a.negate();return o?c:a},n=o=>{if(!Number.isSafeInteger(o)||o<=0||o>e)throw new Error(`Wrong window size=${o}, should be [1..${e}]`)},i=o=>{n(o);let a=Math.ceil(e/o)+1,c=2**(o-1);return{windows:a,windowSize:c}};return{constTimeNegate:t,unsafeLadder(o,a){let c=r.ZERO,s=o;for(;a>Zr;)a&Et&&(c=c.add(s)),s=s.double(),a>>=Et;return c},precomputeWindow(o,a){let{windows:c,windowSize:s}=i(a),u=[],h=o,d=h;for(let l=0;l>=O,b>u&&(b-=k,c+=Et);let g=f,_=f+Math.abs(b)-1,E=m%2!==0,K=b<0;b===0?d=d.add(t(E,a[g])):h=h.add(t(K,a[_]))}return{p:h,f:d}},wNAFCached(o,a,c){let s=Xt.get(o)||1,u=kt.get(o);return u||(u=this.precomputeWindow(o,s),s!==1&&kt.set(o,c(u))),this.wNAF(s,u,a)},setWindowSize(o,a){n(a),Xt.set(o,a),kt.delete(o)}}}function Jt(r,e,t,n){if(!Array.isArray(t)||!Array.isArray(n)||n.length!==t.length)throw new Error("arrays of points and scalars must have equal length");n.forEach((h,d)=>{if(!e.isValid(h))throw new Error(`wrong scalar at index ${d}`)}),t.forEach((h,d)=>{if(!(h instanceof r))throw new Error(`wrong point at index ${d}`)});let i=wt(BigInt(t.length)),o=i>12?i-3:i>4?i-2:i?2:1,a=(1<=0;h-=o){c.fill(r.ZERO);for(let l=0;l>BigInt(h)&BigInt(a));c[O]=c[O].add(t[l])}let d=r.ZERO;for(let l=c.length-1,k=r.ZERO;l>0;l--)k=k.add(c[l]),d=d.add(k);if(u=u.add(d),h!==0)for(let l=0;l{let{Err:t}=ne;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length&1)throw new t("tlv.encode: unpadded data");let n=e.length/2,i=_e(n);if(i.length/2&128)throw new t("tlv.encode: long form length too big");let o=n>127?_e(i.length/2|128):"";return`${_e(r)}${o}${i}${e}`},decode(r,e){let{Err:t}=ne,n=0;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let i=e[n++],o=!!(i&128),a=0;if(!o)a=i;else{let s=i&127;if(!s)throw new t("tlv.decode(long): indefinite length not supported");if(s>4)throw new t("tlv.decode(long): byte length is too big");let u=e.subarray(n,n+s);if(u.length!==s)throw new t("tlv.decode: length bytes not complete");if(u[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let h of u)a=a<<8|h;if(n+=s,a<128)throw new t("tlv.decode(long): not minimal encoding")}let c=e.subarray(n,n+a);if(c.length!==a)throw new t("tlv.decode: wrong value length");return{v:c,l:e.subarray(n+a)}}},_int:{encode(r){let{Err:e}=ne;if(r{let g=f.toAffine();return ze(Uint8Array.from([4]),t.toBytes(g.x),t.toBytes(g.y))}),o=e.fromBytes||(m=>{let f=m.subarray(1),b=t.fromBytes(f.subarray(0,t.BYTES)),g=t.fromBytes(f.subarray(t.BYTES,2*t.BYTES));return{x:b,y:g}});function a(m){let{a:f,b}=e,g=t.sqr(m),_=t.mul(g,m);return t.add(t.add(_,t.mul(m,f)),b)}if(!t.eql(t.sqr(e.Gy),a(e.Gx)))throw new Error("bad generator point: equation left != right");function c(m){return De(m,T,e.n)}function s(m){let{allowedPrivateKeyLengths:f,nByteLength:b,wrapPrivateKey:g,n:_}=e;if(f&&typeof m!="bigint"){if(fe(m)&&(m=xe(m)),typeof m!="string"||!f.includes(m.length))throw new Error("Invalid key");m=m.padStart(b*2,"0")}let E;try{E=typeof m=="bigint"?m:re(D("private key",m,b))}catch{throw new Error(`private key must be ${b} bytes, hex or bigint, not ${typeof m}`)}return g&&(E=N(E,_)),de("private key",E,T,_),E}function u(m){if(!(m instanceof l))throw new Error("ProjectivePoint expected")}let h=rt((m,f)=>{let{px:b,py:g,pz:_}=m;if(t.eql(_,t.ONE))return{x:b,y:g};let E=m.is0();f==null&&(f=E?t.ONE:t.inv(_));let K=t.mul(b,f),S=t.mul(g,f),x=t.mul(_,f);if(E)return{x:t.ZERO,y:t.ZERO};if(!t.eql(x,t.ONE))throw new Error("invZ was invalid");return{x:K,y:S}}),d=rt(m=>{if(m.is0()){if(e.allowInfinityPoint&&!t.is0(m.py))return;throw new Error("bad point: ZERO")}let{x:f,y:b}=m.toAffine();if(!t.isValid(f)||!t.isValid(b))throw new Error("bad point: x or y not FE");let g=t.sqr(b),_=a(f);if(!t.eql(g,_))throw new Error("bad point: equation left != right");if(!m.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class l{constructor(f,b,g){if(this.px=f,this.py=b,this.pz=g,f==null||!t.isValid(f))throw new Error("x required");if(b==null||!t.isValid(b))throw new Error("y required");if(g==null||!t.isValid(g))throw new Error("z required");Object.freeze(this)}static fromAffine(f){let{x:b,y:g}=f||{};if(!f||!t.isValid(b)||!t.isValid(g))throw new Error("invalid affine point");if(f instanceof l)throw new Error("projective point not allowed");let _=E=>t.eql(E,t.ZERO);return _(b)&&_(g)?l.ZERO:new l(b,g,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(f){let b=t.invertBatch(f.map(g=>g.pz));return f.map((g,_)=>g.toAffine(b[_])).map(l.fromAffine)}static fromHex(f){let b=l.fromAffine(o(D("pointHex",f)));return b.assertValidity(),b}static fromPrivateKey(f){return l.BASE.multiply(s(f))}static msm(f,b){return Jt(l,n,f,b)}_setWindowSize(f){O.setWindowSize(this,f)}assertValidity(){d(this)}hasEvenY(){let{y:f}=this.toAffine();if(t.isOdd)return!t.isOdd(f);throw new Error("Field doesn't support isOdd")}equals(f){u(f);let{px:b,py:g,pz:_}=this,{px:E,py:K,pz:S}=f,x=t.eql(t.mul(b,S),t.mul(E,_)),v=t.eql(t.mul(g,S),t.mul(K,_));return x&&v}negate(){return new l(this.px,t.neg(this.py),this.pz)}double(){let{a:f,b}=e,g=t.mul(b,er),{px:_,py:E,pz:K}=this,S=t.ZERO,x=t.ZERO,v=t.ZERO,A=t.mul(_,_),M=t.mul(E,E),L=t.mul(K,K),B=t.mul(_,E);return B=t.add(B,B),v=t.mul(_,K),v=t.add(v,v),S=t.mul(f,v),x=t.mul(g,L),x=t.add(S,x),S=t.sub(M,x),x=t.add(M,x),x=t.mul(S,x),S=t.mul(B,S),v=t.mul(g,v),L=t.mul(f,L),B=t.sub(A,L),B=t.mul(f,B),B=t.add(B,v),v=t.add(A,A),A=t.add(v,A),A=t.add(A,L),A=t.mul(A,B),x=t.add(x,A),L=t.mul(E,K),L=t.add(L,L),A=t.mul(L,B),S=t.sub(S,A),v=t.mul(L,M),v=t.add(v,v),v=t.add(v,v),new l(S,x,v)}add(f){u(f);let{px:b,py:g,pz:_}=this,{px:E,py:K,pz:S}=f,x=t.ZERO,v=t.ZERO,A=t.ZERO,M=e.a,L=t.mul(e.b,er),B=t.mul(b,E),q=t.mul(g,K),y=t.mul(_,S),w=t.add(b,g),p=t.add(E,K);w=t.mul(w,p),p=t.add(B,q),w=t.sub(w,p),p=t.add(b,_);let P=t.add(E,S);return p=t.mul(p,P),P=t.add(B,y),p=t.sub(p,P),P=t.add(g,_),x=t.add(K,S),P=t.mul(P,x),x=t.add(q,y),P=t.sub(P,x),A=t.mul(M,p),x=t.mul(L,y),A=t.add(x,A),x=t.sub(q,A),A=t.add(q,A),v=t.mul(x,A),q=t.add(B,B),q=t.add(q,B),y=t.mul(M,y),p=t.mul(L,p),q=t.add(q,y),y=t.sub(B,y),y=t.mul(M,y),p=t.add(p,y),B=t.mul(q,p),v=t.add(v,B),B=t.mul(P,p),x=t.mul(w,x),x=t.sub(x,B),B=t.mul(w,q),A=t.mul(P,A),A=t.add(A,B),new l(x,v,A)}subtract(f){return this.add(f.negate())}is0(){return this.equals(l.ZERO)}wNAF(f){return O.wNAFCached(this,f,l.normalizeZ)}multiplyUnsafe(f){de("scalar",f,ie,e.n);let b=l.ZERO;if(f===ie)return b;if(f===T)return this;let{endo:g}=e;if(!g)return O.unsafeLadder(this,f);let{k1neg:_,k1:E,k2neg:K,k2:S}=g.splitScalar(f),x=b,v=b,A=this;for(;E>ie||S>ie;)E&T&&(x=x.add(A)),S&T&&(v=v.add(A)),A=A.double(),E>>=T,S>>=T;return _&&(x=x.negate()),K&&(v=v.negate()),v=new l(t.mul(v.px,g.beta),v.py,v.pz),x.add(v)}multiply(f){let{endo:b,n:g}=e;de("scalar",f,T,g);let _,E;if(b){let{k1neg:K,k1:S,k2neg:x,k2:v}=b.splitScalar(f),{p:A,f:M}=this.wNAF(S),{p:L,f:B}=this.wNAF(v);A=O.constTimeNegate(K,A),L=O.constTimeNegate(x,L),L=new l(t.mul(L.px,b.beta),L.py,L.pz),_=A.add(L),E=M.add(B)}else{let{p:K,f:S}=this.wNAF(f);_=K,E=S}return l.normalizeZ([_,E])[0]}multiplyAndAddUnsafe(f,b,g){let _=l.BASE,E=(S,x)=>x===ie||x===T||!S.equals(_)?S.multiplyUnsafe(x):S.multiply(x),K=E(this,b).add(E(f,g));return K.is0()?void 0:K}toAffine(f){return h(this,f)}isTorsionFree(){let{h:f,isTorsionFree:b}=e;if(f===T)return!0;if(b)return b(l,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:f,clearCofactor:b}=e;return f===T?this:b?b(l,this):this.multiplyUnsafe(e.h)}toRawBytes(f=!0){return ge("isCompressed",f),this.assertValidity(),i(l,this,f)}toHex(f=!0){return ge("isCompressed",f),xe(this.toRawBytes(f))}}l.BASE=new l(e.Gx,e.Gy,t.ONE),l.ZERO=new l(t.ZERO,t.ONE,t.ZERO);let k=e.nBitLength,O=Qt(l,e.endo?Math.ceil(k/2):k);return{CURVE:e,ProjectivePoint:l,normPrivateKeyToScalar:s,weierstrassEquation:a,isWithinCurveOrder:c}}function Jr(r){let e=St(r);return he(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function tr(r){let e=Jr(r),{Fp:t,n}=e,i=t.BYTES+1,o=2*t.BYTES+1;function a(y){return N(y,n)}function c(y){return nt(y,n)}let{ProjectivePoint:s,normPrivateKeyToScalar:u,weierstrassEquation:h,isWithinCurveOrder:d}=Qr({...e,toBytes(y,w,p){let P=w.toAffine(),I=t.toBytes(P.x),H=ze;return ge("isCompressed",p),p?H(Uint8Array.from([w.hasEvenY()?2:3]),I):H(Uint8Array.from([4]),I,t.toBytes(P.y))},fromBytes(y){let w=y.length,p=y[0],P=y.subarray(1);if(w===i&&(p===2||p===3)){let I=re(P);if(!De(I,T,t.ORDER))throw new Error("Point is not on curve");let H=h(I),j;try{j=t.sqrt(H)}catch($){let se=$ instanceof Error?": "+$.message:"";throw new Error("Point is not on curve"+se)}let R=(j&T)===T;return(p&1)===1!==R&&(j=t.neg(j)),{x:I,y:j}}else if(w===o&&p===4){let I=t.fromBytes(P.subarray(0,t.BYTES)),H=t.fromBytes(P.subarray(t.BYTES,2*t.BYTES));return{x:I,y:H}}else throw new Error(`Point of length ${w} was invalid. Expected ${i} compressed bytes or ${o} uncompressed bytes`)}}),l=y=>xe(le(y,e.nByteLength));function k(y){let w=n>>T;return y>w}function O(y){return k(y)?a(-y):y}let m=(y,w,p)=>re(y.slice(w,p));class f{constructor(w,p,P){this.r=w,this.s=p,this.recovery=P,this.assertValidity()}static fromCompact(w){let p=e.nByteLength;return w=D("compactSignature",w,p*2),new f(m(w,0,p),m(w,p,2*p))}static fromDER(w){let{r:p,s:P}=ne.toSig(D("DER",w));return new f(p,P)}assertValidity(){de("r",this.r,T,n),de("s",this.s,T,n)}addRecoveryBit(w){return new f(this.r,this.s,w)}recoverPublicKey(w){let{r:p,s:P,recovery:I}=this,H=S(D("msgHash",w));if(I==null||![0,1,2,3].includes(I))throw new Error("recovery id invalid");let j=I===2||I===3?p+e.n:p;if(j>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let R=I&1?"03":"02",oe=s.fromHex(R+l(j)),$=c(j),se=a(-H*$),He=a(P*$),ae=s.BASE.multiplyAndAddUnsafe(oe,se,He);if(!ae)throw new Error("point at infinify");return ae.assertValidity(),ae}hasHighS(){return k(this.s)}normalizeS(){return this.hasHighS()?new f(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return ve(this.toDERHex())}toDERHex(){return ne.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return ve(this.toCompactHex())}toCompactHex(){return l(this.r)+l(this.s)}}let b={isValidPrivateKey(y){try{return u(y),!0}catch{return!1}},normPrivateKeyToScalar:u,randomPrivateKey:()=>{let y=vt(e.n);return Wt(e.randomBytes(y),e.n)},precompute(y=8,w=s.BASE){return w._setWindowSize(y),w.multiply(BigInt(3)),w}};function g(y,w=!0){return s.fromPrivateKey(y).toRawBytes(w)}function _(y){let w=fe(y),p=typeof y=="string",P=(w||p)&&y.length;return w?P===i||P===o:p?P===2*i||P===2*o:y instanceof s}function E(y,w,p=!0){if(_(y))throw new Error("first arg must be private key");if(!_(w))throw new Error("second arg must be public key");return s.fromHex(w).multiply(u(y)).toRawBytes(p)}let K=e.bits2int||function(y){let w=re(y),p=y.length*8-e.nBitLength;return p>0?w>>BigInt(p):w},S=e.bits2int_modN||function(y){return a(K(y))},x=Ce(e.nBitLength);function v(y){return de(`num < 2^${e.nBitLength}`,y,ie,x),le(y,e.nByteLength)}function A(y,w,p=M){if(["recovered","canonical"].some(ye=>ye in p))throw new Error("sign() legacy options not supported");let{hash:P,randomBytes:I}=e,{lowS:H,prehash:j,extraEntropy:R}=p;H==null&&(H=!0),y=D("msgHash",y),Ft(p),j&&(y=D("prehashed msgHash",P(y)));let oe=S(y),$=u(w),se=[v($),v(oe)];if(R!=null&&R!==!1){let ye=R===!0?I(t.BYTES):R;se.push(D("extraEntropy",ye))}let He=ze(...se),ae=oe;function at(ye){let ke=K(ye);if(!d(ke))return;let It=c(ke),Y=s.BASE.multiply(ke).toAffine(),Se=a(Y.x);if(Se===ie)return;let $e=a(It*a(ae+Se*$));if($e===ie)return;let Lt=(Y.x===Se?0:2)|Number(Y.y&T),Ot=$e;return H&&k($e)&&(Ot=O($e),Lt^=1),new f(Se,Ot,Lt)}return{seed:He,k2sig:at}}let M={lowS:e.lowS,prehash:!1},L={lowS:e.lowS,prehash:!1};function B(y,w,p=M){let{seed:P,k2sig:I}=A(y,w,p),H=e;return pt(H.hash.outputLen,H.nByteLength,H.hmac)(P,I)}s.BASE._setWindowSize(8);function q(y,w,p,P=L){let I=y;if(w=D("msgHash",w),p=D("publicKey",p),"strict"in P)throw new Error("options.strict was renamed to lowS");Ft(P);let{lowS:H,prehash:j}=P,R,oe;try{if(typeof I=="string"||fe(I))try{R=f.fromDER(I)}catch(Y){if(!(Y instanceof ne.Err))throw Y;R=f.fromCompact(I)}else if(typeof I=="object"&&typeof I.r=="bigint"&&typeof I.s=="bigint"){let{r:Y,s:Se}=I;R=new f(Y,Se)}else throw new Error("PARSE");oe=s.fromHex(p)}catch(Y){if(Y.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(H&&R.hasHighS())return!1;j&&(w=e.hash(w));let{r:$,s:se}=R,He=S(w),ae=c(se),at=a(He*ae),ye=a($*ae),ke=s.BASE.multiplyAndAddUnsafe(oe,at,ye)?.toAffine();return ke?a(ke.x)===$:!1}return{CURVE:e,getPublicKey:g,getSharedSecret:E,sign:B,verify:q,ProjectivePoint:s,Signature:f,utils:b}}function Fr(r){return{hash:r,hmac:(e,...t)=>qe(r,e,Rt(...t)),randomBytes:Dt}}function rr(r,e){let t=n=>tr({...r,...Fr(n)});return Object.freeze({...t(e),create:t})}var or=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),nr=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),en=BigInt(1),Pt=BigInt(2),ir=(r,e)=>(r+e/Pt)/e;function tn(r){let e=or,t=BigInt(3),n=BigInt(6),i=BigInt(11),o=BigInt(22),a=BigInt(23),c=BigInt(44),s=BigInt(88),u=r*r*r%e,h=u*u*r%e,d=C(h,t,e)*h%e,l=C(d,t,e)*h%e,k=C(l,Pt,e)*u%e,O=C(k,i,e)*k%e,m=C(O,o,e)*O%e,f=C(m,c,e)*m%e,b=C(f,s,e)*f%e,g=C(b,c,e)*m%e,_=C(g,t,e)*h%e,E=C(_,a,e)*O%e,K=C(E,n,e)*u%e,S=C(K,Pt,e);if(!At.eql(At.sqr(S),r))throw new Error("Cannot find square root");return S}var At=it(or,void 0,void 0,{sqrt:tn}),Me=rr({a:BigInt(0),b:BigInt(7),Fp:At,n:nr,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=nr,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-en*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),i=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),o=t,a=BigInt("0x100000000000000000000000000000000"),c=ir(o*r,e),s=ir(-n*r,e),u=N(r-c*t-s*i,e),h=N(-c*n-s*o,e),d=u>a,l=h>a;if(d&&(u=e-u),l&&(h=e-h),u>a||h>a)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:d,k1:u,k2neg:l,k2:h}}}},Je),Us=BigInt(0);var zs=Me.ProjectivePoint;var ot="ECDH",sr=new Uint8Array,Kt=["deriveBits"],rn=new Uint8Array([100,107,112,95,112,114,107]),nn=new Uint8Array([115,107]),st=class{constructor(e){Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=e,this._nPk=33,this._nSk=32}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new F(t)}}async deserializePublicKey(e){try{return await this._importRawKey(e,!0)}catch(t){throw new W(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new F(t)}}async deserializePrivateKey(e){try{return await this._importRawKey(e,!1)}catch(t){throw new W(t)}}async importKey(e,t,n){try{if(e!=="raw")throw new Error("Unsupported format");return await this._importRawKey(t,n)}catch(i){throw new W(i)}}async generateKeyPair(){try{let e=Me.utils.randomPrivateKey(),t=new X(ot,e,"private",Kt);return{publicKey:await this.derivePublicKey(t),privateKey:t}}catch(e){throw new G(e)}}async deriveKeyPair(e){try{let t=await this._hkdf.labeledExtract(sr,rn,new Uint8Array(e)),n=await this._hkdf.labeledExpand(t,nn,sr,this._nSk),i=new X(ot,new Uint8Array(n),"private",Kt);return{privateKey:i,publicKey:await this.derivePublicKey(i)}}catch(t){throw new Pe(t)}}async derivePublicKey(e){try{return await this._derivePublicKey(e)}catch(t){throw new W(t)}}async dh(e,t){try{return await this._dh(e,t)}catch(n){throw new F(n)}}_serializePublicKey(e){return new Promise(t=>{t(e.key.buffer)})}_serializePrivateKey(e){return new Promise(t=>{t(e.key.buffer)})}_importRawKey(e,t){return new Promise((n,i)=>{t&&e.byteLength!==this._nPk&&i(new Error("Invalid length of the key")),!t&&e.byteLength!==this._nSk&&i(new Error("Invalid length of the key")),n(new X(ot,new Uint8Array(e),t?"public":"private",t?[]:Kt))})}_derivePublicKey(e){return new Promise((t,n)=>{try{let i=Me.getPublicKey(e.key);t(new X(ot,i,"public"))}catch(i){n(i)}})}_dh(e,t){return new Promise((n,i)=>{try{n(Me.getSharedSecret(e.key,t.key).buffer)}catch(o){i(o)}})}};var Bt=class extends pe{constructor(){let e=new Oe;super(ee.DhkemSecp256k1HkdfSha256,new st(e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:ee.DhkemSecp256k1HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:33}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:33}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}};export{Bt as DhkemSecp256k1HkdfSha256}; +var cr=Object.defineProperty;var ur=(r,e)=>{for(var t in e)cr(r,t,{get:e[t],enumerable:!0})};var Ve=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},X=class extends Ve{},Q=class extends X{};var J=class extends X{},V=class extends X{},Te=class extends X{},Ne=class extends X{};var pe=class extends X{},$=class extends X{};var fr={},zt=lr(globalThis,fr);function lr(r,e){return new Proxy(r,{get(t,n,i){return n in e?e[n]:r[n]},set(t,n,i){return n in e&&delete e[n],r[n]=i,!0},deleteProperty(t,n){let i=!1;return n in e&&(delete e[n],i=!0),n in r&&(delete r[n],i=!0),i},ownKeys(t){let n=Reflect.ownKeys(r),i=Reflect.ownKeys(e),o=new Set(i);return[...n.filter(a=>!o.has(a)),...i]},defineProperty(t,n,i){return n in e&&delete e[n],Reflect.defineProperty(r,n,i),!0},getOwnPropertyDescriptor(t,n){return n in e?Reflect.getOwnPropertyDescriptor(e,n):Reflect.getOwnPropertyDescriptor(r,n)},has(t,n){return n in e||n in r}})}async function hr(){if(zt!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:r}=await import("crypto");return r.subtle}catch(r){throw new $(r)}}var ce=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await hr())}};var ee={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},Re={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3};var G=new Uint8Array(0);var Ye=new Uint8Array([75,69,77,0,0]);var ue=r=>typeof r=="object"&&r!==null&&typeof r.privateKey=="object"&&typeof r.publicKey=="object";function me(r,e){if(e<=0)throw new Error("i2Osp: too small size");if(r>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let n=0;n>8;return t}function ge(r,e){let t=new Uint8Array(r.length+e.length);return t.set(r,0),t.set(e,r.length),t}var yr=new Uint8Array([101,97,101,95,112,114,107]),br=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function wr(r,e,t){let n=new Uint8Array(r.length+e.length+t.length);return n.set(r,0),n.set(e,r.length),n.set(t,r.length+e.length),n}var xe=class{constructor(e,t,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=t,this._kdf=n;let i=new Uint8Array(Ye);i.set(me(this.id,2),3),this._kdf.init(i)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,t,n=!0){return await this._prim.importKey(e,t,n)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new Q("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():ue(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let n=await this._prim.serializePublicKey(t.publicKey),i=await this._prim.serializePublicKey(e.recipientPublicKey);try{let o;if(e.senderKey===void 0)o=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let s=ue(e.senderKey)?e.senderKey.privateKey:e.senderKey,u=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),h=new Uint8Array(await this._prim.dh(s,e.recipientPublicKey));o=ge(u,h)}let a;if(e.senderKey===void 0)a=ge(new Uint8Array(n),new Uint8Array(i));else{let s=ue(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),u=await this._prim.serializePublicKey(s);a=wr(new Uint8Array(n),new Uint8Array(i),new Uint8Array(u))}let c=await this._generateSharedSecret(o,a);return{enc:n,sharedSecret:c}}catch(o){throw new Te(o)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),n=ue(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,i=ue(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),o=await this._prim.serializePublicKey(i);try{let a;if(e.senderPublicKey===void 0)a=new Uint8Array(await this._prim.dh(n,t));else{let s=new Uint8Array(await this._prim.dh(n,t)),u=new Uint8Array(await this._prim.dh(n,e.senderPublicKey));a=ge(s,u)}let c;if(e.senderPublicKey===void 0)c=ge(new Uint8Array(e.enc),new Uint8Array(o));else{let s=await this._prim.serializePublicKey(e.senderPublicKey);c=new Uint8Array(e.enc.byteLength+o.byteLength+s.byteLength),c.set(new Uint8Array(e.enc),0),c.set(new Uint8Array(o),e.enc.byteLength),c.set(new Uint8Array(s),e.enc.byteLength+o.byteLength)}return await this._generateSharedSecret(a,c)}catch(a){throw new Ne(a)}}async _generateSharedSecret(e,t){let n=this._kdf.buildLabeledIkm(yr,e),i=this._kdf.buildLabeledInfo(br,t,this.secretSize);return await this._kdf.extractAndExpand(G,n,i,this.secretSize)}};var ft=new Uint8Array([100,107,112,95,112,114,107]),Ht=new Uint8Array([115,107]);var Tn=new Uint8Array([99,97,110,100,105,100,97,116,101]),Nn=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),Rn=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),jn=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Dn=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),qn=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Cn=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]);function Tt(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function vr(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Be(r,...e){if(!vr(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Nt(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");Tt(r.outputLen),Tt(r.blockLen)}function Ie(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function Rt(r,e){Be(r);let t=e.outputLen;if(r.lengthnew DataView(r.buffer,r.byteOffset,r.byteLength),Y=(r,e)=>r<<32-e|r>>>e;var si=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Er(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function je(r){return typeof r=="string"&&(r=Er(r)),Be(r),r}function jt(...r){let e=0;for(let n=0;nr().update(je(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function qt(r=32){if(_e&&typeof _e.getRandomValues=="function")return _e.getRandomValues(new Uint8Array(r));if(_e&&typeof _e.randomBytes=="function")return _e.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}var Je=class extends Le{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,Nt(e);let n=je(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(n.length>i?e.create().update(n).digest():n);for(let a=0;anew Je(r,e).update(t).digest();De.create=(r,e)=>new Je(r,e);function kr(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),a=Number(t>>i&o),c=Number(t&o),s=n?4:0,u=n?0:4;r.setUint32(e+s,a,n),r.setUint32(e+u,c,n)}var Ct=(r,e,t)=>r&e^~r&t,Mt=(r,e,t)=>r&e^r&t^e&t,Fe=class extends Le{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Qe(this.buffer)}update(e){Ie(this);let{view:t,buffer:n,blockLen:i}=this;e=je(e);let o=e.length;for(let a=0;ai-a&&(this.process(n,0),a=0);for(let d=a;dh.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d>>3,m=Y(k,17)^Y(k,19)^k>>>10;le[d]=m+le[d-7]+O+le[d-16]|0}let{A:n,B:i,C:o,D:a,E:c,F:s,G:u,H:h}=this;for(let d=0;d<64;d++){let l=Y(c,6)^Y(c,11)^Y(c,25),k=h+l+Ct(c,s,u)+Sr[d]+le[d]|0,m=(Y(n,2)^Y(n,13)^Y(n,22))+Mt(n,i,o)|0;h=u,u=s,s=c,c=a+k|0,a=o,o=i,i=n,n=k+m|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,a=a+this.D|0,c=c+this.E|0,s=s+this.F|0,u=u+this.G|0,h=h+this.H|0,this.set(n,i,o,a,c,s,u,h)}roundClean(){le.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var et=Dt(()=>new lt);var Bi=new Uint8Array([115,101,99]);var Wi=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),Xi=new Uint8Array([101,120,112]),Qi=new Uint8Array([105,110,102,111,95,104,97,115,104]),Ji=new Uint8Array([107,101,121]),Fi=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),eo=new Uint8Array([115,101,99,114,101,116]),to=new Uint8Array([72,80,75,69,0,0,0,0,0,0]);var $t=new Uint8Array([72,80,75,69,45,118,49]),dt=class extends ce{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:Re.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:G}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let n=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set($t,0),n.set(this._suiteId,7),n.set(e,7+this._suiteId.byteLength),n.set(t,7+this._suiteId.byteLength+e.byteLength),n}buildLabeledInfo(e,t,n){this._checkInit();let i=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return i.set(new Uint8Array([0,n]),0),i.set($t,2),i.set(this._suiteId,9),i.set(e,9+this._suiteId.byteLength),i.set(t,9+this._suiteId.byteLength+e.byteLength),i}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new Q("The salt length must be the same as the hashSize");let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,t)}async expand(e,t,n){await this._setup();let i=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),o=new ArrayBuffer(n),a=new Uint8Array(o),c=G,s=new Uint8Array(t),u=new Uint8Array(1);if(n>255*this.hashSize)throw new Error("Entropy limit reached");let h=new Uint8Array(this.hashSize+s.length+1);for(let d=1,l=0;l=c.length?(a.set(c,l),l+=c.length):(a.set(c.slice(0,a.length-l),l),l+=a.length-l);return o}async extractAndExpand(e,t,n,i){await this._setup();let o=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:n},o,i*8)}async labeledExtract(e,t,n){return await this.extract(e,this.buildLabeledIkm(t,n))}async labeledExpand(e,t,n,i){return await this.expand(e,this.buildLabeledInfo(t,n,i),i)}_checkInit(){if(this._suiteId===G)throw new Error("Not initialized. Call init()")}},qe=class extends dt{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:Re.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}};var Ce=class extends qe{};var F=class{constructor(e,t,n,i=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=n,this.algorithm={name:e},this.usages=i,n==="public"&&(this.usages=[])}};var Oe=class extends Ce{async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return De(et,new Uint8Array(e),new Uint8Array(t));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,t)}};var gt={};ur(gt,{aInRange:()=>ye,abool:()=>ve,abytes:()=>Ue,bitGet:()=>Rr,bitLen:()=>pt,bitMask:()=>$e,bitSet:()=>jr,bytesToHex:()=>Ee,bytesToNumberBE:()=>re,bytesToNumberLE:()=>rt,concatBytes:()=>ze,createHmacDrbg:()=>mt,ensureBytes:()=>q,equalBytes:()=>Tr,hexToBytes:()=>Se,hexToNumber:()=>wt,inRange:()=>Me,isBytes:()=>de,memoized:()=>it,notImplemented:()=>qr,numberToBytesBE:()=>he,numberToBytesLE:()=>nt,numberToHexUnpadded:()=>ke,numberToVarBytesBE:()=>Hr,utf8ToBytes:()=>Nr,validateObject:()=>be});var bt=BigInt(0),tt=BigInt(1),Ur=BigInt(2);function de(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Ue(r){if(!de(r))throw new Error("Uint8Array expected")}function ve(r,e){if(typeof e!="boolean")throw new Error(`${r} must be valid boolean, got "${e}".`)}var zr=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Ee(r){Ue(r);let e="";for(let t=0;t=te._0&&r<=te._9)return r-te._0;if(r>=te._A&&r<=te._F)return r-(te._A-10);if(r>=te._a&&r<=te._f)return r-(te._a-10)}function Se(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let i=0,o=0;itypeof r=="bigint"&&bt<=r;function Me(r,e,t){return ht(r)&&ht(e)&&ht(t)&&e<=r&&rbt;r>>=tt,e+=1);return e}function Rr(r,e){return r>>BigInt(e)&tt}function jr(r,e,t){return r|(t?tt:bt)<(Ur<new Uint8Array(r),Zt=r=>Uint8Array.from(r);function mt(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=yt(r),i=yt(r),o=0,a=()=>{n.fill(1),i.fill(0),o=0},c=(...d)=>t(i,n,...d),s=(d=yt())=>{i=c(Zt([0]),d),n=c(),d.length!==0&&(i=c(Zt([1]),d),n=c())},u=()=>{if(o++>=1e3)throw new Error("drbg: tried 1000 values");let d=0,l=[];for(;d{a(),s(d);let k;for(;!(k=l(u()));)s();return a(),k}}var Dr={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||de(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function be(r,e,t={}){let n=(i,o,a)=>{let c=Dr[o];if(typeof c!="function")throw new Error(`Invalid validator "${o}", expected function`);let s=r[i];if(!(a&&s===void 0)&&!c(s,r))throw new Error(`Invalid param ${String(i)}=${s} (${typeof s}), expected ${o}`)};for(let[i,o]of Object.entries(e))n(i,o,!1);for(let[i,o]of Object.entries(t))n(i,o,!0);return r}var qr=()=>{throw new Error("not implemented")};function it(r){let e=new WeakMap;return(t,...n)=>{let i=e.get(t);if(i!==void 0)return i;let o=r(t,...n);return e.set(t,o),o}}var z=BigInt(0),U=BigInt(1),Pe=BigInt(2),Cr=BigInt(3),xt=BigInt(4),Vt=BigInt(5),Yt=BigInt(8),Mr=BigInt(9),$r=BigInt(16);function N(r,e){let t=r%e;return t>=z?t:e+t}function Gr(r,e,t){if(t<=z||e 0");if(t===U)return z;let n=U;for(;e>z;)e&U&&(n=n*r%t),r=r*r%t,e>>=U;return n}function C(r,e,t){let n=r;for(;e-- >z;)n*=n,n%=t;return n}function ot(r,e){if(r===z||e<=z)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=N(r,e),n=e,i=z,o=U,a=U,c=z;for(;t!==z;){let u=n/t,h=n%t,d=i-a*u,l=o-c*u;n=t,t=h,i=a,o=c,a=d,c=l}if(n!==U)throw new Error("invert: does not exist");return N(i,e)}function Zr(r){let e=(r-U)/Pe,t,n,i;for(t=r-U,n=0;t%Pe===z;t/=Pe,n++);for(i=Pe;i(n[i]="function",n),e);return be(r,t)}function Wr(r,e,t){if(t 0");if(t===z)return r.ONE;if(t===U)return e;let n=r.ONE,i=e;for(;t>z;)t&U&&(n=r.mul(n,i)),i=r.sqr(i),t>>=U;return n}function Xr(r,e){let t=new Array(e.length),n=e.reduce((o,a,c)=>r.is0(a)?o:(t[c]=o,r.mul(o,a)),r.ONE),i=r.inv(n);return e.reduceRight((o,a,c)=>r.is0(a)?o:(t[c]=r.mul(o,t[c]),r.mul(o,a)),i),t}function vt(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function st(r,e,t=!1,n={}){if(r<=z)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:i,nByteLength:o}=vt(r,e);if(o>2048)throw new Error("Field lengths over 2048 bytes are not supported");let a=Vr(r),c=Object.freeze({ORDER:r,BITS:i,BYTES:o,MASK:$e(i),ZERO:z,ONE:U,create:s=>N(s,r),isValid:s=>{if(typeof s!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof s}`);return z<=s&&ss===z,isOdd:s=>(s&U)===U,neg:s=>N(-s,r),eql:(s,u)=>s===u,sqr:s=>N(s*s,r),add:(s,u)=>N(s+u,r),sub:(s,u)=>N(s-u,r),mul:(s,u)=>N(s*u,r),pow:(s,u)=>Wr(c,s,u),div:(s,u)=>N(s*ot(u,r),r),sqrN:s=>s*s,addN:(s,u)=>s+u,subN:(s,u)=>s-u,mulN:(s,u)=>s*u,inv:s=>ot(s,r),sqrt:n.sqrt||(s=>a(c,s)),invertBatch:s=>Xr(c,s),cmov:(s,u,h)=>h?u:s,toBytes:s=>t?nt(s,o):he(s,o),fromBytes:s=>{if(s.length!==o)throw new Error(`Fp.fromBytes: expected ${o}, got ${s.length}`);return t?rt(s):re(s)}});return Object.freeze(c)}function Wt(r){if(typeof r!="bigint")throw new Error("field order must be bigint");let e=r.toString(2).length;return Math.ceil(e/8)}function Et(r){let e=Wt(r);return e+Math.ceil(e/2)}function Xt(r,e,t=!1){let n=r.length,i=Wt(e),o=Et(e);if(n<16||n1024)throw new Error(`expected ${o}-1024 bytes of input, got ${n}`);let a=t?re(r):rt(r),c=N(a,e-U)+U;return t?nt(c,i):he(c,i)}var Jr=BigInt(0),kt=BigInt(1),St=new WeakMap,Qt=new WeakMap;function Jt(r,e){let t=(o,a)=>{let c=a.negate();return o?c:a},n=o=>{if(!Number.isSafeInteger(o)||o<=0||o>e)throw new Error(`Wrong window size=${o}, should be [1..${e}]`)},i=o=>{n(o);let a=Math.ceil(e/o)+1,c=2**(o-1);return{windows:a,windowSize:c}};return{constTimeNegate:t,unsafeLadder(o,a){let c=r.ZERO,s=o;for(;a>Jr;)a&kt&&(c=c.add(s)),s=s.double(),a>>=kt;return c},precomputeWindow(o,a){let{windows:c,windowSize:s}=i(a),u=[],h=o,d=h;for(let l=0;l>=O,b>u&&(b-=k,c+=kt);let g=f,_=f+Math.abs(b)-1,E=m%2!==0,K=b<0;b===0?d=d.add(t(E,a[g])):h=h.add(t(K,a[_]))}return{p:h,f:d}},wNAFCached(o,a,c){let s=Qt.get(o)||1,u=St.get(o);return u||(u=this.precomputeWindow(o,s),s!==1&&St.set(o,c(u))),this.wNAF(s,u,a)},setWindowSize(o,a){n(a),Qt.set(o,a),St.delete(o)}}}function Ft(r,e,t,n){if(!Array.isArray(t)||!Array.isArray(n)||n.length!==t.length)throw new Error("arrays of points and scalars must have equal length");n.forEach((h,d)=>{if(!e.isValid(h))throw new Error(`wrong scalar at index ${d}`)}),t.forEach((h,d)=>{if(!(h instanceof r))throw new Error(`wrong point at index ${d}`)});let i=pt(BigInt(t.length)),o=i>12?i-3:i>4?i-2:i?2:1,a=(1<=0;h-=o){c.fill(r.ZERO);for(let l=0;l>BigInt(h)&BigInt(a));c[O]=c[O].add(t[l])}let d=r.ZERO;for(let l=c.length-1,k=r.ZERO;l>0;l--)k=k.add(c[l]),d=d.add(k);if(u=u.add(d),h!==0)for(let l=0;l{let{Err:t}=ne;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length&1)throw new t("tlv.encode: unpadded data");let n=e.length/2,i=ke(n);if(i.length/2&128)throw new t("tlv.encode: long form length too big");let o=n>127?ke(i.length/2|128):"";return`${ke(r)}${o}${i}${e}`},decode(r,e){let{Err:t}=ne,n=0;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let i=e[n++],o=!!(i&128),a=0;if(!o)a=i;else{let s=i&127;if(!s)throw new t("tlv.decode(long): indefinite length not supported");if(s>4)throw new t("tlv.decode(long): byte length is too big");let u=e.subarray(n,n+s);if(u.length!==s)throw new t("tlv.decode: length bytes not complete");if(u[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let h of u)a=a<<8|h;if(n+=s,a<128)throw new t("tlv.decode(long): not minimal encoding")}let c=e.subarray(n,n+a);if(c.length!==a)throw new t("tlv.decode: wrong value length");return{v:c,l:e.subarray(n+a)}}},_int:{encode(r){let{Err:e}=ne;if(r{let g=f.toAffine();return ze(Uint8Array.from([4]),t.toBytes(g.x),t.toBytes(g.y))}),o=e.fromBytes||(m=>{let f=m.subarray(1),b=t.fromBytes(f.subarray(0,t.BYTES)),g=t.fromBytes(f.subarray(t.BYTES,2*t.BYTES));return{x:b,y:g}});function a(m){let{a:f,b}=e,g=t.sqr(m),_=t.mul(g,m);return t.add(t.add(_,t.mul(m,f)),b)}if(!t.eql(t.sqr(e.Gy),a(e.Gx)))throw new Error("bad generator point: equation left != right");function c(m){return Me(m,T,e.n)}function s(m){let{allowedPrivateKeyLengths:f,nByteLength:b,wrapPrivateKey:g,n:_}=e;if(f&&typeof m!="bigint"){if(de(m)&&(m=Ee(m)),typeof m!="string"||!f.includes(m.length))throw new Error("Invalid key");m=m.padStart(b*2,"0")}let E;try{E=typeof m=="bigint"?m:re(q("private key",m,b))}catch{throw new Error(`private key must be ${b} bytes, hex or bigint, not ${typeof m}`)}return g&&(E=N(E,_)),ye("private key",E,T,_),E}function u(m){if(!(m instanceof l))throw new Error("ProjectivePoint expected")}let h=it((m,f)=>{let{px:b,py:g,pz:_}=m;if(t.eql(_,t.ONE))return{x:b,y:g};let E=m.is0();f==null&&(f=E?t.ONE:t.inv(_));let K=t.mul(b,f),S=t.mul(g,f),x=t.mul(_,f);if(E)return{x:t.ZERO,y:t.ZERO};if(!t.eql(x,t.ONE))throw new Error("invZ was invalid");return{x:K,y:S}}),d=it(m=>{if(m.is0()){if(e.allowInfinityPoint&&!t.is0(m.py))return;throw new Error("bad point: ZERO")}let{x:f,y:b}=m.toAffine();if(!t.isValid(f)||!t.isValid(b))throw new Error("bad point: x or y not FE");let g=t.sqr(b),_=a(f);if(!t.eql(g,_))throw new Error("bad point: equation left != right");if(!m.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class l{constructor(f,b,g){if(this.px=f,this.py=b,this.pz=g,f==null||!t.isValid(f))throw new Error("x required");if(b==null||!t.isValid(b))throw new Error("y required");if(g==null||!t.isValid(g))throw new Error("z required");Object.freeze(this)}static fromAffine(f){let{x:b,y:g}=f||{};if(!f||!t.isValid(b)||!t.isValid(g))throw new Error("invalid affine point");if(f instanceof l)throw new Error("projective point not allowed");let _=E=>t.eql(E,t.ZERO);return _(b)&&_(g)?l.ZERO:new l(b,g,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(f){let b=t.invertBatch(f.map(g=>g.pz));return f.map((g,_)=>g.toAffine(b[_])).map(l.fromAffine)}static fromHex(f){let b=l.fromAffine(o(q("pointHex",f)));return b.assertValidity(),b}static fromPrivateKey(f){return l.BASE.multiply(s(f))}static msm(f,b){return Ft(l,n,f,b)}_setWindowSize(f){O.setWindowSize(this,f)}assertValidity(){d(this)}hasEvenY(){let{y:f}=this.toAffine();if(t.isOdd)return!t.isOdd(f);throw new Error("Field doesn't support isOdd")}equals(f){u(f);let{px:b,py:g,pz:_}=this,{px:E,py:K,pz:S}=f,x=t.eql(t.mul(b,S),t.mul(E,_)),v=t.eql(t.mul(g,S),t.mul(K,_));return x&&v}negate(){return new l(this.px,t.neg(this.py),this.pz)}double(){let{a:f,b}=e,g=t.mul(b,tr),{px:_,py:E,pz:K}=this,S=t.ZERO,x=t.ZERO,v=t.ZERO,A=t.mul(_,_),M=t.mul(E,E),L=t.mul(K,K),B=t.mul(_,E);return B=t.add(B,B),v=t.mul(_,K),v=t.add(v,v),S=t.mul(f,v),x=t.mul(g,L),x=t.add(S,x),S=t.sub(M,x),x=t.add(M,x),x=t.mul(S,x),S=t.mul(B,S),v=t.mul(g,v),L=t.mul(f,L),B=t.sub(A,L),B=t.mul(f,B),B=t.add(B,v),v=t.add(A,A),A=t.add(v,A),A=t.add(A,L),A=t.mul(A,B),x=t.add(x,A),L=t.mul(E,K),L=t.add(L,L),A=t.mul(L,B),S=t.sub(S,A),v=t.mul(L,M),v=t.add(v,v),v=t.add(v,v),new l(S,x,v)}add(f){u(f);let{px:b,py:g,pz:_}=this,{px:E,py:K,pz:S}=f,x=t.ZERO,v=t.ZERO,A=t.ZERO,M=e.a,L=t.mul(e.b,tr),B=t.mul(b,E),D=t.mul(g,K),y=t.mul(_,S),w=t.add(b,g),p=t.add(E,K);w=t.mul(w,p),p=t.add(B,D),w=t.sub(w,p),p=t.add(b,_);let P=t.add(E,S);return p=t.mul(p,P),P=t.add(B,y),p=t.sub(p,P),P=t.add(g,_),x=t.add(K,S),P=t.mul(P,x),x=t.add(D,y),P=t.sub(P,x),A=t.mul(M,p),x=t.mul(L,y),A=t.add(x,A),x=t.sub(D,A),A=t.add(D,A),v=t.mul(x,A),D=t.add(B,B),D=t.add(D,B),y=t.mul(M,y),p=t.mul(L,p),D=t.add(D,y),y=t.sub(B,y),y=t.mul(M,y),p=t.add(p,y),B=t.mul(D,p),v=t.add(v,B),B=t.mul(P,p),x=t.mul(w,x),x=t.sub(x,B),B=t.mul(w,D),A=t.mul(P,A),A=t.add(A,B),new l(x,v,A)}subtract(f){return this.add(f.negate())}is0(){return this.equals(l.ZERO)}wNAF(f){return O.wNAFCached(this,f,l.normalizeZ)}multiplyUnsafe(f){ye("scalar",f,ie,e.n);let b=l.ZERO;if(f===ie)return b;if(f===T)return this;let{endo:g}=e;if(!g)return O.unsafeLadder(this,f);let{k1neg:_,k1:E,k2neg:K,k2:S}=g.splitScalar(f),x=b,v=b,A=this;for(;E>ie||S>ie;)E&T&&(x=x.add(A)),S&T&&(v=v.add(A)),A=A.double(),E>>=T,S>>=T;return _&&(x=x.negate()),K&&(v=v.negate()),v=new l(t.mul(v.px,g.beta),v.py,v.pz),x.add(v)}multiply(f){let{endo:b,n:g}=e;ye("scalar",f,T,g);let _,E;if(b){let{k1neg:K,k1:S,k2neg:x,k2:v}=b.splitScalar(f),{p:A,f:M}=this.wNAF(S),{p:L,f:B}=this.wNAF(v);A=O.constTimeNegate(K,A),L=O.constTimeNegate(x,L),L=new l(t.mul(L.px,b.beta),L.py,L.pz),_=A.add(L),E=M.add(B)}else{let{p:K,f:S}=this.wNAF(f);_=K,E=S}return l.normalizeZ([_,E])[0]}multiplyAndAddUnsafe(f,b,g){let _=l.BASE,E=(S,x)=>x===ie||x===T||!S.equals(_)?S.multiplyUnsafe(x):S.multiply(x),K=E(this,b).add(E(f,g));return K.is0()?void 0:K}toAffine(f){return h(this,f)}isTorsionFree(){let{h:f,isTorsionFree:b}=e;if(f===T)return!0;if(b)return b(l,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:f,clearCofactor:b}=e;return f===T?this:b?b(l,this):this.multiplyUnsafe(e.h)}toRawBytes(f=!0){return ve("isCompressed",f),this.assertValidity(),i(l,this,f)}toHex(f=!0){return ve("isCompressed",f),Ee(this.toRawBytes(f))}}l.BASE=new l(e.Gx,e.Gy,t.ONE),l.ZERO=new l(t.ZERO,t.ONE,t.ZERO);let k=e.nBitLength,O=Jt(l,e.endo?Math.ceil(k/2):k);return{CURVE:e,ProjectivePoint:l,normPrivateKeyToScalar:s,weierstrassEquation:a,isWithinCurveOrder:c}}function on(r){let e=Pt(r);return be(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function rr(r){let e=on(r),{Fp:t,n}=e,i=t.BYTES+1,o=2*t.BYTES+1;function a(y){return N(y,n)}function c(y){return ot(y,n)}let{ProjectivePoint:s,normPrivateKeyToScalar:u,weierstrassEquation:h,isWithinCurveOrder:d}=nn({...e,toBytes(y,w,p){let P=w.toAffine(),I=t.toBytes(P.x),H=ze;return ve("isCompressed",p),p?H(Uint8Array.from([w.hasEvenY()?2:3]),I):H(Uint8Array.from([4]),I,t.toBytes(P.y))},fromBytes(y){let w=y.length,p=y[0],P=y.subarray(1);if(w===i&&(p===2||p===3)){let I=re(P);if(!Me(I,T,t.ORDER))throw new Error("Point is not on curve");let H=h(I),R;try{R=t.sqrt(H)}catch(Z){let se=Z instanceof Error?": "+Z.message:"";throw new Error("Point is not on curve"+se)}let j=(R&T)===T;return(p&1)===1!==j&&(R=t.neg(R)),{x:I,y:R}}else if(w===o&&p===4){let I=t.fromBytes(P.subarray(0,t.BYTES)),H=t.fromBytes(P.subarray(t.BYTES,2*t.BYTES));return{x:I,y:H}}else throw new Error(`Point of length ${w} was invalid. Expected ${i} compressed bytes or ${o} uncompressed bytes`)}}),l=y=>Ee(he(y,e.nByteLength));function k(y){let w=n>>T;return y>w}function O(y){return k(y)?a(-y):y}let m=(y,w,p)=>re(y.slice(w,p));class f{constructor(w,p,P){this.r=w,this.s=p,this.recovery=P,this.assertValidity()}static fromCompact(w){let p=e.nByteLength;return w=q("compactSignature",w,p*2),new f(m(w,0,p),m(w,p,2*p))}static fromDER(w){let{r:p,s:P}=ne.toSig(q("DER",w));return new f(p,P)}assertValidity(){ye("r",this.r,T,n),ye("s",this.s,T,n)}addRecoveryBit(w){return new f(this.r,this.s,w)}recoverPublicKey(w){let{r:p,s:P,recovery:I}=this,H=S(q("msgHash",w));if(I==null||![0,1,2,3].includes(I))throw new Error("recovery id invalid");let R=I===2||I===3?p+e.n:p;if(R>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let j=I&1?"03":"02",oe=s.fromHex(j+l(R)),Z=c(R),se=a(-H*Z),He=a(P*Z),ae=s.BASE.multiplyAndAddUnsafe(oe,se,He);if(!ae)throw new Error("point at infinify");return ae.assertValidity(),ae}hasHighS(){return k(this.s)}normalizeS(){return this.hasHighS()?new f(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return Se(this.toDERHex())}toDERHex(){return ne.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return Se(this.toCompactHex())}toCompactHex(){return l(this.r)+l(this.s)}}let b={isValidPrivateKey(y){try{return u(y),!0}catch{return!1}},normPrivateKeyToScalar:u,randomPrivateKey:()=>{let y=Et(e.n);return Xt(e.randomBytes(y),e.n)},precompute(y=8,w=s.BASE){return w._setWindowSize(y),w.multiply(BigInt(3)),w}};function g(y,w=!0){return s.fromPrivateKey(y).toRawBytes(w)}function _(y){let w=de(y),p=typeof y=="string",P=(w||p)&&y.length;return w?P===i||P===o:p?P===2*i||P===2*o:y instanceof s}function E(y,w,p=!0){if(_(y))throw new Error("first arg must be private key");if(!_(w))throw new Error("second arg must be public key");return s.fromHex(w).multiply(u(y)).toRawBytes(p)}let K=e.bits2int||function(y){let w=re(y),p=y.length*8-e.nBitLength;return p>0?w>>BigInt(p):w},S=e.bits2int_modN||function(y){return a(K(y))},x=$e(e.nBitLength);function v(y){return ye(`num < 2^${e.nBitLength}`,y,ie,x),he(y,e.nByteLength)}function A(y,w,p=M){if(["recovered","canonical"].some(we=>we in p))throw new Error("sign() legacy options not supported");let{hash:P,randomBytes:I}=e,{lowS:H,prehash:R,extraEntropy:j}=p;H==null&&(H=!0),y=q("msgHash",y),er(p),R&&(y=q("prehashed msgHash",P(y)));let oe=S(y),Z=u(w),se=[v(Z),v(oe)];if(j!=null&&j!==!1){let we=j===!0?I(t.BYTES):j;se.push(q("extraEntropy",we))}let He=ze(...se),ae=oe;function ut(we){let Ae=K(we);if(!d(Ae))return;let Lt=c(Ae),W=s.BASE.multiply(Ae).toAffine(),Ke=a(W.x);if(Ke===ie)return;let Ze=a(Lt*a(ae+Ke*Z));if(Ze===ie)return;let Ot=(W.x===Ke?0:2)|Number(W.y&T),Ut=Ze;return H&&k(Ze)&&(Ut=O(Ze),Ot^=1),new f(Ke,Ut,Ot)}return{seed:He,k2sig:ut}}let M={lowS:e.lowS,prehash:!1},L={lowS:e.lowS,prehash:!1};function B(y,w,p=M){let{seed:P,k2sig:I}=A(y,w,p),H=e;return mt(H.hash.outputLen,H.nByteLength,H.hmac)(P,I)}s.BASE._setWindowSize(8);function D(y,w,p,P=L){let I=y;if(w=q("msgHash",w),p=q("publicKey",p),"strict"in P)throw new Error("options.strict was renamed to lowS");er(P);let{lowS:H,prehash:R}=P,j,oe;try{if(typeof I=="string"||de(I))try{j=f.fromDER(I)}catch(W){if(!(W instanceof ne.Err))throw W;j=f.fromCompact(I)}else if(typeof I=="object"&&typeof I.r=="bigint"&&typeof I.s=="bigint"){let{r:W,s:Ke}=I;j=new f(W,Ke)}else throw new Error("PARSE");oe=s.fromHex(p)}catch(W){if(W.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(H&&j.hasHighS())return!1;R&&(w=e.hash(w));let{r:Z,s:se}=j,He=S(w),ae=c(se),ut=a(He*ae),we=a(Z*ae),Ae=s.BASE.multiplyAndAddUnsafe(oe,ut,we)?.toAffine();return Ae?a(Ae.x)===Z:!1}return{CURVE:e,getPublicKey:g,getSharedSecret:E,sign:B,verify:D,ProjectivePoint:s,Signature:f,utils:b}}function sn(r){return{hash:r,hmac:(e,...t)=>De(r,e,jt(...t)),randomBytes:qt}}function nr(r,e){let t=n=>rr({...r,...sn(n)});return Object.freeze({...t(e),create:t})}var sr=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),ir=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),an=BigInt(1),At=BigInt(2),or=(r,e)=>(r+e/At)/e;function cn(r){let e=sr,t=BigInt(3),n=BigInt(6),i=BigInt(11),o=BigInt(22),a=BigInt(23),c=BigInt(44),s=BigInt(88),u=r*r*r%e,h=u*u*r%e,d=C(h,t,e)*h%e,l=C(d,t,e)*h%e,k=C(l,At,e)*u%e,O=C(k,i,e)*k%e,m=C(O,o,e)*O%e,f=C(m,c,e)*m%e,b=C(f,s,e)*f%e,g=C(b,c,e)*m%e,_=C(g,t,e)*h%e,E=C(_,a,e)*O%e,K=C(E,n,e)*u%e,S=C(K,At,e);if(!Kt.eql(Kt.sqr(S),r))throw new Error("Cannot find square root");return S}var Kt=st(sr,void 0,void 0,{sqrt:cn}),Ge=nr({a:BigInt(0),b:BigInt(7),Fp:Kt,n:ir,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=ir,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-an*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),i=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),o=t,a=BigInt("0x100000000000000000000000000000000"),c=or(o*r,e),s=or(-n*r,e),u=N(r-c*t-s*i,e),h=N(-c*n-s*o,e),d=u>a,l=h>a;if(d&&(u=e-u),l&&(h=e-h),u>a||h>a)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:d,k1:u,k2neg:l,k2:h}}}},et),_s=BigInt(0);var vs=Ge.ProjectivePoint;var at="ECDH",ar=new Uint8Array,Bt=["deriveBits"],un=new Uint8Array([100,107,112,95,112,114,107]),fn=new Uint8Array([115,107]),ct=class{constructor(e){Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=e,this._nPk=33,this._nSk=32}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new J(t)}}async deserializePublicKey(e){try{return await this._importRawKey(e,!0)}catch(t){throw new V(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new J(t)}}async deserializePrivateKey(e){try{return await this._importRawKey(e,!1)}catch(t){throw new V(t)}}async importKey(e,t,n){try{if(e!=="raw")throw new Error("Unsupported format");return await this._importRawKey(t,n)}catch(i){throw new V(i)}}async generateKeyPair(){try{let e=Ge.utils.randomPrivateKey(),t=new F(at,e,"private",Bt);return{publicKey:await this.derivePublicKey(t),privateKey:t}}catch(e){throw new $(e)}}async deriveKeyPair(e){try{let t=await this._hkdf.labeledExtract(ar,un,new Uint8Array(e)),n=await this._hkdf.labeledExpand(t,fn,ar,this._nSk),i=new F(at,new Uint8Array(n),"private",Bt);return{privateKey:i,publicKey:await this.derivePublicKey(i)}}catch(t){throw new pe(t)}}async derivePublicKey(e){try{return await this._derivePublicKey(e)}catch(t){throw new V(t)}}async dh(e,t){try{return await this._dh(e,t)}catch(n){throw new J(n)}}_serializePublicKey(e){return new Promise(t=>{t(e.key.buffer)})}_serializePrivateKey(e){return new Promise(t=>{t(e.key.buffer)})}_importRawKey(e,t){return new Promise((n,i)=>{t&&e.byteLength!==this._nPk&&i(new Error("Invalid length of the key")),!t&&e.byteLength!==this._nSk&&i(new Error("Invalid length of the key")),n(new F(at,new Uint8Array(e),t?"public":"private",t?[]:Bt))})}_derivePublicKey(e){return new Promise((t,n)=>{try{let i=Ge.getPublicKey(e.key);t(new F(at,i,"public"))}catch(i){n(i)}})}_dh(e,t){return new Promise((n,i)=>{try{n(Ge.getSharedSecret(e.key,t.key).buffer)}catch(o){i(o)}})}};var It=class extends xe{constructor(){let e=new Oe;super(ee.DhkemSecp256k1HkdfSha256,new ct(e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:ee.DhkemSecp256k1HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:33}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:33}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}};export{It as DhkemSecp256k1HkdfSha256}; /*! Bundled license information: @noble/hashes/esm/utils.js: diff --git a/dhkem-x25519/docs/classes/DhkemX25519HkdfSha256.html b/dhkem-x25519/docs/classes/DhkemX25519HkdfSha256.html index 610687617..6f7e69653 100644 --- a/dhkem-x25519/docs/classes/DhkemX25519HkdfSha256.html +++ b/dhkem-x25519/docs/classes/DhkemX25519HkdfSha256.html @@ -11,7 +11,7 @@
import { AeadId, CipherSuite, KdfId, KemId } from "https://deno.land/x/hpke/mod.ts";

const suite = new CipherSuite({
kem: KemId.DhkemX25519HkdfSha256,
kdf: KdfId.HkdfSha256,
aead: AeadId.Aes128Gcm,
});
-

Hierarchy

  • Dhkem
    • DhkemX25519HkdfSha256

Constructors

Hierarchy

  • Dhkem
    • DhkemX25519HkdfSha256

Constructors

Properties

Constructors

Properties

_kdf: KdfInterface
_prim: DhkemPrimitives
encSize: number = 32

32

-
id: KemId = KemId.DhkemX25519HkdfSha256

KemId.DhkemX25519HkdfSha256 (0x0020)

-
privateKeySize: number = 32

32

-
publicKeySize: number = 32

32

-
secretSize: number = 32

32

-

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    +

Constructors

Properties

_kdf: KdfInterface
_prim: DhkemPrimitives
encSize: number = 32

32

+
id: KemId = KemId.DhkemX25519HkdfSha256

KemId.DhkemX25519HkdfSha256 (0x0020)

+
privateKeySize: number = 32

32

+
publicKeySize: number = 32

32

+
secretSize: number = 32

32

+

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    If the error occurred, throws DecapError.

    Parameters

    • params: RecipientContextParams

      A set of parameters for the recipient context.

    Returns Promise<ArrayBuffer>

    A shared secret as the output of the decapsulation step.

    DecapError

    -
  • Derives a key pair from the byte string ikm.

    +
  • Derives a key pair from the byte string ikm.

    If the error occurred, throws DeriveKeyPairError.

    Parameters

    • ikm: ArrayBuffer

      An input keying material.

    Returns Promise<CryptoKeyPair>

    A key pair derived.

    DeriveKeyPairError

    -
  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    +
  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

    DeserializeError

    -
  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    +
  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

    DeserializeError

    -
  • Generates an ephemeral, fixed-length symmetric key and +

  • Generates an ephemeral, fixed-length symmetric key and a fixed-length encapsulation of the key that can be decapsulated by the holder of the private key corresponding to pkR.

    If the error occurred, throws EncapError.

    Parameters

    • params: SenderContextParams

      A set of parameters for the sender context.

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    EncapError

    -
  • Generates a key pair.

    If the error occurred, throws NotSupportedError.

    Returns Promise<CryptoKeyPair>

    A key pair generated.

    NotSupportedError

    -
  • Imports a public or private key and converts to a CryptoKey.

    +
  • Imports a public or private key and converts to a CryptoKey.

    Since key parameters for createSenderContext or createRecipientContext are CryptoKey format, you have to use this function to convert provided keys to CryptoKey.

    @@ -76,14 +76,14 @@
  • isPublic: boolean = true

    The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

Returns Promise<CryptoKey>

A public or private CryptoKey.

DeserializeError

-
  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    +
  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

    SerializeError

    -
  • Serializes a public key as CryptoKey to a byte string of length Npk.

    +
  • Serializes a public key as CryptoKey to a byte string of length Npk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

    SerializeError

    -
+
diff --git a/dhkem-x25519/docs/classes/HkdfSha256.html b/dhkem-x25519/docs/classes/HkdfSha256.html index 6b1210875..5dd33c3cb 100644 --- a/dhkem-x25519/docs/classes/HkdfSha256.html +++ b/dhkem-x25519/docs/classes/HkdfSha256.html @@ -1,4 +1,4 @@ -HkdfSha256 | @hpke/dhkem-x25519

Hierarchy

  • HkdfSha256
    • HkdfSha256

Constructors

constructor +HkdfSha256 | @hpke/dhkem-x25519

Hierarchy

  • HkdfSha256
    • HkdfSha256

Constructors

Properties

Constructors

Properties

_api: SubtleCrypto = undefined
_suiteId: Uint8Array = EMPTY
algHash: HmacKeyGenParams = ...

The parameters for Web Cryptography API

-
hashSize: number = 32

32

-
id: KdfId = KdfId.HkdfSha256

KdfId.HkdfSha256 (0x0001)

-

Methods

  • Builds a labeled input keying material.

    +

Constructors

Properties

_api: SubtleCrypto = undefined
_suiteId: Uint8Array = EMPTY
algHash: HmacKeyGenParams = ...

The parameters for Web Cryptography API

+
hashSize: number = 32

32

+
id: KdfId = KdfId.HkdfSha256

KdfId.HkdfSha256 (0x0001)

+

Methods

  • Builds a labeled input keying material.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

    Returns Uint8Array

    An input keying material as bytes.

    -
  • Builds a labeled info string.

    +
  • Builds a labeled info string.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length of the output byte string.

    Returns Uint8Array

    An info string as bytes.

    -
  • Expands a pseudorandom key prk.

    +
  • Expands a pseudorandom key prk.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Parameters

    • salt: ArrayBuffer
    • ikm: ArrayBuffer

    Returns Promise<ArrayBuffer>

  • Extracts a pseudorandom key and expand it to a specified length keying material.

    +
  • Parameters

    • salt: ArrayBuffer
    • ikm: ArrayBuffer

    Returns Promise<ArrayBuffer>

  • Extracts a pseudorandom key and expand it to a specified length keying material.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • ikm: ArrayBuffer

      An input keying material

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Initializes the instance by setting a suite_id defined in RFC9180.

    +
  • Initializes the instance by setting a suite_id defined in RFC9180.

    Parameters

    • suiteId: Uint8Array

      A suite_id defined in RFC9180.

      -

    Returns void

  • Extracts a pseudorandom key with label.

    +

Returns void

  • Extracts a pseudorandom key with label.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Extracts a pseudorandom key with label.

    +
  • Extracts a pseudorandom key with label.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

      An input keying material

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    -
+
diff --git a/dhkem-x25519/docs/classes/X25519.html b/dhkem-x25519/docs/classes/X25519.html index 495d61100..c1c45596f 100644 --- a/dhkem-x25519/docs/classes/X25519.html +++ b/dhkem-x25519/docs/classes/X25519.html @@ -1,4 +1,4 @@ -X25519 | @hpke/dhkem-x25519

Implements

  • DhkemPrimitives

Constructors

constructor +X25519 | @hpke/dhkem-x25519

Implements

  • DhkemPrimitives

Constructors

Methods

  • Parameters

    • ikm: ArrayBuffer

    Returns Promise<CryptoKeyPair>

  • Parameters

    • key: CryptoKey

    Returns Promise<CryptoKey>

  • Parameters

    • key: ArrayBuffer

    Returns Promise<CryptoKey>

  • Parameters

    • key: ArrayBuffer

    Returns Promise<CryptoKey>

  • Parameters

    • sk: CryptoKey
    • pk: CryptoKey

    Returns Promise<ArrayBuffer>

  • Returns Promise<CryptoKeyPair>

  • Parameters

    • format: "raw" | "jwk"
    • key: ArrayBuffer | JsonWebKey
    • isPublic: boolean

    Returns Promise<CryptoKey>

  • Parameters

    • key: CryptoKey

    Returns Promise<ArrayBuffer>

  • Parameters

    • key: CryptoKey

    Returns Promise<ArrayBuffer>

+

Constructors

Methods

  • Parameters

    • ikm: ArrayBuffer

    Returns Promise<CryptoKeyPair>

  • Parameters

    • key: CryptoKey

    Returns Promise<CryptoKey>

  • Parameters

    • key: ArrayBuffer

    Returns Promise<CryptoKey>

  • Parameters

    • key: ArrayBuffer

    Returns Promise<CryptoKey>

  • Parameters

    • sk: CryptoKey
    • pk: CryptoKey

    Returns Promise<ArrayBuffer>

  • Returns Promise<CryptoKeyPair>

  • Parameters

    • format: "raw" | "jwk"
    • key: ArrayBuffer | JsonWebKey
    • isPublic: boolean

    Returns Promise<CryptoKey>

  • Parameters

    • key: CryptoKey

    Returns Promise<ArrayBuffer>

  • Parameters

    • key: CryptoKey

    Returns Promise<ArrayBuffer>

diff --git a/dhkem-x25519/src/hpke-common.js b/dhkem-x25519/src/hpke-common.js index 0aff511e4..d6dcc8e83 100644 --- a/dhkem-x25519/src/hpke-common.js +++ b/dhkem-x25519/src/hpke-common.js @@ -1 +1 @@ -var e={Base:0,Psk:1,Auth:2,AuthPsk:3},x={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},d={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},h={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var k=["encrypt","decrypt"];export{k as AEAD_USAGES,h as AeadId,d as KdfId,x as KemId,e as Mode}; +var v=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},o=class extends v{},b=class extends o{},D=class extends o{},u=class extends o{},h=class extends o{},m=class extends o{},K=class extends o{},T=class extends o{},z=class extends o{},H=class extends o{},R=class extends o{},P=class extends o{},x=class extends o{};var B={},C=N(globalThis,B);function N(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),s=new Set(n);return[...r.filter(a=>!s.has(a)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}async function j(){if(C!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new x(i)}}var _=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await j())}};var F={Base:0,Psk:1,Auth:2,AuthPsk:3},g={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},Y={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},X={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var E=8192,J=32,w=new Uint8Array(0);var S=new Uint8Array([75,69,77,0,0]);var l=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function p(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function y(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function M(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;n8192)throw new b("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():l(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let s;if(e.senderKey===void 0)s=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let c=l(e.senderKey)?e.senderKey.privateKey:e.senderKey,d=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),G=new Uint8Array(await this._prim.dh(c,e.recipientPublicKey));s=y(d,G)}let a;if(e.senderKey===void 0)a=y(new Uint8Array(r),new Uint8Array(n));else{let c=l(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),d=await this._prim.serializePublicKey(c);a=q(new Uint8Array(r),new Uint8Array(n),new Uint8Array(d))}let f=await this._generateSharedSecret(s,a);return{enc:r,sharedSecret:f}}catch(s){throw new m(s)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=l(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=l(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),s=await this._prim.serializePublicKey(n);try{let a;if(e.senderPublicKey===void 0)a=new Uint8Array(await this._prim.dh(r,t));else{let c=new Uint8Array(await this._prim.dh(r,t)),d=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));a=y(c,d)}let f;if(e.senderPublicKey===void 0)f=y(new Uint8Array(e.enc),new Uint8Array(s));else{let c=await this._prim.serializePublicKey(e.senderPublicKey);f=new Uint8Array(e.enc.byteLength+s.byteLength+c.byteLength),f.set(new Uint8Array(e.enc),0),f.set(new Uint8Array(s),e.enc.byteLength),f.set(new Uint8Array(c),e.enc.byteLength+s.byteLength)}return await this._generateSharedSecret(a,f)}catch(a){throw new K(a)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Z,e),n=this._kdf.buildLabeledInfo($,t,this.secretSize);return await this._kdf.extractAndExpand(w,r,n,this.secretSize)}};var k=["deriveBits"],I=new Uint8Array([100,107,112,95,112,114,107]),Q=new Uint8Array([115,107]);var A=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var V=new Uint8Array([99,97,110,100,105,100,97,116,101]),ee=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),te=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),re=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),ie=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),ne=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),se=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),L=class extends _{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case g.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=ee,this._bitmask=255,this._pkcs8AlgId=ie;break;case g.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=te,this._bitmask=255,this._pkcs8AlgId=ne;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=re,this._bitmask=1,this._pkcs8AlgId=se;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new u(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new h(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return M(t.d)}catch(t){throw new u(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new h(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new h(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,k)}catch(e){throw new x(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(w,I,new Uint8Array(e)),r=new A(this._nSk);for(let s=0;r.isZero()||!r.lessThan(this._order);s++){if(s>255)throw new Error("Faild to derive a key pair");let a=new Uint8Array(await this._hkdf.labeledExpand(t,V,p(s,1),this._nSk));a[0]=a[0]&this._bitmask,r.set(a)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new P(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new h(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new u(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,k)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,k)}};var ae=["encrypt","decrypt"];export{ae as AEAD_USAGES,X as AeadId,v as BaseError,K as DecapError,P as DeriveKeyPairError,h as DeserializeError,U as Dhkem,w as EMPTY,L as Ec,m as EncapError,T as ExportError,o as HpkeError,E as INPUT_LENGTH_LIMIT,b as InvalidParamError,Y as KdfId,g as KemId,I as LABEL_DKP_PRK,Q as LABEL_SK,J as MINIMUM_PSK_LENGTH,R as MessageLimitReachedError,F as Mode,_ as NativeAlgorithm,x as NotSupportedError,H as OpenError,S as SUITE_ID_HEADER_KEM,z as SealError,u as SerializeError,D as ValidationError,y as concat,p as i2Osp,l as isCryptoKeyPair,W as xor}; diff --git a/dhkem-x25519/src/hpke-core.js b/dhkem-x25519/src/hpke-core.js index a61ab417f..2daa361d0 100644 --- a/dhkem-x25519/src/hpke-core.js +++ b/dhkem-x25519/src/hpke-core.js @@ -1 +1 @@ -var Se={},we=Ee(globalThis,Se);function Ee(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),a=new Set(n);return[...r.filter(s=>!a.has(s)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}var ie=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},f=class extends ie{},l=class extends f{},_e=class extends f{},P=class extends f{},m=class extends f{},N=class extends f{},T=class extends f{},B=class extends f{},C=class extends f{},M=class extends f{},R=class extends f{},G=class extends f{},p=class extends f{};async function ze(){if(we!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new p(i)}}var x=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await ze())}};var g={Base:0,Psk:1,Auth:2,AuthPsk:3},h={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},A={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},k={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var ne=["encrypt","decrypt"];var ae=class extends x{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(n,this._key,t)}async open(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(n,this._key,t)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,ne)}},F=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new ae(e)}},se=class extends F{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var oe=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new p("Export only")}};var K=8192;var c=new Uint8Array(0);function ue(){return new Promise((i,e)=>{e(new p("Not supported"))})}var Ue=new Uint8Array([115,101,99]),z=class{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await ue()}async open(e,t){return await ue()}async export(e,t){if(e.byteLength>8192)throw new l("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Ue,new Uint8Array(e),t)}catch(r){throw new B(r)}}},q=class extends z{},Y=class extends z{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}};var v=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function w(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function d(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function me(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;nNumber.MAX_SAFE_INTEGER)throw new R("Message limit reached");e.seq+=1}};var $=class extends U{async open(e,t=c){let r;try{r=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(n){throw new M(n)}return this.incrementSeq(this._ctx),r}};var X=class extends U{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}async seal(e,t=c){let r;try{r=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(n){throw new C(n)}return this.incrementSeq(this._ctx),r}};var Oe=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),je=new Uint8Array([101,120,112]),He=new Uint8Array([105,110,102,111,95,104,97,115,104]),De=new Uint8Array([107,101,121]),Ne=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Te=new Uint8Array([115,101,99,114,101,116]),Be=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),J=class extends x{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new l("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new l("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new l("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Be),this._suiteId.set(w(this._kem.id,2),4),this._suiteId.set(w(this._kdf.id,2),6),this._suiteId.set(w(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.encap(e),r;return e.psk!==void 0?r=e.senderKey!==void 0?g.AuthPsk:g.Psk:r=e.senderKey!==void 0?g.Auth:g.Base,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.decap(e),r;return e.psk!==void 0?r=e.senderPublicKey!==void 0?g.AuthPsk:g.Psk:r=e.senderPublicKey!==void 0?g.Auth:g.Base,await this._keyScheduleR(r,t,e)}async seal(e,t,r=c){let n=await this.createSenderContext(e);return{ct:await n.seal(t,r),enc:n.enc}}async open(e,t,r=c){return await(await this.createRecipientContext(e)).open(t,r)}async _keySchedule(e,t,r){let n=r.psk===void 0?c:new Uint8Array(r.psk.id),a=await this._kdf.labeledExtract(c,Ne,n),s=r.info===void 0?c:new Uint8Array(r.info),o=await this._kdf.labeledExtract(c,He,s),u=new Uint8Array(1+a.byteLength+o.byteLength);u.set(new Uint8Array([e]),0),u.set(new Uint8Array(a),1),u.set(new Uint8Array(o),1+a.byteLength);let y=r.psk===void 0?c:new Uint8Array(r.psk.key),b=this._kdf.buildLabeledIkm(Te,y),I=this._kdf.buildLabeledInfo(je,u,this._kdf.hashSize),_=await this._kdf.extractAndExpand(t,b,I,this._kdf.hashSize);if(this._aead.id===k.ExportOnly)return{aead:this._aead,exporterSecret:_};let ke=this._kdf.buildLabeledInfo(De,u,this._aead.keySize),Ke=await this._kdf.extractAndExpand(t,b,ke,this._aead.keySize),ve=this._kdf.buildLabeledInfo(Oe,u,this._aead.nonceSize),Ae=await this._kdf.extractAndExpand(t,b,ve,this._aead.nonceSize);return{aead:this._aead,exporterSecret:_,key:Ke,baseNonce:new Uint8Array(Ae),seq:0}}async _keyScheduleS(e,t,r,n){let a=await this._keySchedule(e,t,n);return a.key===void 0?new Y(this._api,this._kdf,a.exporterSecret,r):new X(this._api,this._kdf,a,r)}async _keyScheduleR(e,t,r){let n=await this._keySchedule(e,t,r);return n.key===void 0?new q(this._api,this._kdf,n.exporterSecret):new $(this._api,this._kdf,n)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new l("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new l(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new l("Too long psk.key");if(e.psk.id.byteLength>8192)throw new l("Too long psk.id")}}};var ge=new Uint8Array([72,80,75,69,45,118,49]),D=class extends x{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:c}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(ge,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();let n=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set(new Uint8Array([0,r]),0),n.set(ge,2),n.set(this._suiteId,9),n.set(e,9+this._suiteId.byteLength),n.set(t,9+this._suiteId.byteLength+e.byteLength),n}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new l("The salt length must be the same as the hashSize");let r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),a=new ArrayBuffer(r),s=new Uint8Array(a),o=c,u=new Uint8Array(t),y=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");let b=new Uint8Array(this.hashSize+u.length+1);for(let I=1,_=0;_=o.length?(s.set(o,_),_+=o.length):(s.set(o.slice(0,s.length-_),_),_+=s.length-_);return a}async extractAndExpand(e,t,r,n){await this._setup();let a=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},a,n*8)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r))}async labeledExpand(e,t,r,n){return await this.expand(e,this.buildLabeledInfo(t,r,n),n)}_checkInit(){if(this._suiteId===c)throw new Error("Not initialized. Call init()")}},L=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},O=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},j=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var W=new Uint8Array([75,69,77,0,0]);var Ce=new Uint8Array([101,97,101,95,112,114,107]),Me=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function Re(i,e,t){let r=new Uint8Array(i.length+e.length+t.length);return r.set(i,0),r.set(e,i.length),r.set(t,i.length+e.length),r}var S=class{constructor(e,t,r){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=t,this._kdf=r;let n=new Uint8Array(W);n.set(w(this.id,2),3),this._kdf.init(n)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,t,r=!0){return await this._prim.importKey(e,t,r)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new l("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():v(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let a;if(e.senderKey===void 0)a=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let u=v(e.senderKey)?e.senderKey.privateKey:e.senderKey,y=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),b=new Uint8Array(await this._prim.dh(u,e.recipientPublicKey));a=d(y,b)}let s;if(e.senderKey===void 0)s=d(new Uint8Array(r),new Uint8Array(n));else{let u=v(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),y=await this._prim.serializePublicKey(u);s=Re(new Uint8Array(r),new Uint8Array(n),new Uint8Array(y))}let o=await this._generateSharedSecret(a,s);return{enc:r,sharedSecret:o}}catch(a){throw new N(a)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=v(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=v(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),a=await this._prim.serializePublicKey(n);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(r,t));else{let u=new Uint8Array(await this._prim.dh(r,t)),y=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));s=d(u,y)}let o;if(e.senderPublicKey===void 0)o=d(new Uint8Array(e.enc),new Uint8Array(a));else{let u=await this._prim.serializePublicKey(e.senderPublicKey);o=new Uint8Array(e.enc.byteLength+a.byteLength+u.byteLength),o.set(new Uint8Array(e.enc),0),o.set(new Uint8Array(a),e.enc.byteLength),o.set(new Uint8Array(u),e.enc.byteLength+a.byteLength)}return await this._generateSharedSecret(s,o)}catch(s){throw new T(s)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Ce,e),n=this._kdf.buildLabeledInfo(Me,t,this.secretSize);return await this._kdf.extractAndExpand(c,r,n,this.secretSize)}};var Z=["deriveBits"],Q=new Uint8Array([100,107,112,95,112,114,107]),Pe=new Uint8Array([115,107]);var V=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var Ge=new Uint8Array([99,97,110,100,105,100,97,116,101]),Fe=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),qe=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Ye=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),$e=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Xe=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Je=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),E=class extends x{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case h.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=Fe,this._bitmask=255,this._pkcs8AlgId=$e;break;case h.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=qe,this._bitmask=255,this._pkcs8AlgId=Xe;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Ye,this._bitmask=1,this._pkcs8AlgId=Je;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new P(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new m(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return me(t.d)}catch(t){throw new P(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new m(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new m(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,Z)}catch(e){throw new p(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(c,Q,new Uint8Array(e)),r=new V(this._nSk);for(let a=0;r.isZero()||!r.lessThan(this._order);a++){if(a>255)throw new Error("Faild to derive a key pair");let s=new Uint8Array(await this._hkdf.labeledExpand(t,Ge,w(a,1),this._nSk));s[0]=s[0]&this._bitmask,r.set(s)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new G(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new m(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new P(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,Z)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,Z)}};var ee=class extends S{constructor(){let e=new L,t=new E(h.DhkemP256HkdfSha256,e);super(h.DhkemP256HkdfSha256,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}},te=class extends S{constructor(){let e=new O,t=new E(h.DhkemP384HkdfSha384,e);super(h.DhkemP384HkdfSha384,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}},re=class extends S{constructor(){let e=new j,t=new E(h.DhkemP521HkdfSha512,e);super(h.DhkemP521HkdfSha512,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var ce=class extends J{},le=class extends ee{},he=class extends te{},fe=class extends re{},de=class extends L{},ye=class extends O{},be=class extends j{};var H=class{constructor(e,t,r,n=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=r,this.algorithm={name:e},this.usages=n,r==="public"&&(this.usages=[])}};var pe=class{constructor(e,t,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=t,this._b=r,this._kdf=n;let a=new Uint8Array(W);a.set(w(this.id,2),3),this._kdf.init(a)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new P(t)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(t){throw new m(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new P(t)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(t){throw new m(t)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),t=await this._b.generateKeyPair(),r=await this._a.serializePublicKey(e.publicKey),n=await this._a.serializePrivateKey(e.privateKey),a=await this._b.serializePublicKey(t.publicKey),s=await this._b.serializePrivateKey(t.privateKey);return{publicKey:await this.deserializePublicKey(d(new Uint8Array(r),new Uint8Array(a))),privateKey:await this.deserializePrivateKey(d(new Uint8Array(n),new Uint8Array(s)))}}async deriveKeyPair(e){let t=await this._kdf.labeledExtract(c,Q,new Uint8Array(e)),r=new Uint8Array(await this._kdf.labeledExpand(t,Pe,c,96)),n=r.slice(0,32),a=r.slice(32,96),s=await this._a.deriveKeyPair(n),o=await this._b.deriveKeyPair(a),u=await this._a.serializePublicKey(s.publicKey),y=await this._a.serializePrivateKey(s.privateKey),b=await this._b.serializePublicKey(o.publicKey),I=await this._b.serializePrivateKey(o.privateKey);return{publicKey:await this.deserializePublicKey(d(new Uint8Array(u),new Uint8Array(b))),privateKey:await this.deserializePrivateKey(d(new Uint8Array(y),new Uint8Array(I)))}}async importKey(e,t,r=!0){if(e!=="raw")throw new p("'jwk' is not supported");if(!(t instanceof ArrayBuffer))throw new l("Invalid type of key");return r?await this.deserializePublicKey(t):await this.deserializePrivateKey(t)}async encap(e){let t,r;if(e.ekm!==void 0&&!v(e.ekm)){if(e.ekm.byteLength!==64)throw new l("ekm must be 64 bytes in length");t=e.ekm.slice(0,32),r=e.ekm.slice(32)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),a=await this._a.deserializePublicKey(n.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(n.slice(this._a.publicKeySize)),o=await this._a.encap({recipientPublicKey:a,ekm:t}),u=await this._b.encap({recipientPublicKey:s,ekm:r});return{sharedSecret:d(new Uint8Array(o.sharedSecret),new Uint8Array(u.sharedSecret)),enc:d(new Uint8Array(o.enc),new Uint8Array(u.enc))}}async decap(e){let t=v(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,r=new Uint8Array(await this.serializePrivateKey(t)),n=await this._a.deserializePrivateKey(r.slice(0,this._a.privateKeySize)),a=await this._b.deserializePrivateKey(r.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:n,enc:e.enc.slice(0,this._a.encSize)}),o=await this._b.decap({recipientKey:a,enc:e.enc.slice(this._a.encSize)});return d(new Uint8Array(s),new Uint8Array(o))}_serializePublicKey(e){return new Promise((t,r)=>{e.type!=="public"&&r(new Error("Not public key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePublicKey(e){return new Promise((t,r)=>{e.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((t,r)=>{e.type!=="private"&&r(new Error("Not private key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((t,r)=>{e.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};export{k as AeadId,F as Aes128Gcm,se as Aes256Gcm,ie as BaseError,ce as CipherSuite,T as DecapError,G as DeriveKeyPairError,m as DeserializeError,S as Dhkem,le as DhkemP256HkdfSha256,he as DhkemP384HkdfSha384,fe as DhkemP521HkdfSha512,E as Ec,N as EncapError,B as ExportError,oe as ExportOnly,de as HkdfSha256,ye as HkdfSha384,be as HkdfSha512,f as HpkeError,pe as Hybridkem,K as INPUT_LENGTH_LIMIT,l as InvalidParamError,A as KdfId,h as KemId,R as MessageLimitReachedError,p as NotSupportedError,M as OpenError,C as SealError,P as SerializeError,_e as ValidationError,H as XCryptoKey}; +var Y=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},d=class extends Y{},l=class extends d{},ne=class extends d{},g=class extends d{},x=class extends d{},D=class extends d{},N=class extends d{},T=class extends d{},B=class extends d{},M=class extends d{},C=class extends d{},R=class extends d{},y=class extends d{};var Ee={},ge=Ie(globalThis,Ee);function Ie(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),a=new Set(n);return[...r.filter(s=>!a.has(s)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}async function Ue(){if(ge!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new y(i)}}var m=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await Ue())}};var P={Base:0,Psk:1,Auth:2,AuthPsk:3},h={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},A={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},K={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var c=new Uint8Array(0);var G=new Uint8Array([75,69,77,0,0]);var k=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function b(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function f(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function Pe(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;n8192)throw new l("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():k(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let a;if(e.senderKey===void 0)a=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let o=k(e.senderKey)?e.senderKey.privateKey:e.senderKey,p=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),w=new Uint8Array(await this._prim.dh(o,e.recipientPublicKey));a=f(p,w)}let s;if(e.senderKey===void 0)s=f(new Uint8Array(r),new Uint8Array(n));else{let o=k(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),p=await this._prim.serializePublicKey(o);s=je(new Uint8Array(r),new Uint8Array(n),new Uint8Array(p))}let u=await this._generateSharedSecret(a,s);return{enc:r,sharedSecret:u}}catch(a){throw new D(a)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=k(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),a=await this._prim.serializePublicKey(n);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(r,t));else{let o=new Uint8Array(await this._prim.dh(r,t)),p=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));s=f(o,p)}let u;if(e.senderPublicKey===void 0)u=f(new Uint8Array(e.enc),new Uint8Array(a));else{let o=await this._prim.serializePublicKey(e.senderPublicKey);u=new Uint8Array(e.enc.byteLength+a.byteLength+o.byteLength),u.set(new Uint8Array(e.enc),0),u.set(new Uint8Array(a),e.enc.byteLength),u.set(new Uint8Array(o),e.enc.byteLength+a.byteLength)}return await this._generateSharedSecret(s,u)}catch(s){throw new N(s)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Le,e),n=this._kdf.buildLabeledInfo(Oe,t,this.secretSize);return await this._kdf.extractAndExpand(c,r,n,this.secretSize)}};var $=["deriveBits"],F=new Uint8Array([100,107,112,95,112,114,107]),se=new Uint8Array([115,107]);var X=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var He=new Uint8Array([99,97,110,100,105,100,97,116,101]),De=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),Ne=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Te=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Be=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Me=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Ce=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),E=class extends m{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case h.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=De,this._bitmask=255,this._pkcs8AlgId=Be;break;case h.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=Ne,this._bitmask=255,this._pkcs8AlgId=Me;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Te,this._bitmask=1,this._pkcs8AlgId=Ce;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new g(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new x(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return Pe(t.d)}catch(t){throw new g(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new x(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new x(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,$)}catch(e){throw new y(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(c,F,new Uint8Array(e)),r=new X(this._nSk);for(let a=0;r.isZero()||!r.lessThan(this._order);a++){if(a>255)throw new Error("Faild to derive a key pair");let s=new Uint8Array(await this._hkdf.labeledExpand(t,He,b(a,1),this._nSk));s[0]=s[0]&this._bitmask,r.set(s)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new R(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new x(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new g(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,$)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,$)}};var ue=["encrypt","decrypt"];var ce=class extends m{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(n,this._key,t)}async open(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(n,this._key,t)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,ue)}},J=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new ce(e)}},le=class extends J{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var he=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new y("Export only")}};function de(){return new Promise((i,e)=>{e(new y("Not supported"))})}var Re=new Uint8Array([115,101,99]),z=class{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await de()}async open(e,t){return await de()}async export(e,t){if(e.byteLength>8192)throw new l("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Re,new Uint8Array(e),t)}catch(r){throw new T(r)}}},W=class extends z{},Z=class extends z{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}};var U=class extends z{constructor(e,t,r){if(super(e,t,r.exporterSecret),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nK",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nN",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_ctx",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),r.key===void 0||r.baseNonce===void 0||r.seq===void 0)throw new Error("Required parameters are missing");this._aead=r.aead,this._nK=this._aead.keySize,this._nN=this._aead.nonceSize,this._nT=this._aead.tagSize;let n=this._aead.createEncryptionContext(r.key);this._ctx={key:n,baseNonce:r.baseNonce,seq:r.seq}}computeNonce(e){let t=b(e.seq,e.baseNonce.byteLength);return ae(e.baseNonce,t)}incrementSeq(e){if(e.seq>Number.MAX_SAFE_INTEGER)throw new C("Message limit reached");e.seq+=1}};var V=class extends U{async open(e,t=c){let r;try{r=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(n){throw new M(n)}return this.incrementSeq(this._ctx),r}};var Q=class extends U{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}async seal(e,t=c){let r;try{r=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(n){throw new B(n)}return this.incrementSeq(this._ctx),r}};var Ge=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),Fe=new Uint8Array([101,120,112]),qe=new Uint8Array([105,110,102,111,95,104,97,115,104]),Ye=new Uint8Array([107,101,121]),$e=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Xe=new Uint8Array([115,101,99,114,101,116]),Je=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),ee=class extends m{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new l("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new l("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new l("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Je),this._suiteId.set(b(this._kem.id,2),4),this._suiteId.set(b(this._kdf.id,2),6),this._suiteId.set(b(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.encap(e),r;return e.psk!==void 0?r=e.senderKey!==void 0?P.AuthPsk:P.Psk:r=e.senderKey!==void 0?P.Auth:P.Base,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.decap(e),r;return e.psk!==void 0?r=e.senderPublicKey!==void 0?P.AuthPsk:P.Psk:r=e.senderPublicKey!==void 0?P.Auth:P.Base,await this._keyScheduleR(r,t,e)}async seal(e,t,r=c){let n=await this.createSenderContext(e);return{ct:await n.seal(t,r),enc:n.enc}}async open(e,t,r=c){return await(await this.createRecipientContext(e)).open(t,r)}async _keySchedule(e,t,r){let n=r.psk===void 0?c:new Uint8Array(r.psk.id),a=await this._kdf.labeledExtract(c,$e,n),s=r.info===void 0?c:new Uint8Array(r.info),u=await this._kdf.labeledExtract(c,qe,s),o=new Uint8Array(1+a.byteLength+u.byteLength);o.set(new Uint8Array([e]),0),o.set(new Uint8Array(a),1),o.set(new Uint8Array(u),1+a.byteLength);let p=r.psk===void 0?c:new Uint8Array(r.psk.key),w=this._kdf.buildLabeledIkm(Xe,p),I=this._kdf.buildLabeledInfo(Fe,o,this._kdf.hashSize),_=await this._kdf.extractAndExpand(t,w,I,this._kdf.hashSize);if(this._aead.id===K.ExportOnly)return{aead:this._aead,exporterSecret:_};let Ke=this._kdf.buildLabeledInfo(Ye,o,this._aead.keySize),ve=await this._kdf.extractAndExpand(t,w,Ke,this._aead.keySize),Ae=this._kdf.buildLabeledInfo(Ge,o,this._aead.nonceSize),Se=await this._kdf.extractAndExpand(t,w,Ae,this._aead.nonceSize);return{aead:this._aead,exporterSecret:_,key:ve,baseNonce:new Uint8Array(Se),seq:0}}async _keyScheduleS(e,t,r,n){let a=await this._keySchedule(e,t,n);return a.key===void 0?new Z(this._api,this._kdf,a.exporterSecret,r):new Q(this._api,this._kdf,a,r)}async _keyScheduleR(e,t,r){let n=await this._keySchedule(e,t,r);return n.key===void 0?new W(this._api,this._kdf,n.exporterSecret):new V(this._api,this._kdf,n)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new l("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new l(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new l("Too long psk.key");if(e.psk.id.byteLength>8192)throw new l("Too long psk.id")}}};var ke=new Uint8Array([72,80,75,69,45,118,49]),q=class extends m{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:c}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(ke,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();let n=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set(new Uint8Array([0,r]),0),n.set(ke,2),n.set(this._suiteId,9),n.set(e,9+this._suiteId.byteLength),n.set(t,9+this._suiteId.byteLength+e.byteLength),n}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new l("The salt length must be the same as the hashSize");let r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),a=new ArrayBuffer(r),s=new Uint8Array(a),u=c,o=new Uint8Array(t),p=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");let w=new Uint8Array(this.hashSize+o.length+1);for(let I=1,_=0;_=u.length?(s.set(u,_),_+=u.length):(s.set(u.slice(0,s.length-_),_),_+=s.length-_);return a}async extractAndExpand(e,t,r,n){await this._setup();let a=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},a,n*8)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r))}async labeledExpand(e,t,r,n){return await this.expand(e,this.buildLabeledInfo(t,r,n),n)}_checkInit(){if(this._suiteId===c)throw new Error("Not initialized. Call init()")}},L=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},O=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},j=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var te=class extends S{constructor(){let e=new L,t=new E(h.DhkemP256HkdfSha256,e);super(h.DhkemP256HkdfSha256,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}},re=class extends S{constructor(){let e=new O,t=new E(h.DhkemP384HkdfSha384,e);super(h.DhkemP384HkdfSha384,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}},ie=class extends S{constructor(){let e=new j,t=new E(h.DhkemP521HkdfSha512,e);super(h.DhkemP521HkdfSha512,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var fe=class extends ee{},ye=class extends te{},be=class extends re{},pe=class extends ie{},we=class extends L{},_e=class extends O{},xe=class extends j{};var H=class{constructor(e,t,r,n=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=r,this.algorithm={name:e},this.usages=n,r==="public"&&(this.usages=[])}};var me=class{constructor(e,t,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=t,this._b=r,this._kdf=n;let a=new Uint8Array(G);a.set(b(this.id,2),3),this._kdf.init(a)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new g(t)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(t){throw new x(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new g(t)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(t){throw new x(t)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),t=await this._b.generateKeyPair(),r=await this._a.serializePublicKey(e.publicKey),n=await this._a.serializePrivateKey(e.privateKey),a=await this._b.serializePublicKey(t.publicKey),s=await this._b.serializePrivateKey(t.privateKey);return{publicKey:await this.deserializePublicKey(f(new Uint8Array(r),new Uint8Array(a))),privateKey:await this.deserializePrivateKey(f(new Uint8Array(n),new Uint8Array(s)))}}async deriveKeyPair(e){let t=await this._kdf.labeledExtract(c,F,new Uint8Array(e)),r=new Uint8Array(await this._kdf.labeledExpand(t,se,c,96)),n=r.slice(0,32),a=r.slice(32,96),s=await this._a.deriveKeyPair(n),u=await this._b.deriveKeyPair(a),o=await this._a.serializePublicKey(s.publicKey),p=await this._a.serializePrivateKey(s.privateKey),w=await this._b.serializePublicKey(u.publicKey),I=await this._b.serializePrivateKey(u.privateKey);return{publicKey:await this.deserializePublicKey(f(new Uint8Array(o),new Uint8Array(w))),privateKey:await this.deserializePrivateKey(f(new Uint8Array(p),new Uint8Array(I)))}}async importKey(e,t,r=!0){if(e!=="raw")throw new y("'jwk' is not supported");if(!(t instanceof ArrayBuffer))throw new l("Invalid type of key");return r?await this.deserializePublicKey(t):await this.deserializePrivateKey(t)}async encap(e){let t,r;if(e.ekm!==void 0&&!k(e.ekm)){if(e.ekm.byteLength!==64)throw new l("ekm must be 64 bytes in length");t=e.ekm.slice(0,32),r=e.ekm.slice(32)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),a=await this._a.deserializePublicKey(n.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(n.slice(this._a.publicKeySize)),u=await this._a.encap({recipientPublicKey:a,ekm:t}),o=await this._b.encap({recipientPublicKey:s,ekm:r});return{sharedSecret:f(new Uint8Array(u.sharedSecret),new Uint8Array(o.sharedSecret)),enc:f(new Uint8Array(u.enc),new Uint8Array(o.enc))}}async decap(e){let t=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,r=new Uint8Array(await this.serializePrivateKey(t)),n=await this._a.deserializePrivateKey(r.slice(0,this._a.privateKeySize)),a=await this._b.deserializePrivateKey(r.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:n,enc:e.enc.slice(0,this._a.encSize)}),u=await this._b.decap({recipientKey:a,enc:e.enc.slice(this._a.encSize)});return f(new Uint8Array(s),new Uint8Array(u))}_serializePublicKey(e){return new Promise((t,r)=>{e.type!=="public"&&r(new Error("Not public key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePublicKey(e){return new Promise((t,r)=>{e.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((t,r)=>{e.type!=="private"&&r(new Error("Not private key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((t,r)=>{e.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};export{K as AeadId,J as Aes128Gcm,le as Aes256Gcm,Y as BaseError,fe as CipherSuite,N as DecapError,R as DeriveKeyPairError,x as DeserializeError,ye as DhkemP256HkdfSha256,be as DhkemP384HkdfSha384,pe as DhkemP521HkdfSha512,D as EncapError,T as ExportError,he as ExportOnly,we as HkdfSha256,_e as HkdfSha384,xe as HkdfSha512,d as HpkeError,me as Hybridkem,l as InvalidParamError,A as KdfId,h as KemId,C as MessageLimitReachedError,y as NotSupportedError,M as OpenError,B as SealError,g as SerializeError,ne as ValidationError,H as XCryptoKey}; diff --git a/dhkem-x25519/src/hpke-dhkem-x25519.js b/dhkem-x25519/src/hpke-dhkem-x25519.js index a16486450..d211c70c4 100644 --- a/dhkem-x25519/src/hpke-dhkem-x25519.js +++ b/dhkem-x25519/src/hpke-dhkem-x25519.js @@ -1,4 +1,4 @@ -var ht={},Re=dt(globalThis,ht);function dt(t,e){return new Proxy(t,{get(r,n,i){return n in e?e[n]:t[n]},set(r,n,i){return n in e&&delete e[n],t[n]=i,!0},deleteProperty(r,n){let i=!1;return n in e&&(delete e[n],i=!0),n in t&&(delete t[n],i=!0),i},ownKeys(r){let n=Reflect.ownKeys(t),i=Reflect.ownKeys(e),o=new Set(i);return[...n.filter(s=>!o.has(s)),...i]},defineProperty(r,n,i){return n in e&&delete e[n],Reflect.defineProperty(t,n,i),!0},getOwnPropertyDescriptor(r,n){return n in e?Reflect.getOwnPropertyDescriptor(e,n):Reflect.getOwnPropertyDescriptor(t,n)},has(r,n){return n in e||n in t}})}var _e=class extends Error{constructor(e){let r;e instanceof Error?r=e.message:typeof e=="string"?r=e:r="",super(r),this.name=this.constructor.name}},k=class extends _e{},A=class extends k{};var B=class extends k{},S=class extends k{},oe=class extends k{},se=class extends k{};var Y=class extends k{},P=class extends k{};async function pt(){if(Re!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:t}=await import("crypto");return t.subtle}catch(t){throw new P(t)}}var T=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await pt())}};var L={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},Z={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3};var g=new Uint8Array(0);var dr=new Uint8Array([115,101,99]);var N=t=>typeof t=="object"&&t!==null&&typeof t.privateKey=="object"&&typeof t.publicKey=="object";function M(t,e){if(e<=0)throw new Error("i2Osp: too small size");if(t>=256**e)throw new Error("i2Osp: too large integer");let r=new Uint8Array(e);for(let n=0;n>8;return r}function q(t,e){let r=new Uint8Array(t.length+e.length);return r.set(t,0),r.set(e,t.length),r}var Gr=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),Vr=new Uint8Array([101,120,112]),Fr=new Uint8Array([105,110,102,111,95,104,97,115,104]),Xr=new Uint8Array([107,101,121]),Wr=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Yr=new Uint8Array([115,101,99,114,101,116]),Zr=new Uint8Array([72,80,75,69,0,0,0,0,0,0]);var Me=new Uint8Array([72,80,75,69,45,118,49]),ve=class extends T{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:Z.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:g}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,r){this._checkInit();let n=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+r.byteLength);return n.set(Me,0),n.set(this._suiteId,7),n.set(e,7+this._suiteId.byteLength),n.set(r,7+this._suiteId.byteLength+e.byteLength),n}buildLabeledInfo(e,r,n){this._checkInit();let i=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+r.byteLength);return i.set(new Uint8Array([0,n]),0),i.set(Me,2),i.set(this._suiteId,9),i.set(e,9+this._suiteId.byteLength),i.set(r,9+this._suiteId.byteLength+e.byteLength),i}async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new A("The salt length must be the same as the hashSize");let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}async expand(e,r,n){await this._setup();let i=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),o=new ArrayBuffer(n),s=new Uint8Array(o),a=g,c=new Uint8Array(r),f=new Uint8Array(1);if(n>255*this.hashSize)throw new Error("Entropy limit reached");let h=new Uint8Array(this.hashSize+c.length+1);for(let u=1,d=0;d=a.length?(s.set(a,d),d+=a.length):(s.set(a.slice(0,s.length-d),d),d+=s.length-d);return o}async extractAndExpand(e,r,n,i){await this._setup();let o=await this._api.importKey("raw",r,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:n},o,i*8)}async labeledExtract(e,r,n){return await this.extract(e,this.buildLabeledIkm(r,n))}async labeledExpand(e,r,n,i){return await this.expand(e,this.buildLabeledInfo(r,n,i),i)}_checkInit(){if(this._suiteId===g)throw new Error("Not initialized. Call init()")}},Q=class extends ve{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:Z.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}};var Pe=new Uint8Array([75,69,77,0,0]);var mt=new Uint8Array([101,97,101,95,112,114,107]),gt=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function _t(t,e,r){let n=new Uint8Array(t.length+e.length+r.length);return n.set(t,0),n.set(e,t.length),n.set(r,t.length+e.length),n}var $=class{constructor(e,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=r,this._kdf=n;let i=new Uint8Array(Pe);i.set(M(this.id,2),3),this._kdf.init(i)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,r,n=!0){return await this._prim.importKey(e,r,n)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new A("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let r;e.ekm===void 0?r=await this.generateKeyPair():N(e.ekm)?r=e.ekm:r=await this.deriveKeyPair(e.ekm);let n=await this._prim.serializePublicKey(r.publicKey),i=await this._prim.serializePublicKey(e.recipientPublicKey);try{let o;if(e.senderKey===void 0)o=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey));else{let c=N(e.senderKey)?e.senderKey.privateKey:e.senderKey,f=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey)),h=new Uint8Array(await this._prim.dh(c,e.recipientPublicKey));o=q(f,h)}let s;if(e.senderKey===void 0)s=q(new Uint8Array(n),new Uint8Array(i));else{let c=N(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),f=await this._prim.serializePublicKey(c);s=_t(new Uint8Array(n),new Uint8Array(i),new Uint8Array(f))}let a=await this._generateSharedSecret(o,s);return{enc:n,sharedSecret:a}}catch(o){throw new oe(o)}}async decap(e){let r=await this._prim.deserializePublicKey(e.enc),n=N(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,i=N(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),o=await this._prim.serializePublicKey(i);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(n,r));else{let c=new Uint8Array(await this._prim.dh(n,r)),f=new Uint8Array(await this._prim.dh(n,e.senderPublicKey));s=q(c,f)}let a;if(e.senderPublicKey===void 0)a=q(new Uint8Array(e.enc),new Uint8Array(o));else{let c=await this._prim.serializePublicKey(e.senderPublicKey);a=new Uint8Array(e.enc.byteLength+o.byteLength+c.byteLength),a.set(new Uint8Array(e.enc),0),a.set(new Uint8Array(o),e.enc.byteLength),a.set(new Uint8Array(c),e.enc.byteLength+o.byteLength)}return await this._generateSharedSecret(s,a)}catch(s){throw new se(s)}}async _generateSharedSecret(e,r){let n=this._kdf.buildLabeledIkm(mt,e),i=this._kdf.buildLabeledInfo(gt,r,this.secretSize);return await this._kdf.extractAndExpand(g,n,i,this.secretSize)}};var qe=new Uint8Array([100,107,112,95,112,114,107]),vt=new Uint8Array([115,107]);var Pn=new Uint8Array([99,97,110,100,105,100,97,116,101]),En=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),kn=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),An=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Sn=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Kn=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),In=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]);var J=class extends Q{};var _=class{constructor(e,r,n,i=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=r,this.type=n,this.algorithm={name:e},this.usages=i,n==="public"&&(this.usages=[])}};function $e(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`positive integer expected, not ${t}`)}function At(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function ee(t,...e){if(!At(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${t.length}`)}function Ge(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");$e(t.outputLen),$e(t.blockLen)}function G(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function Ve(t,e){ee(t);let r=e.outputLen;if(t.lengthnew DataView(t.buffer,t.byteOffset,t.byteLength),v=(t,e)=>t<<32-e|t>>>e;var Ei=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Fe(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function te(t){return typeof t=="string"&&(t=Fe(t)),ee(t),t}var V=class{clone(){return this._cloneInto()}},ki={}.toString;function Xe(t){let e=n=>t().update(te(n)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e}function We(t=32){if(j&&typeof j.getRandomValues=="function")return j.getRandomValues(new Uint8Array(t));if(j&&typeof j.randomBytes=="function")return j.randomBytes(t);throw new Error("crypto.getRandomValues must be defined")}var fe=class extends V{constructor(e,r){super(),this.finished=!1,this.destroyed=!1,Ge(e);let n=te(r);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(n.length>i?e.create().update(n).digest():n);for(let s=0;snew fe(t,e).update(r).digest();Ee.create=(t,e)=>new fe(t,e);function St(t,e,r,n){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,r,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(r>>i&o),a=Number(r&o),c=n?4:0,f=n?0:4;t.setUint32(e+c,s,n),t.setUint32(e+f,a,n)}var Ye=(t,e,r)=>t&e^~t&r,Ze=(t,e,r)=>t&e^t&r^e&r,le=class extends V{constructor(e,r,n,i){super(),this.blockLen=e,this.outputLen=r,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=ue(this.buffer)}update(e){G(this);let{view:r,buffer:n,blockLen:i}=this;e=te(e);let o=e.length;for(let s=0;si-s&&(this.process(n,0),s=0);for(let u=s;uh.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u>>3,E=v(p,17)^v(p,19)^p>>>10;O[u]=E+O[u-7]+D+O[u-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:c,G:f,H:h}=this;for(let u=0;u<64;u++){let d=v(a,6)^v(a,11)^v(a,25),p=h+d+Ye(a,c,f)+Kt[u]+O[u]|0,E=(v(n,2)^v(n,13)^v(n,22))+Ze(n,i,o)|0;h=f,f=c,c=a,a=s+p|0,s=o,o=i,i=n,n=p+E|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,f=f+this.G|0,h=h+this.H|0,this.set(n,i,o,s,a,c,f,h)}roundClean(){O.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Qe=Xe(()=>new ke);var re=class extends J{async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return Ee(Qe,new Uint8Array(e),new Uint8Array(r));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}};var It=BigInt(0);function Se(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function et(t){if(!Se(t))throw new Error("Uint8Array expected")}var Bt=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Lt(t){et(t);let e="";for(let r=0;r=K._0&&t<=K._9)return t-K._0;if(t>=K._A&&t<=K._F)return t-(K._A-10);if(t>=K._a&&t<=K._f)return t-(K._a-10)}function tt(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);let e=t.length,r=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(r);for(let i=0,o=0;itypeof t=="bigint"&&It<=t;function zt(t,e,r){return Ae(t)&&Ae(e)&&Ae(r)&&e<=t&&ttypeof t=="bigint",function:t=>typeof t=="function",boolean:t=>typeof t=="boolean",string:t=>typeof t=="string",stringOrUint8Array:t=>typeof t=="string"||Se(t),isSafeInteger:t=>Number.isSafeInteger(t),array:t=>Array.isArray(t),field:(t,e)=>e.Fp.isValid(t),hash:t=>typeof t=="function"&&Number.isSafeInteger(t.outputLen)};function nt(t,e,r={}){let n=(i,o,s)=>{let a=Ht[o];if(typeof a!="function")throw new Error(`Invalid validator "${o}", expected function`);let c=t[i];if(!(s&&c===void 0)&&!a(c,t))throw new Error(`Invalid param ${String(i)}=${c} (${typeof c}), expected ${o}`)};for(let[i,o]of Object.entries(e))n(i,o,!1);for(let[i,o]of Object.entries(r))n(i,o,!0);return t}var F=BigInt(0),he=BigInt(1),Ri=BigInt(2),Mi=BigInt(3),qi=BigInt(4),$i=BigInt(5),Gi=BigInt(8),Vi=BigInt(9),Fi=BigInt(16);function de(t,e){let r=t%e;return r>=F?r:e+r}function it(t,e,r){if(r<=F||e 0");if(r===he)return F;let n=he;for(;e>F;)e&he&&(n=n*t%r),t=t*t%r,e>>=he;return n}function x(t,e,r){let n=t;for(;e-- >F;)n*=n,n%=r;return n}var X=BigInt(0),Le=BigInt(1);function Tt(t){return nt(t,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...t})}function ot(t){let e=Tt(t),{P:r}=e,n=l=>de(l,r),i=e.montgomeryBits,o=Math.ceil(i/8),s=e.nByteLength,a=e.adjustScalarBytes||(l=>l),c=e.powPminus2||(l=>it(l,r-BigInt(2),r));function f(l,y,b){let C=n(l*(y-b));return y=n(y-C),b=n(b+C),[y,b]}let h=(e.a-BigInt(2))/BigInt(4);function u(l,y){Be("u",l,X,r),Be("scalar",y,X,r);let b=y,C=l,m=Le,I=X,z=l,H=Le,R=X,w;for(let we=BigInt(i-1);we>=X;we--){let ze=b>>we&Le;R^=ze,w=f(R,m,z),m=w[0],z=w[1],w=f(R,I,H),I=w[0],H=w[1],R=ze;let xe=m+I,me=n(xe*xe),ge=m-I,He=n(ge*ge),Te=me-He,ft=z+H,lt=z-H,Ne=n(lt*xe),je=n(ft*ge),De=Ne+je,Ce=Ne-je;z=n(De*De),H=n(C*n(Ce*Ce)),m=n(me*He),I=n(Te*(me+n(h*Te)))}w=f(R,m,z),m=w[0],z=w[1],w=f(R,I,H),I=w[0],H=w[1];let ut=c(I);return n(m*ut)}function d(l){return rt(n(l),o)}function p(l){let y=Ie("u coordinate",l,o);return s===32&&(y[31]&=127),Ke(y)}function D(l){let y=Ie("scalar",l),b=y.length;if(b!==o&&b!==s)throw new Error(`Expected ${o} or ${s} bytes, got ${b}`);return Ke(a(y))}function E(l,y){let b=p(y),C=D(l),m=u(b,C);if(m===X)throw new Error("Invalid private or public key received");return d(m)}let ie=d(e.Gu);function be(l){return E(l,ie)}return{scalarMult:E,scalarMultBase:be,getSharedSecret:(l,y)=>E(l,y),getPublicKey:l=>be(l),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:ie}}var Ue=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949");var oo=BigInt(0),Nt=BigInt(1),st=BigInt(2),jt=BigInt(3),Dt=BigInt(5),so=BigInt(8);function Ct(t){let e=BigInt(10),r=BigInt(20),n=BigInt(40),i=BigInt(80),o=Ue,a=t*t%o*t%o,c=x(a,st,o)*a%o,f=x(c,Nt,o)*t%o,h=x(f,Dt,o)*f%o,u=x(h,e,o)*h%o,d=x(u,r,o)*u%o,p=x(d,n,o)*d%o,D=x(p,i,o)*p%o,E=x(D,i,o)*p%o,ie=x(E,e,o)*h%o;return{pow_p_5_8:x(ie,st,o)*t%o,b2:a}}function Rt(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}var ye=ot({P:Ue,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:t=>{let e=Ue,{pow_p_5_8:r,b2:n}=Ct(t);return de(x(r,jt,e)*n,e)},adjustScalarBytes:Rt,randomBytes:We});var W="X25519",at=new Uint8Array,pe=["deriveBits"],Mt=new Uint8Array([100,107,112,95,112,114,107]),qt=new Uint8Array([115,107]);function ct(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),n=new Uint8Array(r.length);for(let i=0;i{r(e.key.buffer)})}_serializePrivateKey(e){return new Promise(r=>{r(e.key.buffer)})}_importRawKey(e,r){return new Promise((n,i)=>{r&&e.byteLength!==this._nPk&&i(new Error("Invalid length of the key")),!r&&e.byteLength!==this._nSk&&i(new Error("Invalid length of the key")),n(new _(W,new Uint8Array(e),r?"public":"private",r?[]:pe))})}_importJWK(e,r){return new Promise((n,i)=>{(typeof e.kty>"u"||e.kty!=="OKP")&&i(new Error(`Invalid kty: ${e.kty}`)),(typeof e.crv>"u"||e.crv!=="X25519")&&i(new Error(`Invalid crv: ${e.crv}`)),r?(typeof e.d<"u"&&i(new Error("Invalid key: `d` should not be set")),typeof e.x>"u"&&i(new Error("Invalid key: `x` not found")),n(new _(W,ct(e.x),"public"))):(typeof e.d!="string"&&i(new Error("Invalid key: `d` not found")),n(new _(W,ct(e.d),"private",pe)))})}_derivePublicKey(e){return new Promise((r,n)=>{try{let i=ye.getPublicKey(e.key);r(new _(W,i,"public"))}catch(i){n(i)}})}_dh(e,r){return new Promise((n,i)=>{try{n(ye.getSharedSecret(e.key,r.key).buffer)}catch(o){i(o)}})}};var Oe=class extends ${constructor(){let e=new re;super(L.DhkemX25519HkdfSha256,new ne(e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:L.DhkemX25519HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}};export{Oe as DhkemX25519HkdfSha256,re as HkdfSha256,ne as X25519}; +var ae=class extends Error{constructor(e){let r;e instanceof Error?r=e.message:typeof e=="string"?r=e:r="",super(r),this.name=this.constructor.name}},P=class extends ae{},k=class extends P{};var K=class extends P{},S=class extends P{},Z=class extends P{},Q=class extends P{};var $=class extends P{},_=class extends P{};var dt={},Me=yt(globalThis,dt);function yt(t,e){return new Proxy(t,{get(r,n,i){return n in e?e[n]:t[n]},set(r,n,i){return n in e&&delete e[n],t[n]=i,!0},deleteProperty(r,n){let i=!1;return n in e&&(delete e[n],i=!0),n in t&&(delete t[n],i=!0),i},ownKeys(r){let n=Reflect.ownKeys(t),i=Reflect.ownKeys(e),o=new Set(i);return[...n.filter(s=>!o.has(s)),...i]},defineProperty(r,n,i){return n in e&&delete e[n],Reflect.defineProperty(t,n,i),!0},getOwnPropertyDescriptor(r,n){return n in e?Reflect.getOwnPropertyDescriptor(e,n):Reflect.getOwnPropertyDescriptor(t,n)},has(r,n){return n in e||n in t}})}async function bt(){if(Me!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:t}=await import("crypto");return t.subtle}catch(t){throw new _(t)}}var L=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await bt())}};var U={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},J={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3};var x=new Uint8Array(0);var ce=new Uint8Array([75,69,77,0,0]);var O=t=>typeof t=="object"&&t!==null&&typeof t.privateKey=="object"&&typeof t.publicKey=="object";function D(t,e){if(e<=0)throw new Error("i2Osp: too small size");if(t>=256**e)throw new Error("i2Osp: too large integer");let r=new Uint8Array(e);for(let n=0;n>8;return r}function j(t,e){let r=new Uint8Array(t.length+e.length);return r.set(t,0),r.set(e,t.length),r}var wt=new Uint8Array([101,97,101,95,112,114,107]),xt=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function gt(t,e,r){let n=new Uint8Array(t.length+e.length+r.length);return n.set(t,0),n.set(e,t.length),n.set(r,t.length+e.length),n}var G=class{constructor(e,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=r,this._kdf=n;let i=new Uint8Array(ce);i.set(D(this.id,2),3),this._kdf.init(i)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,r,n=!0){return await this._prim.importKey(e,r,n)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new k("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let r;e.ekm===void 0?r=await this.generateKeyPair():O(e.ekm)?r=e.ekm:r=await this.deriveKeyPair(e.ekm);let n=await this._prim.serializePublicKey(r.publicKey),i=await this._prim.serializePublicKey(e.recipientPublicKey);try{let o;if(e.senderKey===void 0)o=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey));else{let c=O(e.senderKey)?e.senderKey.privateKey:e.senderKey,f=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey)),h=new Uint8Array(await this._prim.dh(c,e.recipientPublicKey));o=j(f,h)}let s;if(e.senderKey===void 0)s=j(new Uint8Array(n),new Uint8Array(i));else{let c=O(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),f=await this._prim.serializePublicKey(c);s=gt(new Uint8Array(n),new Uint8Array(i),new Uint8Array(f))}let a=await this._generateSharedSecret(o,s);return{enc:n,sharedSecret:a}}catch(o){throw new Z(o)}}async decap(e){let r=await this._prim.deserializePublicKey(e.enc),n=O(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,i=O(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),o=await this._prim.serializePublicKey(i);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(n,r));else{let c=new Uint8Array(await this._prim.dh(n,r)),f=new Uint8Array(await this._prim.dh(n,e.senderPublicKey));s=j(c,f)}let a;if(e.senderPublicKey===void 0)a=j(new Uint8Array(e.enc),new Uint8Array(o));else{let c=await this._prim.serializePublicKey(e.senderPublicKey);a=new Uint8Array(e.enc.byteLength+o.byteLength+c.byteLength),a.set(new Uint8Array(e.enc),0),a.set(new Uint8Array(o),e.enc.byteLength),a.set(new Uint8Array(c),e.enc.byteLength+o.byteLength)}return await this._generateSharedSecret(s,a)}catch(s){throw new Q(s)}}async _generateSharedSecret(e,r){let n=this._kdf.buildLabeledIkm(wt,e),i=this._kdf.buildLabeledInfo(xt,r,this.secretSize);return await this._kdf.extractAndExpand(x,n,i,this.secretSize)}};var Ee=new Uint8Array([100,107,112,95,112,114,107]),qe=new Uint8Array([115,107]);var mr=new Uint8Array([99,97,110,100,105,100,97,116,101]),_r=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),vr=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Er=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Pr=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),kr=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Sr=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]);function $e(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`positive integer expected, not ${t}`)}function kt(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function ee(t,...e){if(!kt(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${t.length}`)}function Ge(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");$e(t.outputLen),$e(t.blockLen)}function V(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function Ve(t,e){ee(t);let r=e.outputLen;if(t.lengthnew DataView(t.buffer,t.byteOffset,t.byteLength),v=(t,e)=>t<<32-e|t>>>e;var $r=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Fe(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function te(t){return typeof t=="string"&&(t=Fe(t)),ee(t),t}var F=class{clone(){return this._cloneInto()}},Gr={}.toString;function Xe(t){let e=n=>t().update(te(n)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e}function We(t=32){if(C&&typeof C.getRandomValues=="function")return C.getRandomValues(new Uint8Array(t));if(C&&typeof C.randomBytes=="function")return C.randomBytes(t);throw new Error("crypto.getRandomValues must be defined")}var he=class extends F{constructor(e,r){super(),this.finished=!1,this.destroyed=!1,Ge(e);let n=te(r);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(n.length>i?e.create().update(n).digest():n);for(let s=0;snew he(t,e).update(r).digest();Pe.create=(t,e)=>new he(t,e);function St(t,e,r,n){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,r,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(r>>i&o),a=Number(r&o),c=n?4:0,f=n?0:4;t.setUint32(e+c,s,n),t.setUint32(e+f,a,n)}var Ye=(t,e,r)=>t&e^~t&r,Ze=(t,e,r)=>t&e^t&r^e&r,de=class extends F{constructor(e,r,n,i){super(),this.blockLen=e,this.outputLen=r,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=le(this.buffer)}update(e){V(this);let{view:r,buffer:n,blockLen:i}=this;e=te(e);let o=e.length;for(let s=0;si-s&&(this.process(n,0),s=0);for(let u=s;uh.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u>>3,A=v(p,17)^v(p,19)^p>>>10;H[u]=A+H[u-7]+R+H[u-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:c,G:f,H:h}=this;for(let u=0;u<64;u++){let d=v(a,6)^v(a,11)^v(a,25),p=h+d+Ye(a,c,f)+At[u]+H[u]|0,A=(v(n,2)^v(n,13)^v(n,22))+Ze(n,i,o)|0;h=f,f=c,c=a,a=s+p|0,s=o,o=i,i=n,n=p+A|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,f=f+this.G|0,h=h+this.H|0,this.set(n,i,o,s,a,c,f,h)}roundClean(){H.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Qe=Xe(()=>new ke);var yn=new Uint8Array([115,101,99]);var zn=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),Hn=new Uint8Array([101,120,112]),Tn=new Uint8Array([105,110,102,111,95,104,97,115,104]),Nn=new Uint8Array([107,101,121]),Dn=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),jn=new Uint8Array([115,101,99,114,101,116]),Cn=new Uint8Array([72,80,75,69,0,0,0,0,0,0]);var Je=new Uint8Array([72,80,75,69,45,118,49]),Se=class extends L{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:J.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:x}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,r){this._checkInit();let n=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+r.byteLength);return n.set(Je,0),n.set(this._suiteId,7),n.set(e,7+this._suiteId.byteLength),n.set(r,7+this._suiteId.byteLength+e.byteLength),n}buildLabeledInfo(e,r,n){this._checkInit();let i=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+r.byteLength);return i.set(new Uint8Array([0,n]),0),i.set(Je,2),i.set(this._suiteId,9),i.set(e,9+this._suiteId.byteLength),i.set(r,9+this._suiteId.byteLength+e.byteLength),i}async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new k("The salt length must be the same as the hashSize");let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}async expand(e,r,n){await this._setup();let i=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),o=new ArrayBuffer(n),s=new Uint8Array(o),a=x,c=new Uint8Array(r),f=new Uint8Array(1);if(n>255*this.hashSize)throw new Error("Entropy limit reached");let h=new Uint8Array(this.hashSize+c.length+1);for(let u=1,d=0;d=a.length?(s.set(a,d),d+=a.length):(s.set(a.slice(0,s.length-d),d),d+=s.length-d);return o}async extractAndExpand(e,r,n,i){await this._setup();let o=await this._api.importKey("raw",r,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:n},o,i*8)}async labeledExtract(e,r,n){return await this.extract(e,this.buildLabeledIkm(r,n))}async labeledExpand(e,r,n,i){return await this.expand(e,this.buildLabeledInfo(r,n,i),i)}_checkInit(){if(this._suiteId===x)throw new Error("Not initialized. Call init()")}},re=class extends Se{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:J.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}};var ne=class extends re{};var E=class{constructor(e,r,n,i=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=r,this.type=n,this.algorithm={name:e},this.usages=i,n==="public"&&(this.usages=[])}};var ie=class extends ne{async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return Pe(Qe,new Uint8Array(e),new Uint8Array(r));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}};var Ht=BigInt(0);function Ke(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function tt(t){if(!Ke(t))throw new Error("Uint8Array expected")}var Tt=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Nt(t){tt(t);let e="";for(let r=0;r=I._0&&t<=I._9)return t-I._0;if(t>=I._A&&t<=I._F)return t-(I._A-10);if(t>=I._a&&t<=I._f)return t-(I._a-10)}function rt(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);let e=t.length,r=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(r);for(let i=0,o=0;itypeof t=="bigint"&&Ht<=t;function Ct(t,e,r){return Ae(t)&&Ae(e)&&Ae(r)&&e<=t&&ttypeof t=="bigint",function:t=>typeof t=="function",boolean:t=>typeof t=="boolean",string:t=>typeof t=="string",stringOrUint8Array:t=>typeof t=="string"||Ke(t),isSafeInteger:t=>Number.isSafeInteger(t),array:t=>Array.isArray(t),field:(t,e)=>e.Fp.isValid(t),hash:t=>typeof t=="function"&&Number.isSafeInteger(t.outputLen)};function it(t,e,r={}){let n=(i,o,s)=>{let a=Rt[o];if(typeof a!="function")throw new Error(`Invalid validator "${o}", expected function`);let c=t[i];if(!(s&&c===void 0)&&!a(c,t))throw new Error(`Invalid param ${String(i)}=${c} (${typeof c}), expected ${o}`)};for(let[i,o]of Object.entries(e))n(i,o,!1);for(let[i,o]of Object.entries(r))n(i,o,!0);return t}var X=BigInt(0),ye=BigInt(1),Ii=BigInt(2),Bi=BigInt(3),Li=BigInt(4),Ui=BigInt(5),Oi=BigInt(8),zi=BigInt(9),Hi=BigInt(16);function pe(t,e){let r=t%e;return r>=X?r:e+r}function ot(t,e,r){if(r<=X||e 0");if(r===ye)return X;let n=ye;for(;e>X;)e&ye&&(n=n*t%r),t=t*t%r,e>>=ye;return n}function g(t,e,r){let n=t;for(;e-- >X;)n*=n,n%=r;return n}var W=BigInt(0),Ue=BigInt(1);function Mt(t){return it(t,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...t})}function st(t){let e=Mt(t),{P:r}=e,n=l=>pe(l,r),i=e.montgomeryBits,o=Math.ceil(i/8),s=e.nByteLength,a=e.adjustScalarBytes||(l=>l),c=e.powPminus2||(l=>ot(l,r-BigInt(2),r));function f(l,y,b){let M=n(l*(y-b));return y=n(y-M),b=n(b+M),[y,b]}let h=(e.a-BigInt(2))/BigInt(4);function u(l,y){Le("u",l,W,r),Le("scalar",y,W,r);let b=y,M=l,m=Ue,B=W,T=l,N=Ue,q=W,w;for(let ge=BigInt(i-1);ge>=W;ge--){let He=b>>ge&Ue;q^=He,w=f(q,m,T),m=w[0],T=w[1],w=f(q,B,N),B=w[0],N=w[1],q=He;let me=m+B,_e=n(me*me),ve=m-B,Te=n(ve*ve),Ne=_e-Te,lt=T+N,ht=T-N,De=n(ht*me),je=n(lt*ve),Ce=De+je,Re=De-je;T=n(Ce*Ce),N=n(M*n(Re*Re)),m=n(_e*Te),B=n(Ne*(_e+n(h*Ne)))}w=f(q,m,T),m=w[0],T=w[1],w=f(q,B,N),B=w[0],N=w[1];let ft=c(B);return n(m*ft)}function d(l){return nt(n(l),o)}function p(l){let y=Be("u coordinate",l,o);return s===32&&(y[31]&=127),Ie(y)}function R(l){let y=Be("scalar",l),b=y.length;if(b!==o&&b!==s)throw new Error(`Expected ${o} or ${s} bytes, got ${b}`);return Ie(a(y))}function A(l,y){let b=p(y),M=R(l),m=u(b,M);if(m===W)throw new Error("Invalid private or public key received");return d(m)}let se=d(e.Gu);function xe(l){return A(l,se)}return{scalarMult:A,scalarMultBase:xe,getSharedSecret:(l,y)=>A(l,y),getPublicKey:l=>xe(l),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:se}}var Oe=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949");var Fi=BigInt(0),qt=BigInt(1),at=BigInt(2),$t=BigInt(3),Gt=BigInt(5),Xi=BigInt(8);function Vt(t){let e=BigInt(10),r=BigInt(20),n=BigInt(40),i=BigInt(80),o=Oe,a=t*t%o*t%o,c=g(a,at,o)*a%o,f=g(c,qt,o)*t%o,h=g(f,Gt,o)*f%o,u=g(h,e,o)*h%o,d=g(u,r,o)*u%o,p=g(d,n,o)*d%o,R=g(p,i,o)*p%o,A=g(R,i,o)*p%o,se=g(A,e,o)*h%o;return{pow_p_5_8:g(se,at,o)*t%o,b2:a}}function Ft(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}var be=st({P:Oe,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:t=>{let e=Oe,{pow_p_5_8:r,b2:n}=Vt(t);return pe(g(r,$t,e)*n,e)},adjustScalarBytes:Ft,randomBytes:We});var Y="X25519",ct=new Uint8Array,we=["deriveBits"],Xt=new Uint8Array([100,107,112,95,112,114,107]),Wt=new Uint8Array([115,107]);function ut(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),n=new Uint8Array(r.length);for(let i=0;i{r(e.key.buffer)})}_serializePrivateKey(e){return new Promise(r=>{r(e.key.buffer)})}_importRawKey(e,r){return new Promise((n,i)=>{r&&e.byteLength!==this._nPk&&i(new Error("Invalid length of the key")),!r&&e.byteLength!==this._nSk&&i(new Error("Invalid length of the key")),n(new E(Y,new Uint8Array(e),r?"public":"private",r?[]:we))})}_importJWK(e,r){return new Promise((n,i)=>{(typeof e.kty>"u"||e.kty!=="OKP")&&i(new Error(`Invalid kty: ${e.kty}`)),(typeof e.crv>"u"||e.crv!=="X25519")&&i(new Error(`Invalid crv: ${e.crv}`)),r?(typeof e.d<"u"&&i(new Error("Invalid key: `d` should not be set")),typeof e.x>"u"&&i(new Error("Invalid key: `x` not found")),n(new E(Y,ut(e.x),"public"))):(typeof e.d!="string"&&i(new Error("Invalid key: `d` not found")),n(new E(Y,ut(e.d),"private",we)))})}_derivePublicKey(e){return new Promise((r,n)=>{try{let i=be.getPublicKey(e.key);r(new E(Y,i,"public"))}catch(i){n(i)}})}_dh(e,r){return new Promise((n,i)=>{try{n(be.getSharedSecret(e.key,r.key).buffer)}catch(o){i(o)}})}};var ze=class extends G{constructor(){let e=new ie;super(U.DhkemX25519HkdfSha256,new oe(e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:U.DhkemX25519HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}};export{ze as DhkemX25519HkdfSha256,ie as HkdfSha256,oe as X25519}; /*! Bundled license information: @noble/hashes/esm/utils.js: diff --git a/dhkem-x448/docs/classes/DhkemX448HkdfSha512.html b/dhkem-x448/docs/classes/DhkemX448HkdfSha512.html index 53f8e8cda..66539d1cc 100644 --- a/dhkem-x448/docs/classes/DhkemX448HkdfSha512.html +++ b/dhkem-x448/docs/classes/DhkemX448HkdfSha512.html @@ -9,7 +9,7 @@
import {
Aes256Gcm,
CipherSuite,
HkdfSha512,
} from "https://deno.land/x/hpke/core/mod.ts";
import { DhkemX448HkdfSha512 } from "https://deno.land/x/hpke/x/dhkem-x448/mod.ts";

const suite = new CipherSuite({
kem: new DhkemX448HkdfSha512(),
kdf: new HkdfSha512(),
aead: new Aes256Gcm(),
});
-

Hierarchy

  • Dhkem
    • DhkemX448HkdfSha512

Constructors

Hierarchy

  • Dhkem
    • DhkemX448HkdfSha512

Constructors

Properties

Constructors

Properties

_kdf: KdfInterface
_prim: DhkemPrimitives
encSize: number = 56

56

-
id: KemId = KemId.DhkemX448HkdfSha512

KemId.DhkemX448HkdfSha512 (0x0021)

-
privateKeySize: number = 56

56

-
publicKeySize: number = 56

56

-
secretSize: number = 64

64

-

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    +

Constructors

Properties

_kdf: KdfInterface
_prim: DhkemPrimitives
encSize: number = 56

56

+
id: KemId = KemId.DhkemX448HkdfSha512

KemId.DhkemX448HkdfSha512 (0x0021)

+
privateKeySize: number = 56

56

+
publicKeySize: number = 56

56

+
secretSize: number = 64

64

+

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    If the error occurred, throws DecapError.

    Parameters

    • params: RecipientContextParams

      A set of parameters for the recipient context.

    Returns Promise<ArrayBuffer>

    A shared secret as the output of the decapsulation step.

    DecapError

    -
  • Derives a key pair from the byte string ikm.

    +
  • Derives a key pair from the byte string ikm.

    If the error occurred, throws DeriveKeyPairError.

    Parameters

    • ikm: ArrayBuffer

      An input keying material.

    Returns Promise<CryptoKeyPair>

    A key pair derived.

    DeriveKeyPairError

    -
  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    +
  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

    DeserializeError

    -
  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    +
  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

    DeserializeError

    -
  • Generates an ephemeral, fixed-length symmetric key and +

  • Generates an ephemeral, fixed-length symmetric key and a fixed-length encapsulation of the key that can be decapsulated by the holder of the private key corresponding to pkR.

    If the error occurred, throws EncapError.

    Parameters

    • params: SenderContextParams

      A set of parameters for the sender context.

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    EncapError

    -
  • Generates a key pair.

    If the error occurred, throws NotSupportedError.

    Returns Promise<CryptoKeyPair>

    A key pair generated.

    NotSupportedError

    -
  • Imports a public or private key and converts to a CryptoKey.

    +
  • Imports a public or private key and converts to a CryptoKey.

    Since key parameters for createSenderContext or createRecipientContext are CryptoKey format, you have to use this function to convert provided keys to CryptoKey.

    @@ -74,14 +74,14 @@
  • isPublic: boolean = true

    The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

Returns Promise<CryptoKey>

A public or private CryptoKey.

DeserializeError

-
  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    +
  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

    SerializeError

    -
  • Serializes a public key as CryptoKey to a byte string of length Npk.

    +
  • Serializes a public key as CryptoKey to a byte string of length Npk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

    SerializeError

    -
+
diff --git a/dhkem-x448/docs/classes/HkdfSha512.html b/dhkem-x448/docs/classes/HkdfSha512.html index fbb31e007..acbb182ef 100644 --- a/dhkem-x448/docs/classes/HkdfSha512.html +++ b/dhkem-x448/docs/classes/HkdfSha512.html @@ -1,4 +1,4 @@ -HkdfSha512 | @hpke/dhkem-x448

Hierarchy

  • HkdfSha512
    • HkdfSha512

Constructors

constructor +HkdfSha512 | @hpke/dhkem-x448

Hierarchy

  • HkdfSha512
    • HkdfSha512

Constructors

Properties

Constructors

Properties

_api: SubtleCrypto = undefined
_suiteId: Uint8Array = EMPTY
algHash: HmacKeyGenParams = ...

The parameters for Web Cryptography API

-
hashSize: number = 64

64

-
id: KdfId = KdfId.HkdfSha512

KdfId.HkdfSha512 (0x0003)

-

Methods

  • Builds a labeled input keying material.

    +

Constructors

Properties

_api: SubtleCrypto = undefined
_suiteId: Uint8Array = EMPTY
algHash: HmacKeyGenParams = ...

The parameters for Web Cryptography API

+
hashSize: number = 64

64

+
id: KdfId = KdfId.HkdfSha512

KdfId.HkdfSha512 (0x0003)

+

Methods

  • Builds a labeled input keying material.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

    Returns Uint8Array

    An input keying material as bytes.

    -
  • Builds a labeled info string.

    +
  • Builds a labeled info string.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length of the output byte string.

    Returns Uint8Array

    An info string as bytes.

    -
  • Expands a pseudorandom key prk.

    +
  • Expands a pseudorandom key prk.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Parameters

    • salt: ArrayBuffer
    • ikm: ArrayBuffer

    Returns Promise<ArrayBuffer>

  • Extracts a pseudorandom key and expand it to a specified length keying material.

    +
  • Parameters

    • salt: ArrayBuffer
    • ikm: ArrayBuffer

    Returns Promise<ArrayBuffer>

  • Extracts a pseudorandom key and expand it to a specified length keying material.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • ikm: ArrayBuffer

      An input keying material

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Initializes the instance by setting a suite_id defined in RFC9180.

    +
  • Initializes the instance by setting a suite_id defined in RFC9180.

    Parameters

    • suiteId: Uint8Array

      A suite_id defined in RFC9180.

      -

    Returns void

  • Extracts a pseudorandom key with label.

    +

Returns void

  • Extracts a pseudorandom key with label.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Extracts a pseudorandom key with label.

    +
  • Extracts a pseudorandom key with label.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

      An input keying material

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    -
+
diff --git a/dhkem-x448/docs/classes/X448.html b/dhkem-x448/docs/classes/X448.html index 130506638..e4e13098e 100644 --- a/dhkem-x448/docs/classes/X448.html +++ b/dhkem-x448/docs/classes/X448.html @@ -1,4 +1,4 @@ -X448 | @hpke/dhkem-x448

Implements

  • DhkemPrimitives

Constructors

constructor +X448 | @hpke/dhkem-x448

Implements

  • DhkemPrimitives

Constructors

Methods

  • Parameters

    • ikm: ArrayBuffer

    Returns Promise<CryptoKeyPair>

  • Parameters

    • key: CryptoKey

    Returns Promise<CryptoKey>

  • Parameters

    • key: ArrayBuffer

    Returns Promise<CryptoKey>

  • Parameters

    • key: ArrayBuffer

    Returns Promise<CryptoKey>

  • Parameters

    • sk: CryptoKey
    • pk: CryptoKey

    Returns Promise<ArrayBuffer>

  • Returns Promise<CryptoKeyPair>

  • Parameters

    • format: "raw" | "jwk"
    • key: ArrayBuffer | JsonWebKey
    • isPublic: boolean

    Returns Promise<CryptoKey>

  • Parameters

    • key: CryptoKey

    Returns Promise<ArrayBuffer>

  • Parameters

    • key: CryptoKey

    Returns Promise<ArrayBuffer>

+

Constructors

Methods

  • Parameters

    • ikm: ArrayBuffer

    Returns Promise<CryptoKeyPair>

  • Parameters

    • key: CryptoKey

    Returns Promise<CryptoKey>

  • Parameters

    • key: ArrayBuffer

    Returns Promise<CryptoKey>

  • Parameters

    • key: ArrayBuffer

    Returns Promise<CryptoKey>

  • Parameters

    • sk: CryptoKey
    • pk: CryptoKey

    Returns Promise<ArrayBuffer>

  • Returns Promise<CryptoKeyPair>

  • Parameters

    • format: "raw" | "jwk"
    • key: ArrayBuffer | JsonWebKey
    • isPublic: boolean

    Returns Promise<CryptoKey>

  • Parameters

    • key: CryptoKey

    Returns Promise<ArrayBuffer>

  • Parameters

    • key: CryptoKey

    Returns Promise<ArrayBuffer>

diff --git a/dhkem-x448/src/hpke-common.js b/dhkem-x448/src/hpke-common.js index 0aff511e4..d6dcc8e83 100644 --- a/dhkem-x448/src/hpke-common.js +++ b/dhkem-x448/src/hpke-common.js @@ -1 +1 @@ -var e={Base:0,Psk:1,Auth:2,AuthPsk:3},x={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},d={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},h={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var k=["encrypt","decrypt"];export{k as AEAD_USAGES,h as AeadId,d as KdfId,x as KemId,e as Mode}; +var v=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},o=class extends v{},b=class extends o{},D=class extends o{},u=class extends o{},h=class extends o{},m=class extends o{},K=class extends o{},T=class extends o{},z=class extends o{},H=class extends o{},R=class extends o{},P=class extends o{},x=class extends o{};var B={},C=N(globalThis,B);function N(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),s=new Set(n);return[...r.filter(a=>!s.has(a)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}async function j(){if(C!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new x(i)}}var _=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await j())}};var F={Base:0,Psk:1,Auth:2,AuthPsk:3},g={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},Y={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},X={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var E=8192,J=32,w=new Uint8Array(0);var S=new Uint8Array([75,69,77,0,0]);var l=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function p(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function y(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function M(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;n8192)throw new b("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():l(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let s;if(e.senderKey===void 0)s=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let c=l(e.senderKey)?e.senderKey.privateKey:e.senderKey,d=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),G=new Uint8Array(await this._prim.dh(c,e.recipientPublicKey));s=y(d,G)}let a;if(e.senderKey===void 0)a=y(new Uint8Array(r),new Uint8Array(n));else{let c=l(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),d=await this._prim.serializePublicKey(c);a=q(new Uint8Array(r),new Uint8Array(n),new Uint8Array(d))}let f=await this._generateSharedSecret(s,a);return{enc:r,sharedSecret:f}}catch(s){throw new m(s)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=l(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=l(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),s=await this._prim.serializePublicKey(n);try{let a;if(e.senderPublicKey===void 0)a=new Uint8Array(await this._prim.dh(r,t));else{let c=new Uint8Array(await this._prim.dh(r,t)),d=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));a=y(c,d)}let f;if(e.senderPublicKey===void 0)f=y(new Uint8Array(e.enc),new Uint8Array(s));else{let c=await this._prim.serializePublicKey(e.senderPublicKey);f=new Uint8Array(e.enc.byteLength+s.byteLength+c.byteLength),f.set(new Uint8Array(e.enc),0),f.set(new Uint8Array(s),e.enc.byteLength),f.set(new Uint8Array(c),e.enc.byteLength+s.byteLength)}return await this._generateSharedSecret(a,f)}catch(a){throw new K(a)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Z,e),n=this._kdf.buildLabeledInfo($,t,this.secretSize);return await this._kdf.extractAndExpand(w,r,n,this.secretSize)}};var k=["deriveBits"],I=new Uint8Array([100,107,112,95,112,114,107]),Q=new Uint8Array([115,107]);var A=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var V=new Uint8Array([99,97,110,100,105,100,97,116,101]),ee=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),te=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),re=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),ie=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),ne=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),se=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),L=class extends _{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case g.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=ee,this._bitmask=255,this._pkcs8AlgId=ie;break;case g.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=te,this._bitmask=255,this._pkcs8AlgId=ne;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=re,this._bitmask=1,this._pkcs8AlgId=se;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new u(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new h(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return M(t.d)}catch(t){throw new u(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new h(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new h(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,k)}catch(e){throw new x(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(w,I,new Uint8Array(e)),r=new A(this._nSk);for(let s=0;r.isZero()||!r.lessThan(this._order);s++){if(s>255)throw new Error("Faild to derive a key pair");let a=new Uint8Array(await this._hkdf.labeledExpand(t,V,p(s,1),this._nSk));a[0]=a[0]&this._bitmask,r.set(a)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new P(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new h(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new u(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,k)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,k)}};var ae=["encrypt","decrypt"];export{ae as AEAD_USAGES,X as AeadId,v as BaseError,K as DecapError,P as DeriveKeyPairError,h as DeserializeError,U as Dhkem,w as EMPTY,L as Ec,m as EncapError,T as ExportError,o as HpkeError,E as INPUT_LENGTH_LIMIT,b as InvalidParamError,Y as KdfId,g as KemId,I as LABEL_DKP_PRK,Q as LABEL_SK,J as MINIMUM_PSK_LENGTH,R as MessageLimitReachedError,F as Mode,_ as NativeAlgorithm,x as NotSupportedError,H as OpenError,S as SUITE_ID_HEADER_KEM,z as SealError,u as SerializeError,D as ValidationError,y as concat,p as i2Osp,l as isCryptoKeyPair,W as xor}; diff --git a/dhkem-x448/src/hpke-core.js b/dhkem-x448/src/hpke-core.js index a61ab417f..2daa361d0 100644 --- a/dhkem-x448/src/hpke-core.js +++ b/dhkem-x448/src/hpke-core.js @@ -1 +1 @@ -var Se={},we=Ee(globalThis,Se);function Ee(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),a=new Set(n);return[...r.filter(s=>!a.has(s)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}var ie=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},f=class extends ie{},l=class extends f{},_e=class extends f{},P=class extends f{},m=class extends f{},N=class extends f{},T=class extends f{},B=class extends f{},C=class extends f{},M=class extends f{},R=class extends f{},G=class extends f{},p=class extends f{};async function ze(){if(we!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new p(i)}}var x=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await ze())}};var g={Base:0,Psk:1,Auth:2,AuthPsk:3},h={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},A={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},k={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var ne=["encrypt","decrypt"];var ae=class extends x{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(n,this._key,t)}async open(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(n,this._key,t)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,ne)}},F=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new ae(e)}},se=class extends F{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var oe=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new p("Export only")}};var K=8192;var c=new Uint8Array(0);function ue(){return new Promise((i,e)=>{e(new p("Not supported"))})}var Ue=new Uint8Array([115,101,99]),z=class{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await ue()}async open(e,t){return await ue()}async export(e,t){if(e.byteLength>8192)throw new l("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Ue,new Uint8Array(e),t)}catch(r){throw new B(r)}}},q=class extends z{},Y=class extends z{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}};var v=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function w(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function d(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function me(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;nNumber.MAX_SAFE_INTEGER)throw new R("Message limit reached");e.seq+=1}};var $=class extends U{async open(e,t=c){let r;try{r=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(n){throw new M(n)}return this.incrementSeq(this._ctx),r}};var X=class extends U{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}async seal(e,t=c){let r;try{r=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(n){throw new C(n)}return this.incrementSeq(this._ctx),r}};var Oe=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),je=new Uint8Array([101,120,112]),He=new Uint8Array([105,110,102,111,95,104,97,115,104]),De=new Uint8Array([107,101,121]),Ne=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Te=new Uint8Array([115,101,99,114,101,116]),Be=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),J=class extends x{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new l("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new l("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new l("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Be),this._suiteId.set(w(this._kem.id,2),4),this._suiteId.set(w(this._kdf.id,2),6),this._suiteId.set(w(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.encap(e),r;return e.psk!==void 0?r=e.senderKey!==void 0?g.AuthPsk:g.Psk:r=e.senderKey!==void 0?g.Auth:g.Base,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.decap(e),r;return e.psk!==void 0?r=e.senderPublicKey!==void 0?g.AuthPsk:g.Psk:r=e.senderPublicKey!==void 0?g.Auth:g.Base,await this._keyScheduleR(r,t,e)}async seal(e,t,r=c){let n=await this.createSenderContext(e);return{ct:await n.seal(t,r),enc:n.enc}}async open(e,t,r=c){return await(await this.createRecipientContext(e)).open(t,r)}async _keySchedule(e,t,r){let n=r.psk===void 0?c:new Uint8Array(r.psk.id),a=await this._kdf.labeledExtract(c,Ne,n),s=r.info===void 0?c:new Uint8Array(r.info),o=await this._kdf.labeledExtract(c,He,s),u=new Uint8Array(1+a.byteLength+o.byteLength);u.set(new Uint8Array([e]),0),u.set(new Uint8Array(a),1),u.set(new Uint8Array(o),1+a.byteLength);let y=r.psk===void 0?c:new Uint8Array(r.psk.key),b=this._kdf.buildLabeledIkm(Te,y),I=this._kdf.buildLabeledInfo(je,u,this._kdf.hashSize),_=await this._kdf.extractAndExpand(t,b,I,this._kdf.hashSize);if(this._aead.id===k.ExportOnly)return{aead:this._aead,exporterSecret:_};let ke=this._kdf.buildLabeledInfo(De,u,this._aead.keySize),Ke=await this._kdf.extractAndExpand(t,b,ke,this._aead.keySize),ve=this._kdf.buildLabeledInfo(Oe,u,this._aead.nonceSize),Ae=await this._kdf.extractAndExpand(t,b,ve,this._aead.nonceSize);return{aead:this._aead,exporterSecret:_,key:Ke,baseNonce:new Uint8Array(Ae),seq:0}}async _keyScheduleS(e,t,r,n){let a=await this._keySchedule(e,t,n);return a.key===void 0?new Y(this._api,this._kdf,a.exporterSecret,r):new X(this._api,this._kdf,a,r)}async _keyScheduleR(e,t,r){let n=await this._keySchedule(e,t,r);return n.key===void 0?new q(this._api,this._kdf,n.exporterSecret):new $(this._api,this._kdf,n)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new l("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new l(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new l("Too long psk.key");if(e.psk.id.byteLength>8192)throw new l("Too long psk.id")}}};var ge=new Uint8Array([72,80,75,69,45,118,49]),D=class extends x{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:c}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(ge,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();let n=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set(new Uint8Array([0,r]),0),n.set(ge,2),n.set(this._suiteId,9),n.set(e,9+this._suiteId.byteLength),n.set(t,9+this._suiteId.byteLength+e.byteLength),n}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new l("The salt length must be the same as the hashSize");let r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),a=new ArrayBuffer(r),s=new Uint8Array(a),o=c,u=new Uint8Array(t),y=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");let b=new Uint8Array(this.hashSize+u.length+1);for(let I=1,_=0;_=o.length?(s.set(o,_),_+=o.length):(s.set(o.slice(0,s.length-_),_),_+=s.length-_);return a}async extractAndExpand(e,t,r,n){await this._setup();let a=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},a,n*8)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r))}async labeledExpand(e,t,r,n){return await this.expand(e,this.buildLabeledInfo(t,r,n),n)}_checkInit(){if(this._suiteId===c)throw new Error("Not initialized. Call init()")}},L=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},O=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},j=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var W=new Uint8Array([75,69,77,0,0]);var Ce=new Uint8Array([101,97,101,95,112,114,107]),Me=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function Re(i,e,t){let r=new Uint8Array(i.length+e.length+t.length);return r.set(i,0),r.set(e,i.length),r.set(t,i.length+e.length),r}var S=class{constructor(e,t,r){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=t,this._kdf=r;let n=new Uint8Array(W);n.set(w(this.id,2),3),this._kdf.init(n)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,t,r=!0){return await this._prim.importKey(e,t,r)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new l("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():v(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let a;if(e.senderKey===void 0)a=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let u=v(e.senderKey)?e.senderKey.privateKey:e.senderKey,y=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),b=new Uint8Array(await this._prim.dh(u,e.recipientPublicKey));a=d(y,b)}let s;if(e.senderKey===void 0)s=d(new Uint8Array(r),new Uint8Array(n));else{let u=v(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),y=await this._prim.serializePublicKey(u);s=Re(new Uint8Array(r),new Uint8Array(n),new Uint8Array(y))}let o=await this._generateSharedSecret(a,s);return{enc:r,sharedSecret:o}}catch(a){throw new N(a)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=v(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=v(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),a=await this._prim.serializePublicKey(n);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(r,t));else{let u=new Uint8Array(await this._prim.dh(r,t)),y=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));s=d(u,y)}let o;if(e.senderPublicKey===void 0)o=d(new Uint8Array(e.enc),new Uint8Array(a));else{let u=await this._prim.serializePublicKey(e.senderPublicKey);o=new Uint8Array(e.enc.byteLength+a.byteLength+u.byteLength),o.set(new Uint8Array(e.enc),0),o.set(new Uint8Array(a),e.enc.byteLength),o.set(new Uint8Array(u),e.enc.byteLength+a.byteLength)}return await this._generateSharedSecret(s,o)}catch(s){throw new T(s)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Ce,e),n=this._kdf.buildLabeledInfo(Me,t,this.secretSize);return await this._kdf.extractAndExpand(c,r,n,this.secretSize)}};var Z=["deriveBits"],Q=new Uint8Array([100,107,112,95,112,114,107]),Pe=new Uint8Array([115,107]);var V=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var Ge=new Uint8Array([99,97,110,100,105,100,97,116,101]),Fe=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),qe=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Ye=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),$e=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Xe=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Je=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),E=class extends x{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case h.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=Fe,this._bitmask=255,this._pkcs8AlgId=$e;break;case h.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=qe,this._bitmask=255,this._pkcs8AlgId=Xe;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Ye,this._bitmask=1,this._pkcs8AlgId=Je;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new P(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new m(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return me(t.d)}catch(t){throw new P(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new m(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new m(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,Z)}catch(e){throw new p(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(c,Q,new Uint8Array(e)),r=new V(this._nSk);for(let a=0;r.isZero()||!r.lessThan(this._order);a++){if(a>255)throw new Error("Faild to derive a key pair");let s=new Uint8Array(await this._hkdf.labeledExpand(t,Ge,w(a,1),this._nSk));s[0]=s[0]&this._bitmask,r.set(s)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new G(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new m(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new P(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,Z)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,Z)}};var ee=class extends S{constructor(){let e=new L,t=new E(h.DhkemP256HkdfSha256,e);super(h.DhkemP256HkdfSha256,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}},te=class extends S{constructor(){let e=new O,t=new E(h.DhkemP384HkdfSha384,e);super(h.DhkemP384HkdfSha384,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}},re=class extends S{constructor(){let e=new j,t=new E(h.DhkemP521HkdfSha512,e);super(h.DhkemP521HkdfSha512,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var ce=class extends J{},le=class extends ee{},he=class extends te{},fe=class extends re{},de=class extends L{},ye=class extends O{},be=class extends j{};var H=class{constructor(e,t,r,n=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=r,this.algorithm={name:e},this.usages=n,r==="public"&&(this.usages=[])}};var pe=class{constructor(e,t,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=t,this._b=r,this._kdf=n;let a=new Uint8Array(W);a.set(w(this.id,2),3),this._kdf.init(a)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new P(t)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(t){throw new m(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new P(t)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(t){throw new m(t)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),t=await this._b.generateKeyPair(),r=await this._a.serializePublicKey(e.publicKey),n=await this._a.serializePrivateKey(e.privateKey),a=await this._b.serializePublicKey(t.publicKey),s=await this._b.serializePrivateKey(t.privateKey);return{publicKey:await this.deserializePublicKey(d(new Uint8Array(r),new Uint8Array(a))),privateKey:await this.deserializePrivateKey(d(new Uint8Array(n),new Uint8Array(s)))}}async deriveKeyPair(e){let t=await this._kdf.labeledExtract(c,Q,new Uint8Array(e)),r=new Uint8Array(await this._kdf.labeledExpand(t,Pe,c,96)),n=r.slice(0,32),a=r.slice(32,96),s=await this._a.deriveKeyPair(n),o=await this._b.deriveKeyPair(a),u=await this._a.serializePublicKey(s.publicKey),y=await this._a.serializePrivateKey(s.privateKey),b=await this._b.serializePublicKey(o.publicKey),I=await this._b.serializePrivateKey(o.privateKey);return{publicKey:await this.deserializePublicKey(d(new Uint8Array(u),new Uint8Array(b))),privateKey:await this.deserializePrivateKey(d(new Uint8Array(y),new Uint8Array(I)))}}async importKey(e,t,r=!0){if(e!=="raw")throw new p("'jwk' is not supported");if(!(t instanceof ArrayBuffer))throw new l("Invalid type of key");return r?await this.deserializePublicKey(t):await this.deserializePrivateKey(t)}async encap(e){let t,r;if(e.ekm!==void 0&&!v(e.ekm)){if(e.ekm.byteLength!==64)throw new l("ekm must be 64 bytes in length");t=e.ekm.slice(0,32),r=e.ekm.slice(32)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),a=await this._a.deserializePublicKey(n.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(n.slice(this._a.publicKeySize)),o=await this._a.encap({recipientPublicKey:a,ekm:t}),u=await this._b.encap({recipientPublicKey:s,ekm:r});return{sharedSecret:d(new Uint8Array(o.sharedSecret),new Uint8Array(u.sharedSecret)),enc:d(new Uint8Array(o.enc),new Uint8Array(u.enc))}}async decap(e){let t=v(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,r=new Uint8Array(await this.serializePrivateKey(t)),n=await this._a.deserializePrivateKey(r.slice(0,this._a.privateKeySize)),a=await this._b.deserializePrivateKey(r.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:n,enc:e.enc.slice(0,this._a.encSize)}),o=await this._b.decap({recipientKey:a,enc:e.enc.slice(this._a.encSize)});return d(new Uint8Array(s),new Uint8Array(o))}_serializePublicKey(e){return new Promise((t,r)=>{e.type!=="public"&&r(new Error("Not public key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePublicKey(e){return new Promise((t,r)=>{e.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((t,r)=>{e.type!=="private"&&r(new Error("Not private key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((t,r)=>{e.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};export{k as AeadId,F as Aes128Gcm,se as Aes256Gcm,ie as BaseError,ce as CipherSuite,T as DecapError,G as DeriveKeyPairError,m as DeserializeError,S as Dhkem,le as DhkemP256HkdfSha256,he as DhkemP384HkdfSha384,fe as DhkemP521HkdfSha512,E as Ec,N as EncapError,B as ExportError,oe as ExportOnly,de as HkdfSha256,ye as HkdfSha384,be as HkdfSha512,f as HpkeError,pe as Hybridkem,K as INPUT_LENGTH_LIMIT,l as InvalidParamError,A as KdfId,h as KemId,R as MessageLimitReachedError,p as NotSupportedError,M as OpenError,C as SealError,P as SerializeError,_e as ValidationError,H as XCryptoKey}; +var Y=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},d=class extends Y{},l=class extends d{},ne=class extends d{},g=class extends d{},x=class extends d{},D=class extends d{},N=class extends d{},T=class extends d{},B=class extends d{},M=class extends d{},C=class extends d{},R=class extends d{},y=class extends d{};var Ee={},ge=Ie(globalThis,Ee);function Ie(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),a=new Set(n);return[...r.filter(s=>!a.has(s)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}async function Ue(){if(ge!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new y(i)}}var m=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await Ue())}};var P={Base:0,Psk:1,Auth:2,AuthPsk:3},h={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},A={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},K={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var c=new Uint8Array(0);var G=new Uint8Array([75,69,77,0,0]);var k=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function b(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function f(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function Pe(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;n8192)throw new l("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():k(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let a;if(e.senderKey===void 0)a=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let o=k(e.senderKey)?e.senderKey.privateKey:e.senderKey,p=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),w=new Uint8Array(await this._prim.dh(o,e.recipientPublicKey));a=f(p,w)}let s;if(e.senderKey===void 0)s=f(new Uint8Array(r),new Uint8Array(n));else{let o=k(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),p=await this._prim.serializePublicKey(o);s=je(new Uint8Array(r),new Uint8Array(n),new Uint8Array(p))}let u=await this._generateSharedSecret(a,s);return{enc:r,sharedSecret:u}}catch(a){throw new D(a)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=k(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),a=await this._prim.serializePublicKey(n);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(r,t));else{let o=new Uint8Array(await this._prim.dh(r,t)),p=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));s=f(o,p)}let u;if(e.senderPublicKey===void 0)u=f(new Uint8Array(e.enc),new Uint8Array(a));else{let o=await this._prim.serializePublicKey(e.senderPublicKey);u=new Uint8Array(e.enc.byteLength+a.byteLength+o.byteLength),u.set(new Uint8Array(e.enc),0),u.set(new Uint8Array(a),e.enc.byteLength),u.set(new Uint8Array(o),e.enc.byteLength+a.byteLength)}return await this._generateSharedSecret(s,u)}catch(s){throw new N(s)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Le,e),n=this._kdf.buildLabeledInfo(Oe,t,this.secretSize);return await this._kdf.extractAndExpand(c,r,n,this.secretSize)}};var $=["deriveBits"],F=new Uint8Array([100,107,112,95,112,114,107]),se=new Uint8Array([115,107]);var X=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var He=new Uint8Array([99,97,110,100,105,100,97,116,101]),De=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),Ne=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Te=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Be=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Me=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Ce=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),E=class extends m{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case h.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=De,this._bitmask=255,this._pkcs8AlgId=Be;break;case h.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=Ne,this._bitmask=255,this._pkcs8AlgId=Me;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Te,this._bitmask=1,this._pkcs8AlgId=Ce;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new g(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new x(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return Pe(t.d)}catch(t){throw new g(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new x(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new x(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,$)}catch(e){throw new y(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(c,F,new Uint8Array(e)),r=new X(this._nSk);for(let a=0;r.isZero()||!r.lessThan(this._order);a++){if(a>255)throw new Error("Faild to derive a key pair");let s=new Uint8Array(await this._hkdf.labeledExpand(t,He,b(a,1),this._nSk));s[0]=s[0]&this._bitmask,r.set(s)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new R(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new x(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new g(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,$)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,$)}};var ue=["encrypt","decrypt"];var ce=class extends m{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(n,this._key,t)}async open(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(n,this._key,t)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,ue)}},J=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new ce(e)}},le=class extends J{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var he=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new y("Export only")}};function de(){return new Promise((i,e)=>{e(new y("Not supported"))})}var Re=new Uint8Array([115,101,99]),z=class{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await de()}async open(e,t){return await de()}async export(e,t){if(e.byteLength>8192)throw new l("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Re,new Uint8Array(e),t)}catch(r){throw new T(r)}}},W=class extends z{},Z=class extends z{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}};var U=class extends z{constructor(e,t,r){if(super(e,t,r.exporterSecret),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nK",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nN",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_ctx",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),r.key===void 0||r.baseNonce===void 0||r.seq===void 0)throw new Error("Required parameters are missing");this._aead=r.aead,this._nK=this._aead.keySize,this._nN=this._aead.nonceSize,this._nT=this._aead.tagSize;let n=this._aead.createEncryptionContext(r.key);this._ctx={key:n,baseNonce:r.baseNonce,seq:r.seq}}computeNonce(e){let t=b(e.seq,e.baseNonce.byteLength);return ae(e.baseNonce,t)}incrementSeq(e){if(e.seq>Number.MAX_SAFE_INTEGER)throw new C("Message limit reached");e.seq+=1}};var V=class extends U{async open(e,t=c){let r;try{r=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(n){throw new M(n)}return this.incrementSeq(this._ctx),r}};var Q=class extends U{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}async seal(e,t=c){let r;try{r=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(n){throw new B(n)}return this.incrementSeq(this._ctx),r}};var Ge=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),Fe=new Uint8Array([101,120,112]),qe=new Uint8Array([105,110,102,111,95,104,97,115,104]),Ye=new Uint8Array([107,101,121]),$e=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Xe=new Uint8Array([115,101,99,114,101,116]),Je=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),ee=class extends m{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new l("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new l("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new l("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Je),this._suiteId.set(b(this._kem.id,2),4),this._suiteId.set(b(this._kdf.id,2),6),this._suiteId.set(b(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.encap(e),r;return e.psk!==void 0?r=e.senderKey!==void 0?P.AuthPsk:P.Psk:r=e.senderKey!==void 0?P.Auth:P.Base,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.decap(e),r;return e.psk!==void 0?r=e.senderPublicKey!==void 0?P.AuthPsk:P.Psk:r=e.senderPublicKey!==void 0?P.Auth:P.Base,await this._keyScheduleR(r,t,e)}async seal(e,t,r=c){let n=await this.createSenderContext(e);return{ct:await n.seal(t,r),enc:n.enc}}async open(e,t,r=c){return await(await this.createRecipientContext(e)).open(t,r)}async _keySchedule(e,t,r){let n=r.psk===void 0?c:new Uint8Array(r.psk.id),a=await this._kdf.labeledExtract(c,$e,n),s=r.info===void 0?c:new Uint8Array(r.info),u=await this._kdf.labeledExtract(c,qe,s),o=new Uint8Array(1+a.byteLength+u.byteLength);o.set(new Uint8Array([e]),0),o.set(new Uint8Array(a),1),o.set(new Uint8Array(u),1+a.byteLength);let p=r.psk===void 0?c:new Uint8Array(r.psk.key),w=this._kdf.buildLabeledIkm(Xe,p),I=this._kdf.buildLabeledInfo(Fe,o,this._kdf.hashSize),_=await this._kdf.extractAndExpand(t,w,I,this._kdf.hashSize);if(this._aead.id===K.ExportOnly)return{aead:this._aead,exporterSecret:_};let Ke=this._kdf.buildLabeledInfo(Ye,o,this._aead.keySize),ve=await this._kdf.extractAndExpand(t,w,Ke,this._aead.keySize),Ae=this._kdf.buildLabeledInfo(Ge,o,this._aead.nonceSize),Se=await this._kdf.extractAndExpand(t,w,Ae,this._aead.nonceSize);return{aead:this._aead,exporterSecret:_,key:ve,baseNonce:new Uint8Array(Se),seq:0}}async _keyScheduleS(e,t,r,n){let a=await this._keySchedule(e,t,n);return a.key===void 0?new Z(this._api,this._kdf,a.exporterSecret,r):new Q(this._api,this._kdf,a,r)}async _keyScheduleR(e,t,r){let n=await this._keySchedule(e,t,r);return n.key===void 0?new W(this._api,this._kdf,n.exporterSecret):new V(this._api,this._kdf,n)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new l("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new l(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new l("Too long psk.key");if(e.psk.id.byteLength>8192)throw new l("Too long psk.id")}}};var ke=new Uint8Array([72,80,75,69,45,118,49]),q=class extends m{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:c}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(ke,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();let n=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set(new Uint8Array([0,r]),0),n.set(ke,2),n.set(this._suiteId,9),n.set(e,9+this._suiteId.byteLength),n.set(t,9+this._suiteId.byteLength+e.byteLength),n}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new l("The salt length must be the same as the hashSize");let r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),a=new ArrayBuffer(r),s=new Uint8Array(a),u=c,o=new Uint8Array(t),p=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");let w=new Uint8Array(this.hashSize+o.length+1);for(let I=1,_=0;_=u.length?(s.set(u,_),_+=u.length):(s.set(u.slice(0,s.length-_),_),_+=s.length-_);return a}async extractAndExpand(e,t,r,n){await this._setup();let a=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},a,n*8)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r))}async labeledExpand(e,t,r,n){return await this.expand(e,this.buildLabeledInfo(t,r,n),n)}_checkInit(){if(this._suiteId===c)throw new Error("Not initialized. Call init()")}},L=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},O=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},j=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var te=class extends S{constructor(){let e=new L,t=new E(h.DhkemP256HkdfSha256,e);super(h.DhkemP256HkdfSha256,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}},re=class extends S{constructor(){let e=new O,t=new E(h.DhkemP384HkdfSha384,e);super(h.DhkemP384HkdfSha384,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}},ie=class extends S{constructor(){let e=new j,t=new E(h.DhkemP521HkdfSha512,e);super(h.DhkemP521HkdfSha512,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var fe=class extends ee{},ye=class extends te{},be=class extends re{},pe=class extends ie{},we=class extends L{},_e=class extends O{},xe=class extends j{};var H=class{constructor(e,t,r,n=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=r,this.algorithm={name:e},this.usages=n,r==="public"&&(this.usages=[])}};var me=class{constructor(e,t,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=t,this._b=r,this._kdf=n;let a=new Uint8Array(G);a.set(b(this.id,2),3),this._kdf.init(a)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new g(t)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(t){throw new x(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new g(t)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(t){throw new x(t)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),t=await this._b.generateKeyPair(),r=await this._a.serializePublicKey(e.publicKey),n=await this._a.serializePrivateKey(e.privateKey),a=await this._b.serializePublicKey(t.publicKey),s=await this._b.serializePrivateKey(t.privateKey);return{publicKey:await this.deserializePublicKey(f(new Uint8Array(r),new Uint8Array(a))),privateKey:await this.deserializePrivateKey(f(new Uint8Array(n),new Uint8Array(s)))}}async deriveKeyPair(e){let t=await this._kdf.labeledExtract(c,F,new Uint8Array(e)),r=new Uint8Array(await this._kdf.labeledExpand(t,se,c,96)),n=r.slice(0,32),a=r.slice(32,96),s=await this._a.deriveKeyPair(n),u=await this._b.deriveKeyPair(a),o=await this._a.serializePublicKey(s.publicKey),p=await this._a.serializePrivateKey(s.privateKey),w=await this._b.serializePublicKey(u.publicKey),I=await this._b.serializePrivateKey(u.privateKey);return{publicKey:await this.deserializePublicKey(f(new Uint8Array(o),new Uint8Array(w))),privateKey:await this.deserializePrivateKey(f(new Uint8Array(p),new Uint8Array(I)))}}async importKey(e,t,r=!0){if(e!=="raw")throw new y("'jwk' is not supported");if(!(t instanceof ArrayBuffer))throw new l("Invalid type of key");return r?await this.deserializePublicKey(t):await this.deserializePrivateKey(t)}async encap(e){let t,r;if(e.ekm!==void 0&&!k(e.ekm)){if(e.ekm.byteLength!==64)throw new l("ekm must be 64 bytes in length");t=e.ekm.slice(0,32),r=e.ekm.slice(32)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),a=await this._a.deserializePublicKey(n.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(n.slice(this._a.publicKeySize)),u=await this._a.encap({recipientPublicKey:a,ekm:t}),o=await this._b.encap({recipientPublicKey:s,ekm:r});return{sharedSecret:f(new Uint8Array(u.sharedSecret),new Uint8Array(o.sharedSecret)),enc:f(new Uint8Array(u.enc),new Uint8Array(o.enc))}}async decap(e){let t=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,r=new Uint8Array(await this.serializePrivateKey(t)),n=await this._a.deserializePrivateKey(r.slice(0,this._a.privateKeySize)),a=await this._b.deserializePrivateKey(r.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:n,enc:e.enc.slice(0,this._a.encSize)}),u=await this._b.decap({recipientKey:a,enc:e.enc.slice(this._a.encSize)});return f(new Uint8Array(s),new Uint8Array(u))}_serializePublicKey(e){return new Promise((t,r)=>{e.type!=="public"&&r(new Error("Not public key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePublicKey(e){return new Promise((t,r)=>{e.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((t,r)=>{e.type!=="private"&&r(new Error("Not private key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((t,r)=>{e.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};export{K as AeadId,J as Aes128Gcm,le as Aes256Gcm,Y as BaseError,fe as CipherSuite,N as DecapError,R as DeriveKeyPairError,x as DeserializeError,ye as DhkemP256HkdfSha256,be as DhkemP384HkdfSha384,pe as DhkemP521HkdfSha512,D as EncapError,T as ExportError,he as ExportOnly,we as HkdfSha256,_e as HkdfSha384,xe as HkdfSha512,d as HpkeError,me as Hybridkem,l as InvalidParamError,A as KdfId,h as KemId,C as MessageLimitReachedError,y as NotSupportedError,M as OpenError,B as SealError,g as SerializeError,ne as ValidationError,H as XCryptoKey}; diff --git a/dhkem-x448/src/hpke-dhkem-x448.js b/dhkem-x448/src/hpke-dhkem-x448.js index 9bf9c3998..0bbb526a8 100644 --- a/dhkem-x448/src/hpke-dhkem-x448.js +++ b/dhkem-x448/src/hpke-dhkem-x448.js @@ -1,4 +1,4 @@ -var jr={},Gt=Rr(globalThis,jr);function Rr(t,e){return new Proxy(t,{get(r,n,i){return n in e?e[n]:t[n]},set(r,n,i){return n in e&&delete e[n],t[n]=i,!0},deleteProperty(r,n){let i=!1;return n in e&&(delete e[n],i=!0),n in t&&(delete t[n],i=!0),i},ownKeys(r){let n=Reflect.ownKeys(t),i=Reflect.ownKeys(e),o=new Set(i);return[...n.filter(s=>!o.has(s)),...i]},defineProperty(r,n,i){return n in e&&delete e[n],Reflect.defineProperty(t,n,i),!0},getOwnPropertyDescriptor(r,n){return n in e?Reflect.getOwnPropertyDescriptor(e,n):Reflect.getOwnPropertyDescriptor(t,n)},has(r,n){return n in e||n in t}})}var st=class extends Error{constructor(e){let r;e instanceof Error?r=e.message:typeof e=="string"?r=e:r="",super(r),this.name=this.constructor.name}},te=class extends st{},re=class extends te{};var fe=class extends te{},ne=class extends te{},qe=class extends te{},Ge=class extends te{};var Oe=class extends te{},Q=class extends te{};async function Mr(){if(Gt!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:t}=await import("crypto");return t.subtle}catch(t){throw new Q(t)}}var _e=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await Mr())}};var le={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},He={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3};var X=new Uint8Array(0);var Bi=new Uint8Array([115,101,99]);var ve=t=>typeof t=="object"&&t!==null&&typeof t.privateKey=="object"&&typeof t.publicKey=="object";function Be(t,e){if(e<=0)throw new Error("i2Osp: too small size");if(t>=256**e)throw new Error("i2Osp: too large integer");let r=new Uint8Array(e);for(let n=0;n>8;return r}function Ke(t,e){let r=new Uint8Array(t.length+e.length);return r.set(t,0),r.set(e,t.length),r}var so=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),ao=new Uint8Array([101,120,112]),co=new Uint8Array([105,110,102,111,95,104,97,115,104]),uo=new Uint8Array([107,101,121]),fo=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),lo=new Uint8Array([115,101,99,114,101,116]),ho=new Uint8Array([72,80,75,69,0,0,0,0,0,0]);var Ft=new Uint8Array([72,80,75,69,45,118,49]),at=class extends _e{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:He.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:X}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,r){this._checkInit();let n=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+r.byteLength);return n.set(Ft,0),n.set(this._suiteId,7),n.set(e,7+this._suiteId.byteLength),n.set(r,7+this._suiteId.byteLength+e.byteLength),n}buildLabeledInfo(e,r,n){this._checkInit();let i=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+r.byteLength);return i.set(new Uint8Array([0,n]),0),i.set(Ft,2),i.set(this._suiteId,9),i.set(e,9+this._suiteId.byteLength),i.set(r,9+this._suiteId.byteLength+e.byteLength),i}async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new re("The salt length must be the same as the hashSize");let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}async expand(e,r,n){await this._setup();let i=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),o=new ArrayBuffer(n),s=new Uint8Array(o),a=X,c=new Uint8Array(r),f=new Uint8Array(1);if(n>255*this.hashSize)throw new Error("Entropy limit reached");let u=new Uint8Array(this.hashSize+c.length+1);for(let d=1,p=0;p=a.length?(s.set(a,p),p+=a.length):(s.set(a.slice(0,s.length-p),p),p+=s.length-p);return o}async extractAndExpand(e,r,n,i){await this._setup();let o=await this._api.importKey("raw",r,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:n},o,i*8)}async labeledExtract(e,r,n){return await this.extract(e,this.buildLabeledIkm(r,n))}async labeledExpand(e,r,n,i){return await this.expand(e,this.buildLabeledInfo(r,n,i),i)}_checkInit(){if(this._suiteId===X)throw new Error("Not initialized. Call init()")}};var ze=class extends at{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:He.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var ct=new Uint8Array([75,69,77,0,0]);var $r=new Uint8Array([101,97,101,95,112,114,107]),Zr=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function Xr(t,e,r){let n=new Uint8Array(t.length+e.length+r.length);return n.set(t,0),n.set(e,t.length),n.set(r,t.length+e.length),n}var Ie=class{constructor(e,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=r,this._kdf=n;let i=new Uint8Array(ct);i.set(Be(this.id,2),3),this._kdf.init(i)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,r,n=!0){return await this._prim.importKey(e,r,n)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new re("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let r;e.ekm===void 0?r=await this.generateKeyPair():ve(e.ekm)?r=e.ekm:r=await this.deriveKeyPair(e.ekm);let n=await this._prim.serializePublicKey(r.publicKey),i=await this._prim.serializePublicKey(e.recipientPublicKey);try{let o;if(e.senderKey===void 0)o=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey));else{let c=ve(e.senderKey)?e.senderKey.privateKey:e.senderKey,f=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey)),u=new Uint8Array(await this._prim.dh(c,e.recipientPublicKey));o=Ke(f,u)}let s;if(e.senderKey===void 0)s=Ke(new Uint8Array(n),new Uint8Array(i));else{let c=ve(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),f=await this._prim.serializePublicKey(c);s=Xr(new Uint8Array(n),new Uint8Array(i),new Uint8Array(f))}let a=await this._generateSharedSecret(o,s);return{enc:n,sharedSecret:a}}catch(o){throw new qe(o)}}async decap(e){let r=await this._prim.deserializePublicKey(e.enc),n=ve(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,i=ve(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),o=await this._prim.serializePublicKey(i);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(n,r));else{let c=new Uint8Array(await this._prim.dh(n,r)),f=new Uint8Array(await this._prim.dh(n,e.senderPublicKey));s=Ke(c,f)}let a;if(e.senderPublicKey===void 0)a=Ke(new Uint8Array(e.enc),new Uint8Array(o));else{let c=await this._prim.serializePublicKey(e.senderPublicKey);a=new Uint8Array(e.enc.byteLength+o.byteLength+c.byteLength),a.set(new Uint8Array(e.enc),0),a.set(new Uint8Array(o),e.enc.byteLength),a.set(new Uint8Array(c),e.enc.byteLength+o.byteLength)}return await this._generateSharedSecret(s,a)}catch(s){throw new Ge(s)}}async _generateSharedSecret(e,r){let n=this._kdf.buildLabeledIkm($r,e),i=this._kdf.buildLabeledInfo(Zr,r,this.secretSize);return await this._kdf.extractAndExpand(X,n,i,this.secretSize)}};var $t=new Uint8Array([100,107,112,95,112,114,107]),Vr=new Uint8Array([115,107]);var Co=new Uint8Array([99,97,110,100,105,100,97,116,101]),jo=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),Ro=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Do=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Mo=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),qo=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Go=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]);var Te=class extends ze{};var V=class{constructor(e,r,n,i=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=r,this.type=n,this.algorithm={name:e},this.usages=i,n==="public"&&(this.usages=[])}};function Ne(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`positive integer expected, not ${t}`)}function Qr(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function he(t,...e){if(!Qr(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${t.length}`)}function Zt(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");Ne(t.outputLen),Ne(t.blockLen)}function ie(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function Ze(t,e){he(t);let r=e.outputLen;if(t.lengthnew Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),Xe=t=>new DataView(t.buffer,t.byteOffset,t.byteLength);var ut=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,en=t=>t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255;function ft(t){for(let e=0;et().update(pe(n)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e}function Yt(t){let e=(n,i)=>t(i).update(pe(n)).digest(),r=t({});return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=n=>t(n),e}function ht(t=32){if(Ee&&typeof Ee.getRandomValues=="function")return Ee.getRandomValues(new Uint8Array(t));if(Ee&&typeof Ee.randomBytes=="function")return Ee.randomBytes(t);throw new Error("crypto.getRandomValues must be defined")}var Ve=class extends de{constructor(e,r){super(),this.finished=!1,this.destroyed=!1,Zt(e);let n=pe(r);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(n.length>i?e.create().update(n).digest():n);for(let s=0;snew Ve(t,e).update(r).digest();dt.create=(t,e)=>new Ve(t,e);function tn(t,e,r,n){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,r,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(r>>i&o),a=Number(r&o),c=n?4:0,f=n?0:4;t.setUint32(e+c,s,n),t.setUint32(e+f,a,n)}var Ye=class extends de{constructor(e,r,n,i){super(),this.blockLen=e,this.outputLen=r,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Xe(this.buffer)}update(e){ie(this);let{view:r,buffer:n,blockLen:i}=this;e=pe(e);let o=e.length;for(let s=0;si-s&&(this.process(n,0),s=0);for(let d=s;du.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d>pt&We)}:{h:Number(t>>pt&We)|0,l:Number(t&We)|0}}function yt(t,e=!1){let r=new Uint32Array(t.length),n=new Uint32Array(t.length);for(let i=0;iBigInt(t>>>0)<>>0),nn=(t,e,r)=>t>>>r,on=(t,e,r)=>t<<32-r|e>>>r,sn=(t,e,r)=>t>>>r|e<<32-r,an=(t,e,r)=>t<<32-r|e>>>r,cn=(t,e,r)=>t<<64-r|e>>>r-32,un=(t,e,r)=>t>>>r-32|e<<64-r,fn=(t,e)=>e,ln=(t,e)=>t,bt=(t,e,r)=>t<>>32-r,wt=(t,e,r)=>e<>>32-r,xt=(t,e,r)=>e<>>64-r,mt=(t,e,r)=>t<>>64-r;function hn(t,e,r,n){let i=(e>>>0)+(n>>>0);return{h:t+r+(i/2**32|0)|0,l:i|0}}var dn=(t,e,r)=>(t>>>0)+(e>>>0)+(r>>>0),pn=(t,e,r,n)=>e+r+n+(t/2**32|0)|0,yn=(t,e,r,n)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0),bn=(t,e,r,n,i)=>e+r+n+i+(t/2**32|0)|0,wn=(t,e,r,n,i)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0)+(i>>>0),xn=(t,e,r,n,i,o)=>e+r+n+i+o+(t/2**32|0)|0;var mn={fromBig:Wt,split:yt,toBig:rn,shrSH:nn,shrSL:on,rotrSH:sn,rotrSL:an,rotrBH:cn,rotrBL:un,rotr32H:fn,rotr32L:ln,rotlSH:bt,rotlSL:wt,rotlBH:xt,rotlBL:mt,add:hn,add3L:dn,add3H:pn,add4L:yn,add4H:bn,add5H:xn,add5L:wn},x=mn;var[gn,_n]=x.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),ye=new Uint32Array(80),be=new Uint32Array(80),gt=class extends Ye{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:r,Bh:n,Bl:i,Ch:o,Cl:s,Dh:a,Dl:c,Eh:f,El:u,Fh:d,Fl:p,Gh:m,Gl:K,Hh:E,Hl:N}=this;return[e,r,n,i,o,s,a,c,f,u,d,p,m,K,E,N]}set(e,r,n,i,o,s,a,c,f,u,d,p,m,K,E,N){this.Ah=e|0,this.Al=r|0,this.Bh=n|0,this.Bl=i|0,this.Ch=o|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=f|0,this.El=u|0,this.Fh=d|0,this.Fl=p|0,this.Gh=m|0,this.Gl=K|0,this.Hh=E|0,this.Hl=N|0}process(e,r){for(let h=0;h<16;h++,r+=4)ye[h]=e.getUint32(r),be[h]=e.getUint32(r+=4);for(let h=16;h<80;h++){let k=ye[h-15]|0,U=be[h-15]|0,O=x.rotrSH(k,U,1)^x.rotrSH(k,U,8)^x.shrSH(k,U,7),D=x.rotrSL(k,U,1)^x.rotrSL(k,U,8)^x.shrSL(k,U,7),H=ye[h-2]|0,I=be[h-2]|0,G=x.rotrSH(H,I,19)^x.rotrBH(H,I,61)^x.shrSH(H,I,6),z=x.rotrSL(H,I,19)^x.rotrBL(H,I,61)^x.shrSL(H,I,6),ce=x.add4L(D,z,be[h-7],be[h-16]),ee=x.add4H(ce,O,G,ye[h-7],ye[h-16]);ye[h]=ee|0,be[h]=ce|0}let{Ah:n,Al:i,Bh:o,Bl:s,Ch:a,Cl:c,Dh:f,Dl:u,Eh:d,El:p,Fh:m,Fl:K,Gh:E,Gl:N,Hh:R,Hl:g}=this;for(let h=0;h<80;h++){let k=x.rotrSH(d,p,14)^x.rotrSH(d,p,18)^x.rotrBH(d,p,41),U=x.rotrSL(d,p,14)^x.rotrSL(d,p,18)^x.rotrBL(d,p,41),O=d&m^~d&E,D=p&K^~p&N,H=x.add5L(g,U,D,_n[h],be[h]),I=x.add5H(H,R,k,O,gn[h],ye[h]),G=H|0,z=x.rotrSH(n,i,28)^x.rotrBH(n,i,34)^x.rotrBH(n,i,39),ce=x.rotrSL(n,i,28)^x.rotrBL(n,i,34)^x.rotrBL(n,i,39),ee=n&o^n&a^o&a,Pe=i&s^i&c^s&c;R=E|0,g=N|0,E=m|0,N=K|0,m=d|0,K=p|0,{h:d,l:p}=x.add(f|0,u|0,I|0,G|0),f=a|0,u=c|0,a=o|0,c=s|0,o=n|0,s=i|0;let me=x.add3L(G,ce,Pe);n=x.add3H(me,I,z,ee),i=me|0}({h:n,l:i}=x.add(this.Ah|0,this.Al|0,n|0,i|0)),{h:o,l:s}=x.add(this.Bh|0,this.Bl|0,o|0,s|0),{h:a,l:c}=x.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:f,l:u}=x.add(this.Dh|0,this.Dl|0,f|0,u|0),{h:d,l:p}=x.add(this.Eh|0,this.El|0,d|0,p|0),{h:m,l:K}=x.add(this.Fh|0,this.Fl|0,m|0,K|0),{h:E,l:N}=x.add(this.Gh|0,this.Gl|0,E|0,N|0),{h:R,l:g}=x.add(this.Hh|0,this.Hl|0,R|0,g|0),this.set(n,i,o,s,a,c,f,u,d,p,m,K,E,N,R,g)}roundClean(){ye.fill(0),be.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var Jt=ke(()=>new gt);var Ce=class extends Te{async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return dt(Jt,new Uint8Array(e),new Uint8Array(r));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}};var tr=[],rr=[],nr=[],vn=BigInt(0),je=BigInt(1),En=BigInt(2),kn=BigInt(7),An=BigInt(256),Sn=BigInt(113);for(let t=0,e=je,r=1,n=0;t<24;t++){[r,n]=[n,(2*r+3*n)%5],tr.push(2*(5*n+r)),rr.push((t+1)*(t+2)/2%64);let i=vn;for(let o=0;o<7;o++)e=(e<>kn)*Sn)%An,e&En&&(i^=je<<(je<r>32?xt(t,e,r):bt(t,e,r),er=(t,e,r)=>r>32?mt(t,e,r):wt(t,e,r);function Kn(t,e=24){let r=new Uint32Array(10);for(let n=24-e;n<24;n++){for(let s=0;s<10;s++)r[s]=t[s]^t[s+10]^t[s+20]^t[s+30]^t[s+40];for(let s=0;s<10;s+=2){let a=(s+8)%10,c=(s+2)%10,f=r[c],u=r[c+1],d=Qt(f,u,1)^r[a],p=er(f,u,1)^r[a+1];for(let m=0;m<50;m+=10)t[s+m]^=d,t[s+m+1]^=p}let i=t[2],o=t[3];for(let s=0;s<24;s++){let a=rr[s],c=Qt(i,o,a),f=er(i,o,a),u=tr[s];i=t[u],o=t[u+1],t[u]=c,t[u+1]=f}for(let s=0;s<50;s+=10){for(let a=0;a<10;a++)r[a]=t[s+a];for(let a=0;a<10;a++)t[s+a]^=~r[(a+2)%10]&r[(a+4)%10]}t[0]^=Pn[n],t[1]^=Bn[n]}r.fill(0)}var Je=class t extends de{constructor(e,r,n,i=!1,o=24){if(super(),this.blockLen=e,this.suffix=r,this.outputLen=n,this.enableXOF=i,this.rounds=o,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,Ne(n),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=Xt(this.state)}keccak(){ut||ft(this.state32),Kn(this.state32,this.rounds),ut||ft(this.state32),this.posOut=0,this.pos=0}update(e){ie(this);let{blockLen:r,state:n}=this;e=pe(e);let i=e.length;for(let o=0;o=n&&this.keccak();let s=Math.min(n-this.posOut,o-i);e.set(r.subarray(this.posOut,this.posOut+s),i),this.posOut+=s,i+=s}return e}xofInto(e){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return Ne(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(Ze(e,this),this.finished)throw new Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(e){let{blockLen:r,suffix:n,outputLen:i,rounds:o,enableXOF:s}=this;return e||(e=new t(r,n,i,s,o)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=o,e.suffix=n,e.outputLen=i,e.enableXOF=s,e.destroyed=this.destroyed,e}},we=(t,e,r)=>ke(()=>new Je(e,t,r)),oa=we(6,144,224/8),sa=we(6,136,256/8),aa=we(6,104,384/8),ca=we(6,72,512/8),ua=we(1,144,224/8),fa=we(1,136,256/8),la=we(1,104,384/8),ha=we(1,72,512/8),ir=(t,e,r)=>Yt((n={})=>new Je(e,t,n.dkLen===void 0?r:n.dkLen,!0)),da=ir(31,168,128/8),_t=ir(31,136,256/8);var sr=BigInt(0),ar=BigInt(1),In=BigInt(2);function Et(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function kt(t){if(!Et(t))throw new Error("Uint8Array expected")}function Qe(t,e){if(typeof e!="boolean")throw new Error(`${t} must be valid boolean, got "${e}".`)}var Ln=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function et(t){kt(t);let e="";for(let r=0;r=oe._0&&t<=oe._9)return t-oe._0;if(t>=oe._A&&t<=oe._F)return t-(oe._A-10);if(t>=oe._a&&t<=oe._f)return t-(oe._a-10)}function ur(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);let e=t.length,r=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(r);for(let i=0,o=0;itypeof t=="bigint"&&sr<=t;function Un(t,e,r){return vt(t)&&vt(e)&&vt(r)&&e<=t&&tsr;t>>=ar,e+=1);return e}var hr=t=>(In<typeof t=="bigint",function:t=>typeof t=="function",boolean:t=>typeof t=="boolean",string:t=>typeof t=="string",stringOrUint8Array:t=>typeof t=="string"||Et(t),isSafeInteger:t=>Number.isSafeInteger(t),array:t=>Array.isArray(t),field:(t,e)=>e.Fp.isValid(t),hash:t=>typeof t=="function"&&Number.isSafeInteger(t.outputLen)};function xe(t,e,r={}){let n=(i,o,s)=>{let a=On[o];if(typeof a!="function")throw new Error(`Invalid validator "${o}", expected function`);let c=t[i];if(!(s&&c===void 0)&&!a(c,t))throw new Error(`Invalid param ${String(i)}=${c} (${typeof c}), expected ${o}`)};for(let[i,o]of Object.entries(e))n(i,o,!1);for(let[i,o]of Object.entries(r))n(i,o,!0);return t}function Pt(t){let e=new WeakMap;return(r,...n)=>{let i=e.get(r);if(i!==void 0)return i;let o=t(r,...n);return e.set(r,o),o}}var C=BigInt(0),T=BigInt(1),Se=BigInt(2),zn=BigInt(3),Bt=BigInt(4),dr=BigInt(5),pr=BigInt(8),Tn=BigInt(9),Nn=BigInt(16);function L(t,e){let r=t%e;return r>=C?r:e+r}function Kt(t,e,r){if(r<=C||e 0");if(r===T)return C;let n=T;for(;e>C;)e&T&&(n=n*t%r),t=t*t%r,e>>=T;return n}function $(t,e,r){let n=t;for(;e-- >C;)n*=n,n%=r;return n}function yr(t,e){if(t===C||e<=C)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let r=L(t,e),n=e,i=C,o=T,s=T,a=C;for(;r!==C;){let f=n/r,u=n%r,d=i-s*f,p=o-a*f;n=r,r=u,i=s,o=a,s=d,a=p}if(n!==T)throw new Error("invert: does not exist");return L(i,e)}function Cn(t){let e=(t-T)/Se,r,n,i;for(r=t-T,n=0;r%Se===C;r/=Se,n++);for(i=Se;i(n[i]="function",n),e);return xe(t,r)}function Dn(t,e,r){if(r 0");if(r===C)return t.ONE;if(r===T)return e;let n=t.ONE,i=e;for(;r>C;)r&T&&(n=t.mul(n,i)),i=t.sqr(i),r>>=T;return n}function Mn(t,e){let r=new Array(e.length),n=e.reduce((o,s,a)=>t.is0(s)?o:(r[a]=o,t.mul(o,s)),t.ONE),i=t.inv(n);return e.reduceRight((o,s,a)=>t.is0(s)?o:(r[a]=t.mul(o,r[a]),t.mul(o,s)),i),r}function It(t,e){let r=e!==void 0?e:t.toString(2).length,n=Math.ceil(r/8);return{nBitLength:r,nByteLength:n}}function tt(t,e,r=!1,n={}){if(t<=C)throw new Error(`Expected Field ORDER > 0, got ${t}`);let{nBitLength:i,nByteLength:o}=It(t,e);if(o>2048)throw new Error("Field lengths over 2048 bytes are not supported");let s=jn(t),a=Object.freeze({ORDER:t,BITS:i,BYTES:o,MASK:hr(i),ZERO:C,ONE:T,create:c=>L(c,t),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return C<=c&&cc===C,isOdd:c=>(c&T)===T,neg:c=>L(-c,t),eql:(c,f)=>c===f,sqr:c=>L(c*c,t),add:(c,f)=>L(c+f,t),sub:(c,f)=>L(c-f,t),mul:(c,f)=>L(c*f,t),pow:(c,f)=>Dn(a,c,f),div:(c,f)=>L(c*yr(f,t),t),sqrN:c=>c*c,addN:(c,f)=>c+f,subN:(c,f)=>c-f,mulN:(c,f)=>c*f,inv:c=>yr(c,t),sqrt:n.sqrt||(c=>s(a,c)),invertBatch:c=>Mn(a,c),cmov:(c,f,u)=>u?f:c,toBytes:c=>r?Ae(c,o):At(c,o),fromBytes:c=>{if(c.length!==o)throw new Error(`Fp.fromBytes: expected ${o}, got ${c.length}`);return r?se(c):fr(c)}});return Object.freeze(a)}var qn=BigInt(0),Lt=BigInt(1),Ut=new WeakMap,wr=new WeakMap;function xr(t,e){let r=(o,s)=>{let a=s.negate();return o?a:s},n=o=>{if(!Number.isSafeInteger(o)||o<=0||o>e)throw new Error(`Wrong window size=${o}, should be [1..${e}]`)},i=o=>{n(o);let s=Math.ceil(e/o)+1,a=2**(o-1);return{windows:s,windowSize:a}};return{constTimeNegate:r,unsafeLadder(o,s){let a=t.ZERO,c=o;for(;s>qn;)s&Lt&&(a=a.add(c)),c=c.double(),s>>=Lt;return a},precomputeWindow(o,s){let{windows:a,windowSize:c}=i(s),f=[],u=o,d=u;for(let p=0;p>=K,R>f&&(R-=m,a+=Lt);let g=N,h=N+Math.abs(R)-1,k=E%2!==0,U=R<0;R===0?d=d.add(r(k,s[g])):u=u.add(r(U,s[h]))}return{p:u,f:d}},wNAFCached(o,s,a){let c=wr.get(o)||1,f=Ut.get(o);return f||(f=this.precomputeWindow(o,c),c!==1&&Ut.set(o,a(f))),this.wNAF(c,f,s)},setWindowSize(o,s){n(s),wr.set(o,s),Ut.delete(o)}}}function mr(t,e,r,n){if(!Array.isArray(r)||!Array.isArray(n)||n.length!==r.length)throw new Error("arrays of points and scalars must have equal length");n.forEach((u,d)=>{if(!e.isValid(u))throw new Error(`wrong scalar at index ${d}`)}),r.forEach((u,d)=>{if(!(u instanceof t))throw new Error(`wrong point at index ${d}`)});let i=lr(BigInt(r.length)),o=i>12?i-3:i>4?i-2:i?2:1,s=(1<=0;u-=o){a.fill(t.ZERO);for(let p=0;p>BigInt(u)&BigInt(s));a[K]=a[K].add(r[p])}let d=t.ZERO;for(let p=a.length-1,m=t.ZERO;p>0;p--)m=m.add(a[p]),d=d.add(m);if(f=f.add(d),u!==0)for(let p=0;p{try{return{isValid:!0,value:r.sqrt(b*r.inv(l))}}catch{return{isValid:!1,value:Y}}}),m=e.adjustScalarBytes||(b=>b),K=e.domain||((b,l,y)=>{if(Qe("phflag",y),l.length||y)throw new Error("Contexts/pre-hash are not supported");return b});function E(b,l){ae("coordinate "+b,l,Y,f)}function N(b){if(!(b instanceof h))throw new Error("ExtendedPoint expected")}let R=Pt((b,l)=>{let{ex:y,ey:w,ez:_}=b,v=b.is0();l==null&&(l=v?Gn:r.inv(_));let A=u(y*l),P=u(w*l),S=u(_*l);if(v)return{x:Y,y:q};if(S!==q)throw new Error("invZ was invalid");return{x:A,y:P}}),g=Pt(b=>{let{a:l,d:y}=e;if(b.is0())throw new Error("bad point: ZERO");let{ex:w,ey:_,ez:v,et:A}=b,P=u(w*w),S=u(_*_),B=u(v*v),j=u(B*B),M=u(P*l),W=u(B*u(M+S)),J=u(j+u(y*u(P*S)));if(W!==J)throw new Error("bad point: equation left != right (1)");let Z=u(w*_),ue=u(v*A);if(Z!==ue)throw new Error("bad point: equation left != right (2)");return!0});class h{constructor(l,y,w,_){this.ex=l,this.ey=y,this.ez=w,this.et=_,E("x",l),E("y",y),E("z",w),E("t",_),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(l){if(l instanceof h)throw new Error("extended point not allowed");let{x:y,y:w}=l||{};return E("x",y),E("y",w),new h(y,w,q,u(y*w))}static normalizeZ(l){let y=r.invertBatch(l.map(w=>w.ez));return l.map((w,_)=>w.toAffine(y[_])).map(h.fromAffine)}static msm(l,y){return mr(h,d,l,y)}_setWindowSize(l){O.setWindowSize(this,l)}assertValidity(){g(this)}equals(l){N(l);let{ex:y,ey:w,ez:_}=this,{ex:v,ey:A,ez:P}=l,S=u(y*P),B=u(v*_),j=u(w*P),M=u(A*_);return S===B&&j===M}is0(){return this.equals(h.ZERO)}negate(){return new h(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:l}=e,{ex:y,ey:w,ez:_}=this,v=u(y*y),A=u(w*w),P=u(rt*u(_*_)),S=u(l*v),B=y+w,j=u(u(B*B)-v-A),M=S+A,W=M-P,J=S-A,Z=u(j*W),ue=u(M*J),ge=u(j*J),Me=u(W*M);return new h(Z,ue,Me,ge)}add(l){N(l);let{a:y,d:w}=e,{ex:_,ey:v,ez:A,et:P}=this,{ex:S,ey:B,ez:j,et:M}=l;if(y===BigInt(-1)){let Nt=u((v-_)*(B+S)),Ct=u((v+_)*(B-S)),ot=u(Ct-Nt);if(ot===Y)return this.double();let jt=u(A*rt*M),Rt=u(P*rt*j),Dt=Rt+jt,Mt=Ct+Nt,qt=Rt-jt,zr=u(Dt*ot),Tr=u(Mt*qt),Nr=u(Dt*qt),Cr=u(ot*Mt);return new h(zr,Tr,Cr,Nr)}let W=u(_*S),J=u(v*B),Z=u(P*w*M),ue=u(A*j),ge=u((_+v)*(S+B)-W-J),Me=ue-Z,zt=ue+Z,Tt=u(J-y*W),Lr=u(ge*Me),Ur=u(zt*Tt),Or=u(ge*Tt),Hr=u(Me*zt);return new h(Lr,Ur,Hr,Or)}subtract(l){return this.add(l.negate())}wNAF(l){return O.wNAFCached(this,l,h.normalizeZ)}multiply(l){let y=l;ae("scalar",y,q,n);let{p:w,f:_}=this.wNAF(y);return h.normalizeZ([w,_])[0]}multiplyUnsafe(l){let y=l;return ae("scalar",y,Y,n),y===Y?U:this.equals(U)||y===q?this:this.equals(k)?this.wNAF(y).p:O.unsafeLadder(this,y)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return O.unsafeLadder(this,n).is0()}toAffine(l){return R(this,l)}clearCofactor(){let{h:l}=e;return l===q?this:this.multiplyUnsafe(l)}static fromHex(l,y=!1){let{d:w,a:_}=e,v=r.BYTES;l=F("pointHex",l,v),Qe("zip215",y);let A=l.slice(),P=l[v-1];A[v-1]=P&-129;let S=se(A),B=y?f:r.ORDER;ae("pointHex.y",S,Y,B);let j=u(S*S),M=u(j-q),W=u(w*j-_),{isValid:J,value:Z}=p(M,W);if(!J)throw new Error("Point.fromHex: invalid y coordinate");let ue=(Z&q)===q,ge=(P&128)!==0;if(!y&&Z===Y&&ge)throw new Error("Point.fromHex: x=0 and x_0=1");return ge!==ue&&(Z=u(-Z)),h.fromAffine({x:Z,y:S})}static fromPrivateKey(l){return I(l).point}toRawBytes(){let{x:l,y}=this.toAffine(),w=Ae(y,r.BYTES);return w[w.length-1]|=l&q?128:0,w}toHex(){return et(this.toRawBytes())}}h.BASE=new h(e.Gx,e.Gy,q,u(e.Gx*e.Gy)),h.ZERO=new h(Y,q,q,Y);let{BASE:k,ZERO:U}=h,O=xr(h,a*8);function D(b){return L(b,n)}function H(b){return D(se(b))}function I(b){let l=a;b=F("private key",b,l);let y=F("hashed private key",o(b),2*l),w=m(y.slice(0,l)),_=y.slice(l,2*l),v=H(w),A=k.multiply(v),P=A.toRawBytes();return{head:w,prefix:_,scalar:v,point:A,pointBytes:P}}function G(b){return I(b).pointBytes}function z(b=new Uint8Array,...l){let y=St(...l);return H(o(K(y,F("context",b),!!i)))}function ce(b,l,y={}){b=F("message",b),i&&(b=i(b));let{prefix:w,scalar:_,pointBytes:v}=I(l),A=z(y.context,w,b),P=k.multiply(A).toRawBytes(),S=z(y.context,P,v,b),B=D(A+S*_);ae("signature.s",B,Y,n);let j=St(P,Ae(B,r.BYTES));return F("result",j,a*2)}let ee=Fn;function Pe(b,l,y,w=ee){let{context:_,zip215:v}=w,A=r.BYTES;b=F("signature",b,2*A),l=F("message",l),v!==void 0&&Qe("zip215",v),i&&(l=i(l));let P=se(b.slice(A,2*A)),S,B,j;try{S=h.fromHex(y,v),B=h.fromHex(b.slice(0,A),v),j=k.multiplyUnsafe(P)}catch{return!1}if(!v&&S.isSmallOrder())return!1;let M=z(_,B.toRawBytes(),S.toRawBytes(),l);return B.add(S.multiplyUnsafe(M)).subtract(j).clearCofactor().equals(h.ZERO)}return k._setWindowSize(8),{CURVE:e,getPublicKey:G,sign:ce,verify:Pe,ExtendedPoint:h,utils:{getExtendedPublicKey:I,randomPrivateKey:()=>s(r.BYTES),precompute(b=8,l=h.BASE){return l._setWindowSize(b),l.multiply(BigInt(3)),l}}}}var Le=BigInt(0),Ot=BigInt(1);function Zn(t){return xe(t,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...t})}function vr(t){let e=Zn(t),{P:r}=e,n=g=>L(g,r),i=e.montgomeryBits,o=Math.ceil(i/8),s=e.nByteLength,a=e.adjustScalarBytes||(g=>g),c=e.powPminus2||(g=>Kt(g,r-BigInt(2),r));function f(g,h,k){let U=n(g*(h-k));return h=n(h-U),k=n(k+U),[h,k]}let u=(e.a-BigInt(2))/BigInt(4);function d(g,h){ae("u",g,Le,r),ae("scalar",h,Le,r);let k=h,U=g,O=Ot,D=Le,H=g,I=Ot,G=Le,z;for(let ee=BigInt(i-1);ee>=Le;ee--){let Pe=k>>ee&Ot;G^=Pe,z=f(G,O,H),O=z[0],H=z[1],z=f(G,D,I),D=z[0],I=z[1],G=Pe;let me=O+D,b=n(me*me),l=O-D,y=n(l*l),w=b-y,_=H+I,v=H-I,A=n(v*me),P=n(_*l),S=A+P,B=A-P;H=n(S*S),I=n(U*n(B*B)),O=n(b*y),D=n(w*(b+n(u*w)))}z=f(G,O,H),O=z[0],H=z[1],z=f(G,D,I),D=z[0],I=z[1];let ce=c(D);return n(O*ce)}function p(g){return Ae(n(g),o)}function m(g){let h=F("u coordinate",g,o);return s===32&&(h[31]&=127),se(h)}function K(g){let h=F("scalar",g),k=h.length;if(k!==o&&k!==s)throw new Error(`Expected ${o} or ${s} bytes, got ${k}`);return se(a(h))}function E(g,h){let k=m(h),U=K(g),O=d(k,U);if(O===Le)throw new Error("Invalid private or public key received");return p(O)}let N=p(e.Gu);function R(g){return E(g,N)}return{scalarMult:E,scalarMultBase:R,getSharedSecret:(g,h)=>E(g,h),getPublicKey:g=>R(g),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:N}}var Xn=ke(()=>_t.create({dkLen:114})),Vn=ke(()=>_t.create({dkLen:64})),Re=BigInt("726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018365439"),Yn=BigInt(1),Er=BigInt(2),kr=BigInt(3),Oa=BigInt(4),Wn=BigInt(11),Jn=BigInt(22),Ar=BigInt(44),Qn=BigInt(88),ei=BigInt(223);function Sr(t){let e=Re,r=t*t*t%e,n=r*r*t%e,i=$(n,kr,e)*n%e,o=$(i,kr,e)*n%e,s=$(o,Er,e)*r%e,a=$(s,Wn,e)*s%e,c=$(a,Jn,e)*a%e,f=$(c,Ar,e)*c%e,u=$(f,Qn,e)*f%e,d=$(u,Ar,e)*c%e,p=$(d,Er,e)*r%e,m=$(p,Yn,e)*t%e;return $(m,ei,e)*p%e}function Pr(t){return t[0]&=252,t[55]|=128,t[56]=0,t}function ti(t,e){let r=Re,n=L(t*t*e,r),i=L(n*t,r),o=L(i*n*e,r),s=Sr(o),a=L(i*s,r),c=L(a*a,r);return{isValid:L(c*e,r)===t,value:a}}var Br=tt(Re,456,!0),ri={a:BigInt(1),d:BigInt("726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018326358"),Fp:Br,n:BigInt("181709681073901722637330951972001133588410340171829515070372549795146003961539585716195755291692375963310293709091662304773755859649779"),nBitLength:456,h:BigInt(4),Gx:BigInt("224580040295924300187604334099896036246789641632564134246125461686950415467406032909029192869357953282578032075146446173674602635247710"),Gy:BigInt("298819210078481492676017930443930673437544040154080242095928241372331506189835876003536878655418784733982303233503462500531545062832660"),hash:Xn,randomBytes:ht,adjustScalarBytes:Pr,domain:(t,e,r)=>{if(e.length>255)throw new Error(`Context is too big: ${e.length}`);return Vt(lt("SigEd448"),new Uint8Array([r?1:0,e.length]),e,t)},uvRatio:ti};var Ha=_r({...ri,prehash:Vn}),nt=vr({a:BigInt(156326),montgomeryBits:448,nByteLength:56,P:Re,Gu:BigInt(5),powPminus2:t=>{let e=Re,r=Sr(t),n=$(r,BigInt(2),e);return L(n*t,e)},adjustScalarBytes:Pr,randomBytes:ht});var za=(Br.ORDER-BigInt(3))/BigInt(4),Ta=BigInt(156326);var Na=BigInt("39082"),Ca=BigInt("78163"),ja=BigInt("98944233647732219769177004876929019128417576295529901074099889598043702116001257856802131563896515373927712232092845883226922417596214"),Ra=BigInt("315019913931389607337177038330951043522456072897266928557328499619017160722351061360252776265186336876723201881398623946864393857820716");var Da=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");var Ue="X448",Kr=new Uint8Array,it=["deriveBits"],ni=new Uint8Array([100,107,112,95,112,114,107]),ii=new Uint8Array([115,107]);function Ir(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),n=new Uint8Array(r.length);for(let i=0;i{r(e.key.buffer)})}_serializePrivateKey(e){return new Promise(r=>{r(e.key.buffer)})}_importRawKey(e,r){return new Promise((n,i)=>{r&&e.byteLength!==this._nPk&&i(new Error("Invalid length of the key")),!r&&e.byteLength!==this._nSk&&i(new Error("Invalid length of the key")),n(new V(Ue,new Uint8Array(e),r?"public":"private",r?[]:it))})}_importJWK(e,r){return new Promise((n,i)=>{e.kty!=="OKP"&&i(new Error(`Invalid kty: ${e.kty}`)),e.crv!=="X448"&&i(new Error(`Invalid crv: ${e.crv}`)),r?(typeof e.d<"u"&&i(new Error("Invalid key: `d` should not be set")),typeof e.x!="string"&&i(new Error("Invalid key: `x` not found")),n(new V(Ue,Ir(e.x),"public"))):(typeof e.d!="string"&&i(new Error("Invalid key: `d` not found")),n(new V(Ue,Ir(e.d),"private",it)))})}_derivePublicKey(e){return new Promise((r,n)=>{try{let i=nt.getPublicKey(e.key);r(new V(Ue,i,"public"))}catch(i){n(i)}})}_dh(e,r){return new Promise((n,i)=>{try{n(nt.getSharedSecret(e.key,r.key).buffer)}catch(o){i(o)}})}};var Ht=class extends Ie{constructor(){let e=new Ce;super(le.DhkemX448HkdfSha512,new De(e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:le.DhkemX448HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:56}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:56}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:56})}};export{Ht as DhkemX448HkdfSha512,Ce as HkdfSha512,De as X448}; +var Fe=class extends Error{constructor(e){let r;e instanceof Error?r=e.message:typeof e=="string"?r=e:r="",super(r),this.name=this.constructor.name}},ee=class extends Fe{},te=class extends ee{};var ie=class extends ee{},re=class extends ee{},He=class extends ee{},ze=class extends ee{};var Ie=class extends ee{},V=class extends ee{};var Rr={},Ft=jr(globalThis,Rr);function jr(t,e){return new Proxy(t,{get(r,n,i){return n in e?e[n]:t[n]},set(r,n,i){return n in e&&delete e[n],t[n]=i,!0},deleteProperty(r,n){let i=!1;return n in e&&(delete e[n],i=!0),n in t&&(delete t[n],i=!0),i},ownKeys(r){let n=Reflect.ownKeys(t),i=Reflect.ownKeys(e),o=new Set(i);return[...n.filter(s=>!o.has(s)),...i]},defineProperty(r,n,i){return n in e&&delete e[n],Reflect.defineProperty(t,n,i),!0},getOwnPropertyDescriptor(r,n){return n in e?Reflect.getOwnPropertyDescriptor(e,n):Reflect.getOwnPropertyDescriptor(t,n)},has(r,n){return n in e||n in t}})}async function qr(){if(Ft!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:t}=await import("crypto");return t.subtle}catch(t){throw new V(t)}}var le=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await qr())}};var he={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},Te={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3};var X=new Uint8Array(0);var $e=new Uint8Array([75,69,77,0,0]);var de=t=>typeof t=="object"&&t!==null&&typeof t.privateKey=="object"&&typeof t.publicKey=="object";function ve(t,e){if(e<=0)throw new Error("i2Osp: too small size");if(t>=256**e)throw new Error("i2Osp: too large integer");let r=new Uint8Array(e);for(let n=0;n>8;return r}function ke(t,e){let r=new Uint8Array(t.length+e.length);return r.set(t,0),r.set(e,t.length),r}var Gr=new Uint8Array([101,97,101,95,112,114,107]),Fr=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function $r(t,e,r){let n=new Uint8Array(t.length+e.length+r.length);return n.set(t,0),n.set(e,t.length),n.set(r,t.length+e.length),n}var Le=class{constructor(e,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=r,this._kdf=n;let i=new Uint8Array($e);i.set(ve(this.id,2),3),this._kdf.init(i)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,r,n=!0){return await this._prim.importKey(e,r,n)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new te("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let r;e.ekm===void 0?r=await this.generateKeyPair():de(e.ekm)?r=e.ekm:r=await this.deriveKeyPair(e.ekm);let n=await this._prim.serializePublicKey(r.publicKey),i=await this._prim.serializePublicKey(e.recipientPublicKey);try{let o;if(e.senderKey===void 0)o=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey));else{let c=de(e.senderKey)?e.senderKey.privateKey:e.senderKey,f=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey)),u=new Uint8Array(await this._prim.dh(c,e.recipientPublicKey));o=ke(f,u)}let s;if(e.senderKey===void 0)s=ke(new Uint8Array(n),new Uint8Array(i));else{let c=de(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),f=await this._prim.serializePublicKey(c);s=$r(new Uint8Array(n),new Uint8Array(i),new Uint8Array(f))}let a=await this._generateSharedSecret(o,s);return{enc:n,sharedSecret:a}}catch(o){throw new He(o)}}async decap(e){let r=await this._prim.deserializePublicKey(e.enc),n=de(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,i=de(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),o=await this._prim.serializePublicKey(i);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(n,r));else{let c=new Uint8Array(await this._prim.dh(n,r)),f=new Uint8Array(await this._prim.dh(n,e.senderPublicKey));s=ke(c,f)}let a;if(e.senderPublicKey===void 0)a=ke(new Uint8Array(e.enc),new Uint8Array(o));else{let c=await this._prim.serializePublicKey(e.senderPublicKey);a=new Uint8Array(e.enc.byteLength+o.byteLength+c.byteLength),a.set(new Uint8Array(e.enc),0),a.set(new Uint8Array(o),e.enc.byteLength),a.set(new Uint8Array(c),e.enc.byteLength+o.byteLength)}return await this._generateSharedSecret(s,a)}catch(s){throw new ze(s)}}async _generateSharedSecret(e,r){let n=this._kdf.buildLabeledIkm(Gr,e),i=this._kdf.buildLabeledInfo(Fr,r,this.secretSize);return await this._kdf.extractAndExpand(X,n,i,this.secretSize)}};var ct=new Uint8Array([100,107,112,95,112,114,107]),$t=new Uint8Array([115,107]);var zi=new Uint8Array([99,97,110,100,105,100,97,116,101]),Ti=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),Ni=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Ci=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Di=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Ri=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),ji=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]);function Ne(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`positive integer expected, not ${t}`)}function Jr(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function pe(t,...e){if(!Jr(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${t.length}`)}function Zt(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");Ne(t.outputLen),Ne(t.blockLen)}function oe(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function Ve(t,e){pe(t);let r=e.outputLen;if(t.lengthnew Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),Ye=t=>new DataView(t.buffer,t.byteOffset,t.byteLength);var ut=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,Qr=t=>t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255;function ft(t){for(let e=0;et().update(be(n)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e}function Yt(t){let e=(n,i)=>t(i).update(be(n)).digest(),r=t({});return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=n=>t(n),e}function ht(t=32){if(Ae&&typeof Ae.getRandomValues=="function")return Ae.getRandomValues(new Uint8Array(t));if(Ae&&typeof Ae.randomBytes=="function")return Ae.randomBytes(t);throw new Error("crypto.getRandomValues must be defined")}var We=class extends ye{constructor(e,r){super(),this.finished=!1,this.destroyed=!1,Zt(e);let n=be(r);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(n.length>i?e.create().update(n).digest():n);for(let s=0;snew We(t,e).update(r).digest();dt.create=(t,e)=>new We(t,e);function en(t,e,r,n){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,r,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(r>>i&o),a=Number(r&o),c=n?4:0,f=n?0:4;t.setUint32(e+c,s,n),t.setUint32(e+f,a,n)}var Je=class extends ye{constructor(e,r,n,i){super(),this.blockLen=e,this.outputLen=r,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Ye(this.buffer)}update(e){oe(this);let{view:r,buffer:n,blockLen:i}=this;e=be(e);let o=e.length;for(let s=0;si-s&&(this.process(n,0),s=0);for(let d=s;du.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d>pt&Qe)}:{h:Number(t>>pt&Qe)|0,l:Number(t&Qe)|0}}function yt(t,e=!1){let r=new Uint32Array(t.length),n=new Uint32Array(t.length);for(let i=0;iBigInt(t>>>0)<>>0),rn=(t,e,r)=>t>>>r,nn=(t,e,r)=>t<<32-r|e>>>r,on=(t,e,r)=>t>>>r|e<<32-r,sn=(t,e,r)=>t<<32-r|e>>>r,an=(t,e,r)=>t<<64-r|e>>>r-32,cn=(t,e,r)=>t>>>r-32|e<<64-r,un=(t,e)=>e,fn=(t,e)=>t,bt=(t,e,r)=>t<>>32-r,wt=(t,e,r)=>e<>>32-r,xt=(t,e,r)=>e<>>64-r,gt=(t,e,r)=>t<>>64-r;function ln(t,e,r,n){let i=(e>>>0)+(n>>>0);return{h:t+r+(i/2**32|0)|0,l:i|0}}var hn=(t,e,r)=>(t>>>0)+(e>>>0)+(r>>>0),dn=(t,e,r,n)=>e+r+n+(t/2**32|0)|0,pn=(t,e,r,n)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0),yn=(t,e,r,n,i)=>e+r+n+i+(t/2**32|0)|0,bn=(t,e,r,n,i)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0)+(i>>>0),wn=(t,e,r,n,i,o)=>e+r+n+i+o+(t/2**32|0)|0;var xn={fromBig:Wt,split:yt,toBig:tn,shrSH:rn,shrSL:nn,rotrSH:on,rotrSL:sn,rotrBH:an,rotrBL:cn,rotr32H:un,rotr32L:fn,rotlSH:bt,rotlSL:wt,rotlBH:xt,rotlBL:gt,add:ln,add3L:hn,add3H:dn,add4L:pn,add4H:yn,add5H:wn,add5L:bn},x=xn;var[gn,mn]=x.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),we=new Uint32Array(80),xe=new Uint32Array(80),mt=class extends Je{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:r,Bh:n,Bl:i,Ch:o,Cl:s,Dh:a,Dl:c,Eh:f,El:u,Fh:d,Fl:p,Gh:g,Gl:K,Hh:v,Hl:N}=this;return[e,r,n,i,o,s,a,c,f,u,d,p,g,K,v,N]}set(e,r,n,i,o,s,a,c,f,u,d,p,g,K,v,N){this.Ah=e|0,this.Al=r|0,this.Bh=n|0,this.Bl=i|0,this.Ch=o|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=f|0,this.El=u|0,this.Fh=d|0,this.Fl=p|0,this.Gh=g|0,this.Gl=K|0,this.Hh=v|0,this.Hl=N|0}process(e,r){for(let h=0;h<16;h++,r+=4)we[h]=e.getUint32(r),xe[h]=e.getUint32(r+=4);for(let h=16;h<80;h++){let k=we[h-15]|0,U=xe[h-15]|0,O=x.rotrSH(k,U,1)^x.rotrSH(k,U,8)^x.shrSH(k,U,7),j=x.rotrSL(k,U,1)^x.rotrSL(k,U,8)^x.shrSL(k,U,7),H=we[h-2]|0,I=xe[h-2]|0,G=x.rotrSH(H,I,19)^x.rotrBH(H,I,61)^x.shrSH(H,I,6),z=x.rotrSL(H,I,19)^x.rotrBL(H,I,61)^x.shrSL(H,I,6),ue=x.add4L(j,z,xe[h-7],xe[h-16]),ne=x.add4H(ue,O,G,we[h-7],we[h-16]);we[h]=ne|0,xe[h]=ue|0}let{Ah:n,Al:i,Bh:o,Bl:s,Ch:a,Cl:c,Dh:f,Dl:u,Eh:d,El:p,Fh:g,Fl:K,Gh:v,Gl:N,Hh:R,Hl:m}=this;for(let h=0;h<80;h++){let k=x.rotrSH(d,p,14)^x.rotrSH(d,p,18)^x.rotrBH(d,p,41),U=x.rotrSL(d,p,14)^x.rotrSL(d,p,18)^x.rotrBL(d,p,41),O=d&g^~d&v,j=p&K^~p&N,H=x.add5L(m,U,j,mn[h],xe[h]),I=x.add5H(H,R,k,O,gn[h],we[h]),G=H|0,z=x.rotrSH(n,i,28)^x.rotrBH(n,i,34)^x.rotrBH(n,i,39),ue=x.rotrSL(n,i,28)^x.rotrBL(n,i,34)^x.rotrBL(n,i,39),ne=n&o^n&a^o&a,Ke=i&s^i&c^s&c;R=v|0,m=N|0,v=g|0,N=K|0,g=d|0,K=p|0,{h:d,l:p}=x.add(f|0,u|0,I|0,G|0),f=a|0,u=c|0,a=o|0,c=s|0,o=n|0,s=i|0;let _e=x.add3L(G,ue,Ke);n=x.add3H(_e,I,z,ne),i=_e|0}({h:n,l:i}=x.add(this.Ah|0,this.Al|0,n|0,i|0)),{h:o,l:s}=x.add(this.Bh|0,this.Bl|0,o|0,s|0),{h:a,l:c}=x.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:f,l:u}=x.add(this.Dh|0,this.Dl|0,f|0,u|0),{h:d,l:p}=x.add(this.Eh|0,this.El|0,d|0,p|0),{h:g,l:K}=x.add(this.Fh|0,this.Fl|0,g|0,K|0),{h:v,l:N}=x.add(this.Gh|0,this.Gl|0,v|0,N|0),{h:R,l:m}=x.add(this.Hh|0,this.Hl|0,R|0,m|0),this.set(n,i,o,s,a,c,f,u,d,p,g,K,v,N,R,m)}roundClean(){we.fill(0),xe.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var Jt=Se(()=>new mt);var Io=new Uint8Array([115,101,99]);var Yo=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),Wo=new Uint8Array([101,120,112]),Jo=new Uint8Array([105,110,102,111,95,104,97,115,104]),Qo=new Uint8Array([107,101,121]),es=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),ts=new Uint8Array([115,101,99,114,101,116]),rs=new Uint8Array([72,80,75,69,0,0,0,0,0,0]);var Qt=new Uint8Array([72,80,75,69,45,118,49]),_t=class extends le{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:Te.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:X}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,r){this._checkInit();let n=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+r.byteLength);return n.set(Qt,0),n.set(this._suiteId,7),n.set(e,7+this._suiteId.byteLength),n.set(r,7+this._suiteId.byteLength+e.byteLength),n}buildLabeledInfo(e,r,n){this._checkInit();let i=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+r.byteLength);return i.set(new Uint8Array([0,n]),0),i.set(Qt,2),i.set(this._suiteId,9),i.set(e,9+this._suiteId.byteLength),i.set(r,9+this._suiteId.byteLength+e.byteLength),i}async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new te("The salt length must be the same as the hashSize");let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}async expand(e,r,n){await this._setup();let i=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),o=new ArrayBuffer(n),s=new Uint8Array(o),a=X,c=new Uint8Array(r),f=new Uint8Array(1);if(n>255*this.hashSize)throw new Error("Entropy limit reached");let u=new Uint8Array(this.hashSize+c.length+1);for(let d=1,p=0;p=a.length?(s.set(a,p),p+=a.length):(s.set(a.slice(0,s.length-p),p),p+=s.length-p);return o}async extractAndExpand(e,r,n,i){await this._setup();let o=await this._api.importKey("raw",r,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:n},o,i*8)}async labeledExtract(e,r,n){return await this.extract(e,this.buildLabeledIkm(r,n))}async labeledExpand(e,r,n,i){return await this.expand(e,this.buildLabeledInfo(r,n,i),i)}_checkInit(){if(this._suiteId===X)throw new Error("Not initialized. Call init()")}};var Ce=class extends _t{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:Te.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var De=class extends Ce{};var Y=class{constructor(e,r,n,i=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=r,this.type=n,this.algorithm={name:e},this.usages=i,n==="public"&&(this.usages=[])}};var Re=class extends De{async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return dt(Jt,new Uint8Array(e),new Uint8Array(r));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}};var rr=[],nr=[],ir=[],Bn=BigInt(0),je=BigInt(1),Kn=BigInt(2),In=BigInt(7),Ln=BigInt(256),Un=BigInt(113);for(let t=0,e=je,r=1,n=0;t<24;t++){[r,n]=[n,(2*r+3*n)%5],rr.push(2*(5*n+r)),nr.push((t+1)*(t+2)/2%64);let i=Bn;for(let o=0;o<7;o++)e=(e<>In)*Un)%Ln,e&Kn&&(i^=je<<(je<r>32?xt(t,e,r):bt(t,e,r),tr=(t,e,r)=>r>32?gt(t,e,r):wt(t,e,r);function zn(t,e=24){let r=new Uint32Array(10);for(let n=24-e;n<24;n++){for(let s=0;s<10;s++)r[s]=t[s]^t[s+10]^t[s+20]^t[s+30]^t[s+40];for(let s=0;s<10;s+=2){let a=(s+8)%10,c=(s+2)%10,f=r[c],u=r[c+1],d=er(f,u,1)^r[a],p=tr(f,u,1)^r[a+1];for(let g=0;g<50;g+=10)t[s+g]^=d,t[s+g+1]^=p}let i=t[2],o=t[3];for(let s=0;s<24;s++){let a=nr[s],c=er(i,o,a),f=tr(i,o,a),u=rr[s];i=t[u],o=t[u+1],t[u]=c,t[u+1]=f}for(let s=0;s<50;s+=10){for(let a=0;a<10;a++)r[a]=t[s+a];for(let a=0;a<10;a++)t[s+a]^=~r[(a+2)%10]&r[(a+4)%10]}t[0]^=On[n],t[1]^=Hn[n]}r.fill(0)}var et=class t extends ye{constructor(e,r,n,i=!1,o=24){if(super(),this.blockLen=e,this.suffix=r,this.outputLen=n,this.enableXOF=i,this.rounds=o,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,Ne(n),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=Xt(this.state)}keccak(){ut||ft(this.state32),zn(this.state32,this.rounds),ut||ft(this.state32),this.posOut=0,this.pos=0}update(e){oe(this);let{blockLen:r,state:n}=this;e=be(e);let i=e.length;for(let o=0;o=n&&this.keccak();let s=Math.min(n-this.posOut,o-i);e.set(r.subarray(this.posOut,this.posOut+s),i),this.posOut+=s,i+=s}return e}xofInto(e){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return Ne(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(Ve(e,this),this.finished)throw new Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(e){let{blockLen:r,suffix:n,outputLen:i,rounds:o,enableXOF:s}=this;return e||(e=new t(r,n,i,s,o)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=o,e.suffix=n,e.outputLen=i,e.enableXOF=s,e.destroyed=this.destroyed,e}},ge=(t,e,r)=>Se(()=>new et(e,t,r)),Zs=ge(6,144,224/8),Xs=ge(6,136,256/8),Vs=ge(6,104,384/8),Ys=ge(6,72,512/8),Ws=ge(1,144,224/8),Js=ge(1,136,256/8),Qs=ge(1,104,384/8),ea=ge(1,72,512/8),or=(t,e,r)=>Yt((n={})=>new et(e,t,n.dkLen===void 0?r:n.dkLen,!0)),ta=or(31,168,128/8),Et=or(31,136,256/8);var ar=BigInt(0),cr=BigInt(1),Tn=BigInt(2);function kt(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function At(t){if(!kt(t))throw new Error("Uint8Array expected")}function tt(t,e){if(typeof e!="boolean")throw new Error(`${t} must be valid boolean, got "${e}".`)}var Nn=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function rt(t){At(t);let e="";for(let r=0;r=se._0&&t<=se._9)return t-se._0;if(t>=se._A&&t<=se._F)return t-(se._A-10);if(t>=se._a&&t<=se._f)return t-(se._a-10)}function fr(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);let e=t.length,r=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(r);for(let i=0,o=0;itypeof t=="bigint"&&ar<=t;function Cn(t,e,r){return vt(t)&&vt(e)&&vt(r)&&e<=t&&tar;t>>=cr,e+=1);return e}var dr=t=>(Tn<typeof t=="bigint",function:t=>typeof t=="function",boolean:t=>typeof t=="boolean",string:t=>typeof t=="string",stringOrUint8Array:t=>typeof t=="string"||kt(t),isSafeInteger:t=>Number.isSafeInteger(t),array:t=>Array.isArray(t),field:(t,e)=>e.Fp.isValid(t),hash:t=>typeof t=="function"&&Number.isSafeInteger(t.outputLen)};function me(t,e,r={}){let n=(i,o,s)=>{let a=Dn[o];if(typeof a!="function")throw new Error(`Invalid validator "${o}", expected function`);let c=t[i];if(!(s&&c===void 0)&&!a(c,t))throw new Error(`Invalid param ${String(i)}=${c} (${typeof c}), expected ${o}`)};for(let[i,o]of Object.entries(e))n(i,o,!1);for(let[i,o]of Object.entries(r))n(i,o,!0);return t}function Bt(t){let e=new WeakMap;return(r,...n)=>{let i=e.get(r);if(i!==void 0)return i;let o=t(r,...n);return e.set(r,o),o}}var C=BigInt(0),T=BigInt(1),Be=BigInt(2),jn=BigInt(3),Kt=BigInt(4),pr=BigInt(5),yr=BigInt(8),Mn=BigInt(9),qn=BigInt(16);function L(t,e){let r=t%e;return r>=C?r:e+r}function It(t,e,r){if(r<=C||e 0");if(r===T)return C;let n=T;for(;e>C;)e&T&&(n=n*t%r),t=t*t%r,e>>=T;return n}function $(t,e,r){let n=t;for(;e-- >C;)n*=n,n%=r;return n}function br(t,e){if(t===C||e<=C)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let r=L(t,e),n=e,i=C,o=T,s=T,a=C;for(;r!==C;){let f=n/r,u=n%r,d=i-s*f,p=o-a*f;n=r,r=u,i=s,o=a,s=d,a=p}if(n!==T)throw new Error("invert: does not exist");return L(i,e)}function Gn(t){let e=(t-T)/Be,r,n,i;for(r=t-T,n=0;r%Be===C;r/=Be,n++);for(i=Be;i(n[i]="function",n),e);return me(t,r)}function Zn(t,e,r){if(r 0");if(r===C)return t.ONE;if(r===T)return e;let n=t.ONE,i=e;for(;r>C;)r&T&&(n=t.mul(n,i)),i=t.sqr(i),r>>=T;return n}function Xn(t,e){let r=new Array(e.length),n=e.reduce((o,s,a)=>t.is0(s)?o:(r[a]=o,t.mul(o,s)),t.ONE),i=t.inv(n);return e.reduceRight((o,s,a)=>t.is0(s)?o:(r[a]=t.mul(o,r[a]),t.mul(o,s)),i),r}function Lt(t,e){let r=e!==void 0?e:t.toString(2).length,n=Math.ceil(r/8);return{nBitLength:r,nByteLength:n}}function nt(t,e,r=!1,n={}){if(t<=C)throw new Error(`Expected Field ORDER > 0, got ${t}`);let{nBitLength:i,nByteLength:o}=Lt(t,e);if(o>2048)throw new Error("Field lengths over 2048 bytes are not supported");let s=Fn(t),a=Object.freeze({ORDER:t,BITS:i,BYTES:o,MASK:dr(i),ZERO:C,ONE:T,create:c=>L(c,t),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return C<=c&&cc===C,isOdd:c=>(c&T)===T,neg:c=>L(-c,t),eql:(c,f)=>c===f,sqr:c=>L(c*c,t),add:(c,f)=>L(c+f,t),sub:(c,f)=>L(c-f,t),mul:(c,f)=>L(c*f,t),pow:(c,f)=>Zn(a,c,f),div:(c,f)=>L(c*br(f,t),t),sqrN:c=>c*c,addN:(c,f)=>c+f,subN:(c,f)=>c-f,mulN:(c,f)=>c*f,inv:c=>br(c,t),sqrt:n.sqrt||(c=>s(a,c)),invertBatch:c=>Xn(a,c),cmov:(c,f,u)=>u?f:c,toBytes:c=>r?Pe(c,o):St(c,o),fromBytes:c=>{if(c.length!==o)throw new Error(`Fp.fromBytes: expected ${o}, got ${c.length}`);return r?ae(c):lr(c)}});return Object.freeze(a)}var Vn=BigInt(0),Ut=BigInt(1),Ot=new WeakMap,xr=new WeakMap;function gr(t,e){let r=(o,s)=>{let a=s.negate();return o?a:s},n=o=>{if(!Number.isSafeInteger(o)||o<=0||o>e)throw new Error(`Wrong window size=${o}, should be [1..${e}]`)},i=o=>{n(o);let s=Math.ceil(e/o)+1,a=2**(o-1);return{windows:s,windowSize:a}};return{constTimeNegate:r,unsafeLadder(o,s){let a=t.ZERO,c=o;for(;s>Vn;)s&Ut&&(a=a.add(c)),c=c.double(),s>>=Ut;return a},precomputeWindow(o,s){let{windows:a,windowSize:c}=i(s),f=[],u=o,d=u;for(let p=0;p>=K,R>f&&(R-=g,a+=Ut);let m=N,h=N+Math.abs(R)-1,k=v%2!==0,U=R<0;R===0?d=d.add(r(k,s[m])):u=u.add(r(U,s[h]))}return{p:u,f:d}},wNAFCached(o,s,a){let c=xr.get(o)||1,f=Ot.get(o);return f||(f=this.precomputeWindow(o,c),c!==1&&Ot.set(o,a(f))),this.wNAF(c,f,s)},setWindowSize(o,s){n(s),xr.set(o,s),Ot.delete(o)}}}function mr(t,e,r,n){if(!Array.isArray(r)||!Array.isArray(n)||n.length!==r.length)throw new Error("arrays of points and scalars must have equal length");n.forEach((u,d)=>{if(!e.isValid(u))throw new Error(`wrong scalar at index ${d}`)}),r.forEach((u,d)=>{if(!(u instanceof t))throw new Error(`wrong point at index ${d}`)});let i=hr(BigInt(r.length)),o=i>12?i-3:i>4?i-2:i?2:1,s=(1<=0;u-=o){a.fill(t.ZERO);for(let p=0;p>BigInt(u)&BigInt(s));a[K]=a[K].add(r[p])}let d=t.ZERO;for(let p=a.length-1,g=t.ZERO;p>0;p--)g=g.add(a[p]),d=d.add(g);if(f=f.add(d),u!==0)for(let p=0;p{try{return{isValid:!0,value:r.sqrt(b*r.inv(l))}}catch{return{isValid:!1,value:W}}}),g=e.adjustScalarBytes||(b=>b),K=e.domain||((b,l,y)=>{if(tt("phflag",y),l.length||y)throw new Error("Contexts/pre-hash are not supported");return b});function v(b,l){ce("coordinate "+b,l,W,f)}function N(b){if(!(b instanceof h))throw new Error("ExtendedPoint expected")}let R=Bt((b,l)=>{let{ex:y,ey:w,ez:_}=b,E=b.is0();l==null&&(l=E?Yn:r.inv(_));let A=u(y*l),P=u(w*l),S=u(_*l);if(E)return{x:W,y:q};if(S!==q)throw new Error("invZ was invalid");return{x:A,y:P}}),m=Bt(b=>{let{a:l,d:y}=e;if(b.is0())throw new Error("bad point: ZERO");let{ex:w,ey:_,ez:E,et:A}=b,P=u(w*w),S=u(_*_),B=u(E*E),D=u(B*B),M=u(P*l),J=u(B*u(M+S)),Q=u(D+u(y*u(P*S)));if(J!==Q)throw new Error("bad point: equation left != right (1)");let Z=u(w*_),fe=u(E*A);if(Z!==fe)throw new Error("bad point: equation left != right (2)");return!0});class h{constructor(l,y,w,_){this.ex=l,this.ey=y,this.ez=w,this.et=_,v("x",l),v("y",y),v("z",w),v("t",_),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(l){if(l instanceof h)throw new Error("extended point not allowed");let{x:y,y:w}=l||{};return v("x",y),v("y",w),new h(y,w,q,u(y*w))}static normalizeZ(l){let y=r.invertBatch(l.map(w=>w.ez));return l.map((w,_)=>w.toAffine(y[_])).map(h.fromAffine)}static msm(l,y){return mr(h,d,l,y)}_setWindowSize(l){O.setWindowSize(this,l)}assertValidity(){m(this)}equals(l){N(l);let{ex:y,ey:w,ez:_}=this,{ex:E,ey:A,ez:P}=l,S=u(y*P),B=u(E*_),D=u(w*P),M=u(A*_);return S===B&&D===M}is0(){return this.equals(h.ZERO)}negate(){return new h(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:l}=e,{ex:y,ey:w,ez:_}=this,E=u(y*y),A=u(w*w),P=u(it*u(_*_)),S=u(l*E),B=y+w,D=u(u(B*B)-E-A),M=S+A,J=M-P,Q=S-A,Z=u(D*J),fe=u(M*Q),Ee=u(D*Q),Ge=u(J*M);return new h(Z,fe,Ge,Ee)}add(l){N(l);let{a:y,d:w}=e,{ex:_,ey:E,ez:A,et:P}=this,{ex:S,ey:B,ez:D,et:M}=l;if(y===BigInt(-1)){let Ct=u((E-_)*(B+S)),Dt=u((E+_)*(B-S)),at=u(Dt-Ct);if(at===W)return this.double();let Rt=u(A*it*M),jt=u(P*it*D),Mt=jt+Rt,qt=Dt+Ct,Gt=jt-Rt,Tr=u(Mt*at),Nr=u(qt*Gt),Cr=u(Mt*Gt),Dr=u(at*qt);return new h(Tr,Nr,Dr,Cr)}let J=u(_*S),Q=u(E*B),Z=u(P*w*M),fe=u(A*D),Ee=u((_+E)*(S+B)-J-Q),Ge=fe-Z,Tt=fe+Z,Nt=u(Q-y*J),Ur=u(Ee*Ge),Or=u(Tt*Nt),Hr=u(Ee*Nt),zr=u(Ge*Tt);return new h(Ur,Or,zr,Hr)}subtract(l){return this.add(l.negate())}wNAF(l){return O.wNAFCached(this,l,h.normalizeZ)}multiply(l){let y=l;ce("scalar",y,q,n);let{p:w,f:_}=this.wNAF(y);return h.normalizeZ([w,_])[0]}multiplyUnsafe(l){let y=l;return ce("scalar",y,W,n),y===W?U:this.equals(U)||y===q?this:this.equals(k)?this.wNAF(y).p:O.unsafeLadder(this,y)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return O.unsafeLadder(this,n).is0()}toAffine(l){return R(this,l)}clearCofactor(){let{h:l}=e;return l===q?this:this.multiplyUnsafe(l)}static fromHex(l,y=!1){let{d:w,a:_}=e,E=r.BYTES;l=F("pointHex",l,E),tt("zip215",y);let A=l.slice(),P=l[E-1];A[E-1]=P&-129;let S=ae(A),B=y?f:r.ORDER;ce("pointHex.y",S,W,B);let D=u(S*S),M=u(D-q),J=u(w*D-_),{isValid:Q,value:Z}=p(M,J);if(!Q)throw new Error("Point.fromHex: invalid y coordinate");let fe=(Z&q)===q,Ee=(P&128)!==0;if(!y&&Z===W&&Ee)throw new Error("Point.fromHex: x=0 and x_0=1");return Ee!==fe&&(Z=u(-Z)),h.fromAffine({x:Z,y:S})}static fromPrivateKey(l){return I(l).point}toRawBytes(){let{x:l,y}=this.toAffine(),w=Pe(y,r.BYTES);return w[w.length-1]|=l&q?128:0,w}toHex(){return rt(this.toRawBytes())}}h.BASE=new h(e.Gx,e.Gy,q,u(e.Gx*e.Gy)),h.ZERO=new h(W,q,q,W);let{BASE:k,ZERO:U}=h,O=gr(h,a*8);function j(b){return L(b,n)}function H(b){return j(ae(b))}function I(b){let l=a;b=F("private key",b,l);let y=F("hashed private key",o(b),2*l),w=g(y.slice(0,l)),_=y.slice(l,2*l),E=H(w),A=k.multiply(E),P=A.toRawBytes();return{head:w,prefix:_,scalar:E,point:A,pointBytes:P}}function G(b){return I(b).pointBytes}function z(b=new Uint8Array,...l){let y=Pt(...l);return H(o(K(y,F("context",b),!!i)))}function ue(b,l,y={}){b=F("message",b),i&&(b=i(b));let{prefix:w,scalar:_,pointBytes:E}=I(l),A=z(y.context,w,b),P=k.multiply(A).toRawBytes(),S=z(y.context,P,E,b),B=j(A+S*_);ce("signature.s",B,W,n);let D=Pt(P,Pe(B,r.BYTES));return F("result",D,a*2)}let ne=Wn;function Ke(b,l,y,w=ne){let{context:_,zip215:E}=w,A=r.BYTES;b=F("signature",b,2*A),l=F("message",l),E!==void 0&&tt("zip215",E),i&&(l=i(l));let P=ae(b.slice(A,2*A)),S,B,D;try{S=h.fromHex(y,E),B=h.fromHex(b.slice(0,A),E),D=k.multiplyUnsafe(P)}catch{return!1}if(!E&&S.isSmallOrder())return!1;let M=z(_,B.toRawBytes(),S.toRawBytes(),l);return B.add(S.multiplyUnsafe(M)).subtract(D).clearCofactor().equals(h.ZERO)}return k._setWindowSize(8),{CURVE:e,getPublicKey:G,sign:ue,verify:Ke,ExtendedPoint:h,utils:{getExtendedPublicKey:I,randomPrivateKey:()=>s(r.BYTES),precompute(b=8,l=h.BASE){return l._setWindowSize(b),l.multiply(BigInt(3)),l}}}}var Ue=BigInt(0),Ht=BigInt(1);function Qn(t){return me(t,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...t})}function vr(t){let e=Qn(t),{P:r}=e,n=m=>L(m,r),i=e.montgomeryBits,o=Math.ceil(i/8),s=e.nByteLength,a=e.adjustScalarBytes||(m=>m),c=e.powPminus2||(m=>It(m,r-BigInt(2),r));function f(m,h,k){let U=n(m*(h-k));return h=n(h-U),k=n(k+U),[h,k]}let u=(e.a-BigInt(2))/BigInt(4);function d(m,h){ce("u",m,Ue,r),ce("scalar",h,Ue,r);let k=h,U=m,O=Ht,j=Ue,H=m,I=Ht,G=Ue,z;for(let ne=BigInt(i-1);ne>=Ue;ne--){let Ke=k>>ne&Ht;G^=Ke,z=f(G,O,H),O=z[0],H=z[1],z=f(G,j,I),j=z[0],I=z[1],G=Ke;let _e=O+j,b=n(_e*_e),l=O-j,y=n(l*l),w=b-y,_=H+I,E=H-I,A=n(E*_e),P=n(_*l),S=A+P,B=A-P;H=n(S*S),I=n(U*n(B*B)),O=n(b*y),j=n(w*(b+n(u*w)))}z=f(G,O,H),O=z[0],H=z[1],z=f(G,j,I),j=z[0],I=z[1];let ue=c(j);return n(O*ue)}function p(m){return Pe(n(m),o)}function g(m){let h=F("u coordinate",m,o);return s===32&&(h[31]&=127),ae(h)}function K(m){let h=F("scalar",m),k=h.length;if(k!==o&&k!==s)throw new Error(`Expected ${o} or ${s} bytes, got ${k}`);return ae(a(h))}function v(m,h){let k=g(h),U=K(m),O=d(k,U);if(O===Ue)throw new Error("Invalid private or public key received");return p(O)}let N=p(e.Gu);function R(m){return v(m,N)}return{scalarMult:v,scalarMultBase:R,getSharedSecret:(m,h)=>v(m,h),getPublicKey:m=>R(m),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:N}}var ei=Se(()=>Et.create({dkLen:114})),ti=Se(()=>Et.create({dkLen:64})),Me=BigInt("726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018365439"),ri=BigInt(1),kr=BigInt(2),Ar=BigInt(3),_a=BigInt(4),ni=BigInt(11),ii=BigInt(22),Sr=BigInt(44),oi=BigInt(88),si=BigInt(223);function Pr(t){let e=Me,r=t*t*t%e,n=r*r*t%e,i=$(n,Ar,e)*n%e,o=$(i,Ar,e)*n%e,s=$(o,kr,e)*r%e,a=$(s,ni,e)*s%e,c=$(a,ii,e)*a%e,f=$(c,Sr,e)*c%e,u=$(f,oi,e)*f%e,d=$(u,Sr,e)*c%e,p=$(d,kr,e)*r%e,g=$(p,ri,e)*t%e;return $(g,si,e)*p%e}function Br(t){return t[0]&=252,t[55]|=128,t[56]=0,t}function ai(t,e){let r=Me,n=L(t*t*e,r),i=L(n*t,r),o=L(i*n*e,r),s=Pr(o),a=L(i*s,r),c=L(a*a,r);return{isValid:L(c*e,r)===t,value:a}}var Kr=nt(Me,456,!0),ci={a:BigInt(1),d:BigInt("726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018326358"),Fp:Kr,n:BigInt("181709681073901722637330951972001133588410340171829515070372549795146003961539585716195755291692375963310293709091662304773755859649779"),nBitLength:456,h:BigInt(4),Gx:BigInt("224580040295924300187604334099896036246789641632564134246125461686950415467406032909029192869357953282578032075146446173674602635247710"),Gy:BigInt("298819210078481492676017930443930673437544040154080242095928241372331506189835876003536878655418784733982303233503462500531545062832660"),hash:ei,randomBytes:ht,adjustScalarBytes:Br,domain:(t,e,r)=>{if(e.length>255)throw new Error(`Context is too big: ${e.length}`);return Vt(lt("SigEd448"),new Uint8Array([r?1:0,e.length]),e,t)},uvRatio:ai};var Ea=Er({...ci,prehash:ti}),ot=vr({a:BigInt(156326),montgomeryBits:448,nByteLength:56,P:Me,Gu:BigInt(5),powPminus2:t=>{let e=Me,r=Pr(t),n=$(r,BigInt(2),e);return L(n*t,e)},adjustScalarBytes:Br,randomBytes:ht});var va=(Kr.ORDER-BigInt(3))/BigInt(4),ka=BigInt(156326);var Aa=BigInt("39082"),Sa=BigInt("78163"),Pa=BigInt("98944233647732219769177004876929019128417576295529901074099889598043702116001257856802131563896515373927712232092845883226922417596214"),Ba=BigInt("315019913931389607337177038330951043522456072897266928557328499619017160722351061360252776265186336876723201881398623946864393857820716");var Ka=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");var Oe="X448",Ir=new Uint8Array,st=["deriveBits"],ui=new Uint8Array([100,107,112,95,112,114,107]),fi=new Uint8Array([115,107]);function Lr(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),n=new Uint8Array(r.length);for(let i=0;i{r(e.key.buffer)})}_serializePrivateKey(e){return new Promise(r=>{r(e.key.buffer)})}_importRawKey(e,r){return new Promise((n,i)=>{r&&e.byteLength!==this._nPk&&i(new Error("Invalid length of the key")),!r&&e.byteLength!==this._nSk&&i(new Error("Invalid length of the key")),n(new Y(Oe,new Uint8Array(e),r?"public":"private",r?[]:st))})}_importJWK(e,r){return new Promise((n,i)=>{e.kty!=="OKP"&&i(new Error(`Invalid kty: ${e.kty}`)),e.crv!=="X448"&&i(new Error(`Invalid crv: ${e.crv}`)),r?(typeof e.d<"u"&&i(new Error("Invalid key: `d` should not be set")),typeof e.x!="string"&&i(new Error("Invalid key: `x` not found")),n(new Y(Oe,Lr(e.x),"public"))):(typeof e.d!="string"&&i(new Error("Invalid key: `d` not found")),n(new Y(Oe,Lr(e.d),"private",st)))})}_derivePublicKey(e){return new Promise((r,n)=>{try{let i=ot.getPublicKey(e.key);r(new Y(Oe,i,"public"))}catch(i){n(i)}})}_dh(e,r){return new Promise((n,i)=>{try{n(ot.getSharedSecret(e.key,r.key).buffer)}catch(o){i(o)}})}};var zt=class extends Le{constructor(){let e=new Re;super(he.DhkemX448HkdfSha512,new qe(e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:he.DhkemX448HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:56}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:56}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:56})}};export{zt as DhkemX448HkdfSha512,Re as HkdfSha512,qe as X448}; /*! Bundled license information: @noble/hashes/esm/utils.js: diff --git a/docs/classes/BaseError.html b/docs/classes/BaseError.html index 169e016eb..db20d85b3 100644 --- a/docs/classes/BaseError.html +++ b/docs/classes/BaseError.html @@ -1,7 +1,7 @@ BaseError | @hpke/hpke-js

The base error class of hpke-js.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/classes/CipherSuite.html b/docs/classes/CipherSuite.html index 29a596186..1a4f4f64f 100644 --- a/docs/classes/CipherSuite.html +++ b/docs/classes/CipherSuite.html @@ -31,7 +31,7 @@
import { AeadId, CipherSuite, KdfId } from "http://deno.land/x/hpke/mod.ts";
// Use an extension module.
import {
HybridkemX25519Kyber768,
} from "https://deno.land/x/hpke/x/hybridkem-x25519-kyber768/mod.ts";

const suite = new CipherSuite({
kem: new HybridkemX25519Kyber768(),
kdf: KdfId.HkdfSha256,
aead: AeadId.Aes128Gcm,
});
-

Hierarchy

  • CipherSuite
    • CipherSuite

Constructors

Hierarchy

  • CipherSuite
    • CipherSuite

Constructors

Properties

Accessors

aead @@ -47,33 +47,33 @@ seal

Constructors

Properties

_api: SubtleCrypto = undefined

Accessors

Methods

Properties

_api: SubtleCrypto = undefined

Accessors

Methods

  • Derives a key pair for the cipher suite in the manner +

  • Generates a key pair for the cipher suite.

    +
  • Imports a public or private key and converts to a CryptoKey.

    +
  • Imports a public or private key and converts to a CryptoKey.

    Since key parameters for createSenderContext or createRecipientContext are CryptoKey format, you have to use this function to convert provided keys to CryptoKey.

    @@ -86,18 +86,18 @@

Returns Promise<CryptoKey>

A public or private CryptoKey.

Use KemInterface.generateKeyPair instead.

  • Decrypts a message from a sender.

    +
  • Decrypts a message from a sender.

    If the error occurred, throws DecapError | DeserializeError | OpenError | ValidationError.

    Parameters

    • params: RecipientContextParams

      A set of parameters for building a recipient encryption context.

    • ct: ArrayBuffer

      An encrypted text as bytes to be decrypted.

    • aad: ArrayBuffer = EMPTY

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A decrypted plain text as bytes.

+
diff --git a/docs/classes/DecapError.html b/docs/classes/DecapError.html index 57b0c82ec..e66fca832 100644 --- a/docs/classes/DecapError.html +++ b/docs/classes/DecapError.html @@ -1,7 +1,7 @@ DecapError | @hpke/hpke-js

Class DecapError

decap() failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/classes/DeriveKeyPairError.html b/docs/classes/DeriveKeyPairError.html index 954bef7ff..21fd74e8f 100644 --- a/docs/classes/DeriveKeyPairError.html +++ b/docs/classes/DeriveKeyPairError.html @@ -1,7 +1,7 @@ DeriveKeyPairError | @hpke/hpke-js

Class DeriveKeyPairError

Key pair derivation failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/classes/DeserializeError.html b/docs/classes/DeserializeError.html index 2afd5838d..90757a3fc 100644 --- a/docs/classes/DeserializeError.html +++ b/docs/classes/DeserializeError.html @@ -1,7 +1,7 @@ DeserializeError | @hpke/hpke-js

Class DeserializeError

Public or private key deserialization failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/classes/EncapError.html b/docs/classes/EncapError.html index e7ab6625c..ef6ce9ced 100644 --- a/docs/classes/EncapError.html +++ b/docs/classes/EncapError.html @@ -1,7 +1,7 @@ EncapError | @hpke/hpke-js

Class EncapError

encap() failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/classes/ExportError.html b/docs/classes/ExportError.html index b57f41022..2333b9eb5 100644 --- a/docs/classes/ExportError.html +++ b/docs/classes/ExportError.html @@ -1,7 +1,7 @@ ExportError | @hpke/hpke-js

Class ExportError

Secret export failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/classes/HpkeError.html b/docs/classes/HpkeError.html index a3b59dc81..18d3a67d9 100644 --- a/docs/classes/HpkeError.html +++ b/docs/classes/HpkeError.html @@ -1,7 +1,7 @@ HpkeError | @hpke/hpke-js

The base error class of hpke-js.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/classes/InvalidParamError.html b/docs/classes/InvalidParamError.html index 964adfc15..67aab795b 100644 --- a/docs/classes/InvalidParamError.html +++ b/docs/classes/InvalidParamError.html @@ -1,7 +1,7 @@ InvalidParamError | @hpke/hpke-js

Class InvalidParamError

Invalid parameter.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/classes/MessageLimitReachedError.html b/docs/classes/MessageLimitReachedError.html index 3323fcb24..e742727a4 100644 --- a/docs/classes/MessageLimitReachedError.html +++ b/docs/classes/MessageLimitReachedError.html @@ -1,7 +1,7 @@ MessageLimitReachedError | @hpke/hpke-js

Class MessageLimitReachedError

Sequence number overflow on the encryption context.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/classes/NotSupportedError.html b/docs/classes/NotSupportedError.html index 5b88b4d28..540c2cc1a 100644 --- a/docs/classes/NotSupportedError.html +++ b/docs/classes/NotSupportedError.html @@ -1,7 +1,7 @@ NotSupportedError | @hpke/hpke-js

Class NotSupportedError

Not supported failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/classes/OpenError.html b/docs/classes/OpenError.html index 0433f6eff..93e6b5969 100644 --- a/docs/classes/OpenError.html +++ b/docs/classes/OpenError.html @@ -1,7 +1,7 @@ OpenError | @hpke/hpke-js

open() failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/classes/SealError.html b/docs/classes/SealError.html index e6fca511c..c41ae8625 100644 --- a/docs/classes/SealError.html +++ b/docs/classes/SealError.html @@ -1,7 +1,7 @@ SealError | @hpke/hpke-js

seal() failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/classes/SerializeError.html b/docs/classes/SerializeError.html index 7abb41bc0..5c58f69de 100644 --- a/docs/classes/SerializeError.html +++ b/docs/classes/SerializeError.html @@ -1,7 +1,7 @@ SerializeError | @hpke/hpke-js

Class SerializeError

Public or private key serialization failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/classes/ValidationError.html b/docs/classes/ValidationError.html index 8e8317831..4dce3f156 100644 --- a/docs/classes/ValidationError.html +++ b/docs/classes/ValidationError.html @@ -1,7 +1,7 @@ ValidationError | @hpke/hpke-js

Class ValidationError

KEM input or output validation failure.

-

Hierarchy (view full)

Constructors

Hierarchy (view full)

Constructors

Properties

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
+

Constructors

Properties

cause?: unknown
message: string
name: string
stack?: string
diff --git a/docs/interfaces/AeadEncryptionContext.html b/docs/interfaces/AeadEncryptionContext.html index 0f32a7126..e3a59bcb3 100644 --- a/docs/interfaces/AeadEncryptionContext.html +++ b/docs/interfaces/AeadEncryptionContext.html @@ -1,14 +1,14 @@ AeadEncryptionContext | @hpke/hpke-js

Interface AeadEncryptionContext

The AEAD encryption context interface.

-
interface AeadEncryptionContext {
    open(iv: ArrayBuffer, data: ArrayBuffer, aad: ArrayBuffer): Promise<ArrayBuffer>;
    seal(iv: ArrayBuffer, data: ArrayBuffer, aad: ArrayBuffer): Promise<ArrayBuffer>;
}

Methods

interface AeadEncryptionContext {
    open(iv: ArrayBuffer, data: ArrayBuffer, aad: ArrayBuffer): Promise<ArrayBuffer>;
    seal(iv: ArrayBuffer, data: ArrayBuffer, aad: ArrayBuffer): Promise<ArrayBuffer>;
}

Methods

Methods

  • Decrypts data with an initialization vector and additional authenticated data.

    Parameters

    • iv: ArrayBuffer

      An initialization vector.

    • data: ArrayBuffer

      A plain text as bytes to be encrypted.

    • aad: ArrayBuffer

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A decrypted plain text as bytes.

    -
  • Encrypts data with an initialization vector and additional authenticated data.

    Parameters

    • iv: ArrayBuffer

      An initialization vector.

    • data: ArrayBuffer

      A plain text as bytes to be encrypted.

    • aad: ArrayBuffer

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A cipher text as bytes.

    -
+
diff --git a/docs/interfaces/AeadInterface.html b/docs/interfaces/AeadInterface.html index 34a3ab6b0..d334daf4f 100644 --- a/docs/interfaces/AeadInterface.html +++ b/docs/interfaces/AeadInterface.html @@ -1,14 +1,14 @@ AeadInterface | @hpke/hpke-js

Interface AeadInterface

The AEAD interface.

-
interface AeadInterface {
    id: AeadId;
    keySize: number;
    nonceSize: number;
    tagSize: number;
    createEncryptionContext(key: ArrayBuffer): AeadEncryptionContext;
}

Properties

id +
interface AeadInterface {
    id: AeadId;
    keySize: number;
    nonceSize: number;
    tagSize: number;
    createEncryptionContext(key: ArrayBuffer): AeadEncryptionContext;
}

Properties

id: AeadId

The KDF identifier.

-
keySize: number

The length in bytes of an AEAD key (Nk).

-
nonceSize: number

The length in bytes of an AEAD nonce (Nn).

-
tagSize: number

The length in bytes of an AEAD authentication tag (Nt).

-

Methods

keySize: number

The length in bytes of an AEAD key (Nk).

+
nonceSize: number

The length in bytes of an AEAD nonce (Nn).

+
tagSize: number

The length in bytes of an AEAD authentication tag (Nt).

+

Methods

+
diff --git a/docs/interfaces/CipherSuiteParams.html b/docs/interfaces/CipherSuiteParams.html index 44c1525c2..eab88b47c 100644 --- a/docs/interfaces/CipherSuiteParams.html +++ b/docs/interfaces/CipherSuiteParams.html @@ -1,8 +1,8 @@ CipherSuiteParams | @hpke/hpke-js

Interface CipherSuiteParams

The parameters used to configure the CipherSuite.

-
interface CipherSuiteParams {
    aead: AeadId | AeadInterface;
    kdf: KdfId | KdfInterface;
    kem: KemId | KemInterface;
}

Properties

interface CipherSuiteParams {
    aead: AeadId | AeadInterface;
    kdf: KdfId | KdfInterface;
    kem: KemId | KemInterface;
}

Properties

Properties

The AEAD (Authenticated Encryption with Addtional Data) identifier or the AEAD object.

-

The KDF (Key Derivation Function) identifier or the KDF object.

-

The KEM (Key Encapsulation Mechanism) identifier or the KEM object.

-
+

The KDF (Key Derivation Function) identifier or the KDF object.

+

The KEM (Key Encapsulation Mechanism) identifier or the KEM object.

+
diff --git a/docs/interfaces/CipherSuiteSealResponse.html b/docs/interfaces/CipherSuiteSealResponse.html index 8d3c3053a..e85af6b0b 100644 --- a/docs/interfaces/CipherSuiteSealResponse.html +++ b/docs/interfaces/CipherSuiteSealResponse.html @@ -1,6 +1,6 @@ CipherSuiteSealResponse | @hpke/hpke-js

Interface CipherSuiteSealResponse

The response of the single-shot seal API.

-
interface CipherSuiteSealResponse {
    ct: ArrayBuffer;
    enc: ArrayBuffer;
}

Properties

ct +
interface CipherSuiteSealResponse {
    ct: ArrayBuffer;
    enc: ArrayBuffer;
}

Properties

Properties

ct: ArrayBuffer

The ciphertext as bytes.

-
enc: ArrayBuffer

The encapsulated key.

-
+
enc: ArrayBuffer

The encapsulated key.

+
diff --git a/docs/interfaces/EncryptionContext.html b/docs/interfaces/EncryptionContext.html index 969883418..fe50770ab 100644 --- a/docs/interfaces/EncryptionContext.html +++ b/docs/interfaces/EncryptionContext.html @@ -1,5 +1,5 @@ EncryptionContext | @hpke/hpke-js

Interface EncryptionContext

The encryption context interface for a recipient and a sender.

-
interface EncryptionContext {
    export(exporterContext: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    open(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
    seal(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
}

Hierarchy (view full)

Methods

interface EncryptionContext {
    export(exporterContext: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    open(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
    seal(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
}

Hierarchy (view full)

Methods

Methods

  • Exports a secret using a variable-length pseudorandom function.

    @@ -8,16 +8,16 @@
  • len: number

    A desired length in bytes of the output secret.

Returns Promise<ArrayBuffer>

A secret string as bytes.

ExportError

-
  • Decrypts data.

    +
  • Decrypts data.

    If the error occurred, throws OpenError.

    Parameters

    • data: ArrayBuffer

      An encrypted text as bytes to be decrypted.

    • Optionalaad: ArrayBuffer

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A decrypted plain text as bytes.

    OpenError

    -
  • Encrypts data.

    +
  • Encrypts data.

    If the error occurred, throws SealError | MessageLimitReachedError.

    Parameters

    • data: ArrayBuffer

      A plain text as bytes to be encrypted.

    • Optionalaad: ArrayBuffer

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A cipher text as bytes.

+
diff --git a/docs/interfaces/KdfInterface.html b/docs/interfaces/KdfInterface.html index 26328f5b1..611e75567 100644 --- a/docs/interfaces/KdfInterface.html +++ b/docs/interfaces/KdfInterface.html @@ -1,5 +1,5 @@ KdfInterface | @hpke/hpke-js

Interface KdfInterface

The KDF interface.

-
interface KdfInterface {
    hashSize: number;
    id: KdfId;
    buildLabeledIkm(label: Uint8Array, ikm: Uint8Array): Uint8Array;
    buildLabeledInfo(label: Uint8Array, info: Uint8Array, len: number): Uint8Array;
    expand(prk: ArrayBuffer, info: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    extract(salt: ArrayBuffer, ikm: ArrayBuffer): Promise<ArrayBuffer>;
    extractAndExpand(salt: ArrayBuffer, ikm: ArrayBuffer, info: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    init(suiteId: Uint8Array): void;
    labeledExpand(prk: ArrayBuffer, label: Uint8Array, info: Uint8Array, len: number): Promise<ArrayBuffer>;
    labeledExtract(salt: ArrayBuffer, label: Uint8Array, ikm: Uint8Array): Promise<ArrayBuffer>;
}

Properties

interface KdfInterface {
    hashSize: number;
    id: KdfId;
    buildLabeledIkm(label: Uint8Array, ikm: Uint8Array): Uint8Array;
    buildLabeledInfo(label: Uint8Array, info: Uint8Array, len: number): Uint8Array;
    expand(prk: ArrayBuffer, info: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    extract(salt: ArrayBuffer, ikm: ArrayBuffer): Promise<ArrayBuffer>;
    extractAndExpand(salt: ArrayBuffer, ikm: ArrayBuffer, info: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    init(suiteId: Uint8Array): void;
    labeledExpand(prk: ArrayBuffer, label: Uint8Array, info: Uint8Array, len: number): Promise<ArrayBuffer>;
    labeledExtract(salt: ArrayBuffer, label: Uint8Array, ikm: Uint8Array): Promise<ArrayBuffer>;
}

Properties

hashSize: number

The output size of the extract() function in bytes (Nh).

-
id: KdfId

The KDF identifier.

-

Methods

id: KdfId

The KDF identifier.

+

Methods

  • Builds a labeled input keying material.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

    Returns Uint8Array

    An input keying material as bytes.

    -
  • Builds a labeled info string.

    Parameters

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length of the output byte string.

    Returns Uint8Array

    An info string as bytes.

    -
  • Expands a pseudorandom key prk.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Extracts a pseudorandom key of fixed length (Nh) bytes.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • ikm: ArrayBuffer

      An input keying material

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    -
  • Extracts a pseudorandom key and expand it to a specified length keying material.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • ikm: ArrayBuffer

      An input keying material

    • info: ArrayBuffer

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Initializes the instance by setting a suite_id defined in RFC9180.

    Parameters

    • suiteId: Uint8Array

      A suite_id defined in RFC9180.

      -

    Returns void

  • Extracts a pseudorandom key with label.

    +

Returns void

  • Extracts a pseudorandom key with label.

    Parameters

    • prk: ArrayBuffer

      A pseudorandom key.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • info: Uint8Array

      An additional byte string.

    • len: number

      The length in bytes of the output keying material.

    Returns Promise<ArrayBuffer>

    An output keying material as bytes.

    -
  • Extracts a pseudorandom key with label.

    Parameters

    • salt: ArrayBuffer

      An additional random byte string.

    • label: Uint8Array

      A byte string indicating the cryptographic context/operation.

    • ikm: Uint8Array

      An input keying material

    Returns Promise<ArrayBuffer>

    A pseudorandom key as bytes.

    -
+
diff --git a/docs/interfaces/KemInterface.html b/docs/interfaces/KemInterface.html index 2dd82c2a7..67cca1508 100644 --- a/docs/interfaces/KemInterface.html +++ b/docs/interfaces/KemInterface.html @@ -1,5 +1,5 @@ KemInterface | @hpke/hpke-js

Interface KemInterface

The KEM interface.

-
interface KemInterface {
    encSize: number;
    id: KemId;
    privateKeySize: number;
    publicKeySize: number;
    secretSize: number;
    decap(params: RecipientContextParams): Promise<ArrayBuffer>;
    deriveKeyPair(ikm: ArrayBuffer): Promise<CryptoKeyPair>;
    deserializePrivateKey(key: ArrayBuffer): Promise<CryptoKey>;
    deserializePublicKey(key: ArrayBuffer): Promise<CryptoKey>;
    encap(params: SenderContextParams): Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>;
    generateKeyPair(): Promise<CryptoKeyPair>;
    importKey(format: "raw" | "jwk", key: ArrayBuffer | JsonWebKey, isPublic?: boolean): Promise<CryptoKey>;
    serializePrivateKey(key: CryptoKey): Promise<ArrayBuffer>;
    serializePublicKey(key: CryptoKey): Promise<ArrayBuffer>;
}

Properties

interface KemInterface {
    encSize: number;
    id: KemId;
    privateKeySize: number;
    publicKeySize: number;
    secretSize: number;
    decap(params: RecipientContextParams): Promise<ArrayBuffer>;
    deriveKeyPair(ikm: ArrayBuffer): Promise<CryptoKeyPair>;
    deserializePrivateKey(key: ArrayBuffer): Promise<CryptoKey>;
    deserializePublicKey(key: ArrayBuffer): Promise<CryptoKey>;
    encap(params: SenderContextParams): Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>;
    generateKeyPair(): Promise<CryptoKeyPair>;
    importKey(format: "raw" | "jwk", key: ArrayBuffer | JsonWebKey, isPublic?: boolean): Promise<CryptoKey>;
    serializePrivateKey(key: CryptoKey): Promise<ArrayBuffer>;
    serializePublicKey(key: CryptoKey): Promise<ArrayBuffer>;
}

Properties

encSize: number

The length in bytes of an encapsulated key produced by this KEM (Nenc).

-
id: KemId

The KEM identifier.

-
privateKeySize: number

The length in bytes of an encoded private key for this KEM (Nsk).

-
publicKeySize: number

The length in bytes of an encoded public key for this KEM (Npk).

-
secretSize: number

The length in bytes of a KEM shared secret produced by this KEM (Nsecret).

-

Methods

id: KemId

The KEM identifier.

+
privateKeySize: number

The length in bytes of an encoded private key for this KEM (Nsk).

+
publicKeySize: number

The length in bytes of an encoded public key for this KEM (Npk).

+
secretSize: number

The length in bytes of a KEM shared secret produced by this KEM (Nsecret).

+

Methods

  • Derives a key pair from the byte string ikm.

    +
  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    +
  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    +
  • Generates an ephemeral, fixed-length symmetric key and a fixed-length encapsulation of the key that can be decapsulated by the holder of the private key corresponding to pkR.

    If the error occurred, throws EncapError.

    Parameters

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    EncapError

    -
  • Imports a public or private key and converts to a CryptoKey.

    Since key parameters for createSenderContext or createRecipientContext are CryptoKey format, you have to use this function to convert provided keys to CryptoKey.

    @@ -61,14 +61,14 @@
  • OptionalisPublic: boolean

    The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

Returns Promise<CryptoKey>

A public or private CryptoKey.

+
diff --git a/docs/interfaces/PreSharedKey.html b/docs/interfaces/PreSharedKey.html index 1393fcaee..3e1acb8ef 100644 --- a/docs/interfaces/PreSharedKey.html +++ b/docs/interfaces/PreSharedKey.html @@ -1,6 +1,6 @@ PreSharedKey | @hpke/hpke-js

Interface PreSharedKey

The pre-shared key interface.

-
interface PreSharedKey {
    id: ArrayBuffer;
    key: ArrayBuffer;
}

Properties

id +
interface PreSharedKey {
    id: ArrayBuffer;
    key: ArrayBuffer;
}

Properties

Properties

id: ArrayBuffer

The key identifier.

-
key: ArrayBuffer

The body of the pre-shared key.

-
+
key: ArrayBuffer

The body of the pre-shared key.

+
diff --git a/docs/interfaces/RecipientContextParams.html b/docs/interfaces/RecipientContextParams.html index ba266df27..9b6e5b23e 100644 --- a/docs/interfaces/RecipientContextParams.html +++ b/docs/interfaces/RecipientContextParams.html @@ -1,13 +1,13 @@ RecipientContextParams | @hpke/hpke-js

Interface RecipientContextParams

The parameters used to setup the RecipientContext.

-
interface RecipientContextParams {
    enc: ArrayBuffer;
    info?: ArrayBuffer;
    psk?: PreSharedKey;
    recipientKey: CryptoKeyPair | CryptoKey;
    senderPublicKey?: CryptoKey;
}

Hierarchy

  • KeyScheduleParams
    • RecipientContextParams

Properties

enc +
interface RecipientContextParams {
    enc: ArrayBuffer;
    info?: ArrayBuffer;
    psk?: PreSharedKey;
    recipientKey: CryptoKeyPair | CryptoKey;
    senderPublicKey?: CryptoKey;
}

Hierarchy

  • KeyScheduleParams
    • RecipientContextParams

Properties

enc: ArrayBuffer

A byte string of the encapsulated key received from a sender.

-
info?: ArrayBuffer

Application supplied information. The maximum length is 128 bytes.

-

A pre-shared key (PSK) held by both the sender and recipient. +

info?: ArrayBuffer

Application supplied information. The maximum length is 128 bytes.

+

A pre-shared key (PSK) held by both the sender and recipient. The PSK should have at least 32 bytes :and the maxmum length of the PSK is 128 bytes.

-
recipientKey: CryptoKeyPair | CryptoKey

A recipient private key or a key pair.

-
senderPublicKey?: CryptoKey

A sender public key for Auth mode.

-
+
recipientKey: CryptoKeyPair | CryptoKey

A recipient private key or a key pair.

+
senderPublicKey?: CryptoKey

A sender public key for Auth mode.

+
diff --git a/docs/interfaces/SenderContext.html b/docs/interfaces/SenderContext.html index ae8be63f5..d7d79abdd 100644 --- a/docs/interfaces/SenderContext.html +++ b/docs/interfaces/SenderContext.html @@ -1,25 +1,25 @@ SenderContext | @hpke/hpke-js

Interface SenderContext

The sender encryption context.

-
interface SenderContext {
    enc: ArrayBuffer;
    export(exporterContext: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    open(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
    seal(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
}

Hierarchy (view full)

Properties

enc +
interface SenderContext {
    enc: ArrayBuffer;
    export(exporterContext: ArrayBuffer, len: number): Promise<ArrayBuffer>;
    open(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
    seal(data: ArrayBuffer, aad?: ArrayBuffer): Promise<ArrayBuffer>;
}

Hierarchy (view full)

Properties

Methods

Properties

enc: ArrayBuffer

The encapsulated key generated by the sender.

-

Methods

Methods

  • Exports a secret using a variable-length pseudorandom function.

    If the error occurred, throws ExportError.

    Parameters

    • exporterContext: ArrayBuffer

      An exporter context string as bytes. The maximum length is 128 bytes.

    • len: number

      A desired length in bytes of the output secret.

    Returns Promise<ArrayBuffer>

    A secret string as bytes.

    ExportError

    -
  • Decrypts data.

    +
  • Decrypts data.

    If the error occurred, throws OpenError.

    Parameters

    • data: ArrayBuffer

      An encrypted text as bytes to be decrypted.

    • Optionalaad: ArrayBuffer

      Additional authenticated data as bytes fed by an application.

    Returns Promise<ArrayBuffer>

    A decrypted plain text as bytes.

    OpenError

    -
  • Encrypts data.

    +
+
diff --git a/docs/interfaces/SenderContextParams.html b/docs/interfaces/SenderContextParams.html index d728b2e60..bbbea9b58 100644 --- a/docs/interfaces/SenderContextParams.html +++ b/docs/interfaces/SenderContextParams.html @@ -1,13 +1,13 @@ SenderContextParams | @hpke/hpke-js

Interface SenderContextParams

The parameters used to setup the SenderContext.

-
interface SenderContextParams {
    ekm?: ArrayBuffer | CryptoKeyPair;
    info?: ArrayBuffer;
    psk?: PreSharedKey;
    recipientPublicKey: CryptoKey;
    senderKey?: CryptoKeyPair | CryptoKey;
}

Hierarchy

  • KeyScheduleParams
    • SenderContextParams

Properties

interface SenderContextParams {
    ekm?: ArrayBuffer | CryptoKeyPair;
    info?: ArrayBuffer;
    psk?: PreSharedKey;
    recipientPublicKey: CryptoKey;
    senderKey?: CryptoKeyPair | CryptoKey;
}

Hierarchy

  • KeyScheduleParams
    • SenderContextParams

Properties

ekm?: ArrayBuffer | CryptoKeyPair

DO NOT USE. FOR DEBUGGING/TESTING PURPOSES ONLY.

-
info?: ArrayBuffer

Application supplied information. The maximum length is 128 bytes.

-

A pre-shared key (PSK) held by both the sender and recipient. +

info?: ArrayBuffer

Application supplied information. The maximum length is 128 bytes.

+

A pre-shared key (PSK) held by both the sender and recipient. The PSK should have at least 32 bytes :and the maxmum length of the PSK is 128 bytes.

-
recipientPublicKey: CryptoKey

A recipient public key.

-
senderKey?: CryptoKeyPair | CryptoKey

A sender private key or a key pair for Auth mode.

-
+
recipientPublicKey: CryptoKey

A recipient public key.

+
senderKey?: CryptoKeyPair | CryptoKey

A sender private key or a key pair for Auth mode.

+
diff --git a/docs/types/Aead.html b/docs/types/Aead.html index 118d8d933..d6a4e64a3 100644 --- a/docs/types/Aead.html +++ b/docs/types/Aead.html @@ -1,3 +1,3 @@ Aead | @hpke/hpke-js

Type Alias Aead

Aead: typeof Aead[keyof typeof Aead]

The type alias of the supported AEAD identifiers.

Use AeadId instead.

-
+
diff --git a/docs/types/AeadId.html b/docs/types/AeadId.html index 40bb967ad..e71e194a7 100644 --- a/docs/types/AeadId.html +++ b/docs/types/AeadId.html @@ -1,2 +1,2 @@ AeadId | @hpke/hpke-js

Type Alias AeadId

AeadId: typeof AeadId[keyof typeof AeadId]

The type alias of the supported AEAD identifiers.

-
+
diff --git a/docs/types/Kdf.html b/docs/types/Kdf.html index 87888154c..2185fded7 100644 --- a/docs/types/Kdf.html +++ b/docs/types/Kdf.html @@ -1,3 +1,3 @@ Kdf | @hpke/hpke-js

Type Alias Kdf

Kdf: typeof Kdf[keyof typeof Kdf]

The type alias of the supported KDF identifiers.

Use KdfId instead.

-
+
diff --git a/docs/types/KdfId.html b/docs/types/KdfId.html index bbd661e5c..470337b26 100644 --- a/docs/types/KdfId.html +++ b/docs/types/KdfId.html @@ -1,2 +1,2 @@ KdfId | @hpke/hpke-js

Type Alias KdfId

KdfId: typeof KdfId[keyof typeof KdfId]

The type alias of the supported KDF identifiers.

-
+
diff --git a/docs/types/Kem.html b/docs/types/Kem.html index d595a728d..29203da5a 100644 --- a/docs/types/Kem.html +++ b/docs/types/Kem.html @@ -1,3 +1,3 @@ Kem | @hpke/hpke-js

Type Alias Kem

Kem: typeof Kem[keyof typeof Kem]

The type alias of the supported KEM identifiers.

Use KdfId instead.

-
+
diff --git a/docs/types/KemId.html b/docs/types/KemId.html index 550e12b61..04dfce75a 100644 --- a/docs/types/KemId.html +++ b/docs/types/KemId.html @@ -1,2 +1,2 @@ KemId | @hpke/hpke-js

Type Alias KemId

KemId: typeof KemId[keyof typeof KemId]

The type alias of the supported KEM identifiers.

-
+
diff --git a/docs/types/RecipientContext.html b/docs/types/RecipientContext.html index 674074e95..96c1de78a 100644 --- a/docs/types/RecipientContext.html +++ b/docs/types/RecipientContext.html @@ -1,2 +1,2 @@ RecipientContext | @hpke/hpke-js

Type Alias RecipientContext

RecipientContext: EncryptionContext

The recipient encryption context.

-
+
diff --git a/docs/variables/Aead-1.html b/docs/variables/Aead-1.html index fc6787328..8ee6fd1c2 100644 --- a/docs/variables/Aead-1.html +++ b/docs/variables/Aead-1.html @@ -1,3 +1,3 @@ Aead | @hpke/hpke-js

Variable AeadConst

Aead: {
    Aes128Gcm: 1;
    Aes256Gcm: 2;
    Chacha20Poly1305: 3;
    ExportOnly: 65535;
} = ...

The supported Authenticated Encryption with Associated Data (AEAD) identifiers.

Use AeadId instead.

-
+
diff --git a/docs/variables/AeadId-1.html b/docs/variables/AeadId-1.html index 363dd3051..24ab42777 100644 --- a/docs/variables/AeadId-1.html +++ b/docs/variables/AeadId-1.html @@ -1,2 +1,2 @@ AeadId | @hpke/hpke-js

Variable AeadIdConst

AeadId: {
    Aes128Gcm: 1;
    Aes256Gcm: 2;
    Chacha20Poly1305: 3;
    ExportOnly: 65535;
} = ...

The supported Authenticated Encryption with Associated Data (AEAD) identifiers.

-
+
diff --git a/docs/variables/Kdf-1.html b/docs/variables/Kdf-1.html index d1202e6c8..169c04d63 100644 --- a/docs/variables/Kdf-1.html +++ b/docs/variables/Kdf-1.html @@ -1,3 +1,3 @@ Kdf | @hpke/hpke-js

Variable KdfConst

Kdf: {
    HkdfSha256: 1;
    HkdfSha384: 2;
    HkdfSha512: 3;
} = ...

The supported Key Derivation Function (KDF) identifiers.

Use KdfId instead.

-
+
diff --git a/docs/variables/KdfId-1.html b/docs/variables/KdfId-1.html index 6b0ab95de..c2a4ed27b 100644 --- a/docs/variables/KdfId-1.html +++ b/docs/variables/KdfId-1.html @@ -1,2 +1,2 @@ KdfId | @hpke/hpke-js

Variable KdfIdConst

KdfId: {
    HkdfSha256: 1;
    HkdfSha384: 2;
    HkdfSha512: 3;
} = ...

The supported Key Derivation Function (KDF) identifiers.

-
+
diff --git a/docs/variables/Kem-1.html b/docs/variables/Kem-1.html index 042853b57..ecbc6081b 100644 --- a/docs/variables/Kem-1.html +++ b/docs/variables/Kem-1.html @@ -1,3 +1,3 @@ Kem | @hpke/hpke-js

Variable KemConst

Kem: {
    DhkemP256HkdfSha256: 16;
    DhkemP384HkdfSha384: 17;
    DhkemP521HkdfSha512: 18;
    DhkemSecp256k1HkdfSha256: 19;
    DhkemX25519HkdfSha256: 32;
    DhkemX448HkdfSha512: 33;
    HybridkemX25519Kyber768: 48;
    NotAssigned: 0;
} = ...

The supported Key Encapsulation Mechanism (KEM) identifiers.

Use KdfId instead.

-
+
diff --git a/docs/variables/KemId-1.html b/docs/variables/KemId-1.html index 7a8d21e6d..5abd6a573 100644 --- a/docs/variables/KemId-1.html +++ b/docs/variables/KemId-1.html @@ -1,2 +1,2 @@ KemId | @hpke/hpke-js

Variable KemIdConst

KemId: {
    DhkemP256HkdfSha256: 16;
    DhkemP384HkdfSha384: 17;
    DhkemP521HkdfSha512: 18;
    DhkemSecp256k1HkdfSha256: 19;
    DhkemX25519HkdfSha256: 32;
    DhkemX448HkdfSha512: 33;
    HybridkemX25519Kyber768: 48;
    NotAssigned: 0;
} = ...

The supported Key Encapsulation Mechanism (KEM) identifiers.

-
+
diff --git a/hybridkem-x25519-kyber768/docs/classes/HybridkemX25519Kyber768.html b/hybridkem-x25519-kyber768/docs/classes/HybridkemX25519Kyber768.html index 6eb83ff04..4e3c3fddc 100644 --- a/hybridkem-x25519-kyber768/docs/classes/HybridkemX25519Kyber768.html +++ b/hybridkem-x25519-kyber768/docs/classes/HybridkemX25519Kyber768.html @@ -6,7 +6,7 @@
import { Aes128Gcm, CipherSuite, HkdfSha256 } from "http://deno.land/x/hpke/core/mod.ts";
import { HybridkemX25519Kyber768 } from "https://deno.land/x/hpke/x/hybridkem-x25519-kyber768/mod.ts";
const suite = new CipherSuite({
kem: new HybridkemX25519Kyber768(),
kdf: new HkdfSha256(),
aead: new Aes128Gcm(),
});
-

Hierarchy

  • Hybridkem
    • HybridkemX25519Kyber768

Constructors

Hierarchy

  • Hybridkem
    • HybridkemX25519Kyber768

Constructors

Properties

Constructors

Properties

_a: DhkemInterface
_b: KemInterface
_kdf: KdfInterface
auth: boolean = false
encSize: number = 1120
id: KemId = KemId.HybridkemX25519Kyber768
name: string = "X25519Kyber25519"
privateKeySize: number = 2432
publicKeySize: number = 1216
secretSize: number = 64

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    +

Constructors

Properties

_a: DhkemInterface
_b: KemInterface
_kdf: KdfInterface
auth: boolean = false
encSize: number = 1120
id: KemId = KemId.HybridkemX25519Kyber768
name: string = "X25519Kyber25519"
privateKeySize: number = 2432
publicKeySize: number = 1216
secretSize: number = 64

Methods

  • Recovers the ephemeral symmetric key from its encapsulated representation enc.

    If the error occurred, throws DecapError.

    Parameters

    • params: RecipientContextParams

      A set of parameters for the recipient context.

    Returns Promise<ArrayBuffer>

    A shared secret as the output of the decapsulation step.

    DecapError

    -
  • Derives a key pair from the byte string ikm.

    +
  • Derives a key pair from the byte string ikm.

    If the error occurred, throws DeriveKeyPairError.

    Parameters

    • ikm: ArrayBuffer

      An input keying material.

    Returns Promise<CryptoKeyPair>

    A key pair derived.

    DeriveKeyPairError

    -
  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    +
  • Deserializes a private key as a byte string of length Nsk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

    DeserializeError

    -
  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    +
  • Deserializes a public key as a byte string of length Npk to CryptoKey.

    If the error occurred, throws DeserializeError.

    Parameters

    • key: ArrayBuffer

      A key as bytes.

    Returns Promise<CryptoKey>

    A CryptoKey.

    DeserializeError

    -
  • Generates an ephemeral, fixed-length symmetric key and +

  • Generates an ephemeral, fixed-length symmetric key and a fixed-length encapsulation of the key that can be decapsulated by the holder of the private key corresponding to pkR.

    If the error occurred, throws EncapError.

    Parameters

    • params: SenderContextParams

      A set of parameters for the sender context.

    Returns Promise<{
        enc: ArrayBuffer;
        sharedSecret: ArrayBuffer;
    }>

    A shared secret and an encapsulated key as the output of the encapsulation step.

    EncapError

    -
  • Generates a key pair.

    If the error occurred, throws NotSupportedError.

    Returns Promise<CryptoKeyPair>

    A key pair generated.

    NotSupportedError

    -
  • Imports a public or private key and converts to a CryptoKey.

    +
  • Imports a public or private key and converts to a CryptoKey.

    Since key parameters for createSenderContext or createRecipientContext are CryptoKey format, you have to use this function to convert provided keys to CryptoKey.

    @@ -69,14 +69,14 @@
  • isPublic: boolean = true

    The indicator whether the provided key is a public key or not, which is used only for 'raw' format.

Returns Promise<CryptoKey>

A public or private CryptoKey.

DeserializeError

-
  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    +
  • Serializes a private key as CryptoKey to a byte string of length Nsk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

    SerializeError

    -
  • Serializes a public key as CryptoKey to a byte string of length Npk.

    +
  • Serializes a public key as CryptoKey to a byte string of length Npk.

    If the error occurred, throws SerializeError.

    Parameters

    • key: CryptoKey

      A CryptoKey.

    Returns Promise<ArrayBuffer>

    A key as bytes.

    SerializeError

    -
+
diff --git a/hybridkem-x25519-kyber768/src/hpke-common.js b/hybridkem-x25519-kyber768/src/hpke-common.js index 0aff511e4..d6dcc8e83 100644 --- a/hybridkem-x25519-kyber768/src/hpke-common.js +++ b/hybridkem-x25519-kyber768/src/hpke-common.js @@ -1 +1 @@ -var e={Base:0,Psk:1,Auth:2,AuthPsk:3},x={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},d={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},h={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var k=["encrypt","decrypt"];export{k as AEAD_USAGES,h as AeadId,d as KdfId,x as KemId,e as Mode}; +var v=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},o=class extends v{},b=class extends o{},D=class extends o{},u=class extends o{},h=class extends o{},m=class extends o{},K=class extends o{},T=class extends o{},z=class extends o{},H=class extends o{},R=class extends o{},P=class extends o{},x=class extends o{};var B={},C=N(globalThis,B);function N(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),s=new Set(n);return[...r.filter(a=>!s.has(a)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}async function j(){if(C!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new x(i)}}var _=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await j())}};var F={Base:0,Psk:1,Auth:2,AuthPsk:3},g={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},Y={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},X={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var E=8192,J=32,w=new Uint8Array(0);var S=new Uint8Array([75,69,77,0,0]);var l=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function p(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function y(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function M(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;n8192)throw new b("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():l(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let s;if(e.senderKey===void 0)s=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let c=l(e.senderKey)?e.senderKey.privateKey:e.senderKey,d=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),G=new Uint8Array(await this._prim.dh(c,e.recipientPublicKey));s=y(d,G)}let a;if(e.senderKey===void 0)a=y(new Uint8Array(r),new Uint8Array(n));else{let c=l(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),d=await this._prim.serializePublicKey(c);a=q(new Uint8Array(r),new Uint8Array(n),new Uint8Array(d))}let f=await this._generateSharedSecret(s,a);return{enc:r,sharedSecret:f}}catch(s){throw new m(s)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=l(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=l(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),s=await this._prim.serializePublicKey(n);try{let a;if(e.senderPublicKey===void 0)a=new Uint8Array(await this._prim.dh(r,t));else{let c=new Uint8Array(await this._prim.dh(r,t)),d=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));a=y(c,d)}let f;if(e.senderPublicKey===void 0)f=y(new Uint8Array(e.enc),new Uint8Array(s));else{let c=await this._prim.serializePublicKey(e.senderPublicKey);f=new Uint8Array(e.enc.byteLength+s.byteLength+c.byteLength),f.set(new Uint8Array(e.enc),0),f.set(new Uint8Array(s),e.enc.byteLength),f.set(new Uint8Array(c),e.enc.byteLength+s.byteLength)}return await this._generateSharedSecret(a,f)}catch(a){throw new K(a)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Z,e),n=this._kdf.buildLabeledInfo($,t,this.secretSize);return await this._kdf.extractAndExpand(w,r,n,this.secretSize)}};var k=["deriveBits"],I=new Uint8Array([100,107,112,95,112,114,107]),Q=new Uint8Array([115,107]);var A=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var V=new Uint8Array([99,97,110,100,105,100,97,116,101]),ee=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),te=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),re=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),ie=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),ne=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),se=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),L=class extends _{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case g.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=ee,this._bitmask=255,this._pkcs8AlgId=ie;break;case g.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=te,this._bitmask=255,this._pkcs8AlgId=ne;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=re,this._bitmask=1,this._pkcs8AlgId=se;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new u(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new h(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return M(t.d)}catch(t){throw new u(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new h(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new h(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,k)}catch(e){throw new x(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(w,I,new Uint8Array(e)),r=new A(this._nSk);for(let s=0;r.isZero()||!r.lessThan(this._order);s++){if(s>255)throw new Error("Faild to derive a key pair");let a=new Uint8Array(await this._hkdf.labeledExpand(t,V,p(s,1),this._nSk));a[0]=a[0]&this._bitmask,r.set(a)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new P(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new h(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new u(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,k)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,k)}};var ae=["encrypt","decrypt"];export{ae as AEAD_USAGES,X as AeadId,v as BaseError,K as DecapError,P as DeriveKeyPairError,h as DeserializeError,U as Dhkem,w as EMPTY,L as Ec,m as EncapError,T as ExportError,o as HpkeError,E as INPUT_LENGTH_LIMIT,b as InvalidParamError,Y as KdfId,g as KemId,I as LABEL_DKP_PRK,Q as LABEL_SK,J as MINIMUM_PSK_LENGTH,R as MessageLimitReachedError,F as Mode,_ as NativeAlgorithm,x as NotSupportedError,H as OpenError,S as SUITE_ID_HEADER_KEM,z as SealError,u as SerializeError,D as ValidationError,y as concat,p as i2Osp,l as isCryptoKeyPair,W as xor}; diff --git a/hybridkem-x25519-kyber768/src/hpke-core.js b/hybridkem-x25519-kyber768/src/hpke-core.js index a61ab417f..2daa361d0 100644 --- a/hybridkem-x25519-kyber768/src/hpke-core.js +++ b/hybridkem-x25519-kyber768/src/hpke-core.js @@ -1 +1 @@ -var Se={},we=Ee(globalThis,Se);function Ee(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),a=new Set(n);return[...r.filter(s=>!a.has(s)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}var ie=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},f=class extends ie{},l=class extends f{},_e=class extends f{},P=class extends f{},m=class extends f{},N=class extends f{},T=class extends f{},B=class extends f{},C=class extends f{},M=class extends f{},R=class extends f{},G=class extends f{},p=class extends f{};async function ze(){if(we!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new p(i)}}var x=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await ze())}};var g={Base:0,Psk:1,Auth:2,AuthPsk:3},h={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},A={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},k={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var ne=["encrypt","decrypt"];var ae=class extends x{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(n,this._key,t)}async open(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(n,this._key,t)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,ne)}},F=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new ae(e)}},se=class extends F{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var oe=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:k.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new p("Export only")}};var K=8192;var c=new Uint8Array(0);function ue(){return new Promise((i,e)=>{e(new p("Not supported"))})}var Ue=new Uint8Array([115,101,99]),z=class{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await ue()}async open(e,t){return await ue()}async export(e,t){if(e.byteLength>8192)throw new l("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Ue,new Uint8Array(e),t)}catch(r){throw new B(r)}}},q=class extends z{},Y=class extends z{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}};var v=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function w(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function d(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function me(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;nNumber.MAX_SAFE_INTEGER)throw new R("Message limit reached");e.seq+=1}};var $=class extends U{async open(e,t=c){let r;try{r=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(n){throw new M(n)}return this.incrementSeq(this._ctx),r}};var X=class extends U{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}async seal(e,t=c){let r;try{r=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(n){throw new C(n)}return this.incrementSeq(this._ctx),r}};var Oe=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),je=new Uint8Array([101,120,112]),He=new Uint8Array([105,110,102,111,95,104,97,115,104]),De=new Uint8Array([107,101,121]),Ne=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Te=new Uint8Array([115,101,99,114,101,116]),Be=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),J=class extends x{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new l("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new l("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new l("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Be),this._suiteId.set(w(this._kem.id,2),4),this._suiteId.set(w(this._kdf.id,2),6),this._suiteId.set(w(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.encap(e),r;return e.psk!==void 0?r=e.senderKey!==void 0?g.AuthPsk:g.Psk:r=e.senderKey!==void 0?g.Auth:g.Base,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.decap(e),r;return e.psk!==void 0?r=e.senderPublicKey!==void 0?g.AuthPsk:g.Psk:r=e.senderPublicKey!==void 0?g.Auth:g.Base,await this._keyScheduleR(r,t,e)}async seal(e,t,r=c){let n=await this.createSenderContext(e);return{ct:await n.seal(t,r),enc:n.enc}}async open(e,t,r=c){return await(await this.createRecipientContext(e)).open(t,r)}async _keySchedule(e,t,r){let n=r.psk===void 0?c:new Uint8Array(r.psk.id),a=await this._kdf.labeledExtract(c,Ne,n),s=r.info===void 0?c:new Uint8Array(r.info),o=await this._kdf.labeledExtract(c,He,s),u=new Uint8Array(1+a.byteLength+o.byteLength);u.set(new Uint8Array([e]),0),u.set(new Uint8Array(a),1),u.set(new Uint8Array(o),1+a.byteLength);let y=r.psk===void 0?c:new Uint8Array(r.psk.key),b=this._kdf.buildLabeledIkm(Te,y),I=this._kdf.buildLabeledInfo(je,u,this._kdf.hashSize),_=await this._kdf.extractAndExpand(t,b,I,this._kdf.hashSize);if(this._aead.id===k.ExportOnly)return{aead:this._aead,exporterSecret:_};let ke=this._kdf.buildLabeledInfo(De,u,this._aead.keySize),Ke=await this._kdf.extractAndExpand(t,b,ke,this._aead.keySize),ve=this._kdf.buildLabeledInfo(Oe,u,this._aead.nonceSize),Ae=await this._kdf.extractAndExpand(t,b,ve,this._aead.nonceSize);return{aead:this._aead,exporterSecret:_,key:Ke,baseNonce:new Uint8Array(Ae),seq:0}}async _keyScheduleS(e,t,r,n){let a=await this._keySchedule(e,t,n);return a.key===void 0?new Y(this._api,this._kdf,a.exporterSecret,r):new X(this._api,this._kdf,a,r)}async _keyScheduleR(e,t,r){let n=await this._keySchedule(e,t,r);return n.key===void 0?new q(this._api,this._kdf,n.exporterSecret):new $(this._api,this._kdf,n)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new l("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new l(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new l("Too long psk.key");if(e.psk.id.byteLength>8192)throw new l("Too long psk.id")}}};var ge=new Uint8Array([72,80,75,69,45,118,49]),D=class extends x{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:c}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(ge,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();let n=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set(new Uint8Array([0,r]),0),n.set(ge,2),n.set(this._suiteId,9),n.set(e,9+this._suiteId.byteLength),n.set(t,9+this._suiteId.byteLength+e.byteLength),n}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new l("The salt length must be the same as the hashSize");let r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),a=new ArrayBuffer(r),s=new Uint8Array(a),o=c,u=new Uint8Array(t),y=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");let b=new Uint8Array(this.hashSize+u.length+1);for(let I=1,_=0;_=o.length?(s.set(o,_),_+=o.length):(s.set(o.slice(0,s.length-_),_),_+=s.length-_);return a}async extractAndExpand(e,t,r,n){await this._setup();let a=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},a,n*8)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r))}async labeledExpand(e,t,r,n){return await this.expand(e,this.buildLabeledInfo(t,r,n),n)}_checkInit(){if(this._suiteId===c)throw new Error("Not initialized. Call init()")}},L=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},O=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},j=class extends D{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var W=new Uint8Array([75,69,77,0,0]);var Ce=new Uint8Array([101,97,101,95,112,114,107]),Me=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function Re(i,e,t){let r=new Uint8Array(i.length+e.length+t.length);return r.set(i,0),r.set(e,i.length),r.set(t,i.length+e.length),r}var S=class{constructor(e,t,r){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=t,this._kdf=r;let n=new Uint8Array(W);n.set(w(this.id,2),3),this._kdf.init(n)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,t,r=!0){return await this._prim.importKey(e,t,r)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new l("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():v(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let a;if(e.senderKey===void 0)a=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let u=v(e.senderKey)?e.senderKey.privateKey:e.senderKey,y=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),b=new Uint8Array(await this._prim.dh(u,e.recipientPublicKey));a=d(y,b)}let s;if(e.senderKey===void 0)s=d(new Uint8Array(r),new Uint8Array(n));else{let u=v(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),y=await this._prim.serializePublicKey(u);s=Re(new Uint8Array(r),new Uint8Array(n),new Uint8Array(y))}let o=await this._generateSharedSecret(a,s);return{enc:r,sharedSecret:o}}catch(a){throw new N(a)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=v(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=v(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),a=await this._prim.serializePublicKey(n);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(r,t));else{let u=new Uint8Array(await this._prim.dh(r,t)),y=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));s=d(u,y)}let o;if(e.senderPublicKey===void 0)o=d(new Uint8Array(e.enc),new Uint8Array(a));else{let u=await this._prim.serializePublicKey(e.senderPublicKey);o=new Uint8Array(e.enc.byteLength+a.byteLength+u.byteLength),o.set(new Uint8Array(e.enc),0),o.set(new Uint8Array(a),e.enc.byteLength),o.set(new Uint8Array(u),e.enc.byteLength+a.byteLength)}return await this._generateSharedSecret(s,o)}catch(s){throw new T(s)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Ce,e),n=this._kdf.buildLabeledInfo(Me,t,this.secretSize);return await this._kdf.extractAndExpand(c,r,n,this.secretSize)}};var Z=["deriveBits"],Q=new Uint8Array([100,107,112,95,112,114,107]),Pe=new Uint8Array([115,107]);var V=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var Ge=new Uint8Array([99,97,110,100,105,100,97,116,101]),Fe=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),qe=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Ye=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),$e=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Xe=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Je=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),E=class extends x{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case h.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=Fe,this._bitmask=255,this._pkcs8AlgId=$e;break;case h.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=qe,this._bitmask=255,this._pkcs8AlgId=Xe;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Ye,this._bitmask=1,this._pkcs8AlgId=Je;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new P(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new m(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return me(t.d)}catch(t){throw new P(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new m(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new m(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,Z)}catch(e){throw new p(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(c,Q,new Uint8Array(e)),r=new V(this._nSk);for(let a=0;r.isZero()||!r.lessThan(this._order);a++){if(a>255)throw new Error("Faild to derive a key pair");let s=new Uint8Array(await this._hkdf.labeledExpand(t,Ge,w(a,1),this._nSk));s[0]=s[0]&this._bitmask,r.set(s)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new G(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new m(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new P(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,Z)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,Z)}};var ee=class extends S{constructor(){let e=new L,t=new E(h.DhkemP256HkdfSha256,e);super(h.DhkemP256HkdfSha256,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}},te=class extends S{constructor(){let e=new O,t=new E(h.DhkemP384HkdfSha384,e);super(h.DhkemP384HkdfSha384,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}},re=class extends S{constructor(){let e=new j,t=new E(h.DhkemP521HkdfSha512,e);super(h.DhkemP521HkdfSha512,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var ce=class extends J{},le=class extends ee{},he=class extends te{},fe=class extends re{},de=class extends L{},ye=class extends O{},be=class extends j{};var H=class{constructor(e,t,r,n=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=r,this.algorithm={name:e},this.usages=n,r==="public"&&(this.usages=[])}};var pe=class{constructor(e,t,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=t,this._b=r,this._kdf=n;let a=new Uint8Array(W);a.set(w(this.id,2),3),this._kdf.init(a)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new P(t)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(t){throw new m(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new P(t)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(t){throw new m(t)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),t=await this._b.generateKeyPair(),r=await this._a.serializePublicKey(e.publicKey),n=await this._a.serializePrivateKey(e.privateKey),a=await this._b.serializePublicKey(t.publicKey),s=await this._b.serializePrivateKey(t.privateKey);return{publicKey:await this.deserializePublicKey(d(new Uint8Array(r),new Uint8Array(a))),privateKey:await this.deserializePrivateKey(d(new Uint8Array(n),new Uint8Array(s)))}}async deriveKeyPair(e){let t=await this._kdf.labeledExtract(c,Q,new Uint8Array(e)),r=new Uint8Array(await this._kdf.labeledExpand(t,Pe,c,96)),n=r.slice(0,32),a=r.slice(32,96),s=await this._a.deriveKeyPair(n),o=await this._b.deriveKeyPair(a),u=await this._a.serializePublicKey(s.publicKey),y=await this._a.serializePrivateKey(s.privateKey),b=await this._b.serializePublicKey(o.publicKey),I=await this._b.serializePrivateKey(o.privateKey);return{publicKey:await this.deserializePublicKey(d(new Uint8Array(u),new Uint8Array(b))),privateKey:await this.deserializePrivateKey(d(new Uint8Array(y),new Uint8Array(I)))}}async importKey(e,t,r=!0){if(e!=="raw")throw new p("'jwk' is not supported");if(!(t instanceof ArrayBuffer))throw new l("Invalid type of key");return r?await this.deserializePublicKey(t):await this.deserializePrivateKey(t)}async encap(e){let t,r;if(e.ekm!==void 0&&!v(e.ekm)){if(e.ekm.byteLength!==64)throw new l("ekm must be 64 bytes in length");t=e.ekm.slice(0,32),r=e.ekm.slice(32)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),a=await this._a.deserializePublicKey(n.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(n.slice(this._a.publicKeySize)),o=await this._a.encap({recipientPublicKey:a,ekm:t}),u=await this._b.encap({recipientPublicKey:s,ekm:r});return{sharedSecret:d(new Uint8Array(o.sharedSecret),new Uint8Array(u.sharedSecret)),enc:d(new Uint8Array(o.enc),new Uint8Array(u.enc))}}async decap(e){let t=v(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,r=new Uint8Array(await this.serializePrivateKey(t)),n=await this._a.deserializePrivateKey(r.slice(0,this._a.privateKeySize)),a=await this._b.deserializePrivateKey(r.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:n,enc:e.enc.slice(0,this._a.encSize)}),o=await this._b.decap({recipientKey:a,enc:e.enc.slice(this._a.encSize)});return d(new Uint8Array(s),new Uint8Array(o))}_serializePublicKey(e){return new Promise((t,r)=>{e.type!=="public"&&r(new Error("Not public key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePublicKey(e){return new Promise((t,r)=>{e.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((t,r)=>{e.type!=="private"&&r(new Error("Not private key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((t,r)=>{e.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};export{k as AeadId,F as Aes128Gcm,se as Aes256Gcm,ie as BaseError,ce as CipherSuite,T as DecapError,G as DeriveKeyPairError,m as DeserializeError,S as Dhkem,le as DhkemP256HkdfSha256,he as DhkemP384HkdfSha384,fe as DhkemP521HkdfSha512,E as Ec,N as EncapError,B as ExportError,oe as ExportOnly,de as HkdfSha256,ye as HkdfSha384,be as HkdfSha512,f as HpkeError,pe as Hybridkem,K as INPUT_LENGTH_LIMIT,l as InvalidParamError,A as KdfId,h as KemId,R as MessageLimitReachedError,p as NotSupportedError,M as OpenError,C as SealError,P as SerializeError,_e as ValidationError,H as XCryptoKey}; +var Y=class extends Error{constructor(e){let t;e instanceof Error?t=e.message:typeof e=="string"?t=e:t="",super(t),this.name=this.constructor.name}},d=class extends Y{},l=class extends d{},ne=class extends d{},g=class extends d{},x=class extends d{},D=class extends d{},N=class extends d{},T=class extends d{},B=class extends d{},M=class extends d{},C=class extends d{},R=class extends d{},y=class extends d{};var Ee={},ge=Ie(globalThis,Ee);function Ie(i,e){return new Proxy(i,{get(t,r,n){return r in e?e[r]:i[r]},set(t,r,n){return r in e&&delete e[r],i[r]=n,!0},deleteProperty(t,r){let n=!1;return r in e&&(delete e[r],n=!0),r in i&&(delete i[r],n=!0),n},ownKeys(t){let r=Reflect.ownKeys(i),n=Reflect.ownKeys(e),a=new Set(n);return[...r.filter(s=>!a.has(s)),...n]},defineProperty(t,r,n){return r in e&&delete e[r],Reflect.defineProperty(i,r,n),!0},getOwnPropertyDescriptor(t,r){return r in e?Reflect.getOwnPropertyDescriptor(e,r):Reflect.getOwnPropertyDescriptor(i,r)},has(t,r){return r in e||r in i}})}async function Ue(){if(ge!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:i}=await import("crypto");return i.subtle}catch(i){throw new y(i)}}var m=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await Ue())}};var P={Base:0,Psk:1,Auth:2,AuthPsk:3},h={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},A={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},K={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var c=new Uint8Array(0);var G=new Uint8Array([75,69,77,0,0]);var k=i=>typeof i=="object"&&i!==null&&typeof i.privateKey=="object"&&typeof i.publicKey=="object";function b(i,e){if(e<=0)throw new Error("i2Osp: too small size");if(i>=256**e)throw new Error("i2Osp: too large integer");let t=new Uint8Array(e);for(let r=0;r>8;return t}function f(i,e){let t=new Uint8Array(i.length+e.length);return t.set(i,0),t.set(e,i.length),t}function Pe(i){let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=atob(e),r=new Uint8Array(t.length);for(let n=0;n8192)throw new l("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;e.ekm===void 0?t=await this.generateKeyPair():k(e.ekm)?t=e.ekm:t=await this.deriveKeyPair(e.ekm);let r=await this._prim.serializePublicKey(t.publicKey),n=await this._prim.serializePublicKey(e.recipientPublicKey);try{let a;if(e.senderKey===void 0)a=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{let o=k(e.senderKey)?e.senderKey.privateKey:e.senderKey,p=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),w=new Uint8Array(await this._prim.dh(o,e.recipientPublicKey));a=f(p,w)}let s;if(e.senderKey===void 0)s=f(new Uint8Array(r),new Uint8Array(n));else{let o=k(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),p=await this._prim.serializePublicKey(o);s=je(new Uint8Array(r),new Uint8Array(n),new Uint8Array(p))}let u=await this._generateSharedSecret(a,s);return{enc:r,sharedSecret:u}}catch(a){throw new D(a)}}async decap(e){let t=await this._prim.deserializePublicKey(e.enc),r=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=k(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),a=await this._prim.serializePublicKey(n);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(r,t));else{let o=new Uint8Array(await this._prim.dh(r,t)),p=new Uint8Array(await this._prim.dh(r,e.senderPublicKey));s=f(o,p)}let u;if(e.senderPublicKey===void 0)u=f(new Uint8Array(e.enc),new Uint8Array(a));else{let o=await this._prim.serializePublicKey(e.senderPublicKey);u=new Uint8Array(e.enc.byteLength+a.byteLength+o.byteLength),u.set(new Uint8Array(e.enc),0),u.set(new Uint8Array(a),e.enc.byteLength),u.set(new Uint8Array(o),e.enc.byteLength+a.byteLength)}return await this._generateSharedSecret(s,u)}catch(s){throw new N(s)}}async _generateSharedSecret(e,t){let r=this._kdf.buildLabeledIkm(Le,e),n=this._kdf.buildLabeledInfo(Oe,t,this.secretSize);return await this._kdf.extractAndExpand(c,r,n,this.secretSize)}};var $=["deriveBits"],F=new Uint8Array([100,107,112,95,112,114,107]),se=new Uint8Array([115,107]);var X=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}};var He=new Uint8Array([99,97,110,100,105,100,97,116,101]),De=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),Ne=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Te=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Be=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Me=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Ce=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),E=class extends m{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case h.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=De,this._bitmask=255,this._pkcs8AlgId=Be;break;case h.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=Ne,this._bitmask=255,this._pkcs8AlgId=Me;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Te,this._bitmask=1,this._pkcs8AlgId=Ce;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(t){throw new g(t)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(t){throw new x(t)}}async serializePrivateKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return Pe(t.d)}catch(t){throw new g(t)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(t){throw new x(t)}}async importKey(e,t,r){await this._setup();try{if(e==="raw")return await this._importRawKey(t,r);if(t instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(t,r)}catch(n){throw new x(n)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,$)}catch(e){throw new y(e)}}async deriveKeyPair(e){await this._setup();try{let t=await this._hkdf.labeledExtract(c,F,new Uint8Array(e)),r=new X(this._nSk);for(let a=0;r.isZero()||!r.lessThan(this._order);a++){if(a>255)throw new Error("Faild to derive a key pair");let s=new Uint8Array(await this._hkdf.labeledExpand(t,He,b(a,1),this._nSk));s[0]=s[0]&this._bitmask,r.set(s)}let n=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:n,publicKey:await this.derivePublicKey(n)}}catch(t){throw new R(t)}}async derivePublicKey(e){await this._setup();try{let t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(t){throw new x(t)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,this._nDh*8)}catch(r){throw new g(r)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,$)}async _deserializePkcs8Key(e){let t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,$)}};var ue=["encrypt","decrypt"];var ce=class extends m{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(n,this._key,t)}async open(e,t,r){await this._setupKey();let n={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(n,this._key,t)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,ue)}},J=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new ce(e)}},le=class extends J{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var he=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:K.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new y("Export only")}};function de(){return new Promise((i,e)=>{e(new y("Not supported"))})}var Re=new Uint8Array([115,101,99]),z=class{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await de()}async open(e,t){return await de()}async export(e,t){if(e.byteLength>8192)throw new l("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Re,new Uint8Array(e),t)}catch(r){throw new T(r)}}},W=class extends z{},Z=class extends z{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}};var U=class extends z{constructor(e,t,r){if(super(e,t,r.exporterSecret),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nK",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nN",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_ctx",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),r.key===void 0||r.baseNonce===void 0||r.seq===void 0)throw new Error("Required parameters are missing");this._aead=r.aead,this._nK=this._aead.keySize,this._nN=this._aead.nonceSize,this._nT=this._aead.tagSize;let n=this._aead.createEncryptionContext(r.key);this._ctx={key:n,baseNonce:r.baseNonce,seq:r.seq}}computeNonce(e){let t=b(e.seq,e.baseNonce.byteLength);return ae(e.baseNonce,t)}incrementSeq(e){if(e.seq>Number.MAX_SAFE_INTEGER)throw new C("Message limit reached");e.seq+=1}};var V=class extends U{async open(e,t=c){let r;try{r=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(n){throw new M(n)}return this.incrementSeq(this._ctx),r}};var Q=class extends U{constructor(e,t,r,n){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=n}async seal(e,t=c){let r;try{r=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(n){throw new B(n)}return this.incrementSeq(this._ctx),r}};var Ge=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),Fe=new Uint8Array([101,120,112]),qe=new Uint8Array([105,110,102,111,95,104,97,115,104]),Ye=new Uint8Array([107,101,121]),$e=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Xe=new Uint8Array([115,101,99,114,101,116]),Je=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),ee=class extends m{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new l("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new l("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new l("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Je),this._suiteId.set(b(this._kem.id,2),4),this._suiteId.set(b(this._kdf.id,2),6),this._suiteId.set(b(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.encap(e),r;return e.psk!==void 0?r=e.senderKey!==void 0?P.AuthPsk:P.Psk:r=e.senderKey!==void 0?P.Auth:P.Base,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let t=await this._kem.decap(e),r;return e.psk!==void 0?r=e.senderPublicKey!==void 0?P.AuthPsk:P.Psk:r=e.senderPublicKey!==void 0?P.Auth:P.Base,await this._keyScheduleR(r,t,e)}async seal(e,t,r=c){let n=await this.createSenderContext(e);return{ct:await n.seal(t,r),enc:n.enc}}async open(e,t,r=c){return await(await this.createRecipientContext(e)).open(t,r)}async _keySchedule(e,t,r){let n=r.psk===void 0?c:new Uint8Array(r.psk.id),a=await this._kdf.labeledExtract(c,$e,n),s=r.info===void 0?c:new Uint8Array(r.info),u=await this._kdf.labeledExtract(c,qe,s),o=new Uint8Array(1+a.byteLength+u.byteLength);o.set(new Uint8Array([e]),0),o.set(new Uint8Array(a),1),o.set(new Uint8Array(u),1+a.byteLength);let p=r.psk===void 0?c:new Uint8Array(r.psk.key),w=this._kdf.buildLabeledIkm(Xe,p),I=this._kdf.buildLabeledInfo(Fe,o,this._kdf.hashSize),_=await this._kdf.extractAndExpand(t,w,I,this._kdf.hashSize);if(this._aead.id===K.ExportOnly)return{aead:this._aead,exporterSecret:_};let Ke=this._kdf.buildLabeledInfo(Ye,o,this._aead.keySize),ve=await this._kdf.extractAndExpand(t,w,Ke,this._aead.keySize),Ae=this._kdf.buildLabeledInfo(Ge,o,this._aead.nonceSize),Se=await this._kdf.extractAndExpand(t,w,Ae,this._aead.nonceSize);return{aead:this._aead,exporterSecret:_,key:ve,baseNonce:new Uint8Array(Se),seq:0}}async _keyScheduleS(e,t,r,n){let a=await this._keySchedule(e,t,n);return a.key===void 0?new Z(this._api,this._kdf,a.exporterSecret,r):new Q(this._api,this._kdf,a,r)}async _keyScheduleR(e,t,r){let n=await this._keySchedule(e,t,r);return n.key===void 0?new W(this._api,this._kdf,n.exporterSecret):new V(this._api,this._kdf,n)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new l("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new l(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new l("Too long psk.key");if(e.psk.id.byteLength>8192)throw new l("Too long psk.id")}}};var ke=new Uint8Array([72,80,75,69,45,118,49]),q=class extends m{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:c}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();let r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(ke,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();let n=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return n.set(new Uint8Array([0,r]),0),n.set(ke,2),n.set(this._suiteId,9),n.set(e,9+this._suiteId.byteLength),n.set(t,9+this._suiteId.byteLength+e.byteLength),n}async extract(e,t){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new l("The salt length must be the same as the hashSize");let r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),a=new ArrayBuffer(r),s=new Uint8Array(a),u=c,o=new Uint8Array(t),p=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");let w=new Uint8Array(this.hashSize+o.length+1);for(let I=1,_=0;_=u.length?(s.set(u,_),_+=u.length):(s.set(u.slice(0,s.length-_),_),_+=s.length-_);return a}async extractAndExpand(e,t,r,n){await this._setup();let a=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},a,n*8)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r))}async labeledExpand(e,t,r,n){return await this.expand(e,this.buildLabeledInfo(t,r,n),n)}_checkInit(){if(this._suiteId===c)throw new Error("Not initialized. Call init()")}},L=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},O=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},j=class extends q{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:A.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var te=class extends S{constructor(){let e=new L,t=new E(h.DhkemP256HkdfSha256,e);super(h.DhkemP256HkdfSha256,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}},re=class extends S{constructor(){let e=new O,t=new E(h.DhkemP384HkdfSha384,e);super(h.DhkemP384HkdfSha384,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}},ie=class extends S{constructor(){let e=new j,t=new E(h.DhkemP521HkdfSha512,e);super(h.DhkemP521HkdfSha512,t,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var fe=class extends ee{},ye=class extends te{},be=class extends re{},pe=class extends ie{},we=class extends L{},_e=class extends O{},xe=class extends j{};var H=class{constructor(e,t,r,n=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=t,this.type=r,this.algorithm={name:e},this.usages=n,r==="public"&&(this.usages=[])}};var me=class{constructor(e,t,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:h.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=t,this._b=r,this._kdf=n;let a=new Uint8Array(G);a.set(b(this.id,2),3),this._kdf.init(a)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(t){throw new g(t)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(t){throw new x(t)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(t){throw new g(t)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(t){throw new x(t)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),t=await this._b.generateKeyPair(),r=await this._a.serializePublicKey(e.publicKey),n=await this._a.serializePrivateKey(e.privateKey),a=await this._b.serializePublicKey(t.publicKey),s=await this._b.serializePrivateKey(t.privateKey);return{publicKey:await this.deserializePublicKey(f(new Uint8Array(r),new Uint8Array(a))),privateKey:await this.deserializePrivateKey(f(new Uint8Array(n),new Uint8Array(s)))}}async deriveKeyPair(e){let t=await this._kdf.labeledExtract(c,F,new Uint8Array(e)),r=new Uint8Array(await this._kdf.labeledExpand(t,se,c,96)),n=r.slice(0,32),a=r.slice(32,96),s=await this._a.deriveKeyPair(n),u=await this._b.deriveKeyPair(a),o=await this._a.serializePublicKey(s.publicKey),p=await this._a.serializePrivateKey(s.privateKey),w=await this._b.serializePublicKey(u.publicKey),I=await this._b.serializePrivateKey(u.privateKey);return{publicKey:await this.deserializePublicKey(f(new Uint8Array(o),new Uint8Array(w))),privateKey:await this.deserializePrivateKey(f(new Uint8Array(p),new Uint8Array(I)))}}async importKey(e,t,r=!0){if(e!=="raw")throw new y("'jwk' is not supported");if(!(t instanceof ArrayBuffer))throw new l("Invalid type of key");return r?await this.deserializePublicKey(t):await this.deserializePrivateKey(t)}async encap(e){let t,r;if(e.ekm!==void 0&&!k(e.ekm)){if(e.ekm.byteLength!==64)throw new l("ekm must be 64 bytes in length");t=e.ekm.slice(0,32),r=e.ekm.slice(32)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),a=await this._a.deserializePublicKey(n.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(n.slice(this._a.publicKeySize)),u=await this._a.encap({recipientPublicKey:a,ekm:t}),o=await this._b.encap({recipientPublicKey:s,ekm:r});return{sharedSecret:f(new Uint8Array(u.sharedSecret),new Uint8Array(o.sharedSecret)),enc:f(new Uint8Array(u.enc),new Uint8Array(o.enc))}}async decap(e){let t=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,r=new Uint8Array(await this.serializePrivateKey(t)),n=await this._a.deserializePrivateKey(r.slice(0,this._a.privateKeySize)),a=await this._b.deserializePrivateKey(r.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:n,enc:e.enc.slice(0,this._a.encSize)}),u=await this._b.decap({recipientKey:a,enc:e.enc.slice(this._a.encSize)});return f(new Uint8Array(s),new Uint8Array(u))}_serializePublicKey(e){return new Promise((t,r)=>{e.type!=="public"&&r(new Error("Not public key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePublicKey(e){return new Promise((t,r)=>{e.byteLength!==this.publicKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((t,r)=>{e.type!=="private"&&r(new Error("Not private key")),e.algorithm.name!==this.name&&r(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.key.byteLength}`)),t(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((t,r)=>{e.byteLength!==this.privateKeySize&&r(new Error(`Invalid key length: ${e.byteLength}`)),t(new H(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};export{K as AeadId,J as Aes128Gcm,le as Aes256Gcm,Y as BaseError,fe as CipherSuite,N as DecapError,R as DeriveKeyPairError,x as DeserializeError,ye as DhkemP256HkdfSha256,be as DhkemP384HkdfSha384,pe as DhkemP521HkdfSha512,D as EncapError,T as ExportError,he as ExportOnly,we as HkdfSha256,_e as HkdfSha384,xe as HkdfSha512,d as HpkeError,me as Hybridkem,l as InvalidParamError,A as KdfId,h as KemId,C as MessageLimitReachedError,y as NotSupportedError,M as OpenError,B as SealError,g as SerializeError,ne as ValidationError,H as XCryptoKey}; diff --git a/hybridkem-x25519-kyber768/src/hpke-hybridkem-x25519-kyber768.js b/hybridkem-x25519-kyber768/src/hpke-hybridkem-x25519-kyber768.js index 78ea3e9d1..54f8a0b99 100644 --- a/hybridkem-x25519-kyber768/src/hpke-hybridkem-x25519-kyber768.js +++ b/hybridkem-x25519-kyber768/src/hpke-hybridkem-x25519-kyber768.js @@ -1,4 +1,4 @@ -var vr={},Pt=Pr(globalThis,vr);function Pr(t,e){return new Proxy(t,{get(r,n,i){return n in e?e[n]:t[n]},set(r,n,i){return n in e&&delete e[n],t[n]=i,!0},deleteProperty(r,n){let i=!1;return n in e&&(delete e[n],i=!0),n in t&&(delete t[n],i=!0),i},ownKeys(r){let n=Reflect.ownKeys(t),i=Reflect.ownKeys(e),o=new Set(i);return[...n.filter(s=>!o.has(s)),...i]},defineProperty(r,n,i){return n in e&&delete e[n],Reflect.defineProperty(t,n,i),!0},getOwnPropertyDescriptor(r,n){return n in e?Reflect.getOwnPropertyDescriptor(e,n):Reflect.getOwnPropertyDescriptor(t,n)},has(r,n){return n in e||n in t}})}var pe=class extends Error{constructor(e){let r;e instanceof Error?r=e.message:typeof e=="string"?r=e:r="",super(r),this.name=this.constructor.name}},T=class extends pe{},x=class extends T{};var P=class extends T{},k=class extends T{},ae=class extends T{},ce=class extends T{};var Z=class extends T{},S=class extends T{};async function Kr(){if(Pt!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:t}=await import("crypto");return t.subtle}catch(t){throw new S(t)}}var Y=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await Kr())}};var v={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},be={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3};var K=new Uint8Array(0);var qn=new Uint8Array([115,101,99]);var N=t=>typeof t=="object"&&t!==null&&typeof t.privateKey=="object"&&typeof t.publicKey=="object";function Q(t,e){if(e<=0)throw new Error("i2Osp: too small size");if(t>=256**e)throw new Error("i2Osp: too large integer");let r=new Uint8Array(e);for(let n=0;n>8;return r}function A(t,e){let r=new Uint8Array(t.length+e.length);return r.set(t,0),r.set(e,t.length),r}var xi=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),ki=new Uint8Array([101,120,112]),vi=new Uint8Array([105,110,102,111,95,104,97,115,104]),Pi=new Uint8Array([107,101,121]),Si=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Ki=new Uint8Array([115,101,99,114,101,116]),Ai=new Uint8Array([72,80,75,69,0,0,0,0,0,0]);var St=new Uint8Array([72,80,75,69,45,118,49]),Ye=class extends Y{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:be.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:K}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,r){this._checkInit();let n=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+r.byteLength);return n.set(St,0),n.set(this._suiteId,7),n.set(e,7+this._suiteId.byteLength),n.set(r,7+this._suiteId.byteLength+e.byteLength),n}buildLabeledInfo(e,r,n){this._checkInit();let i=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+r.byteLength);return i.set(new Uint8Array([0,n]),0),i.set(St,2),i.set(this._suiteId,9),i.set(e,9+this._suiteId.byteLength),i.set(r,9+this._suiteId.byteLength+e.byteLength),i}async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new x("The salt length must be the same as the hashSize");let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}async expand(e,r,n){await this._setup();let i=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),o=new ArrayBuffer(n),s=new Uint8Array(o),a=K,u=new Uint8Array(r),l=new Uint8Array(1);if(n>255*this.hashSize)throw new Error("Entropy limit reached");let c=new Uint8Array(this.hashSize+u.length+1);for(let f=1,d=0;d=a.length?(s.set(a,d),d+=a.length):(s.set(a.slice(0,s.length-d),d),d+=s.length-d);return o}async extractAndExpand(e,r,n,i){await this._setup();let o=await this._api.importKey("raw",r,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:n},o,i*8)}async labeledExtract(e,r,n){return await this.extract(e,this.buildLabeledIkm(r,n))}async labeledExpand(e,r,n,i){return await this.expand(e,this.buildLabeledInfo(r,n,i),i)}_checkInit(){if(this._suiteId===K)throw new Error("Not initialized. Call init()")}},we=class extends Ye{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:be.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}};var Se=new Uint8Array([75,69,77,0,0]);var Lr=new Uint8Array([101,97,101,95,112,114,107]),Br=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function Ur(t,e,r){let n=new Uint8Array(t.length+e.length+r.length);return n.set(t,0),n.set(e,t.length),n.set(r,t.length+e.length),n}var J=class{constructor(e,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=r,this._kdf=n;let i=new Uint8Array(Se);i.set(Q(this.id,2),3),this._kdf.init(i)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,r,n=!0){return await this._prim.importKey(e,r,n)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new x("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let r;e.ekm===void 0?r=await this.generateKeyPair():N(e.ekm)?r=e.ekm:r=await this.deriveKeyPair(e.ekm);let n=await this._prim.serializePublicKey(r.publicKey),i=await this._prim.serializePublicKey(e.recipientPublicKey);try{let o;if(e.senderKey===void 0)o=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey));else{let u=N(e.senderKey)?e.senderKey.privateKey:e.senderKey,l=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey)),c=new Uint8Array(await this._prim.dh(u,e.recipientPublicKey));o=A(l,c)}let s;if(e.senderKey===void 0)s=A(new Uint8Array(n),new Uint8Array(i));else{let u=N(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),l=await this._prim.serializePublicKey(u);s=Ur(new Uint8Array(n),new Uint8Array(i),new Uint8Array(l))}let a=await this._generateSharedSecret(o,s);return{enc:n,sharedSecret:a}}catch(o){throw new ae(o)}}async decap(e){let r=await this._prim.deserializePublicKey(e.enc),n=N(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,i=N(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),o=await this._prim.serializePublicKey(i);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(n,r));else{let u=new Uint8Array(await this._prim.dh(n,r)),l=new Uint8Array(await this._prim.dh(n,e.senderPublicKey));s=A(u,l)}let a;if(e.senderPublicKey===void 0)a=A(new Uint8Array(e.enc),new Uint8Array(o));else{let u=await this._prim.serializePublicKey(e.senderPublicKey);a=new Uint8Array(e.enc.byteLength+o.byteLength+u.byteLength),a.set(new Uint8Array(e.enc),0),a.set(new Uint8Array(o),e.enc.byteLength),a.set(new Uint8Array(u),e.enc.byteLength+o.byteLength)}return await this._generateSharedSecret(s,a)}catch(s){throw new ce(s)}}async _generateSharedSecret(e,r){let n=this._kdf.buildLabeledIkm(Lr,e),i=this._kdf.buildLabeledInfo(Br,r,this.secretSize);return await this._kdf.extractAndExpand(K,n,i,this.secretSize)}};var Qe=new Uint8Array([100,107,112,95,112,114,107]),Kt=new Uint8Array([115,107]);var Qi=new Uint8Array([99,97,110,100,105,100,97,116,101]),Ji=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),eo=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),to=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),ro=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),no=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),io=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]);var me=class extends we{};var g=class{constructor(e,r,n,i=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=r,this.type=n,this.algorithm={name:e},this.usages=i,n==="public"&&(this.usages=[])}};var _e=class{constructor(e,r,n,i){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:v.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=r,this._b=n,this._kdf=i;let o=new Uint8Array(Se);o.set(Q(this.id,2),3),this._kdf.init(o)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(r){throw new P(r)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(r){throw new k(r)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(r){throw new P(r)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(r){throw new k(r)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),r=await this._b.generateKeyPair(),n=await this._a.serializePublicKey(e.publicKey),i=await this._a.serializePrivateKey(e.privateKey),o=await this._b.serializePublicKey(r.publicKey),s=await this._b.serializePrivateKey(r.privateKey);return{publicKey:await this.deserializePublicKey(A(new Uint8Array(n),new Uint8Array(o))),privateKey:await this.deserializePrivateKey(A(new Uint8Array(i),new Uint8Array(s)))}}async deriveKeyPair(e){let r=await this._kdf.labeledExtract(K,Qe,new Uint8Array(e)),n=new Uint8Array(await this._kdf.labeledExpand(r,Kt,K,96)),i=n.slice(0,32),o=n.slice(32,96),s=await this._a.deriveKeyPair(i),a=await this._b.deriveKeyPair(o),u=await this._a.serializePublicKey(s.publicKey),l=await this._a.serializePrivateKey(s.privateKey),c=await this._b.serializePublicKey(a.publicKey),f=await this._b.serializePrivateKey(a.privateKey);return{publicKey:await this.deserializePublicKey(A(new Uint8Array(u),new Uint8Array(c))),privateKey:await this.deserializePrivateKey(A(new Uint8Array(l),new Uint8Array(f)))}}async importKey(e,r,n=!0){if(e!=="raw")throw new S("'jwk' is not supported");if(!(r instanceof ArrayBuffer))throw new x("Invalid type of key");return n?await this.deserializePublicKey(r):await this.deserializePrivateKey(r)}async encap(e){let r,n;if(e.ekm!==void 0&&!N(e.ekm)){if(e.ekm.byteLength!==64)throw new x("ekm must be 64 bytes in length");r=e.ekm.slice(0,32),n=e.ekm.slice(32)}let i=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),o=await this._a.deserializePublicKey(i.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(i.slice(this._a.publicKeySize)),a=await this._a.encap({recipientPublicKey:o,ekm:r}),u=await this._b.encap({recipientPublicKey:s,ekm:n});return{sharedSecret:A(new Uint8Array(a.sharedSecret),new Uint8Array(u.sharedSecret)),enc:A(new Uint8Array(a.enc),new Uint8Array(u.enc))}}async decap(e){let r=N(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=new Uint8Array(await this.serializePrivateKey(r)),i=await this._a.deserializePrivateKey(n.slice(0,this._a.privateKeySize)),o=await this._b.deserializePrivateKey(n.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:i,enc:e.enc.slice(0,this._a.encSize)}),a=await this._b.decap({recipientKey:o,enc:e.enc.slice(this._a.encSize)});return A(new Uint8Array(s),new Uint8Array(a))}_serializePublicKey(e){return new Promise((r,n)=>{e.type!=="public"&&n(new Error("Not public key")),e.algorithm.name!==this.name&&n(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&n(new Error(`Invalid key length: ${e.key.byteLength}`)),r(e.key.buffer)})}_deserializePublicKey(e){return new Promise((r,n)=>{e.byteLength!==this.publicKeySize&&n(new Error(`Invalid key length: ${e.byteLength}`)),r(new g(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((r,n)=>{e.type!=="private"&&n(new Error("Not private key")),e.algorithm.name!==this.name&&n(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&n(new Error(`Invalid key length: ${e.key.byteLength}`)),r(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((r,n)=>{e.byteLength!==this.privateKeySize&&n(new Error(`Invalid key length: ${e.byteLength}`)),r(new g(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};function ge(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`positive integer expected, not ${t}`)}function Tr(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function ee(t,...e){if(!Tr(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${t.length}`)}function At(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");ge(t.outputLen),ge(t.blockLen)}function j(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function Ke(t,e){ee(t);let r=e.outputLen;if(t.lengthnew Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),Ae=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),O=(t,e)=>t<<32-e|t>>>e;var Je=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,Nr=t=>t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255;function et(t){for(let e=0;et().update(M(n)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e}function Lt(t){let e=(n,i)=>t(i).update(M(n)).digest(),r=t({});return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=n=>t(n),e}function Bt(t=32){if(te&&typeof te.getRandomValues=="function")return te.getRandomValues(new Uint8Array(t));if(te&&typeof te.randomBytes=="function")return te.randomBytes(t);throw new Error("crypto.getRandomValues must be defined")}var Ie=class extends R{constructor(e,r){super(),this.finished=!1,this.destroyed=!1,At(e);let n=M(r);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(n.length>i?e.create().update(n).digest():n);for(let s=0;snew Ie(t,e).update(r).digest();tt.create=(t,e)=>new Ie(t,e);function jr(t,e,r,n){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,r,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(r>>i&o),a=Number(r&o),u=n?4:0,l=n?0:4;t.setUint32(e+u,s,n),t.setUint32(e+l,a,n)}var Ut=(t,e,r)=>t&e^~t&r,zt=(t,e,r)=>t&e^t&r^e&r,Le=class extends R{constructor(e,r,n,i){super(),this.blockLen=e,this.outputLen=r,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Ae(this.buffer)}update(e){j(this);let{view:r,buffer:n,blockLen:i}=this;e=M(e);let o=e.length;for(let s=0;si-s&&(this.process(n,0),s=0);for(let f=s;fc.length)throw new Error("_sha2: outputLen bigger than state");for(let f=0;f>>3,H=O(w,17)^O(w,19)^w>>>10;$[f]=H+$[f-7]+h+$[f-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:u,G:l,H:c}=this;for(let f=0;f<64;f++){let d=O(a,6)^O(a,11)^O(a,25),w=c+d+Ut(a,u,l)+Dr[f]+$[f]|0,H=(O(n,2)^O(n,13)^O(n,22))+zt(n,i,o)|0;c=l,l=u,u=a,a=s+w|0,s=o,o=i,i=n,n=w+H|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,u=u+this.F|0,l=l+this.G|0,c=c+this.H|0,this.set(n,i,o,s,a,u,l,c)}roundClean(){$.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Ot=Ee(()=>new rt);var re=class extends me{async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return tt(Ot,new Uint8Array(e),new Uint8Array(r));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}};var Be=BigInt(4294967295),Ht=BigInt(32);function Cr(t,e=!1){return e?{h:Number(t&Be),l:Number(t>>Ht&Be)}:{h:Number(t>>Ht&Be)|0,l:Number(t&Be)|0}}function Tt(t,e=!1){let r=new Uint32Array(t.length),n=new Uint32Array(t.length);for(let i=0;it<>>32-r,jt=(t,e,r)=>e<>>32-r,Dt=(t,e,r)=>e<>>64-r,Ct=(t,e,r)=>t<>>64-r;var Rr=BigInt(0);function it(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function Mt(t){if(!it(t))throw new Error("Uint8Array expected")}var Mr=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function qr(t){Mt(t);let e="";for(let r=0;r=D._0&&t<=D._9)return t-D._0;if(t>=D._A&&t<=D._F)return t-(D._A-10);if(t>=D._a&&t<=D._f)return t-(D._a-10)}function qt(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);let e=t.length,r=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(r);for(let i=0,o=0;itypeof t=="bigint"&&Rr<=t;function Fr(t,e,r){return nt(t)&&nt(e)&&nt(r)&&e<=t&&ttypeof t=="bigint",function:t=>typeof t=="function",boolean:t=>typeof t=="boolean",string:t=>typeof t=="string",stringOrUint8Array:t=>typeof t=="string"||it(t),isSafeInteger:t=>Number.isSafeInteger(t),array:t=>Array.isArray(t),field:(t,e)=>e.Fp.isValid(t),hash:t=>typeof t=="function"&&Number.isSafeInteger(t.outputLen)};function Gt(t,e,r={}){let n=(i,o,s)=>{let a=Vr[o];if(typeof a!="function")throw new Error(`Invalid validator "${o}", expected function`);let u=t[i];if(!(s&&u===void 0)&&!a(u,t))throw new Error(`Invalid param ${String(i)}=${u} (${typeof u}), expected ${o}`)};for(let[i,o]of Object.entries(e))n(i,o,!1);for(let[i,o]of Object.entries(r))n(i,o,!0);return t}var le=BigInt(0),Ue=BigInt(1),bs=BigInt(2),ws=BigInt(3),ms=BigInt(4),_s=BigInt(5),gs=BigInt(8),xs=BigInt(9),ks=BigInt(16);function ze(t,e){let r=t%e;return r>=le?r:e+r}function Ft(t,e,r){if(r<=le||e 0");if(r===Ue)return le;let n=Ue;for(;e>le;)e&Ue&&(n=n*t%r),t=t*t%r,e>>=Ue;return n}function L(t,e,r){let n=t;for(;e-- >le;)n*=n,n%=r;return n}var fe=BigInt(0),ct=BigInt(1);function Xr(t){return Gt(t,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...t})}function Vt(t){let e=Xr(t),{P:r}=e,n=p=>ze(p,r),i=e.montgomeryBits,o=Math.ceil(i/8),s=e.nByteLength,a=e.adjustScalarBytes||(p=>p),u=e.powPminus2||(p=>Ft(p,r-BigInt(2),r));function l(p,_,E){let oe=n(p*(_-E));return _=n(_-oe),E=n(E+oe),[_,E]}let c=(e.a-BigInt(2))/BigInt(4);function f(p,_){at("u",p,fe,r),at("scalar",_,fe,r);let E=_,oe=p,z=ct,C=fe,X=p,W=ct,se=fe,I;for(let Ve=BigInt(i-1);Ve>=fe;Ve--){let wt=E>>Ve&ct;se^=wt,I=l(se,z,X),z=I[0],X=I[1],I=l(se,C,W),C=I[0],W=I[1],se=wt;let Xe=z+C,We=n(Xe*Xe),Ze=z-C,mt=n(Ze*Ze),_t=We-mt,xr=X+W,kr=X-W,gt=n(kr*Xe),xt=n(xr*Ze),kt=gt+xt,vt=gt-xt;X=n(kt*kt),W=n(oe*n(vt*vt)),z=n(We*mt),C=n(_t*(We+n(c*_t)))}I=l(se,z,X),z=I[0],X=I[1],I=l(se,C,W),C=I[0],W=I[1];let gr=u(C);return n(z*gr)}function d(p){return $t(n(p),o)}function w(p){let _=st("u coordinate",p,o);return s===32&&(_[31]&=127),ot(_)}function h(p){let _=st("scalar",p),E=_.length;if(E!==o&&E!==s)throw new Error(`Expected ${o} or ${s} bytes, got ${E}`);return ot(a(_))}function H(p,_){let E=w(_),oe=h(p),z=f(E,oe);if(z===fe)throw new Error("Invalid private or public key received");return d(z)}let ve=d(e.Gu);function Fe(p){return H(p,ve)}return{scalarMult:H,scalarMultBase:Fe,getSharedSecret:(p,_)=>H(p,_),getPublicKey:p=>Fe(p),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:ve}}var ut=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949");var Os=BigInt(0),Wr=BigInt(1),Xt=BigInt(2),Zr=BigInt(3),Yr=BigInt(5),Hs=BigInt(8);function Qr(t){let e=BigInt(10),r=BigInt(20),n=BigInt(40),i=BigInt(80),o=ut,a=t*t%o*t%o,u=L(a,Xt,o)*a%o,l=L(u,Wr,o)*t%o,c=L(l,Yr,o)*l%o,f=L(c,e,o)*c%o,d=L(f,r,o)*f%o,w=L(d,n,o)*d%o,h=L(w,i,o)*w%o,H=L(h,i,o)*w%o,ve=L(H,e,o)*c%o;return{pow_p_5_8:L(ve,Xt,o)*t%o,b2:a}}function Jr(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}var Oe=Vt({P:ut,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:t=>{let e=ut,{pow_p_5_8:r,b2:n}=Qr(t);return ze(L(r,Zr,e)*n,e)},adjustScalarBytes:Jr,randomBytes:Bt});var he="X25519",Wt=new Uint8Array,He=["deriveBits"],en=new Uint8Array([100,107,112,95,112,114,107]),tn=new Uint8Array([115,107]);function Zt(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),n=new Uint8Array(r.length);for(let i=0;i{r(e.key.buffer)})}_serializePrivateKey(e){return new Promise(r=>{r(e.key.buffer)})}_importRawKey(e,r){return new Promise((n,i)=>{r&&e.byteLength!==this._nPk&&i(new Error("Invalid length of the key")),!r&&e.byteLength!==this._nSk&&i(new Error("Invalid length of the key")),n(new g(he,new Uint8Array(e),r?"public":"private",r?[]:He))})}_importJWK(e,r){return new Promise((n,i)=>{(typeof e.kty>"u"||e.kty!=="OKP")&&i(new Error(`Invalid kty: ${e.kty}`)),(typeof e.crv>"u"||e.crv!=="X25519")&&i(new Error(`Invalid crv: ${e.crv}`)),r?(typeof e.d<"u"&&i(new Error("Invalid key: `d` should not be set")),typeof e.x>"u"&&i(new Error("Invalid key: `x` not found")),n(new g(he,Zt(e.x),"public"))):(typeof e.d!="string"&&i(new Error("Invalid key: `d` not found")),n(new g(he,Zt(e.d),"private",He)))})}_derivePublicKey(e){return new Promise((r,n)=>{try{let i=Oe.getPublicKey(e.key);r(new g(he,i,"public"))}catch(i){n(i)}})}_dh(e,r){return new Promise((n,i)=>{try{n(Oe.getSharedSecret(e.key,r.key).buffer)}catch(o){i(o)}})}};var Te=[2285,2571,2970,1812,1493,1422,287,202,3158,622,1577,182,962,2127,1855,1468,573,2004,264,383,2500,1458,1727,3199,2648,1017,732,608,1787,411,3124,1758,1223,652,2777,1015,2036,1491,3047,1785,516,3321,3009,2663,1711,2167,126,1469,2476,3239,3058,830,107,1908,3082,2378,2931,961,1821,2604,448,2264,677,2054,2226,430,555,843,2078,871,1550,105,422,587,177,3094,3038,2869,1574,1653,3083,778,1159,3182,2552,1483,2727,1119,1739,644,2457,349,418,329,3173,3254,817,1097,603,610,1322,2044,1864,384,2114,3193,1218,1994,2455,220,2142,1670,2144,1799,2051,794,1819,2475,2459,478,3221,3021,996,991,958,1869,1522,1628],lt=[1701,1807,1460,2371,2338,2333,308,108,2851,870,854,1510,2535,1278,1530,1185,1659,1187,3109,874,1335,2111,136,1215,2945,1465,1285,2007,2719,2726,2232,2512,75,156,3e3,2911,2980,872,2685,1590,2210,602,1846,777,147,2170,2551,246,1676,1755,460,291,235,3152,2742,2907,3224,1779,2458,1251,2486,2774,2899,1103,1275,2652,1065,2881,725,1508,2368,398,951,247,1421,3222,2499,271,90,853,1860,3203,1162,1618,666,320,8,2813,1544,282,1838,1293,2314,552,2677,2106,1571,205,2918,1542,2721,2597,2312,681,130,1602,1871,829,2946,3065,1325,2756,1861,1474,1202,2367,3147,1752,2707,171,3127,3042,1907,1836,1517,359,758,1441];var Jt=[],er=[],tr=[],rn=BigInt(0),xe=BigInt(1),nn=BigInt(2),on=BigInt(7),sn=BigInt(256),an=BigInt(113);for(let t=0,e=xe,r=1,n=0;t<24;t++){[r,n]=[n,(2*r+3*n)%5],Jt.push(2*(5*n+r)),er.push((t+1)*(t+2)/2%64);let i=rn;for(let o=0;o<7;o++)e=(e<>on)*an)%sn,e&nn&&(i^=xe<<(xe<r>32?Dt(t,e,r):Nt(t,e,r),Qt=(t,e,r)=>r>32?Ct(t,e,r):jt(t,e,r);function ln(t,e=24){let r=new Uint32Array(10);for(let n=24-e;n<24;n++){for(let s=0;s<10;s++)r[s]=t[s]^t[s+10]^t[s+20]^t[s+30]^t[s+40];for(let s=0;s<10;s+=2){let a=(s+8)%10,u=(s+2)%10,l=r[u],c=r[u+1],f=Yt(l,c,1)^r[a],d=Qt(l,c,1)^r[a+1];for(let w=0;w<50;w+=10)t[s+w]^=f,t[s+w+1]^=d}let i=t[2],o=t[3];for(let s=0;s<24;s++){let a=er[s],u=Yt(i,o,a),l=Qt(i,o,a),c=Jt[s];i=t[c],o=t[c+1],t[c]=u,t[c+1]=l}for(let s=0;s<50;s+=10){for(let a=0;a<10;a++)r[a]=t[s+a];for(let a=0;a<10;a++)t[s+a]^=~r[(a+2)%10]&r[(a+4)%10]}t[0]^=cn[n],t[1]^=un[n]}r.fill(0)}var Ne=class t extends R{constructor(e,r,n,i=!1,o=24){if(super(),this.blockLen=e,this.suffix=r,this.outputLen=n,this.enableXOF=i,this.rounds=o,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,ge(n),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=Et(this.state)}keccak(){Je||et(this.state32),ln(this.state32,this.rounds),Je||et(this.state32),this.posOut=0,this.pos=0}update(e){j(this);let{blockLen:r,state:n}=this;e=M(e);let i=e.length;for(let o=0;o=n&&this.keccak();let s=Math.min(n-this.posOut,o-i);e.set(r.subarray(this.posOut,this.posOut+s),i),this.posOut+=s,i+=s}return e}xofInto(e){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return ge(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(Ke(e,this),this.finished)throw new Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(e){let{blockLen:r,suffix:n,outputLen:i,rounds:o,enableXOF:s}=this;return e||(e=new t(r,n,i,s,o)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=o,e.suffix=n,e.outputLen=i,e.enableXOF=s,e.destroyed=this.destroyed,e}},G=(t,e,r)=>Ee(()=>new Ne(e,t,r)),Js=G(6,144,224/8),rr=G(6,136,256/8),ea=G(6,104,384/8),nr=G(6,72,512/8),ta=G(1,144,224/8),ra=G(1,136,256/8),na=G(1,104,384/8),ia=G(1,72,512/8),ir=(t,e,r)=>Lt((n={})=>new Ne(e,t,n.dkLen===void 0?r:n.dkLen,!0)),or=ir(31,168,128/8),je=ir(31,136,256/8);var ne=class extends pe{};var fn={},sr=hn(globalThis,fn);function hn(t,e){return new Proxy(t,{get(r,n,i){return n in e?e[n]:t[n]},set(r,n,i){return n in e&&delete e[n],t[n]=i,!0},deleteProperty(r,n){let i=!1;return n in e&&(delete e[n],i=!0),n in t&&(delete t[n],i=!0),i},ownKeys(r){let n=Reflect.ownKeys(t),i=Reflect.ownKeys(e),o=new Set(i);return[...n.filter(s=>!o.has(s)),...i]},defineProperty(r,n,i){return n in e&&delete e[n],Reflect.defineProperty(t,n,i),!0},getOwnPropertyDescriptor(r,n){return n in e?Reflect.getOwnPropertyDescriptor(e,n):Reflect.getOwnPropertyDescriptor(t,n)},has(r,n){return n in e||n in t}})}function B(t){return t%256}function U(t){return t>=-32768&&t<=32767?t:t<-32768?(t=t+32769,t=t%65536,32767+t):(t=t-32768,t=t%65536,-32768+t)}function y(t){return t%65536}function De(t){return t>=-2147483648&&t<=2147483647?t:t<-2147483648?(t=t+2147483649,t=t%4294967296,2147483647+t):(t=t-2147483648,t=t%4294967296,-2147483648+t)}function F(t){return t%4294967296}function ar(t,e){if(t.length!=e.length)return 0;let r=new Uint8Array([0]);for(let i=0;i>4,n[0]&=n[0]>>2,n[0]&=n[0]>>1,n[0]}async function cr(){if(sr!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto;try{let{webcrypto:t}=await import("crypto");return t}catch{throw new Error("failed to load Crypto")}}function ft(t,e,r){return je.create({dkLen:t}).update(e).update(new Uint8Array([r])).digest()}function ur(t){let e=F(t[0]);return e|=F(t[1])<<8,e|=F(t[2])<<16,e|=F(t[3])<<24,F(e)}var Me=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_k",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_du",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_dv",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_eta1",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_eta2",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_skSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_pkSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_compressedUSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_compressedVSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}async generateKeyPair(){await this._setup();try{let e=new Uint8Array(64);return this._api.getRandomValues(e),this._deriveKeyPair(e)}catch(e){throw new ne(e)}}async deriveKeyPair(e){await this._setup();try{if(e.byteLength!==64)throw new Error("seed must be 64 bytes in length");return this._deriveKeyPair(e)}catch(r){throw new ne(r)}}async encap(e,r){await this._setup();try{let n=ye(this._getSeed(r)),[i,o]=ht(n,ye(e)),s=this._encap(e,n,o),a=dt(i,ye(s));return[s,a]}catch(n){throw new ne(n)}}async decap(e,r){await this._setup();try{if(e.byteLength!==this._compressedUSize+this._compressedVSize)throw new Error("Invalid ct size");let n=r.subarray(0,this._skSize),i=r.subarray(this._skSize,this._skSize+this._pkSize),o=r.subarray(this._skSize+this._pkSize,this._skSize+this._pkSize+32),s=r.subarray(this._skSize+this._pkSize+32,this._skSize+this._pkSize+64),a=this._decap(e,n),[u,l]=ht(a,o),c=this._encap(i,a,l);return ar(e,c)==1?dt(u,ye(e)):dt(s,ye(e))}catch(n){throw new ne(n)}}async _setup(){this._api===void 0&&(this._api=await cr())}_getSeed(e){if(e==null){let r=new Uint8Array(32);return this._api.getRandomValues(r),r}if(e.byteLength!==32)throw new Error("seed must be 32 bytes in length");return e}_deriveKeyPair(e){let r=e.subarray(0,32),n=e.subarray(32,64),[i,o]=this._deriveCpaKeyPair(r),s=ye(i),a=new Uint8Array(this._skSize+this._pkSize+64);return a.set(o,0),a.set(i,this._skSize),a.set(s,this._skSize+this._pkSize),a.set(n,this._skSize+this._pkSize+32),[i,a]}_deriveCpaKeyPair(e){let[r,n]=ht(e),i=this._sampleMatrix(r,!1),o=this._sampleNoise1(n,0,this._k),s=this._sampleNoise1(n,this._k,this._k);for(let c=0;c>0),e[i++]=B(n[0]>>8|n[1]<<2),e[i++]=B(n[1]>>6|n[2]<<4),e[i++]=B(n[2]>>4|n[3]<<6),e[i++]=B(n[3]>>2)}return e}_compressV(e,r){let n=new Uint8Array(8);for(let i=0,o=0;o<256/8;o++){for(let s=0;s<8;s++)n[s]=B(((r[8*o+s]<<4)+3329/2)/3329)&15;e[i++]=n[0]|n[1]<<4,e[i++]=n[2]|n[3]<<4,e[i++]=n[4]|n[5]<<4,e[i++]=n[6]|n[7]<<4}return e}_decompressU(e){let r=new Array(this._k);for(let i=0;i>0|y(e[i+1])<<8,n[1]=y(e[i+1])>>2|y(e[i+2])<<6,n[2]=y(e[i+2])>>4|y(e[i+3])<<4,n[3]=y(e[i+3])>>6|y(e[i+4])<<2,i=i+5;for(let a=0;a<4;a++)r[o][4*s+a]=U(F(n[a]&1023)*F(3329)+512>>10)}return r}_decompressV(e){let r=new Array(384);for(let n=0,i=0;i<256/2;i++,n++)r[2*i+0]=U(y(e[n]&15)*y(3329)+8>>4),r[2*i+1]=U(y(e[n]>>4)*y(3329)+8>>4);return r}};function ht(t,e){let r=nr.create().update(t);e!==void 0&&r.update(e);let n=r.digest();return[n.subarray(0,32),n.subarray(32,64)]}function ye(t){return rr.create().update(t).digest()}function dt(t,e){let r=je.create({dkLen:32}).update(t);return e!==void 0&&r.update(e),r.digest()}function pn(t,e){return or.create({dkLen:672}).update(t).update(e).digest()}function lr(t){let e=0,r=0,n=new Uint8Array(384),i=mr(t);for(let o=0;o<256/2;o++)e=y(i[2*o]),r=y(i[2*o+1]),n[3*o+0]=B(e>>0),n[3*o+1]=B(e>>8)|B(r<<4),n[3*o+2]=B(r>>4);return n}function fr(t){let e=new Array(384).fill(0);for(let r=0;r<256/2;r++)e[2*r]=U((y(t[3*r+0])>>0|y(t[3*r+1])<<8)&4095),e[2*r+1]=U((y(t[3*r+1])>>4|y(t[3*r+2])<<4)&4095);return e}function bn(t){let e=new Uint8Array(32),r,n=mr(t);for(let i=0;i<256/8;i++){e[i]=0;for(let o=0;o<8;o++)r=((y(n[8*i+o])<<1)+y(3329/2))/y(3329)&1,e[i]|=B(r<>i&1),e[8*n+i]=r&U(3330/2);return e}function hr(t,e,r){let n=new Array(384).fill(0),i=0,o,s;for(let a=0;i>0)|y(t[a+1])<<8)&4095,s=(y(t[a+1]>>4)|y(t[a+2])<<4)&4095,a=a+3,o<3329&&(n[i]=o,i=i+1),i>1&1431655765);for(let u=0;u<8;u++)i=U(n>>4*u+0&3),o=U(n>>4*u+e&3),s[8*a+u]=i-o}return s}function Ce(t){for(let e=0,r=1,n=128;n>=2;n>>=1)for(let i=0;i<256;i=e+n){let o=Te[r];for(r=r+1,e=i;e>24;return r=r*3329,t-r}function wr(t){let r=U(De(t)*62209)*3329;return r=t-r,r>>=16,U(r)}function mn(t){for(let r=0;r<256;r++)t[r]=wr(De(t[r])*De(1353));return t}function Re(t,e){let r=yr(t[0],e[0]),n;for(let i=1;i>31&3329;return t}var qe=class extends Me{constructor(){super(),Object.defineProperty(this,"_k",{enumerable:!0,configurable:!0,writable:!0,value:3}),Object.defineProperty(this,"_du",{enumerable:!0,configurable:!0,writable:!0,value:10}),Object.defineProperty(this,"_dv",{enumerable:!0,configurable:!0,writable:!0,value:4}),Object.defineProperty(this,"_eta1",{enumerable:!0,configurable:!0,writable:!0,value:2}),Object.defineProperty(this,"_eta2",{enumerable:!0,configurable:!0,writable:!0,value:2}),this._skSize=12*this._k*256/8,this._pkSize=this._skSize+32,this._compressedUSize=this._k*this._du*256/8,this._compressedVSize=this._dv*256/8}};var $e="Keyber768",_r=t=>typeof t=="object"&&t!==null&&typeof t.privateKey=="object"&&typeof t.publicKey=="object",Ge=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:v.NotAssigned}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:1088}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:1184}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:2400}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._prim=new qe}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(r){throw new P(r)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(r){throw new k(r)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(r){throw new P(r)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(r){throw new k(r)}}async generateKeyPair(){let e=await this._prim.generateKeyPair(),r=await this.deserializePrivateKey(e[1]);return{publicKey:await this.deserializePublicKey(e[0]),privateKey:r}}async deriveKeyPair(e){if(e.byteLength>8192)throw new x("Too long ikm");try{let r=await this._prim.deriveKeyPair(new Uint8Array(e)),n=await this.deserializePrivateKey(r[1]);return{publicKey:await this.deserializePublicKey(r[0]),privateKey:n}}catch(r){throw new Z(r)}}async importKey(e,r,n=!0){if(e!=="raw")throw new S("'jwk' is not supported");return n?await this.deserializePublicKey(r):await this.deserializePrivateKey(r)}async encap(e){let r;if(e.ekm!==void 0&&!_r(e)){if(e.ekm.byteLength!==32)throw new x("ekm must be 32 bytes in length");r=new Uint8Array(e.ekm)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey));try{let i=await this._prim.encap(n,r);return{sharedSecret:i[1],enc:i[0]}}catch(i){throw new ae(i)}}async decap(e){let r=_r(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=new Uint8Array(await this.serializePrivateKey(r));try{return await this._prim.decap(new Uint8Array(e.enc),n)}catch(i){throw new ce(i)}}_serializePublicKey(e){return new Promise((r,n)=>{e.type!=="public"&&n(new Error("Not public key")),e.algorithm.name!==$e&&n(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&n(new Error(`Invalid key length: ${e.key.byteLength}`)),r(e.key.buffer)})}_deserializePublicKey(e){return new Promise((r,n)=>{e.byteLength!==this.publicKeySize&&n(new Error(`Invalid key length: ${e.byteLength}`)),r(new g($e,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((r,n)=>{e.type!=="private"&&n(new Error("Not private key")),e.algorithm.name!==$e&&n(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&n(new Error(`Invalid key length: ${e.key.byteLength}`)),r(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((r,n)=>{e.byteLength!==this.privateKeySize&&n(new Error(`Invalid key length: ${e.byteLength}`)),r(new g($e,new Uint8Array(e),"private",["deriveBits"]))})}};var pt=class extends J{constructor(){let e=new re;super(v.DhkemX25519HkdfSha256,new de(e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:v.DhkemX25519HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}get kdf(){return this._kdf}},bt=class extends _e{constructor(){super(v.HybridkemX25519Kyber768,new pt,new Ge,new re),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:v.HybridkemX25519Kyber768}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"X25519Kyber25519"}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:1120}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:1216}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:2432}),Object.defineProperty(this,"auth",{enumerable:!0,configurable:!0,writable:!0,value:!1})}};export{bt as HybridkemX25519Kyber768}; +var ue=class extends Error{constructor(e){let r;e instanceof Error?r=e.message:typeof e=="string"?r=e:r="",super(r),this.name=this.constructor.name}},H=class extends ue{},x=class extends H{};var k=class extends H{},v=class extends H{},J=class extends H{},ee=class extends H{};var M=class extends H{},P=class extends H{};var kr={},St=Pr(globalThis,kr);function Pr(t,e){return new Proxy(t,{get(r,n,i){return n in e?e[n]:t[n]},set(r,n,i){return n in e&&delete e[n],t[n]=i,!0},deleteProperty(r,n){let i=!1;return n in e&&(delete e[n],i=!0),n in t&&(delete t[n],i=!0),i},ownKeys(r){let n=Reflect.ownKeys(t),i=Reflect.ownKeys(e),o=new Set(i);return[...n.filter(s=>!o.has(s)),...i]},defineProperty(r,n,i){return n in e&&delete e[n],Reflect.defineProperty(t,n,i),!0},getOwnPropertyDescriptor(r,n){return n in e?Reflect.getOwnPropertyDescriptor(e,n):Reflect.getOwnPropertyDescriptor(t,n)},has(r,n){return n in e||n in t}})}async function Er(){if(St!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:t}=await import("crypto");return t.subtle}catch(t){throw new P(t)}}var R=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await Er())}};var S={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},be={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3};var E=new Uint8Array(0);var we=new Uint8Array([75,69,77,0,0]);var T=t=>typeof t=="object"&&t!==null&&typeof t.privateKey=="object"&&typeof t.publicKey=="object";function q(t,e){if(e<=0)throw new Error("i2Osp: too small size");if(t>=256**e)throw new Error("i2Osp: too large integer");let r=new Uint8Array(e);for(let n=0;n>8;return r}function K(t,e){let r=new Uint8Array(t.length+e.length);return r.set(t,0),r.set(e,t.length),r}var Kr=new Uint8Array([101,97,101,95,112,114,107]),Ar=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function Ir(t,e,r){let n=new Uint8Array(t.length+e.length+r.length);return n.set(t,0),n.set(e,t.length),n.set(r,t.length+e.length),n}var te=class{constructor(e,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=r,this._kdf=n;let i=new Uint8Array(we);i.set(q(this.id,2),3),this._kdf.init(i)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,r,n=!0){return await this._prim.importKey(e,r,n)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new x("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let r;e.ekm===void 0?r=await this.generateKeyPair():T(e.ekm)?r=e.ekm:r=await this.deriveKeyPair(e.ekm);let n=await this._prim.serializePublicKey(r.publicKey),i=await this._prim.serializePublicKey(e.recipientPublicKey);try{let o;if(e.senderKey===void 0)o=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey));else{let u=T(e.senderKey)?e.senderKey.privateKey:e.senderKey,l=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey)),c=new Uint8Array(await this._prim.dh(u,e.recipientPublicKey));o=K(l,c)}let s;if(e.senderKey===void 0)s=K(new Uint8Array(n),new Uint8Array(i));else{let u=T(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),l=await this._prim.serializePublicKey(u);s=Ir(new Uint8Array(n),new Uint8Array(i),new Uint8Array(l))}let a=await this._generateSharedSecret(o,s);return{enc:n,sharedSecret:a}}catch(o){throw new J(o)}}async decap(e){let r=await this._prim.deserializePublicKey(e.enc),n=T(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,i=T(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),o=await this._prim.serializePublicKey(i);try{let s;if(e.senderPublicKey===void 0)s=new Uint8Array(await this._prim.dh(n,r));else{let u=new Uint8Array(await this._prim.dh(n,r)),l=new Uint8Array(await this._prim.dh(n,e.senderPublicKey));s=K(u,l)}let a;if(e.senderPublicKey===void 0)a=K(new Uint8Array(e.enc),new Uint8Array(o));else{let u=await this._prim.serializePublicKey(e.senderPublicKey);a=new Uint8Array(e.enc.byteLength+o.byteLength+u.byteLength),a.set(new Uint8Array(e.enc),0),a.set(new Uint8Array(o),e.enc.byteLength),a.set(new Uint8Array(u),e.enc.byteLength+o.byteLength)}return await this._generateSharedSecret(s,a)}catch(s){throw new ee(s)}}async _generateSharedSecret(e,r){let n=this._kdf.buildLabeledIkm(Kr,e),i=this._kdf.buildLabeledInfo(Ar,r,this.secretSize);return await this._kdf.extractAndExpand(E,n,i,this.secretSize)}};var Se=new Uint8Array([100,107,112,95,112,114,107]),Qe=new Uint8Array([115,107]);var Zn=new Uint8Array([99,97,110,100,105,100,97,116,101]),Yn=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),Qn=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Jn=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),ei=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),ti=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),ri=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]);var Ki=new Uint8Array([115,101,99]);var Vi=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),Xi=new Uint8Array([101,120,112]),Wi=new Uint8Array([105,110,102,111,95,104,97,115,104]),Zi=new Uint8Array([107,101,121]),Yi=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Qi=new Uint8Array([115,101,99,114,101,116]),Ji=new Uint8Array([72,80,75,69,0,0,0,0,0,0]);var Et=new Uint8Array([72,80,75,69,45,118,49]),Je=class extends R{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:be.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:E}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,r){this._checkInit();let n=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+r.byteLength);return n.set(Et,0),n.set(this._suiteId,7),n.set(e,7+this._suiteId.byteLength),n.set(r,7+this._suiteId.byteLength+e.byteLength),n}buildLabeledInfo(e,r,n){this._checkInit();let i=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+r.byteLength);return i.set(new Uint8Array([0,n]),0),i.set(Et,2),i.set(this._suiteId,9),i.set(e,9+this._suiteId.byteLength),i.set(r,9+this._suiteId.byteLength+e.byteLength),i}async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new x("The salt length must be the same as the hashSize");let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}async expand(e,r,n){await this._setup();let i=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),o=new ArrayBuffer(n),s=new Uint8Array(o),a=E,u=new Uint8Array(r),l=new Uint8Array(1);if(n>255*this.hashSize)throw new Error("Entropy limit reached");let c=new Uint8Array(this.hashSize+u.length+1);for(let f=1,d=0;d=a.length?(s.set(a,d),d+=a.length):(s.set(a.slice(0,s.length-d),d),d+=s.length-d);return o}async extractAndExpand(e,r,n,i){await this._setup();let o=await this._api.importKey("raw",r,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:n},o,i*8)}async labeledExtract(e,r,n){return await this.extract(e,this.buildLabeledIkm(r,n))}async labeledExpand(e,r,n,i){return await this.expand(e,this.buildLabeledInfo(r,n,i),i)}_checkInit(){if(this._suiteId===E)throw new Error("Not initialized. Call init()")}},_e=class extends Je{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:be.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}};var me=class extends _e{};var g=class{constructor(e,r,n,i=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=r,this.type=n,this.algorithm={name:e},this.usages=i,n==="public"&&(this.usages=[])}};var ge=class{constructor(e,r,n,i){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:S.NotAssigned}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_a",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_b",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._a=r,this._b=n,this._kdf=i;let o=new Uint8Array(we);o.set(q(this.id,2),3),this._kdf.init(o)}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(r){throw new k(r)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(r){throw new v(r)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(r){throw new k(r)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(r){throw new v(r)}}async generateKeyPair(){let e=await this._a.generateKeyPair(),r=await this._b.generateKeyPair(),n=await this._a.serializePublicKey(e.publicKey),i=await this._a.serializePrivateKey(e.privateKey),o=await this._b.serializePublicKey(r.publicKey),s=await this._b.serializePrivateKey(r.privateKey);return{publicKey:await this.deserializePublicKey(K(new Uint8Array(n),new Uint8Array(o))),privateKey:await this.deserializePrivateKey(K(new Uint8Array(i),new Uint8Array(s)))}}async deriveKeyPair(e){let r=await this._kdf.labeledExtract(E,Se,new Uint8Array(e)),n=new Uint8Array(await this._kdf.labeledExpand(r,Qe,E,96)),i=n.slice(0,32),o=n.slice(32,96),s=await this._a.deriveKeyPair(i),a=await this._b.deriveKeyPair(o),u=await this._a.serializePublicKey(s.publicKey),l=await this._a.serializePrivateKey(s.privateKey),c=await this._b.serializePublicKey(a.publicKey),f=await this._b.serializePrivateKey(a.privateKey);return{publicKey:await this.deserializePublicKey(K(new Uint8Array(u),new Uint8Array(c))),privateKey:await this.deserializePrivateKey(K(new Uint8Array(l),new Uint8Array(f)))}}async importKey(e,r,n=!0){if(e!=="raw")throw new P("'jwk' is not supported");if(!(r instanceof ArrayBuffer))throw new x("Invalid type of key");return n?await this.deserializePublicKey(r):await this.deserializePrivateKey(r)}async encap(e){let r,n;if(e.ekm!==void 0&&!T(e.ekm)){if(e.ekm.byteLength!==64)throw new x("ekm must be 64 bytes in length");r=e.ekm.slice(0,32),n=e.ekm.slice(32)}let i=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey)),o=await this._a.deserializePublicKey(i.slice(0,this._a.publicKeySize)),s=await this._b.deserializePublicKey(i.slice(this._a.publicKeySize)),a=await this._a.encap({recipientPublicKey:o,ekm:r}),u=await this._b.encap({recipientPublicKey:s,ekm:n});return{sharedSecret:K(new Uint8Array(a.sharedSecret),new Uint8Array(u.sharedSecret)),enc:K(new Uint8Array(a.enc),new Uint8Array(u.enc))}}async decap(e){let r=T(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=new Uint8Array(await this.serializePrivateKey(r)),i=await this._a.deserializePrivateKey(n.slice(0,this._a.privateKeySize)),o=await this._b.deserializePrivateKey(n.slice(this._a.privateKeySize)),s=await this._a.decap({recipientKey:i,enc:e.enc.slice(0,this._a.encSize)}),a=await this._b.decap({recipientKey:o,enc:e.enc.slice(this._a.encSize)});return K(new Uint8Array(s),new Uint8Array(a))}_serializePublicKey(e){return new Promise((r,n)=>{e.type!=="public"&&n(new Error("Not public key")),e.algorithm.name!==this.name&&n(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&n(new Error(`Invalid key length: ${e.key.byteLength}`)),r(e.key.buffer)})}_deserializePublicKey(e){return new Promise((r,n)=>{e.byteLength!==this.publicKeySize&&n(new Error(`Invalid key length: ${e.byteLength}`)),r(new g(this.name,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((r,n)=>{e.type!=="private"&&n(new Error("Not private key")),e.algorithm.name!==this.name&&n(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&n(new Error(`Invalid key length: ${e.key.byteLength}`)),r(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((r,n)=>{e.byteLength!==this.privateKeySize&&n(new Error(`Invalid key length: ${e.byteLength}`)),r(new g(this.name,new Uint8Array(e),"private",["deriveBits"]))})}};function xe(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`positive integer expected, not ${t}`)}function Rr(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function re(t,...e){if(!Rr(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${t.length}`)}function Kt(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");xe(t.outputLen),xe(t.blockLen)}function j(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function Ke(t,e){re(t);let r=e.outputLen;if(t.lengthnew Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),Ae=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),O=(t,e)=>t<<32-e|t>>>e;var et=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,qr=t=>t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255;function tt(t){for(let e=0;et().update(G(n)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e}function Lt(t){let e=(n,i)=>t(i).update(G(n)).digest(),r=t({});return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=n=>t(n),e}function Bt(t=32){if(ne&&typeof ne.getRandomValues=="function")return ne.getRandomValues(new Uint8Array(t));if(ne&&typeof ne.randomBytes=="function")return ne.randomBytes(t);throw new Error("crypto.getRandomValues must be defined")}var Le=class extends ${constructor(e,r){super(),this.finished=!1,this.destroyed=!1,Kt(e);let n=G(r);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(n.length>i?e.create().update(n).digest():n);for(let s=0;snew Le(t,e).update(r).digest();rt.create=(t,e)=>new Le(t,e);function $r(t,e,r,n){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,r,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(r>>i&o),a=Number(r&o),u=n?4:0,l=n?0:4;t.setUint32(e+u,s,n),t.setUint32(e+l,a,n)}var Ut=(t,e,r)=>t&e^~t&r,zt=(t,e,r)=>t&e^t&r^e&r,Be=class extends ${constructor(e,r,n,i){super(),this.blockLen=e,this.outputLen=r,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Ae(this.buffer)}update(e){j(this);let{view:r,buffer:n,blockLen:i}=this;e=G(e);let o=e.length;for(let s=0;si-s&&(this.process(n,0),s=0);for(let f=s;fc.length)throw new Error("_sha2: outputLen bigger than state");for(let f=0;f>>3,N=O(w,17)^O(w,19)^w>>>10;V[f]=N+V[f-7]+h+V[f-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:u,G:l,H:c}=this;for(let f=0;f<64;f++){let d=O(a,6)^O(a,11)^O(a,25),w=c+d+Ut(a,u,l)+Gr[f]+V[f]|0,N=(O(n,2)^O(n,13)^O(n,22))+zt(n,i,o)|0;c=l,l=u,u=a,a=s+w|0,s=o,o=i,i=n,n=w+N|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,u=u+this.F|0,l=l+this.G|0,c=c+this.H|0,this.set(n,i,o,s,a,u,l,c)}roundClean(){V.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Ot=Ie(()=>new nt);var ie=class extends me{async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return rt(Ot,new Uint8Array(e),new Uint8Array(r));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}};var Ue=BigInt(4294967295),Ht=BigInt(32);function Fr(t,e=!1){return e?{h:Number(t&Ue),l:Number(t>>Ht&Ue)}:{h:Number(t>>Ht&Ue)|0,l:Number(t&Ue)|0}}function Tt(t,e=!1){let r=new Uint32Array(t.length),n=new Uint32Array(t.length);for(let i=0;it<>>32-r,jt=(t,e,r)=>e<>>32-r,Dt=(t,e,r)=>e<>>64-r,Ct=(t,e,r)=>t<>>64-r;var Vr=BigInt(0);function ot(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function Rt(t){if(!ot(t))throw new Error("Uint8Array expected")}var Xr=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Wr(t){Rt(t);let e="";for(let r=0;r=D._0&&t<=D._9)return t-D._0;if(t>=D._A&&t<=D._F)return t-(D._A-10);if(t>=D._a&&t<=D._f)return t-(D._a-10)}function qt(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);let e=t.length,r=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(r);for(let i=0,o=0;itypeof t=="bigint"&&Vr<=t;function Qr(t,e,r){return it(t)&&it(e)&&it(r)&&e<=t&&ttypeof t=="bigint",function:t=>typeof t=="function",boolean:t=>typeof t=="boolean",string:t=>typeof t=="string",stringOrUint8Array:t=>typeof t=="string"||ot(t),isSafeInteger:t=>Number.isSafeInteger(t),array:t=>Array.isArray(t),field:(t,e)=>e.Fp.isValid(t),hash:t=>typeof t=="function"&&Number.isSafeInteger(t.outputLen)};function Gt(t,e,r={}){let n=(i,o,s)=>{let a=Jr[o];if(typeof a!="function")throw new Error(`Invalid validator "${o}", expected function`);let u=t[i];if(!(s&&u===void 0)&&!a(u,t))throw new Error(`Invalid param ${String(i)}=${u} (${typeof u}), expected ${o}`)};for(let[i,o]of Object.entries(e))n(i,o,!1);for(let[i,o]of Object.entries(r))n(i,o,!0);return t}var fe=BigInt(0),ze=BigInt(1),is=BigInt(2),os=BigInt(3),ss=BigInt(4),as=BigInt(5),cs=BigInt(8),us=BigInt(9),ls=BigInt(16);function Oe(t,e){let r=t%e;return r>=fe?r:e+r}function Ft(t,e,r){if(r<=fe||e 0");if(r===ze)return fe;let n=ze;for(;e>fe;)e&ze&&(n=n*t%r),t=t*t%r,e>>=ze;return n}function L(t,e,r){let n=t;for(;e-- >fe;)n*=n,n%=r;return n}var he=BigInt(0),ut=BigInt(1);function en(t){return Gt(t,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...t})}function Vt(t){let e=en(t),{P:r}=e,n=p=>Oe(p,r),i=e.montgomeryBits,o=Math.ceil(i/8),s=e.nByteLength,a=e.adjustScalarBytes||(p=>p),u=e.powPminus2||(p=>Ft(p,r-BigInt(2),r));function l(p,m,A){let ae=n(p*(m-A));return m=n(m-ae),A=n(A+ae),[m,A]}let c=(e.a-BigInt(2))/BigInt(4);function f(p,m){ct("u",p,he,r),ct("scalar",m,he,r);let A=m,ae=p,z=ut,C=he,Y=p,Q=ut,ce=he,I;for(let Xe=BigInt(i-1);Xe>=he;Xe--){let _t=A>>Xe&ut;ce^=_t,I=l(ce,z,Y),z=I[0],Y=I[1],I=l(ce,C,Q),C=I[0],Q=I[1],ce=_t;let We=z+C,Ze=n(We*We),Ye=z-C,mt=n(Ye*Ye),gt=Ze-mt,xr=Y+Q,vr=Y-Q,xt=n(vr*We),vt=n(xr*Ye),kt=xt+vt,Pt=xt-vt;Y=n(kt*kt),Q=n(ae*n(Pt*Pt)),z=n(Ze*mt),C=n(gt*(Ze+n(c*gt)))}I=l(ce,z,Y),z=I[0],Y=I[1],I=l(ce,C,Q),C=I[0],Q=I[1];let gr=u(C);return n(z*gr)}function d(p){return $t(n(p),o)}function w(p){let m=at("u coordinate",p,o);return s===32&&(m[31]&=127),st(m)}function h(p){let m=at("scalar",p),A=m.length;if(A!==o&&A!==s)throw new Error(`Expected ${o} or ${s} bytes, got ${A}`);return st(a(m))}function N(p,m){let A=w(m),ae=h(p),z=f(A,ae);if(z===he)throw new Error("Invalid private or public key received");return d(z)}let Pe=d(e.Gu);function Ve(p){return N(p,Pe)}return{scalarMult:N,scalarMultBase:Ve,getSharedSecret:(p,m)=>N(p,m),getPublicKey:p=>Ve(p),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:Pe}}var lt=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949");var vs=BigInt(0),tn=BigInt(1),Xt=BigInt(2),rn=BigInt(3),nn=BigInt(5),ks=BigInt(8);function on(t){let e=BigInt(10),r=BigInt(20),n=BigInt(40),i=BigInt(80),o=lt,a=t*t%o*t%o,u=L(a,Xt,o)*a%o,l=L(u,tn,o)*t%o,c=L(l,nn,o)*l%o,f=L(c,e,o)*c%o,d=L(f,r,o)*f%o,w=L(d,n,o)*d%o,h=L(w,i,o)*w%o,N=L(h,i,o)*w%o,Pe=L(N,e,o)*c%o;return{pow_p_5_8:L(Pe,Xt,o)*t%o,b2:a}}function sn(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}var He=Vt({P:lt,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:t=>{let e=lt,{pow_p_5_8:r,b2:n}=on(t);return Oe(L(r,rn,e)*n,e)},adjustScalarBytes:sn,randomBytes:Bt});var de="X25519",Wt=new Uint8Array,Te=["deriveBits"],an=new Uint8Array([100,107,112,95,112,114,107]),cn=new Uint8Array([115,107]);function Zt(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),n=new Uint8Array(r.length);for(let i=0;i{r(e.key.buffer)})}_serializePrivateKey(e){return new Promise(r=>{r(e.key.buffer)})}_importRawKey(e,r){return new Promise((n,i)=>{r&&e.byteLength!==this._nPk&&i(new Error("Invalid length of the key")),!r&&e.byteLength!==this._nSk&&i(new Error("Invalid length of the key")),n(new g(de,new Uint8Array(e),r?"public":"private",r?[]:Te))})}_importJWK(e,r){return new Promise((n,i)=>{(typeof e.kty>"u"||e.kty!=="OKP")&&i(new Error(`Invalid kty: ${e.kty}`)),(typeof e.crv>"u"||e.crv!=="X25519")&&i(new Error(`Invalid crv: ${e.crv}`)),r?(typeof e.d<"u"&&i(new Error("Invalid key: `d` should not be set")),typeof e.x>"u"&&i(new Error("Invalid key: `x` not found")),n(new g(de,Zt(e.x),"public"))):(typeof e.d!="string"&&i(new Error("Invalid key: `d` not found")),n(new g(de,Zt(e.d),"private",Te)))})}_derivePublicKey(e){return new Promise((r,n)=>{try{let i=He.getPublicKey(e.key);r(new g(de,i,"public"))}catch(i){n(i)}})}_dh(e,r){return new Promise((n,i)=>{try{n(He.getSharedSecret(e.key,r.key).buffer)}catch(o){i(o)}})}};var Ne=[2285,2571,2970,1812,1493,1422,287,202,3158,622,1577,182,962,2127,1855,1468,573,2004,264,383,2500,1458,1727,3199,2648,1017,732,608,1787,411,3124,1758,1223,652,2777,1015,2036,1491,3047,1785,516,3321,3009,2663,1711,2167,126,1469,2476,3239,3058,830,107,1908,3082,2378,2931,961,1821,2604,448,2264,677,2054,2226,430,555,843,2078,871,1550,105,422,587,177,3094,3038,2869,1574,1653,3083,778,1159,3182,2552,1483,2727,1119,1739,644,2457,349,418,329,3173,3254,817,1097,603,610,1322,2044,1864,384,2114,3193,1218,1994,2455,220,2142,1670,2144,1799,2051,794,1819,2475,2459,478,3221,3021,996,991,958,1869,1522,1628],ft=[1701,1807,1460,2371,2338,2333,308,108,2851,870,854,1510,2535,1278,1530,1185,1659,1187,3109,874,1335,2111,136,1215,2945,1465,1285,2007,2719,2726,2232,2512,75,156,3e3,2911,2980,872,2685,1590,2210,602,1846,777,147,2170,2551,246,1676,1755,460,291,235,3152,2742,2907,3224,1779,2458,1251,2486,2774,2899,1103,1275,2652,1065,2881,725,1508,2368,398,951,247,1421,3222,2499,271,90,853,1860,3203,1162,1618,666,320,8,2813,1544,282,1838,1293,2314,552,2677,2106,1571,205,2918,1542,2721,2597,2312,681,130,1602,1871,829,2946,3065,1325,2756,1861,1474,1202,2367,3147,1752,2707,171,3127,3042,1907,1836,1517,359,758,1441];var Jt=[],er=[],tr=[],un=BigInt(0),ve=BigInt(1),ln=BigInt(2),fn=BigInt(7),hn=BigInt(256),dn=BigInt(113);for(let t=0,e=ve,r=1,n=0;t<24;t++){[r,n]=[n,(2*r+3*n)%5],Jt.push(2*(5*n+r)),er.push((t+1)*(t+2)/2%64);let i=un;for(let o=0;o<7;o++)e=(e<>fn)*dn)%hn,e&ln&&(i^=ve<<(ve<r>32?Dt(t,e,r):Nt(t,e,r),Qt=(t,e,r)=>r>32?Ct(t,e,r):jt(t,e,r);function bn(t,e=24){let r=new Uint32Array(10);for(let n=24-e;n<24;n++){for(let s=0;s<10;s++)r[s]=t[s]^t[s+10]^t[s+20]^t[s+30]^t[s+40];for(let s=0;s<10;s+=2){let a=(s+8)%10,u=(s+2)%10,l=r[u],c=r[u+1],f=Yt(l,c,1)^r[a],d=Qt(l,c,1)^r[a+1];for(let w=0;w<50;w+=10)t[s+w]^=f,t[s+w+1]^=d}let i=t[2],o=t[3];for(let s=0;s<24;s++){let a=er[s],u=Yt(i,o,a),l=Qt(i,o,a),c=Jt[s];i=t[c],o=t[c+1],t[c]=u,t[c+1]=l}for(let s=0;s<50;s+=10){for(let a=0;a<10;a++)r[a]=t[s+a];for(let a=0;a<10;a++)t[s+a]^=~r[(a+2)%10]&r[(a+4)%10]}t[0]^=yn[n],t[1]^=pn[n]}r.fill(0)}var je=class t extends ${constructor(e,r,n,i=!1,o=24){if(super(),this.blockLen=e,this.suffix=r,this.outputLen=n,this.enableXOF=i,this.rounds=o,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,xe(n),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=At(this.state)}keccak(){et||tt(this.state32),bn(this.state32,this.rounds),et||tt(this.state32),this.posOut=0,this.pos=0}update(e){j(this);let{blockLen:r,state:n}=this;e=G(e);let i=e.length;for(let o=0;o=n&&this.keccak();let s=Math.min(n-this.posOut,o-i);e.set(r.subarray(this.posOut,this.posOut+s),i),this.posOut+=s,i+=s}return e}xofInto(e){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return xe(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(Ke(e,this),this.finished)throw new Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(e){let{blockLen:r,suffix:n,outputLen:i,rounds:o,enableXOF:s}=this;return e||(e=new t(r,n,i,s,o)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=o,e.suffix=n,e.outputLen=i,e.enableXOF=s,e.destroyed=this.destroyed,e}},X=(t,e,r)=>Ie(()=>new je(e,t,r)),Ms=X(6,144,224/8),rr=X(6,136,256/8),Rs=X(6,104,384/8),nr=X(6,72,512/8),qs=X(1,144,224/8),$s=X(1,136,256/8),Gs=X(1,104,384/8),Fs=X(1,72,512/8),ir=(t,e,r)=>Lt((n={})=>new je(e,t,n.dkLen===void 0?r:n.dkLen,!0)),or=ir(31,168,128/8),De=ir(31,136,256/8);var oe=class extends ue{};var wn={},sr=_n(globalThis,wn);function _n(t,e){return new Proxy(t,{get(r,n,i){return n in e?e[n]:t[n]},set(r,n,i){return n in e&&delete e[n],t[n]=i,!0},deleteProperty(r,n){let i=!1;return n in e&&(delete e[n],i=!0),n in t&&(delete t[n],i=!0),i},ownKeys(r){let n=Reflect.ownKeys(t),i=Reflect.ownKeys(e),o=new Set(i);return[...n.filter(s=>!o.has(s)),...i]},defineProperty(r,n,i){return n in e&&delete e[n],Reflect.defineProperty(t,n,i),!0},getOwnPropertyDescriptor(r,n){return n in e?Reflect.getOwnPropertyDescriptor(e,n):Reflect.getOwnPropertyDescriptor(t,n)},has(r,n){return n in e||n in t}})}function B(t){return t%256}function U(t){return t>=-32768&&t<=32767?t:t<-32768?(t=t+32769,t=t%65536,32767+t):(t=t-32768,t=t%65536,-32768+t)}function y(t){return t%65536}function Ce(t){return t>=-2147483648&&t<=2147483647?t:t<-2147483648?(t=t+2147483649,t=t%4294967296,2147483647+t):(t=t-2147483648,t=t%4294967296,-2147483648+t)}function W(t){return t%4294967296}function ar(t,e){if(t.length!=e.length)return 0;let r=new Uint8Array([0]);for(let i=0;i>4,n[0]&=n[0]>>2,n[0]&=n[0]>>1,n[0]}async function cr(){if(sr!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto;try{let{webcrypto:t}=await import("crypto");return t}catch{throw new Error("failed to load Crypto")}}function ht(t,e,r){return De.create({dkLen:t}).update(e).update(new Uint8Array([r])).digest()}function ur(t){let e=W(t[0]);return e|=W(t[1])<<8,e|=W(t[2])<<16,e|=W(t[3])<<24,W(e)}var qe=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_k",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_du",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_dv",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_eta1",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_eta2",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_skSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_pkSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_compressedUSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_compressedVSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}async generateKeyPair(){await this._setup();try{let e=new Uint8Array(64);return this._api.getRandomValues(e),this._deriveKeyPair(e)}catch(e){throw new oe(e)}}async deriveKeyPair(e){await this._setup();try{if(e.byteLength!==64)throw new Error("seed must be 64 bytes in length");return this._deriveKeyPair(e)}catch(r){throw new oe(r)}}async encap(e,r){await this._setup();try{let n=pe(this._getSeed(r)),[i,o]=dt(n,pe(e)),s=this._encap(e,n,o),a=yt(i,pe(s));return[s,a]}catch(n){throw new oe(n)}}async decap(e,r){await this._setup();try{if(e.byteLength!==this._compressedUSize+this._compressedVSize)throw new Error("Invalid ct size");let n=r.subarray(0,this._skSize),i=r.subarray(this._skSize,this._skSize+this._pkSize),o=r.subarray(this._skSize+this._pkSize,this._skSize+this._pkSize+32),s=r.subarray(this._skSize+this._pkSize+32,this._skSize+this._pkSize+64),a=this._decap(e,n),[u,l]=dt(a,o),c=this._encap(i,a,l);return ar(e,c)==1?yt(u,pe(e)):yt(s,pe(e))}catch(n){throw new oe(n)}}async _setup(){this._api===void 0&&(this._api=await cr())}_getSeed(e){if(e==null){let r=new Uint8Array(32);return this._api.getRandomValues(r),r}if(e.byteLength!==32)throw new Error("seed must be 32 bytes in length");return e}_deriveKeyPair(e){let r=e.subarray(0,32),n=e.subarray(32,64),[i,o]=this._deriveCpaKeyPair(r),s=pe(i),a=new Uint8Array(this._skSize+this._pkSize+64);return a.set(o,0),a.set(i,this._skSize),a.set(s,this._skSize+this._pkSize),a.set(n,this._skSize+this._pkSize+32),[i,a]}_deriveCpaKeyPair(e){let[r,n]=dt(e),i=this._sampleMatrix(r,!1),o=this._sampleNoise1(n,0,this._k),s=this._sampleNoise1(n,this._k,this._k);for(let c=0;c>0),e[i++]=B(n[0]>>8|n[1]<<2),e[i++]=B(n[1]>>6|n[2]<<4),e[i++]=B(n[2]>>4|n[3]<<6),e[i++]=B(n[3]>>2)}return e}_compressV(e,r){let n=new Uint8Array(8);for(let i=0,o=0;o<256/8;o++){for(let s=0;s<8;s++)n[s]=B(((r[8*o+s]<<4)+3329/2)/3329)&15;e[i++]=n[0]|n[1]<<4,e[i++]=n[2]|n[3]<<4,e[i++]=n[4]|n[5]<<4,e[i++]=n[6]|n[7]<<4}return e}_decompressU(e){let r=new Array(this._k);for(let i=0;i>0|y(e[i+1])<<8,n[1]=y(e[i+1])>>2|y(e[i+2])<<6,n[2]=y(e[i+2])>>4|y(e[i+3])<<4,n[3]=y(e[i+3])>>6|y(e[i+4])<<2,i=i+5;for(let a=0;a<4;a++)r[o][4*s+a]=U(W(n[a]&1023)*W(3329)+512>>10)}return r}_decompressV(e){let r=new Array(384);for(let n=0,i=0;i<256/2;i++,n++)r[2*i+0]=U(y(e[n]&15)*y(3329)+8>>4),r[2*i+1]=U(y(e[n]>>4)*y(3329)+8>>4);return r}};function dt(t,e){let r=nr.create().update(t);e!==void 0&&r.update(e);let n=r.digest();return[n.subarray(0,32),n.subarray(32,64)]}function pe(t){return rr.create().update(t).digest()}function yt(t,e){let r=De.create({dkLen:32}).update(t);return e!==void 0&&r.update(e),r.digest()}function xn(t,e){return or.create({dkLen:672}).update(t).update(e).digest()}function lr(t){let e=0,r=0,n=new Uint8Array(384),i=_r(t);for(let o=0;o<256/2;o++)e=y(i[2*o]),r=y(i[2*o+1]),n[3*o+0]=B(e>>0),n[3*o+1]=B(e>>8)|B(r<<4),n[3*o+2]=B(r>>4);return n}function fr(t){let e=new Array(384).fill(0);for(let r=0;r<256/2;r++)e[2*r]=U((y(t[3*r+0])>>0|y(t[3*r+1])<<8)&4095),e[2*r+1]=U((y(t[3*r+1])>>4|y(t[3*r+2])<<4)&4095);return e}function vn(t){let e=new Uint8Array(32),r,n=_r(t);for(let i=0;i<256/8;i++){e[i]=0;for(let o=0;o<8;o++)r=((y(n[8*i+o])<<1)+y(3329/2))/y(3329)&1,e[i]|=B(r<>i&1),e[8*n+i]=r&U(3330/2);return e}function hr(t,e,r){let n=new Array(384).fill(0),i=0,o,s;for(let a=0;i>0)|y(t[a+1])<<8)&4095,s=(y(t[a+1]>>4)|y(t[a+2])<<4)&4095,a=a+3,o<3329&&(n[i]=o,i=i+1),i>1&1431655765);for(let u=0;u<8;u++)i=U(n>>4*u+0&3),o=U(n>>4*u+e&3),s[8*a+u]=i-o}return s}function Me(t){for(let e=0,r=1,n=128;n>=2;n>>=1)for(let i=0;i<256;i=e+n){let o=Ne[r];for(r=r+1,e=i;e>24;return r=r*3329,t-r}function wr(t){let r=U(Ce(t)*62209)*3329;return r=t-r,r>>=16,U(r)}function Pn(t){for(let r=0;r<256;r++)t[r]=wr(Ce(t[r])*Ce(1353));return t}function Re(t,e){let r=yr(t[0],e[0]),n;for(let i=1;i>31&3329;return t}var $e=class extends qe{constructor(){super(),Object.defineProperty(this,"_k",{enumerable:!0,configurable:!0,writable:!0,value:3}),Object.defineProperty(this,"_du",{enumerable:!0,configurable:!0,writable:!0,value:10}),Object.defineProperty(this,"_dv",{enumerable:!0,configurable:!0,writable:!0,value:4}),Object.defineProperty(this,"_eta1",{enumerable:!0,configurable:!0,writable:!0,value:2}),Object.defineProperty(this,"_eta2",{enumerable:!0,configurable:!0,writable:!0,value:2}),this._skSize=12*this._k*256/8,this._pkSize=this._skSize+32,this._compressedUSize=this._k*this._du*256/8,this._compressedVSize=this._dv*256/8}};var Ge="Keyber768",mr=t=>typeof t=="object"&&t!==null&&typeof t.privateKey=="object"&&typeof t.publicKey=="object",Fe=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:S.NotAssigned}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:1088}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:1184}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:2400}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._prim=new $e}async serializePublicKey(e){try{return await this._serializePublicKey(e)}catch(r){throw new k(r)}}async deserializePublicKey(e){try{return await this._deserializePublicKey(e)}catch(r){throw new v(r)}}async serializePrivateKey(e){try{return await this._serializePrivateKey(e)}catch(r){throw new k(r)}}async deserializePrivateKey(e){try{return await this._deserializePrivateKey(e)}catch(r){throw new v(r)}}async generateKeyPair(){let e=await this._prim.generateKeyPair(),r=await this.deserializePrivateKey(e[1]);return{publicKey:await this.deserializePublicKey(e[0]),privateKey:r}}async deriveKeyPair(e){if(e.byteLength>8192)throw new x("Too long ikm");try{let r=await this._prim.deriveKeyPair(new Uint8Array(e)),n=await this.deserializePrivateKey(r[1]);return{publicKey:await this.deserializePublicKey(r[0]),privateKey:n}}catch(r){throw new M(r)}}async importKey(e,r,n=!0){if(e!=="raw")throw new P("'jwk' is not supported");return n?await this.deserializePublicKey(r):await this.deserializePrivateKey(r)}async encap(e){let r;if(e.ekm!==void 0&&!mr(e)){if(e.ekm.byteLength!==32)throw new x("ekm must be 32 bytes in length");r=new Uint8Array(e.ekm)}let n=new Uint8Array(await this.serializePublicKey(e.recipientPublicKey));try{let i=await this._prim.encap(n,r);return{sharedSecret:i[1],enc:i[0]}}catch(i){throw new J(i)}}async decap(e){let r=mr(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,n=new Uint8Array(await this.serializePrivateKey(r));try{return await this._prim.decap(new Uint8Array(e.enc),n)}catch(i){throw new ee(i)}}_serializePublicKey(e){return new Promise((r,n)=>{e.type!=="public"&&n(new Error("Not public key")),e.algorithm.name!==Ge&&n(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.publicKeySize&&n(new Error(`Invalid key length: ${e.key.byteLength}`)),r(e.key.buffer)})}_deserializePublicKey(e){return new Promise((r,n)=>{e.byteLength!==this.publicKeySize&&n(new Error(`Invalid key length: ${e.byteLength}`)),r(new g(Ge,new Uint8Array(e),"public"))})}_serializePrivateKey(e){return new Promise((r,n)=>{e.type!=="private"&&n(new Error("Not private key")),e.algorithm.name!==Ge&&n(new Error(`Invalid algorithm name: ${e.algorithm.name}`)),e.key.byteLength!==this.privateKeySize&&n(new Error(`Invalid key length: ${e.key.byteLength}`)),r(e.key.buffer)})}_deserializePrivateKey(e){return new Promise((r,n)=>{e.byteLength!==this.privateKeySize&&n(new Error(`Invalid key length: ${e.byteLength}`)),r(new g(Ge,new Uint8Array(e),"private",["deriveBits"]))})}};var bt=class extends te{constructor(){let e=new ie;super(S.DhkemX25519HkdfSha256,new ye(e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:S.DhkemX25519HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}get kdf(){return this._kdf}},wt=class extends ge{constructor(){super(S.HybridkemX25519Kyber768,new bt,new Fe,new ie),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:S.HybridkemX25519Kyber768}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"X25519Kyber25519"}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:1120}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:1216}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:2432}),Object.defineProperty(this,"auth",{enumerable:!0,configurable:!0,writable:!0,value:!1})}};export{wt as HybridkemX25519Kyber768}; /*! Bundled license information: @noble/hashes/esm/utils.js: diff --git a/src/hpke.js b/src/hpke.js index 97662a5df..79cbfef70 100644 --- a/src/hpke.js +++ b/src/hpke.js @@ -1,4 +1,4 @@ -var bi={},tn=wi(globalThis,bi);function wi(t,e){return new Proxy(t,{get(r,n,i){return n in e?e[n]:t[n]},set(r,n,i){return n in e&&delete e[n],t[n]=i,!0},deleteProperty(r,n){let i=!1;return n in e&&(delete e[n],i=!0),n in t&&(delete t[n],i=!0),i},ownKeys(r){let n=Reflect.ownKeys(t),i=Reflect.ownKeys(e),o=new Set(i);return[...n.filter(a=>!o.has(a)),...i]},defineProperty(r,n,i){return n in e&&delete e[n],Reflect.defineProperty(t,n,i),!0},getOwnPropertyDescriptor(r,n){return n in e?Reflect.getOwnPropertyDescriptor(e,n):Reflect.getOwnPropertyDescriptor(t,n)},has(r,n){return n in e||n in t}})}var Bt=class extends Error{constructor(e){let r;e instanceof Error?r=e.message:typeof e=="string"?r=e:r="",super(r),this.name=this.constructor.name}},ae=class extends Bt{},Y=class extends ae{},ir=class extends ae{},ie=class extends ae{},J=class extends ae{},tt=class extends ae{},rt=class extends ae{},nt=class extends ae{},it=class extends ae{},ot=class extends ae{},st=class extends ae{},_e=class extends ae{},oe=class extends ae{};async function mi(){if(tn!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:t}=await import("crypto");return t.subtle}catch(t){throw new oe(t)}}var we=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await mi())}};var xe={Base:0,Psk:1,Auth:2,AuthPsk:3},M={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},de={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},se={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var or=["encrypt","decrypt"];var sr=class extends we{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,r,n){await this._setupKey();let i={name:"AES-GCM",iv:e,additionalData:n};return await this._api.encrypt(i,this._key,r)}async open(e,r,n){await this._setupKey();let i={name:"AES-GCM",iv:e,additionalData:n};return await this._api.decrypt(i,this._key,r)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,or)}},$e=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:se.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new sr(e)}},at=class extends $e{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:se.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var ct=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:se.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new oe("Export only")}};var Z=new Uint8Array(0);function ar(){return new Promise((t,e)=>{e(new oe("Not supported"))})}var gi=new Uint8Array([115,101,99]),Xe=class{constructor(e,r,n){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=r,this.exporterSecret=n}async seal(e,r){return await ar()}async open(e,r){return await ar()}async export(e,r){if(e.byteLength>8192)throw new Y("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,gi,new Uint8Array(e),r)}catch(n){throw new nt(n)}}},Kt=class extends Xe{},It=class extends Xe{constructor(e,r,n,i){super(e,r,n),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=i}};var je=t=>typeof t=="object"&&t!==null&&typeof t.privateKey=="object"&&typeof t.publicKey=="object";function pe(t,e){if(e<=0)throw new Error("i2Osp: too small size");if(t>=256**e)throw new Error("i2Osp: too large integer");let r=new Uint8Array(e);for(let n=0;n>8;return r}function Ve(t,e){let r=new Uint8Array(t.length+e.length);return r.set(t,0),r.set(e,t.length),r}function rn(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),n=new Uint8Array(r.length);for(let i=0;iNumber.MAX_SAFE_INTEGER)throw new st("Message limit reached");e.seq+=1}};var Lt=class extends Ze{async open(e,r=Z){let n;try{n=await this._ctx.key.open(this.computeNonce(this._ctx),e,r)}catch(i){throw new ot(i)}return this.incrementSeq(this._ctx),n}};var Ut=class extends Ze{constructor(e,r,n,i){super(e,r,n),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=i}async seal(e,r=Z){let n;try{n=await this._ctx.key.seal(this.computeNonce(this._ctx),e,r)}catch(i){throw new it(i)}return this.incrementSeq(this._ctx),n}};var Ei=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),vi=new Uint8Array([101,120,112]),ki=new Uint8Array([105,110,102,111,95,104,97,115,104]),Si=new Uint8Array([107,101,121]),Ai=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Pi=new Uint8Array([115,101,99,114,101,116]),Bi=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),Ot=class extends we{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new Y("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new Y("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new Y("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Bi),this._suiteId.set(pe(this._kem.id,2),4),this._suiteId.set(pe(this._kdf.id,2),6),this._suiteId.set(pe(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let r=await this._kem.encap(e),n;return e.psk!==void 0?n=e.senderKey!==void 0?xe.AuthPsk:xe.Psk:n=e.senderKey!==void 0?xe.Auth:xe.Base,await this._keyScheduleS(n,r.sharedSecret,r.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let r=await this._kem.decap(e),n;return e.psk!==void 0?n=e.senderPublicKey!==void 0?xe.AuthPsk:xe.Psk:n=e.senderPublicKey!==void 0?xe.Auth:xe.Base,await this._keyScheduleR(n,r,e)}async seal(e,r,n=Z){let i=await this.createSenderContext(e);return{ct:await i.seal(r,n),enc:i.enc}}async open(e,r,n=Z){return await(await this.createRecipientContext(e)).open(r,n)}async _keySchedule(e,r,n){let i=n.psk===void 0?Z:new Uint8Array(n.psk.id),o=await this._kdf.labeledExtract(Z,Ai,i),a=n.info===void 0?Z:new Uint8Array(n.info),s=await this._kdf.labeledExtract(Z,ki,a),c=new Uint8Array(1+o.byteLength+s.byteLength);c.set(new Uint8Array([e]),0),c.set(new Uint8Array(o),1),c.set(new Uint8Array(s),1+o.byteLength);let u=n.psk===void 0?Z:new Uint8Array(n.psk.key),f=this._kdf.buildLabeledIkm(Pi,u),l=this._kdf.buildLabeledInfo(vi,c,this._kdf.hashSize),h=await this._kdf.extractAndExpand(r,f,l,this._kdf.hashSize);if(this._aead.id===se.ExportOnly)return{aead:this._aead,exporterSecret:h};let b=this._kdf.buildLabeledInfo(Si,c,this._aead.keySize),g=await this._kdf.extractAndExpand(r,f,b,this._aead.keySize),x=this._kdf.buildLabeledInfo(Ei,c,this._aead.nonceSize),E=await this._kdf.extractAndExpand(r,f,x,this._aead.nonceSize);return{aead:this._aead,exporterSecret:h,key:g,baseNonce:new Uint8Array(E),seq:0}}async _keyScheduleS(e,r,n,i){let o=await this._keySchedule(e,r,i);return o.key===void 0?new It(this._api,this._kdf,o.exporterSecret,n):new Ut(this._api,this._kdf,o,n)}async _keyScheduleR(e,r,n){let i=await this._keySchedule(e,r,n);return i.key===void 0?new Kt(this._api,this._kdf,i.exporterSecret):new Lt(this._api,this._kdf,i)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new Y("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new Y(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new Y("Too long psk.key");if(e.psk.id.byteLength>8192)throw new Y("Too long psk.id")}}};var on=new Uint8Array([72,80,75,69,45,118,49]),ft=class extends we{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:de.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:Z}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,r){this._checkInit();let n=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+r.byteLength);return n.set(on,0),n.set(this._suiteId,7),n.set(e,7+this._suiteId.byteLength),n.set(r,7+this._suiteId.byteLength+e.byteLength),n}buildLabeledInfo(e,r,n){this._checkInit();let i=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+r.byteLength);return i.set(new Uint8Array([0,n]),0),i.set(on,2),i.set(this._suiteId,9),i.set(e,9+this._suiteId.byteLength),i.set(r,9+this._suiteId.byteLength+e.byteLength),i}async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new Y("The salt length must be the same as the hashSize");let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}async expand(e,r,n){await this._setup();let i=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),o=new ArrayBuffer(n),a=new Uint8Array(o),s=Z,c=new Uint8Array(r),u=new Uint8Array(1);if(n>255*this.hashSize)throw new Error("Entropy limit reached");let f=new Uint8Array(this.hashSize+c.length+1);for(let l=1,h=0;h=s.length?(a.set(s,h),h+=s.length):(a.set(s.slice(0,a.length-h),h),h+=a.length-h);return o}async extractAndExpand(e,r,n,i){await this._setup();let o=await this._api.importKey("raw",r,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:n},o,i*8)}async labeledExtract(e,r,n){return await this.extract(e,this.buildLabeledIkm(r,n))}async labeledExpand(e,r,n,i){return await this.expand(e,this.buildLabeledInfo(r,n,i),i)}_checkInit(){if(this._suiteId===Z)throw new Error("Not initialized. Call init()")}},ut=class extends ft{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:de.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},lt=class extends ft{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:de.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},ht=class extends ft{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:de.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var cr=new Uint8Array([75,69,77,0,0]);var Ki=new Uint8Array([101,97,101,95,112,114,107]),Ii=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);function Li(t,e,r){let n=new Uint8Array(t.length+e.length+r.length);return n.set(t,0),n.set(e,t.length),n.set(r,t.length+e.length),n}var ce=class{constructor(e,r,n){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=r,this._kdf=n;let i=new Uint8Array(cr);i.set(pe(this.id,2),3),this._kdf.init(i)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,r,n=!0){return await this._prim.importKey(e,r,n)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>8192)throw new Y("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let r;e.ekm===void 0?r=await this.generateKeyPair():je(e.ekm)?r=e.ekm:r=await this.deriveKeyPair(e.ekm);let n=await this._prim.serializePublicKey(r.publicKey),i=await this._prim.serializePublicKey(e.recipientPublicKey);try{let o;if(e.senderKey===void 0)o=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey));else{let c=je(e.senderKey)?e.senderKey.privateKey:e.senderKey,u=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey)),f=new Uint8Array(await this._prim.dh(c,e.recipientPublicKey));o=Ve(u,f)}let a;if(e.senderKey===void 0)a=Ve(new Uint8Array(n),new Uint8Array(i));else{let c=je(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),u=await this._prim.serializePublicKey(c);a=Li(new Uint8Array(n),new Uint8Array(i),new Uint8Array(u))}let s=await this._generateSharedSecret(o,a);return{enc:n,sharedSecret:s}}catch(o){throw new tt(o)}}async decap(e){let r=await this._prim.deserializePublicKey(e.enc),n=je(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,i=je(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),o=await this._prim.serializePublicKey(i);try{let a;if(e.senderPublicKey===void 0)a=new Uint8Array(await this._prim.dh(n,r));else{let c=new Uint8Array(await this._prim.dh(n,r)),u=new Uint8Array(await this._prim.dh(n,e.senderPublicKey));a=Ve(c,u)}let s;if(e.senderPublicKey===void 0)s=Ve(new Uint8Array(e.enc),new Uint8Array(o));else{let c=await this._prim.serializePublicKey(e.senderPublicKey);s=new Uint8Array(e.enc.byteLength+o.byteLength+c.byteLength),s.set(new Uint8Array(e.enc),0),s.set(new Uint8Array(o),e.enc.byteLength),s.set(new Uint8Array(c),e.enc.byteLength+o.byteLength)}return await this._generateSharedSecret(a,s)}catch(a){throw new rt(a)}}async _generateSharedSecret(e,r){let n=this._kdf.buildLabeledIkm(Ki,e),i=this._kdf.buildLabeledInfo(Ii,r,this.secretSize);return await this._kdf.extractAndExpand(Z,n,i,this.secretSize)}};var Ht=["deriveBits"],fr=new Uint8Array([100,107,112,95,112,114,107]),Ui=new Uint8Array([115,107]);var zt=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[r])return!1}return!1}};var Oi=new Uint8Array([99,97,110,100,105,100,97,116,101]),Hi=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),zi=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Ti=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Di=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Ri=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Ci=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),me=class extends we{constructor(e,r){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=r,e){case M.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=Hi,this._bitmask=255,this._pkcs8AlgId=Di;break;case M.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=zi,this._bitmask=255,this._pkcs8AlgId=Ri;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Ti,this._bitmask=1,this._pkcs8AlgId=Ci;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(r){throw new ie(r)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(r){throw new J(r)}}async serializePrivateKey(e){await this._setup();try{let r=await this._api.exportKey("jwk",e);if(!("d"in r))throw new Error("Not private key");return rn(r.d)}catch(r){throw new ie(r)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(r){throw new J(r)}}async importKey(e,r,n){await this._setup();try{if(e==="raw")return await this._importRawKey(r,n);if(r instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(r,n)}catch(i){throw new J(i)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,Ht)}catch(e){throw new oe(e)}}async deriveKeyPair(e){await this._setup();try{let r=await this._hkdf.labeledExtract(Z,fr,new Uint8Array(e)),n=new zt(this._nSk);for(let o=0;n.isZero()||!n.lessThan(this._order);o++){if(o>255)throw new Error("Faild to derive a key pair");let a=new Uint8Array(await this._hkdf.labeledExpand(r,Oi,pe(o,1),this._nSk));a[0]=a[0]&this._bitmask,n.set(a)}let i=await this._deserializePkcs8Key(n.val());return n.reset(),{privateKey:i,publicKey:await this.derivePublicKey(i)}}catch(r){throw new _e(r)}}async derivePublicKey(e){await this._setup();try{let r=await this._api.exportKey("jwk",e);return delete r.d,delete r.key_ops,await this._api.importKey("jwk",r,this._alg,!0,[])}catch(r){throw new J(r)}}async dh(e,r){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:r},e,this._nDh*8)}catch(n){throw new ie(n)}}async _importRawKey(e,r){if(r&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!r&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return r?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,r){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(r){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,Ht)}async _deserializePkcs8Key(e){let r=new Uint8Array(this._pkcs8AlgId.length+e.length);return r.set(this._pkcs8AlgId,0),r.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",r,this._alg,!0,Ht)}};var dt=class extends Ot{};var pt=class extends ut{},yt=class extends lt{},bt=class extends ht{};var ee=class{constructor(e,r,n,i=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=r,this.type=n,this.algorithm={name:e},this.usages=i,n==="public"&&(this.usages=[])}};var Ni={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},ji={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},Mi={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};function Tt(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`positive integer expected, not ${t}`)}function ur(t){if(typeof t!="boolean")throw new Error(`boolean expected, not ${t}`)}function lr(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function fe(t,...e){if(!lr(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${t.length}`)}function hr(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function sn(t,e){fe(t);let r=e.outputLen;if(t.lengthnew Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),an=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),qi=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!qi)throw new Error("Non little-endian hardware is not supported");function Fi(t){if(typeof t!="string")throw new Error(`string expected, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function Dt(t){if(typeof t=="string")t=Fi(t);else if(lr(t))t=t.slice();else throw new Error(`Uint8Array expected, got ${typeof t}`);return t}function cn(t,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(t,e)}function fn(t,e){if(t.length!==e.length)return!1;let r=0;for(let n=0;n(Object.assign(e,t),e);function pr(t,e,r,n){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,r,n);let i=BigInt(32),o=BigInt(4294967295),a=Number(r>>i&o),s=Number(r&o),c=n?4:0,u=n?0:4;t.setUint32(e+c,a,n),t.setUint32(e+u,s,n)}var ne=(t,e)=>t[e++]&255|(t[e++]&255)<<8,yr=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=Dt(e),fe(e,32);let r=ne(e,0),n=ne(e,2),i=ne(e,4),o=ne(e,6),a=ne(e,8),s=ne(e,10),c=ne(e,12),u=ne(e,14);this.r[0]=r&8191,this.r[1]=(r>>>13|n<<3)&8191,this.r[2]=(n>>>10|i<<6)&7939,this.r[3]=(i>>>7|o<<9)&8191,this.r[4]=(o>>>4|a<<12)&255,this.r[5]=a>>>1&8190,this.r[6]=(a>>>14|s<<2)&8191,this.r[7]=(s>>>11|c<<5)&8065,this.r[8]=(c>>>8|u<<8)&8191,this.r[9]=u>>>5&127;for(let f=0;f<8;f++)this.pad[f]=ne(e,16+2*f)}process(e,r,n=!1){let i=n?0:2048,{h:o,r:a}=this,s=a[0],c=a[1],u=a[2],f=a[3],l=a[4],h=a[5],b=a[6],g=a[7],x=a[8],E=a[9],P=ne(e,r+0),v=ne(e,r+2),y=ne(e,r+4),B=ne(e,r+6),F=ne(e,r+8),O=ne(e,r+10),C=ne(e,r+12),H=ne(e,r+14),K=o[0]+(P&8191),U=o[1]+((P>>>13|v<<3)&8191),I=o[2]+((v>>>10|y<<6)&8191),R=o[3]+((y>>>7|B<<9)&8191),D=o[4]+((B>>>4|F<<12)&8191),q=o[5]+(F>>>1&8191),N=o[6]+((F>>>14|O<<2)&8191),m=o[7]+((O>>>11|C<<5)&8191),d=o[8]+((C>>>8|H<<8)&8191),w=o[9]+(H>>>5|i),p=0,k=p+K*s+U*(5*E)+I*(5*x)+R*(5*g)+D*(5*b);p=k>>>13,k&=8191,k+=q*(5*h)+N*(5*l)+m*(5*f)+d*(5*u)+w*(5*c),p+=k>>>13,k&=8191;let S=p+K*c+U*s+I*(5*E)+R*(5*x)+D*(5*g);p=S>>>13,S&=8191,S+=q*(5*b)+N*(5*h)+m*(5*l)+d*(5*f)+w*(5*u),p+=S>>>13,S&=8191;let A=p+K*u+U*c+I*s+R*(5*E)+D*(5*x);p=A>>>13,A&=8191,A+=q*(5*g)+N*(5*b)+m*(5*h)+d*(5*l)+w*(5*f),p+=A>>>13,A&=8191;let T=p+K*f+U*u+I*c+R*s+D*(5*E);p=T>>>13,T&=8191,T+=q*(5*x)+N*(5*g)+m*(5*b)+d*(5*h)+w*(5*l),p+=T>>>13,T&=8191;let z=p+K*l+U*f+I*u+R*c+D*s;p=z>>>13,z&=8191,z+=q*(5*E)+N*(5*x)+m*(5*g)+d*(5*b)+w*(5*h),p+=z>>>13,z&=8191;let j=p+K*h+U*l+I*f+R*u+D*c;p=j>>>13,j&=8191,j+=q*s+N*(5*E)+m*(5*x)+d*(5*g)+w*(5*b),p+=j>>>13,j&=8191;let $=p+K*b+U*h+I*l+R*f+D*u;p=$>>>13,$&=8191,$+=q*c+N*s+m*(5*E)+d*(5*x)+w*(5*g),p+=$>>>13,$&=8191;let V=p+K*g+U*b+I*h+R*l+D*f;p=V>>>13,V&=8191,V+=q*u+N*c+m*s+d*(5*E)+w*(5*x),p+=V>>>13,V&=8191;let te=p+K*x+U*g+I*b+R*h+D*l;p=te>>>13,te&=8191,te+=q*f+N*u+m*c+d*s+w*(5*E),p+=te>>>13,te&=8191;let re=p+K*E+U*x+I*g+R*b+D*h;p=re>>>13,re&=8191,re+=q*l+N*f+m*u+d*c+w*s,p+=re>>>13,re&=8191,p=(p<<2)+p|0,p=p+k|0,k=p&8191,p=p>>>13,S+=p,o[0]=k,o[1]=S,o[2]=A,o[3]=T,o[4]=z,o[5]=j,o[6]=$,o[7]=V,o[8]=te,o[9]=re}finalize(){let{h:e,pad:r}=this,n=new Uint16Array(10),i=e[1]>>>13;e[1]&=8191;for(let s=2;s<10;s++)e[s]+=i,i=e[s]>>>13,e[s]&=8191;e[0]+=i*5,i=e[0]>>>13,e[0]&=8191,e[1]+=i,i=e[1]>>>13,e[1]&=8191,e[2]+=i,n[0]=e[0]+5,i=n[0]>>>13,n[0]&=8191;for(let s=1;s<10;s++)n[s]=e[s]+i,i=n[s]>>>13,n[s]&=8191;n[9]-=8192;let o=(i^1)-1;for(let s=0;s<10;s++)n[s]&=o;o=~o;for(let s=0;s<10;s++)e[s]=e[s]&o|n[s];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let a=e[0]+r[0];e[0]=a&65535;for(let s=1;s<8;s++)a=(e[s]+r[s]|0)+(a>>>16)|0,e[s]=a&65535}update(e){hr(this);let{buffer:r,blockLen:n}=this;e=Dt(e);let i=e.length;for(let o=0;o>>0,e[o++]=n[a]>>>8;return e}digest(){let{buffer:e,outputLen:r}=this;this.digestInto(e);let n=e.slice(0,r);return this.destroy(),n}};function Gi(t){let e=(n,i)=>t(i).update(Dt(n)).digest(),r=t(new Uint8Array(32));return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=n=>t(n),e}var un=Gi(t=>new yr(t));var hn=t=>Uint8Array.from(t.split("").map(e=>e.charCodeAt(0))),$i=hn("expand 16-byte k"),Xi=hn("expand 32-byte k"),Vi=Ee($i),dn=Ee(Xi),mc=dn.slice();function _(t,e){return t<>>32-e}function br(t){return t.byteOffset%4===0}var Rt=64,Zi=16,pn=2**32-1,ln=new Uint32Array;function Yi(t,e,r,n,i,o,a,s){let c=i.length,u=new Uint8Array(Rt),f=Ee(u),l=br(i)&&br(o),h=l?Ee(i):ln,b=l?Ee(o):ln;for(let g=0;g=pn)throw new Error("arx: counter overflow");let x=Math.min(Rt,c-g);if(l&&x===Rt){let E=g/4;if(g%4!==0)throw new Error("arx: invalid block position");for(let P=0,v;P{fe(s),fe(c),fe(u);let h=u.length;if(f||(f=new Uint8Array(h)),fe(f),Tt(l),l<0||l>=pn)throw new Error("arx: counter overflow");if(f.length0;)b.pop().fill(0);return f}}function wn(t,e,r,n,i,o=20){let a=t[0],s=t[1],c=t[2],u=t[3],f=e[0],l=e[1],h=e[2],b=e[3],g=e[4],x=e[5],E=e[6],P=e[7],v=i,y=r[0],B=r[1],F=r[2],O=a,C=s,H=c,K=u,U=f,I=l,R=h,D=b,q=g,N=x,m=E,d=P,w=v,p=y,k=B,S=F;for(let T=0;T{t.update(e);let r=e.length%16;r&&t.update(eo.subarray(r))},to=new Uint8Array(32);function bn(t,e,r,n,i){let o=t(e,r,to),a=un.create(o);i&&yn(a,i),yn(a,n);let s=new Uint8Array(16),c=an(s);pr(c,0,BigInt(i?i.length:0),!0),pr(c,8,BigInt(n.length),!0),a.update(s);let u=a.digest();return o.fill(0),u}var xn=t=>(e,r,n)=>(fe(e,32),fe(r),{encrypt:(o,a)=>{let s=o.length,c=s+16;a?fe(a,c):a=new Uint8Array(c),t(e,r,o,a,1);let u=bn(t,e,r,a.subarray(0,-16),n);return a.set(u,s),a},decrypt:(o,a)=>{let s=o.length,c=s-16;if(s<16)throw new Error("encrypted data must be at least 16 bytes");a?fe(a,c):a=new Uint8Array(c);let u=o.subarray(0,-16),f=o.subarray(-16),l=bn(t,e,r,u,n);if(!fn(f,l))throw new Error("invalid tag");return t(e,r,u,a,1),a}}),xr=dr({blockSize:64,nonceLength:12,tagLength:16},xn(Ji)),Sc=dr({blockSize:64,nonceLength:24,tagLength:16},xn(Qi));var mr=class{constructor(e){Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._key=new Uint8Array(e)}async seal(e,r,n){return await this._seal(e,r,n)}async open(e,r,n){return await this._open(e,r,n)}_seal(e,r,n){return new Promise(i=>{let o=xr(this._key,new Uint8Array(e),new Uint8Array(n)).encrypt(new Uint8Array(r));i(o.buffer)})}_open(e,r,n){return new Promise(i=>{let o=xr(this._key,new Uint8Array(e),new Uint8Array(n)).decrypt(new Uint8Array(r));i(o.buffer)})}},wt=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:se.Chacha20Poly1305}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new mr(e)}};function xt(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`positive integer expected, not ${t}`)}function ro(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function Le(t,...e){if(!ro(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${t.length}`)}function mn(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");xt(t.outputLen),xt(t.blockLen)}function ve(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function Ct(t,e){Le(t);let r=e.outputLen;if(t.lengthnew Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),Nt=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),ye=(t,e)=>t<<32-e|t>>>e;var gr=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,no=t=>t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255;function _r(t){for(let e=0;et().update(Oe(n)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e}function _n(t){let e=(n,i)=>t(i).update(Oe(n)).digest(),r=t({});return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=n=>t(n),e}function mt(t=32){if(Me&&typeof Me.getRandomValues=="function")return Me.getRandomValues(new Uint8Array(t));if(Me&&typeof Me.randomBytes=="function")return Me.randomBytes(t);throw new Error("crypto.getRandomValues must be defined")}var Mt=class extends Ue{constructor(e,r){super(),this.finished=!1,this.destroyed=!1,mn(e);let n=Oe(r);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(n.length>i?e.create().update(n).digest():n);for(let a=0;anew Mt(t,e).update(r).digest();qe.create=(t,e)=>new Mt(t,e);function io(t,e,r,n){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,r,n);let i=BigInt(32),o=BigInt(4294967295),a=Number(r>>i&o),s=Number(r&o),c=n?4:0,u=n?0:4;t.setUint32(e+c,a,n),t.setUint32(e+u,s,n)}var En=(t,e,r)=>t&e^~t&r,vn=(t,e,r)=>t&e^t&r^e&r,Ye=class extends Ue{constructor(e,r,n,i){super(),this.blockLen=e,this.outputLen=r,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Nt(this.buffer)}update(e){ve(this);let{view:r,buffer:n,blockLen:i}=this;e=Oe(e);let o=e.length;for(let a=0;ai-a&&(this.process(n,0),a=0);for(let l=a;lf.length)throw new Error("_sha2: outputLen bigger than state");for(let l=0;l>>3,x=ye(b,17)^ye(b,19)^b>>>10;ze[l]=x+ze[l-7]+g+ze[l-16]|0}let{A:n,B:i,C:o,D:a,E:s,F:c,G:u,H:f}=this;for(let l=0;l<64;l++){let h=ye(s,6)^ye(s,11)^ye(s,25),b=f+h+En(s,c,u)+oo[l]+ze[l]|0,x=(ye(n,2)^ye(n,13)^ye(n,22))+vn(n,i,o)|0;f=u,u=c,c=s,s=a+b|0,a=o,o=i,i=n,n=b+x|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,a=a+this.D|0,s=s+this.E|0,c=c+this.F|0,u=u+this.G|0,f=f+this.H|0,this.set(n,i,o,a,s,c,u,f)}roundClean(){ze.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var kn=ge(()=>new vr);var ke=class extends pt{async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return qe(kn,new Uint8Array(e),new Uint8Array(r));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}};var qt=BigInt(4294967295),kr=BigInt(32);function Sn(t,e=!1){return e?{h:Number(t&qt),l:Number(t>>kr&qt)}:{h:Number(t>>kr&qt)|0,l:Number(t&qt)|0}}function Sr(t,e=!1){let r=new Uint32Array(t.length),n=new Uint32Array(t.length);for(let i=0;iBigInt(t>>>0)<>>0),ao=(t,e,r)=>t>>>r,co=(t,e,r)=>t<<32-r|e>>>r,fo=(t,e,r)=>t>>>r|e<<32-r,uo=(t,e,r)=>t<<32-r|e>>>r,lo=(t,e,r)=>t<<64-r|e>>>r-32,ho=(t,e,r)=>t>>>r-32|e<<64-r,po=(t,e)=>e,yo=(t,e)=>t,Ar=(t,e,r)=>t<>>32-r,Pr=(t,e,r)=>e<>>32-r,Br=(t,e,r)=>e<>>64-r,Kr=(t,e,r)=>t<>>64-r;function bo(t,e,r,n){let i=(e>>>0)+(n>>>0);return{h:t+r+(i/2**32|0)|0,l:i|0}}var wo=(t,e,r)=>(t>>>0)+(e>>>0)+(r>>>0),xo=(t,e,r,n)=>e+r+n+(t/2**32|0)|0,mo=(t,e,r,n)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0),go=(t,e,r,n,i)=>e+r+n+i+(t/2**32|0)|0,_o=(t,e,r,n,i)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0)+(i>>>0),Eo=(t,e,r,n,i,o)=>e+r+n+i+o+(t/2**32|0)|0;var vo={fromBig:Sn,split:Sr,toBig:so,shrSH:ao,shrSL:co,rotrSH:fo,rotrSL:uo,rotrBH:lo,rotrBL:ho,rotr32H:po,rotr32L:yo,rotlSH:Ar,rotlSL:Pr,rotlBH:Br,rotlBL:Kr,add:bo,add3L:wo,add3H:xo,add4L:mo,add4H:go,add5H:Eo,add5L:_o},L=vo;var[ko,So]=L.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),Te=new Uint32Array(80),De=new Uint32Array(80),Ft=class extends Ye{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:r,Bh:n,Bl:i,Ch:o,Cl:a,Dh:s,Dl:c,Eh:u,El:f,Fh:l,Fl:h,Gh:b,Gl:g,Hh:x,Hl:E}=this;return[e,r,n,i,o,a,s,c,u,f,l,h,b,g,x,E]}set(e,r,n,i,o,a,s,c,u,f,l,h,b,g,x,E){this.Ah=e|0,this.Al=r|0,this.Bh=n|0,this.Bl=i|0,this.Ch=o|0,this.Cl=a|0,this.Dh=s|0,this.Dl=c|0,this.Eh=u|0,this.El=f|0,this.Fh=l|0,this.Fl=h|0,this.Gh=b|0,this.Gl=g|0,this.Hh=x|0,this.Hl=E|0}process(e,r){for(let y=0;y<16;y++,r+=4)Te[y]=e.getUint32(r),De[y]=e.getUint32(r+=4);for(let y=16;y<80;y++){let B=Te[y-15]|0,F=De[y-15]|0,O=L.rotrSH(B,F,1)^L.rotrSH(B,F,8)^L.shrSH(B,F,7),C=L.rotrSL(B,F,1)^L.rotrSL(B,F,8)^L.shrSL(B,F,7),H=Te[y-2]|0,K=De[y-2]|0,U=L.rotrSH(H,K,19)^L.rotrBH(H,K,61)^L.shrSH(H,K,6),I=L.rotrSL(H,K,19)^L.rotrBL(H,K,61)^L.shrSL(H,K,6),R=L.add4L(C,I,De[y-7],De[y-16]),D=L.add4H(R,O,U,Te[y-7],Te[y-16]);Te[y]=D|0,De[y]=R|0}let{Ah:n,Al:i,Bh:o,Bl:a,Ch:s,Cl:c,Dh:u,Dl:f,Eh:l,El:h,Fh:b,Fl:g,Gh:x,Gl:E,Hh:P,Hl:v}=this;for(let y=0;y<80;y++){let B=L.rotrSH(l,h,14)^L.rotrSH(l,h,18)^L.rotrBH(l,h,41),F=L.rotrSL(l,h,14)^L.rotrSL(l,h,18)^L.rotrBL(l,h,41),O=l&b^~l&x,C=h&g^~h&E,H=L.add5L(v,F,C,So[y],De[y]),K=L.add5H(H,P,B,O,ko[y],Te[y]),U=H|0,I=L.rotrSH(n,i,28)^L.rotrBH(n,i,34)^L.rotrBH(n,i,39),R=L.rotrSL(n,i,28)^L.rotrBL(n,i,34)^L.rotrBL(n,i,39),D=n&o^n&s^o&s,q=i&a^i&c^a&c;P=x|0,v=E|0,x=b|0,E=g|0,b=l|0,g=h|0,{h:l,l:h}=L.add(u|0,f|0,K|0,U|0),u=s|0,f=c|0,s=o|0,c=a|0,o=n|0,a=i|0;let N=L.add3L(U,R,q);n=L.add3H(N,K,I,D),i=N|0}({h:n,l:i}=L.add(this.Ah|0,this.Al|0,n|0,i|0)),{h:o,l:a}=L.add(this.Bh|0,this.Bl|0,o|0,a|0),{h:s,l:c}=L.add(this.Ch|0,this.Cl|0,s|0,c|0),{h:u,l:f}=L.add(this.Dh|0,this.Dl|0,u|0,f|0),{h:l,l:h}=L.add(this.Eh|0,this.El|0,l|0,h|0),{h:b,l:g}=L.add(this.Fh|0,this.Fl|0,b|0,g|0),{h:x,l:E}=L.add(this.Gh|0,this.Gl|0,x|0,E|0),{h:P,l:v}=L.add(this.Hh|0,this.Hl|0,P|0,v|0),this.set(n,i,o,a,s,c,u,f,l,h,b,g,x,E,P,v)}roundClean(){Te.fill(0),De.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var Ir=class extends Ft{constructor(){super(),this.Ah=-876896931,this.Al=-1056596264,this.Bh=1654270250,this.Bl=914150663,this.Ch=-1856437926,this.Cl=812702999,this.Dh=355462360,this.Dl=-150054599,this.Eh=1731405415,this.El=-4191439,this.Fh=-1900787065,this.Fl=1750603025,this.Gh=-619958771,this.Gl=1694076839,this.Hh=1203062813,this.Hl=-1090891868,this.outputLen=48}},An=ge(()=>new Ft);var Pn=ge(()=>new Ir);var Kn=BigInt(0),In=BigInt(1),Ao=BigInt(2);function Ur(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function Or(t){if(!Ur(t))throw new Error("Uint8Array expected")}function Gt(t,e){if(typeof e!="boolean")throw new Error(`${t} must be valid boolean, got "${e}".`)}var Po=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function $t(t){Or(t);let e="";for(let r=0;r=Se._0&&t<=Se._9)return t-Se._0;if(t>=Se._A&&t<=Se._F)return t-(Se._A-10);if(t>=Se._a&&t<=Se._f)return t-(Se._a-10)}function Un(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);let e=t.length,r=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(r);for(let i=0,o=0;itypeof t=="bigint"&&Kn<=t;function Bo(t,e,r){return Lr(t)&&Lr(e)&&Lr(r)&&e<=t&&tKn;t>>=In,e+=1);return e}var zn=t=>(Ao<typeof t=="bigint",function:t=>typeof t=="function",boolean:t=>typeof t=="boolean",string:t=>typeof t=="string",stringOrUint8Array:t=>typeof t=="string"||Ur(t),isSafeInteger:t=>Number.isSafeInteger(t),array:t=>Array.isArray(t),field:(t,e)=>e.Fp.isValid(t),hash:t=>typeof t=="function"&&Number.isSafeInteger(t.outputLen)};function Re(t,e,r={}){let n=(i,o,a)=>{let s=Ko[o];if(typeof s!="function")throw new Error(`Invalid validator "${o}", expected function`);let c=t[i];if(!(a&&c===void 0)&&!s(c,t))throw new Error(`Invalid param ${String(i)}=${c} (${typeof c}), expected ${o}`)};for(let[i,o]of Object.entries(e))n(i,o,!1);for(let[i,o]of Object.entries(r))n(i,o,!0);return t}function Tr(t){let e=new WeakMap;return(r,...n)=>{let i=e.get(r);if(i!==void 0)return i;let o=t(r,...n);return e.set(r,o),o}}var Q=BigInt(0),W=BigInt(1),Ge=BigInt(2),Lo=BigInt(3),Dr=BigInt(4),Tn=BigInt(5),Dn=BigInt(8),Uo=BigInt(9),Oo=BigInt(16);function X(t,e){let r=t%e;return r>=Q?r:e+r}function Rr(t,e,r){if(r<=Q||e 0");if(r===W)return Q;let n=W;for(;e>Q;)e&W&&(n=n*t%r),t=t*t%r,e>>=W;return n}function G(t,e,r){let n=t;for(;e-- >Q;)n*=n,n%=r;return n}function Rn(t,e){if(t===Q||e<=Q)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let r=X(t,e),n=e,i=Q,o=W,a=W,s=Q;for(;r!==Q;){let u=n/r,f=n%r,l=i-a*u,h=o-s*u;n=r,r=f,i=a,o=s,a=l,s=h}if(n!==W)throw new Error("invert: does not exist");return X(i,e)}function Ho(t){let e=(t-W)/Ge,r,n,i;for(r=t-W,n=0;r%Ge===Q;r/=Ge,n++);for(i=Ge;i(n[i]="function",n),e);return Re(t,r)}function Do(t,e,r){if(r 0");if(r===Q)return t.ONE;if(r===W)return e;let n=t.ONE,i=e;for(;r>Q;)r&W&&(n=t.mul(n,i)),i=t.sqr(i),r>>=W;return n}function Ro(t,e){let r=new Array(e.length),n=e.reduce((o,a,s)=>t.is0(a)?o:(r[s]=o,t.mul(o,a)),t.ONE),i=t.inv(n);return e.reduceRight((o,a,s)=>t.is0(a)?o:(r[s]=t.mul(o,r[s]),t.mul(o,a)),i),r}function Cr(t,e){let r=e!==void 0?e:t.toString(2).length,n=Math.ceil(r/8);return{nBitLength:r,nByteLength:n}}function gt(t,e,r=!1,n={}){if(t<=Q)throw new Error(`Expected Field ORDER > 0, got ${t}`);let{nBitLength:i,nByteLength:o}=Cr(t,e);if(o>2048)throw new Error("Field lengths over 2048 bytes are not supported");let a=zo(t),s=Object.freeze({ORDER:t,BITS:i,BYTES:o,MASK:zn(i),ZERO:Q,ONE:W,create:c=>X(c,t),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return Q<=c&&cc===Q,isOdd:c=>(c&W)===W,neg:c=>X(-c,t),eql:(c,u)=>c===u,sqr:c=>X(c*c,t),add:(c,u)=>X(c+u,t),sub:(c,u)=>X(c-u,t),mul:(c,u)=>X(c*u,t),pow:(c,u)=>Do(s,c,u),div:(c,u)=>X(c*Rn(u,t),t),sqrN:c=>c*c,addN:(c,u)=>c+u,subN:(c,u)=>c-u,mulN:(c,u)=>c*u,inv:c=>Rn(c,t),sqrt:n.sqrt||(c=>a(s,c)),invertBatch:c=>Ro(s,c),cmov:(c,u,f)=>f?u:c,toBytes:c=>r?Fe(c,o):Hr(c,o),fromBytes:c=>{if(c.length!==o)throw new Error(`Fp.fromBytes: expected ${o}, got ${c.length}`);return r?Ae(c):On(c)}});return Object.freeze(s)}var Co=BigInt(0),Nr=BigInt(1),jr=new WeakMap,Nn=new WeakMap;function jn(t,e){let r=(o,a)=>{let s=a.negate();return o?s:a},n=o=>{if(!Number.isSafeInteger(o)||o<=0||o>e)throw new Error(`Wrong window size=${o}, should be [1..${e}]`)},i=o=>{n(o);let a=Math.ceil(e/o)+1,s=2**(o-1);return{windows:a,windowSize:s}};return{constTimeNegate:r,unsafeLadder(o,a){let s=t.ZERO,c=o;for(;a>Co;)a&Nr&&(s=s.add(c)),c=c.double(),a>>=Nr;return s},precomputeWindow(o,a){let{windows:s,windowSize:c}=i(a),u=[],f=o,l=f;for(let h=0;h>=g,P>u&&(P-=b,s+=Nr);let v=E,y=E+Math.abs(P)-1,B=x%2!==0,F=P<0;P===0?l=l.add(r(B,a[v])):f=f.add(r(F,a[y]))}return{p:f,f:l}},wNAFCached(o,a,s){let c=Nn.get(o)||1,u=jr.get(o);return u||(u=this.precomputeWindow(o,c),c!==1&&jr.set(o,s(u))),this.wNAF(c,u,a)},setWindowSize(o,a){n(a),Nn.set(o,a),jr.delete(o)}}}function Mn(t,e,r,n){if(!Array.isArray(r)||!Array.isArray(n)||n.length!==r.length)throw new Error("arrays of points and scalars must have equal length");n.forEach((f,l)=>{if(!e.isValid(f))throw new Error(`wrong scalar at index ${l}`)}),r.forEach((f,l)=>{if(!(f instanceof t))throw new Error(`wrong point at index ${l}`)});let i=Hn(BigInt(r.length)),o=i>12?i-3:i>4?i-2:i?2:1,a=(1<=0;f-=o){s.fill(t.ZERO);for(let h=0;h>BigInt(f)&BigInt(a));s[g]=s[g].add(r[h])}let l=t.ZERO;for(let h=s.length-1,b=t.ZERO;h>0;h--)b=b.add(s[h]),l=l.add(b);if(u=u.add(l),f!==0)for(let h=0;h{try{return{isValid:!0,value:r.sqrt(m*r.inv(d))}}catch{return{isValid:!1,value:be}}}),b=e.adjustScalarBytes||(m=>m),g=e.domain||((m,d,w)=>{if(Gt("phflag",w),d.length||w)throw new Error("Contexts/pre-hash are not supported");return m});function x(m,d){Pe("coordinate "+m,d,be,u)}function E(m){if(!(m instanceof y))throw new Error("ExtendedPoint expected")}let P=Tr((m,d)=>{let{ex:w,ey:p,ez:k}=m,S=m.is0();d==null&&(d=S?No:r.inv(k));let A=f(w*d),T=f(p*d),z=f(k*d);if(S)return{x:be,y:ue};if(z!==ue)throw new Error("invZ was invalid");return{x:A,y:T}}),v=Tr(m=>{let{a:d,d:w}=e;if(m.is0())throw new Error("bad point: ZERO");let{ex:p,ey:k,ez:S,et:A}=m,T=f(p*p),z=f(k*k),j=f(S*S),$=f(j*j),V=f(T*d),te=f(j*f(V+z)),re=f($+f(w*f(T*z)));if(te!==re)throw new Error("bad point: equation left != right (1)");let he=f(p*k),Ke=f(S*A);if(he!==Ke)throw new Error("bad point: equation left != right (2)");return!0});class y{constructor(d,w,p,k){this.ex=d,this.ey=w,this.ez=p,this.et=k,x("x",d),x("y",w),x("z",p),x("t",k),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(d){if(d instanceof y)throw new Error("extended point not allowed");let{x:w,y:p}=d||{};return x("x",w),x("y",p),new y(w,p,ue,f(w*p))}static normalizeZ(d){let w=r.invertBatch(d.map(p=>p.ez));return d.map((p,k)=>p.toAffine(w[k])).map(y.fromAffine)}static msm(d,w){return Mn(y,l,d,w)}_setWindowSize(d){O.setWindowSize(this,d)}assertValidity(){v(this)}equals(d){E(d);let{ex:w,ey:p,ez:k}=this,{ex:S,ey:A,ez:T}=d,z=f(w*T),j=f(S*k),$=f(p*T),V=f(A*k);return z===j&&$===V}is0(){return this.equals(y.ZERO)}negate(){return new y(f(-this.ex),this.ey,this.ez,f(-this.et))}double(){let{a:d}=e,{ex:w,ey:p,ez:k}=this,S=f(w*w),A=f(p*p),T=f(Xt*f(k*k)),z=f(d*S),j=w+p,$=f(f(j*j)-S-A),V=z+A,te=V-T,re=z-A,he=f($*te),Ke=f(V*re),Ne=f($*re),Pt=f(te*V);return new y(he,Ke,Pt,Ne)}add(d){E(d);let{a:w,d:p}=e,{ex:k,ey:S,ez:A,et:T}=this,{ex:z,ey:j,ez:$,et:V}=d;if(w===BigInt(-1)){let Vr=f((S-k)*(j+z)),Zr=f((S+k)*(j-z)),nr=f(Zr-Vr);if(nr===be)return this.double();let Yr=f(A*Xt*V),Wr=f(T*Xt*$),Jr=Wr+Yr,Qr=Zr+Vr,en=Wr-Yr,hi=f(Jr*nr),di=f(Qr*en),pi=f(Jr*en),yi=f(nr*Qr);return new y(hi,di,yi,pi)}let te=f(k*z),re=f(S*j),he=f(T*p*V),Ke=f(A*$),Ne=f((k+S)*(z+j)-te-re),Pt=Ke-he,$r=Ke+he,Xr=f(re-w*te),ci=f(Ne*Pt),fi=f($r*Xr),ui=f(Ne*Xr),li=f(Pt*$r);return new y(ci,fi,li,ui)}subtract(d){return this.add(d.negate())}wNAF(d){return O.wNAFCached(this,d,y.normalizeZ)}multiply(d){let w=d;Pe("scalar",w,ue,n);let{p,f:k}=this.wNAF(w);return y.normalizeZ([p,k])[0]}multiplyUnsafe(d){let w=d;return Pe("scalar",w,be,n),w===be?F:this.equals(F)||w===ue?this:this.equals(B)?this.wNAF(w).p:O.unsafeLadder(this,w)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return O.unsafeLadder(this,n).is0()}toAffine(d){return P(this,d)}clearCofactor(){let{h:d}=e;return d===ue?this:this.multiplyUnsafe(d)}static fromHex(d,w=!1){let{d:p,a:k}=e,S=r.BYTES;d=le("pointHex",d,S),Gt("zip215",w);let A=d.slice(),T=d[S-1];A[S-1]=T&-129;let z=Ae(A),j=w?u:r.ORDER;Pe("pointHex.y",z,be,j);let $=f(z*z),V=f($-ue),te=f(p*$-k),{isValid:re,value:he}=h(V,te);if(!re)throw new Error("Point.fromHex: invalid y coordinate");let Ke=(he&ue)===ue,Ne=(T&128)!==0;if(!w&&he===be&&Ne)throw new Error("Point.fromHex: x=0 and x_0=1");return Ne!==Ke&&(he=f(-he)),y.fromAffine({x:he,y:z})}static fromPrivateKey(d){return K(d).point}toRawBytes(){let{x:d,y:w}=this.toAffine(),p=Fe(w,r.BYTES);return p[p.length-1]|=d&ue?128:0,p}toHex(){return $t(this.toRawBytes())}}y.BASE=new y(e.Gx,e.Gy,ue,f(e.Gx*e.Gy)),y.ZERO=new y(be,ue,ue,be);let{BASE:B,ZERO:F}=y,O=jn(y,s*8);function C(m){return X(m,n)}function H(m){return C(Ae(m))}function K(m){let d=s;m=le("private key",m,d);let w=le("hashed private key",o(m),2*d),p=b(w.slice(0,d)),k=w.slice(d,2*d),S=H(p),A=B.multiply(S),T=A.toRawBytes();return{head:p,prefix:k,scalar:S,point:A,pointBytes:T}}function U(m){return K(m).pointBytes}function I(m=new Uint8Array,...d){let w=zr(...d);return H(o(g(w,le("context",m),!!i)))}function R(m,d,w={}){m=le("message",m),i&&(m=i(m));let{prefix:p,scalar:k,pointBytes:S}=K(d),A=I(w.context,p,m),T=B.multiply(A).toRawBytes(),z=I(w.context,T,S,m),j=C(A+z*k);Pe("signature.s",j,be,n);let $=zr(T,Fe(j,r.BYTES));return le("result",$,s*2)}let D=jo;function q(m,d,w,p=D){let{context:k,zip215:S}=p,A=r.BYTES;m=le("signature",m,2*A),d=le("message",d),S!==void 0&&Gt("zip215",S),i&&(d=i(d));let T=Ae(m.slice(A,2*A)),z,j,$;try{z=y.fromHex(w,S),j=y.fromHex(m.slice(0,A),S),$=B.multiplyUnsafe(T)}catch{return!1}if(!S&&z.isSmallOrder())return!1;let V=I(k,j.toRawBytes(),z.toRawBytes(),d);return j.add(z.multiplyUnsafe(V)).subtract($).clearCofactor().equals(y.ZERO)}return B._setWindowSize(8),{CURVE:e,getPublicKey:U,sign:R,verify:q,ExtendedPoint:y,utils:{getExtendedPublicKey:K,randomPrivateKey:()=>a(r.BYTES),precompute(m=8,d=y.BASE){return d._setWindowSize(m),d.multiply(BigInt(3)),d}}}}var We=BigInt(0),Mr=BigInt(1);function qo(t){return Re(t,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...t})}function Vt(t){let e=qo(t),{P:r}=e,n=v=>X(v,r),i=e.montgomeryBits,o=Math.ceil(i/8),a=e.nByteLength,s=e.adjustScalarBytes||(v=>v),c=e.powPminus2||(v=>Rr(v,r-BigInt(2),r));function u(v,y,B){let F=n(v*(y-B));return y=n(y-F),B=n(B+F),[y,B]}let f=(e.a-BigInt(2))/BigInt(4);function l(v,y){Pe("u",v,We,r),Pe("scalar",y,We,r);let B=y,F=v,O=Mr,C=We,H=v,K=Mr,U=We,I;for(let D=BigInt(i-1);D>=We;D--){let q=B>>D&Mr;U^=q,I=u(U,O,H),O=I[0],H=I[1],I=u(U,C,K),C=I[0],K=I[1],U=q;let N=O+C,m=n(N*N),d=O-C,w=n(d*d),p=m-w,k=H+K,S=H-K,A=n(S*N),T=n(k*d),z=A+T,j=A-T;H=n(z*z),K=n(F*n(j*j)),O=n(m*w),C=n(p*(m+n(f*p)))}I=u(U,O,H),O=I[0],H=I[1],I=u(U,C,K),C=I[0],K=I[1];let R=c(C);return n(O*R)}function h(v){return Fe(n(v),o)}function b(v){let y=le("u coordinate",v,o);return a===32&&(y[31]&=127),Ae(y)}function g(v){let y=le("scalar",v),B=y.length;if(B!==o&&B!==a)throw new Error(`Expected ${o} or ${a} bytes, got ${B}`);return Ae(s(y))}function x(v,y){let B=b(y),F=g(v),O=l(B,F);if(O===We)throw new Error("Invalid private or public key received");return h(O)}let E=h(e.Gu);function P(v){return x(v,E)}return{scalarMult:x,scalarMultBase:P,getSharedSecret:(v,y)=>x(v,y),getPublicKey:v=>P(v),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:E}}var qr=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949");var mf=BigInt(0),Go=BigInt(1),Gn=BigInt(2),$o=BigInt(3),Xo=BigInt(5),gf=BigInt(8);function Vo(t){let e=BigInt(10),r=BigInt(20),n=BigInt(40),i=BigInt(80),o=qr,s=t*t%o*t%o,c=G(s,Gn,o)*s%o,u=G(c,Go,o)*t%o,f=G(u,Xo,o)*u%o,l=G(f,e,o)*f%o,h=G(l,r,o)*l%o,b=G(h,n,o)*h%o,g=G(b,i,o)*b%o,x=G(g,i,o)*b%o,E=G(x,e,o)*f%o;return{pow_p_5_8:G(E,Gn,o)*t%o,b2:s}}function Zo(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}var Zt=Vt({P:qr,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:t=>{let e=qr,{pow_p_5_8:r,b2:n}=Vo(t);return X(G(r,$o,e)*n,e)},adjustScalarBytes:Zo,randomBytes:mt});var Je="X25519",$n=new Uint8Array,Yt=["deriveBits"],Yo=new Uint8Array([100,107,112,95,112,114,107]),Wo=new Uint8Array([115,107]);function Xn(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),n=new Uint8Array(r.length);for(let i=0;i{r(e.key.buffer)})}_serializePrivateKey(e){return new Promise(r=>{r(e.key.buffer)})}_importRawKey(e,r){return new Promise((n,i)=>{r&&e.byteLength!==this._nPk&&i(new Error("Invalid length of the key")),!r&&e.byteLength!==this._nSk&&i(new Error("Invalid length of the key")),n(new ee(Je,new Uint8Array(e),r?"public":"private",r?[]:Yt))})}_importJWK(e,r){return new Promise((n,i)=>{(typeof e.kty>"u"||e.kty!=="OKP")&&i(new Error(`Invalid kty: ${e.kty}`)),(typeof e.crv>"u"||e.crv!=="X25519")&&i(new Error(`Invalid crv: ${e.crv}`)),r?(typeof e.d<"u"&&i(new Error("Invalid key: `d` should not be set")),typeof e.x>"u"&&i(new Error("Invalid key: `x` not found")),n(new ee(Je,Xn(e.x),"public"))):(typeof e.d!="string"&&i(new Error("Invalid key: `d` not found")),n(new ee(Je,Xn(e.d),"private",Yt)))})}_derivePublicKey(e){return new Promise((r,n)=>{try{let i=Zt.getPublicKey(e.key);r(new ee(Je,i,"public"))}catch(i){n(i)}})}_dh(e,r){return new Promise((n,i)=>{try{n(Zt.getSharedSecret(e.key,r.key).buffer)}catch(o){i(o)}})}};var Et=class extends ce{constructor(){let e=new ke;super(M.DhkemX25519HkdfSha256,new _t(e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:M.DhkemX25519HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}};var Be=class extends bt{async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return qe(An,new Uint8Array(e),new Uint8Array(r));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}};var Yn=[],Wn=[],Jn=[],Jo=BigInt(0),vt=BigInt(1),Qo=BigInt(2),es=BigInt(7),ts=BigInt(256),rs=BigInt(113);for(let t=0,e=vt,r=1,n=0;t<24;t++){[r,n]=[n,(2*r+3*n)%5],Yn.push(2*(5*n+r)),Wn.push((t+1)*(t+2)/2%64);let i=Jo;for(let o=0;o<7;o++)e=(e<>es)*rs)%ts,e&Qo&&(i^=vt<<(vt<r>32?Br(t,e,r):Ar(t,e,r),Zn=(t,e,r)=>r>32?Kr(t,e,r):Pr(t,e,r);function os(t,e=24){let r=new Uint32Array(10);for(let n=24-e;n<24;n++){for(let a=0;a<10;a++)r[a]=t[a]^t[a+10]^t[a+20]^t[a+30]^t[a+40];for(let a=0;a<10;a+=2){let s=(a+8)%10,c=(a+2)%10,u=r[c],f=r[c+1],l=Vn(u,f,1)^r[s],h=Zn(u,f,1)^r[s+1];for(let b=0;b<50;b+=10)t[a+b]^=l,t[a+b+1]^=h}let i=t[2],o=t[3];for(let a=0;a<24;a++){let s=Wn[a],c=Vn(i,o,s),u=Zn(i,o,s),f=Yn[a];i=t[f],o=t[f+1],t[f]=c,t[f+1]=u}for(let a=0;a<50;a+=10){for(let s=0;s<10;s++)r[s]=t[a+s];for(let s=0;s<10;s++)t[a+s]^=~r[(s+2)%10]&r[(s+4)%10]}t[0]^=ns[n],t[1]^=is[n]}r.fill(0)}var Wt=class t extends Ue{constructor(e,r,n,i=!1,o=24){if(super(),this.blockLen=e,this.suffix=r,this.outputLen=n,this.enableXOF=i,this.rounds=o,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,xt(n),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=gn(this.state)}keccak(){gr||_r(this.state32),os(this.state32,this.rounds),gr||_r(this.state32),this.posOut=0,this.pos=0}update(e){ve(this);let{blockLen:r,state:n}=this;e=Oe(e);let i=e.length;for(let o=0;o=n&&this.keccak();let a=Math.min(n-this.posOut,o-i);e.set(r.subarray(this.posOut,this.posOut+a),i),this.posOut+=a,i+=a}return e}xofInto(e){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return xt(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(Ct(e,this),this.finished)throw new Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(e){let{blockLen:r,suffix:n,outputLen:i,rounds:o,enableXOF:a}=this;return e||(e=new t(r,n,i,a,o)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=o,e.suffix=n,e.outputLen=i,e.enableXOF=a,e.destroyed=this.destroyed,e}},Ce=(t,e,r)=>ge(()=>new Wt(e,t,r)),Nf=Ce(6,144,224/8),jf=Ce(6,136,256/8),Mf=Ce(6,104,384/8),qf=Ce(6,72,512/8),Ff=Ce(1,144,224/8),Gf=Ce(1,136,256/8),$f=Ce(1,104,384/8),Xf=Ce(1,72,512/8),Qn=(t,e,r)=>_n((n={})=>new Wt(e,t,n.dkLen===void 0?r:n.dkLen,!0)),Vf=Qn(31,168,128/8),Fr=Qn(31,136,256/8);var ss=ge(()=>Fr.create({dkLen:114})),as=ge(()=>Fr.create({dkLen:64})),kt=BigInt("726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018365439"),cs=BigInt(1),ei=BigInt(2),ti=BigInt(3),tu=BigInt(4),fs=BigInt(11),us=BigInt(22),ri=BigInt(44),ls=BigInt(88),hs=BigInt(223);function ni(t){let e=kt,r=t*t*t%e,n=r*r*t%e,i=G(n,ti,e)*n%e,o=G(i,ti,e)*n%e,a=G(o,ei,e)*r%e,s=G(a,fs,e)*a%e,c=G(s,us,e)*s%e,u=G(c,ri,e)*c%e,f=G(u,ls,e)*u%e,l=G(f,ri,e)*c%e,h=G(l,ei,e)*r%e,b=G(h,cs,e)*t%e;return G(b,hs,e)*h%e}function ii(t){return t[0]&=252,t[55]|=128,t[56]=0,t}function ds(t,e){let r=kt,n=X(t*t*e,r),i=X(n*t,r),o=X(i*n*e,r),a=ni(o),s=X(i*a,r),c=X(s*s,r);return{isValid:X(c*e,r)===t,value:s}}var oi=gt(kt,456,!0),ps={a:BigInt(1),d:BigInt("726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018326358"),Fp:oi,n:BigInt("181709681073901722637330951972001133588410340171829515070372549795146003961539585716195755291692375963310293709091662304773755859649779"),nBitLength:456,h:BigInt(4),Gx:BigInt("224580040295924300187604334099896036246789641632564134246125461686950415467406032909029192869357953282578032075146446173674602635247710"),Gy:BigInt("298819210078481492676017930443930673437544040154080242095928241372331506189835876003536878655418784733982303233503462500531545062832660"),hash:ss,randomBytes:mt,adjustScalarBytes:ii,domain:(t,e,r)=>{if(e.length>255)throw new Error(`Context is too big: ${e.length}`);return Er(jt("SigEd448"),new Uint8Array([r?1:0,e.length]),e,t)},uvRatio:ds};var ru=Fn({...ps,prehash:as}),Jt=Vt({a:BigInt(156326),montgomeryBits:448,nByteLength:56,P:kt,Gu:BigInt(5),powPminus2:t=>{let e=kt,r=ni(t),n=G(r,BigInt(2),e);return X(n*t,e)},adjustScalarBytes:ii,randomBytes:mt});var nu=(oi.ORDER-BigInt(3))/BigInt(4),iu=BigInt(156326);var ou=BigInt("39082"),su=BigInt("78163"),au=BigInt("98944233647732219769177004876929019128417576295529901074099889598043702116001257856802131563896515373927712232092845883226922417596214"),cu=BigInt("315019913931389607337177038330951043522456072897266928557328499619017160722351061360252776265186336876723201881398623946864393857820716");var fu=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");var Qe="X448",si=new Uint8Array,Qt=["deriveBits"],ys=new Uint8Array([100,107,112,95,112,114,107]),bs=new Uint8Array([115,107]);function ai(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),n=new Uint8Array(r.length);for(let i=0;i{r(e.key.buffer)})}_serializePrivateKey(e){return new Promise(r=>{r(e.key.buffer)})}_importRawKey(e,r){return new Promise((n,i)=>{r&&e.byteLength!==this._nPk&&i(new Error("Invalid length of the key")),!r&&e.byteLength!==this._nSk&&i(new Error("Invalid length of the key")),n(new ee(Qe,new Uint8Array(e),r?"public":"private",r?[]:Qt))})}_importJWK(e,r){return new Promise((n,i)=>{e.kty!=="OKP"&&i(new Error(`Invalid kty: ${e.kty}`)),e.crv!=="X448"&&i(new Error(`Invalid crv: ${e.crv}`)),r?(typeof e.d<"u"&&i(new Error("Invalid key: `d` should not be set")),typeof e.x!="string"&&i(new Error("Invalid key: `x` not found")),n(new ee(Qe,ai(e.x),"public"))):(typeof e.d!="string"&&i(new Error("Invalid key: `d` not found")),n(new ee(Qe,ai(e.d),"private",Qt)))})}_derivePublicKey(e){return new Promise((r,n)=>{try{let i=Jt.getPublicKey(e.key);r(new ee(Qe,i,"public"))}catch(i){n(i)}})}_dh(e,r){return new Promise((n,i)=>{try{n(Jt.getSharedSecret(e.key,r.key).buffer)}catch(o){i(o)}})}};var At=class extends ce{constructor(){let e=new Be;super(M.DhkemX448HkdfSha512,new St(e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:M.DhkemX448HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:56}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:56}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:56})}};var et=class extends yt{async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return qe(Pn,new Uint8Array(e),new Uint8Array(r));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}};var er=class extends ce{constructor(){let e=new ke,r=new me(M.DhkemP256HkdfSha256,e);super(M.DhkemP256HkdfSha256,r,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:M.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}};var tr=class extends ce{constructor(){let e=new et,r=new me(M.DhkemP384HkdfSha384,e);super(M.DhkemP384HkdfSha384,r,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:M.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}};var rr=class extends ce{constructor(){let e=new Be,r=new me(M.DhkemP521HkdfSha512,e);super(M.DhkemP521HkdfSha512,r,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:M.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var Gr=class extends dt{constructor(e){if(typeof e.kem=="number")switch(e.kem){case M.DhkemP256HkdfSha256:e.kem=new er;break;case M.DhkemP384HkdfSha384:e.kem=new tr;break;case M.DhkemP521HkdfSha512:e.kem=new rr;break;case M.DhkemX25519HkdfSha256:e.kem=new Et;break;case M.DhkemX448HkdfSha512:e.kem=new At;break;default:throw new Y(`The KEM (${e.kem}) cannot be specified by KemId. Use submodule for the KEM`)}if(typeof e.kdf=="number")switch(e.kdf){case de.HkdfSha256:e.kdf=new ke;break;case de.HkdfSha384:e.kdf=new et;break;default:e.kdf=new Be;break}if(typeof e.aead=="number")switch(e.aead){case se.Aes128Gcm:e.aead=new $e;break;case se.Aes256Gcm:e.aead=new at;break;case se.Chacha20Poly1305:e.aead=new wt;break;default:e.aead=new ct;break}super(e)}async generateKeyPair(){return await this._setup(),await this._kem.generateKeyPair()}async deriveKeyPair(e){return await this._setup(),await this._kem.deriveKeyPair(e)}async importKey(e,r,n=!0){return await this._setup(),await this._kem.importKey(e,r,n)}};export{Mi as Aead,se as AeadId,Bt as BaseError,Gr as CipherSuite,rt as DecapError,_e as DeriveKeyPairError,J as DeserializeError,tt as EncapError,nt as ExportError,ae as HpkeError,Y as InvalidParamError,ji as Kdf,de as KdfId,Ni as Kem,M as KemId,st as MessageLimitReachedError,oe as NotSupportedError,ot as OpenError,it as SealError,ie as SerializeError,ir as ValidationError}; +var at=class extends Error{constructor(e){let r;e instanceof Error?r=e.message:typeof e=="string"?r=e:r="",super(r),this.name=this.constructor.name}},se=class extends at{},Y=class extends se{},Kt=class extends se{},ne=class extends se{},W=class extends se{},Xe=class extends se{},Ve=class extends se{},Ze=class extends se{},Ye=class extends se{},We=class extends se{},Je=class extends se{},xe=class extends se{},ie=class extends se{};var xi={},nn=mi(globalThis,xi);function mi(t,e){return new Proxy(t,{get(r,n,i){return n in e?e[n]:t[n]},set(r,n,i){return n in e&&delete e[n],t[n]=i,!0},deleteProperty(r,n){let i=!1;return n in e&&(delete e[n],i=!0),n in t&&(delete t[n],i=!0),i},ownKeys(r){let n=Reflect.ownKeys(t),i=Reflect.ownKeys(e),o=new Set(i);return[...n.filter(a=>!o.has(a)),...i]},defineProperty(r,n,i){return n in e&&delete e[n],Reflect.defineProperty(t,n,i),!0},getOwnPropertyDescriptor(r,n){return n in e?Reflect.getOwnPropertyDescriptor(e,n):Reflect.getOwnPropertyDescriptor(t,n)},has(r,n){return n in e||n in t}})}async function _i(){if(nn!==void 0&&globalThis.crypto!==void 0)return globalThis.crypto.subtle;try{let{webcrypto:t}=await import("crypto");return t.subtle}catch(t){throw new ie(t)}}var pe=class{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){this._api===void 0&&(this._api=await _i())}};var me={Base:0,Psk:1,Auth:2,AuthPsk:3},M={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},ye={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},ae={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};var V=new Uint8Array(0);var It=new Uint8Array([75,69,77,0,0]);var Ie=t=>typeof t=="object"&&t!==null&&typeof t.privateKey=="object"&&typeof t.publicKey=="object";function de(t,e){if(e<=0)throw new Error("i2Osp: too small size");if(t>=256**e)throw new Error("i2Osp: too large integer");let r=new Uint8Array(e);for(let n=0;n>8;return r}function Me(t,e){let r=new Uint8Array(t.length+e.length);return r.set(t,0),r.set(e,t.length),r}function on(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),n=new Uint8Array(r.length);for(let i=0;i8192)throw new Y("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let r;e.ekm===void 0?r=await this.generateKeyPair():Ie(e.ekm)?r=e.ekm:r=await this.deriveKeyPair(e.ekm);let n=await this._prim.serializePublicKey(r.publicKey),i=await this._prim.serializePublicKey(e.recipientPublicKey);try{let o;if(e.senderKey===void 0)o=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey));else{let c=Ie(e.senderKey)?e.senderKey.privateKey:e.senderKey,u=new Uint8Array(await this._prim.dh(r.privateKey,e.recipientPublicKey)),f=new Uint8Array(await this._prim.dh(c,e.recipientPublicKey));o=Me(u,f)}let a;if(e.senderKey===void 0)a=Me(new Uint8Array(n),new Uint8Array(i));else{let c=Ie(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),u=await this._prim.serializePublicKey(c);a=ki(new Uint8Array(n),new Uint8Array(i),new Uint8Array(u))}let s=await this._generateSharedSecret(o,a);return{enc:n,sharedSecret:s}}catch(o){throw new Xe(o)}}async decap(e){let r=await this._prim.deserializePublicKey(e.enc),n=Ie(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,i=Ie(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),o=await this._prim.serializePublicKey(i);try{let a;if(e.senderPublicKey===void 0)a=new Uint8Array(await this._prim.dh(n,r));else{let c=new Uint8Array(await this._prim.dh(n,r)),u=new Uint8Array(await this._prim.dh(n,e.senderPublicKey));a=Me(c,u)}let s;if(e.senderPublicKey===void 0)s=Me(new Uint8Array(e.enc),new Uint8Array(o));else{let c=await this._prim.serializePublicKey(e.senderPublicKey);s=new Uint8Array(e.enc.byteLength+o.byteLength+c.byteLength),s.set(new Uint8Array(e.enc),0),s.set(new Uint8Array(o),e.enc.byteLength),s.set(new Uint8Array(c),e.enc.byteLength+o.byteLength)}return await this._generateSharedSecret(a,s)}catch(a){throw new Ve(a)}}async _generateSharedSecret(e,r){let n=this._kdf.buildLabeledIkm(Ei,e),i=this._kdf.buildLabeledInfo(vi,r,this.secretSize);return await this._kdf.extractAndExpand(V,n,i,this.secretSize)}};var Lt=["deriveBits"],Ut=new Uint8Array([100,107,112,95,112,114,107]),sn=new Uint8Array([115,107]);var Ot=class{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[r])return!1}return!1}};var Si=new Uint8Array([99,97,110,100,105,100,97,116,101]),Ai=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),Pi=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),Bi=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),Ki=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),Ii=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),Li=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]),ge=class extends pe{constructor(e,r){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=r,e){case M.DhkemP256HkdfSha256:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=Ai,this._bitmask=255,this._pkcs8AlgId=Ki;break;case M.DhkemP384HkdfSha384:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=Pi,this._bitmask=255,this._pkcs8AlgId=Ii;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=Bi,this._bitmask=1,this._pkcs8AlgId=Li;break}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(r){throw new ne(r)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(r){throw new W(r)}}async serializePrivateKey(e){await this._setup();try{let r=await this._api.exportKey("jwk",e);if(!("d"in r))throw new Error("Not private key");return on(r.d)}catch(r){throw new ne(r)}}async deserializePrivateKey(e){await this._setup();try{return await this._importRawKey(e,!1)}catch(r){throw new W(r)}}async importKey(e,r,n){await this._setup();try{if(e==="raw")return await this._importRawKey(r,n);if(r instanceof ArrayBuffer)throw new Error("Invalid jwk key format");return await this._importJWK(r,n)}catch(i){throw new W(i)}}async generateKeyPair(){await this._setup();try{return await this._api.generateKey(this._alg,!0,Lt)}catch(e){throw new ie(e)}}async deriveKeyPair(e){await this._setup();try{let r=await this._hkdf.labeledExtract(V,Ut,new Uint8Array(e)),n=new Ot(this._nSk);for(let o=0;n.isZero()||!n.lessThan(this._order);o++){if(o>255)throw new Error("Faild to derive a key pair");let a=new Uint8Array(await this._hkdf.labeledExpand(r,Si,de(o,1),this._nSk));a[0]=a[0]&this._bitmask,n.set(a)}let i=await this._deserializePkcs8Key(n.val());return n.reset(),{privateKey:i,publicKey:await this.derivePublicKey(i)}}catch(r){throw new xe(r)}}async derivePublicKey(e){await this._setup();try{let r=await this._api.exportKey("jwk",e);return delete r.d,delete r.key_ops,await this._api.importKey("jwk",r,this._alg,!0,[])}catch(r){throw new W(r)}}async dh(e,r){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:r},e,this._nDh*8)}catch(n){throw new ne(n)}}async _importRawKey(e,r){if(r&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!r&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return r?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,r){if(typeof e.crv>"u"||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(r){if(typeof e.d<"u")throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(typeof e.d>"u")throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,Lt)}async _deserializePkcs8Key(e){let r=new Uint8Array(this._pkcs8AlgId.length+e.length);return r.set(this._pkcs8AlgId,0),r.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",r,this._alg,!0,Lt)}};var cr=["encrypt","decrypt"];var ur=class extends pe{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,r,n){await this._setupKey();let i={name:"AES-GCM",iv:e,additionalData:n};return await this._api.encrypt(i,this._key,r)}async open(e,r,n){await this._setupKey();let i={name:"AES-GCM",iv:e,additionalData:n};return await this._api.decrypt(i,this._key,r)}async _setupKey(){if(this._key!==void 0)return;await this._setup();let e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,cr)}},Qe=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:ae.Aes128Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new ur(e)}},ct=class extends Qe{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:ae.Aes256Gcm}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}};var ft=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:ae.ExportOnly}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:0})}createEncryptionContext(e){throw new ie("Export only")}};function lr(){return new Promise((t,e)=>{e(new ie("Not supported"))})}var Ui=new Uint8Array([115,101,99]),et=class{constructor(e,r,n){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=r,this.exporterSecret=n}async seal(e,r){return await lr()}async open(e,r){return await lr()}async export(e,r){if(e.byteLength>8192)throw new Y("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Ui,new Uint8Array(e),r)}catch(n){throw new Ze(n)}}},Ht=class extends et{},zt=class extends et{constructor(e,r,n,i){super(e,r,n),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=i}};var tt=class extends et{constructor(e,r,n){if(super(e,r,n.exporterSecret),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nK",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nN",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_ctx",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),n.key===void 0||n.baseNonce===void 0||n.seq===void 0)throw new Error("Required parameters are missing");this._aead=n.aead,this._nK=this._aead.keySize,this._nN=this._aead.nonceSize,this._nT=this._aead.tagSize;let i=this._aead.createEncryptionContext(n.key);this._ctx={key:i,baseNonce:n.baseNonce,seq:n.seq}}computeNonce(e){let r=de(e.seq,e.baseNonce.byteLength);return ar(e.baseNonce,r)}incrementSeq(e){if(e.seq>Number.MAX_SAFE_INTEGER)throw new Je("Message limit reached");e.seq+=1}};var Tt=class extends tt{async open(e,r=V){let n;try{n=await this._ctx.key.open(this.computeNonce(this._ctx),e,r)}catch(i){throw new We(i)}return this.incrementSeq(this._ctx),n}};var Dt=class extends tt{constructor(e,r,n,i){super(e,r,n),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=i}async seal(e,r=V){let n;try{n=await this._ctx.key.seal(this.computeNonce(this._ctx),e,r)}catch(i){throw new Ye(i)}return this.incrementSeq(this._ctx),n}};var Oi=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),Hi=new Uint8Array([101,120,112]),zi=new Uint8Array([105,110,102,111,95,104,97,115,104]),Ti=new Uint8Array([107,101,121]),Di=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),Ri=new Uint8Array([115,101,99,114,101,116]),Ci=new Uint8Array([72,80,75,69,0,0,0,0,0,0]),Rt=class extends pe{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),typeof e.kem=="number")throw new Y("KemId cannot be used");if(this._kem=e.kem,typeof e.kdf=="number")throw new Y("KdfId cannot be used");if(this._kdf=e.kdf,typeof e.aead=="number")throw new Y("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(Ci),this._suiteId.set(de(this._kem.id,2),4),this._suiteId.set(de(this._kdf.id,2),6),this._suiteId.set(de(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();let r=await this._kem.encap(e),n;return e.psk!==void 0?n=e.senderKey!==void 0?me.AuthPsk:me.Psk:n=e.senderKey!==void 0?me.Auth:me.Base,await this._keyScheduleS(n,r.sharedSecret,r.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();let r=await this._kem.decap(e),n;return e.psk!==void 0?n=e.senderPublicKey!==void 0?me.AuthPsk:me.Psk:n=e.senderPublicKey!==void 0?me.Auth:me.Base,await this._keyScheduleR(n,r,e)}async seal(e,r,n=V){let i=await this.createSenderContext(e);return{ct:await i.seal(r,n),enc:i.enc}}async open(e,r,n=V){return await(await this.createRecipientContext(e)).open(r,n)}async _keySchedule(e,r,n){let i=n.psk===void 0?V:new Uint8Array(n.psk.id),o=await this._kdf.labeledExtract(V,Di,i),a=n.info===void 0?V:new Uint8Array(n.info),s=await this._kdf.labeledExtract(V,zi,a),c=new Uint8Array(1+o.byteLength+s.byteLength);c.set(new Uint8Array([e]),0),c.set(new Uint8Array(o),1),c.set(new Uint8Array(s),1+o.byteLength);let u=n.psk===void 0?V:new Uint8Array(n.psk.key),f=this._kdf.buildLabeledIkm(Ri,u),l=this._kdf.buildLabeledInfo(Hi,c,this._kdf.hashSize),h=await this._kdf.extractAndExpand(r,f,l,this._kdf.hashSize);if(this._aead.id===ae.ExportOnly)return{aead:this._aead,exporterSecret:h};let b=this._kdf.buildLabeledInfo(Ti,c,this._aead.keySize),g=await this._kdf.extractAndExpand(r,f,b,this._aead.keySize),x=this._kdf.buildLabeledInfo(Oi,c,this._aead.nonceSize),E=await this._kdf.extractAndExpand(r,f,x,this._aead.nonceSize);return{aead:this._aead,exporterSecret:h,key:g,baseNonce:new Uint8Array(E),seq:0}}async _keyScheduleS(e,r,n,i){let o=await this._keySchedule(e,r,i);return o.key===void 0?new zt(this._api,this._kdf,o.exporterSecret,n):new Dt(this._api,this._kdf,o,n)}async _keyScheduleR(e,r,n){let i=await this._keySchedule(e,r,n);return i.key===void 0?new Ht(this._api,this._kdf,i.exporterSecret):new Tt(this._api,this._kdf,i)}_validateInputLength(e){if(e.info!==void 0&&e.info.byteLength>8192)throw new Y("Too long info");if(e.psk!==void 0){if(e.psk.key.byteLength<32)throw new Y(`PSK must have at least ${32} bytes`);if(e.psk.key.byteLength>8192)throw new Y("Too long psk.key");if(e.psk.id.byteLength>8192)throw new Y("Too long psk.id")}}};var an=new Uint8Array([72,80,75,69,45,118,49]),ut=class extends pe{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:ye.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:V}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,r){this._checkInit();let n=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+r.byteLength);return n.set(an,0),n.set(this._suiteId,7),n.set(e,7+this._suiteId.byteLength),n.set(r,7+this._suiteId.byteLength+e.byteLength),n}buildLabeledInfo(e,r,n){this._checkInit();let i=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+r.byteLength);return i.set(new Uint8Array([0,n]),0),i.set(an,2),i.set(this._suiteId,9),i.set(e,9+this._suiteId.byteLength),i.set(r,9+this._suiteId.byteLength+e.byteLength),i}async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new Y("The salt length must be the same as the hashSize");let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}async expand(e,r,n){await this._setup();let i=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),o=new ArrayBuffer(n),a=new Uint8Array(o),s=V,c=new Uint8Array(r),u=new Uint8Array(1);if(n>255*this.hashSize)throw new Error("Entropy limit reached");let f=new Uint8Array(this.hashSize+c.length+1);for(let l=1,h=0;h=s.length?(a.set(s,h),h+=s.length):(a.set(s.slice(0,a.length-h),h),h+=a.length-h);return o}async extractAndExpand(e,r,n,i){await this._setup();let o=await this._api.importKey("raw",r,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:n},o,i*8)}async labeledExtract(e,r,n){return await this.extract(e,this.buildLabeledIkm(r,n))}async labeledExpand(e,r,n,i){return await this.expand(e,this.buildLabeledInfo(r,n,i),i)}_checkInit(){if(this._suiteId===V)throw new Error("Not initialized. Call init()")}},lt=class extends ut{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:ye.HkdfSha256}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}},ht=class extends ut{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:ye.HkdfSha384}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-384",length:384}})}},dt=class extends ut{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:ye.HkdfSha512}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-512",length:512}})}};var pt=class extends Rt{};var yt=class extends lt{},bt=class extends ht{},wt=class extends dt{};var ee=class{constructor(e,r,n,i=[]){Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extractable",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"algorithm",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"usages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.key=r,this.type=n,this.algorithm={name:e},this.usages=i,n==="public"&&(this.usages=[])}};var Ni={NotAssigned:0,DhkemP256HkdfSha256:16,DhkemP384HkdfSha384:17,DhkemP521HkdfSha512:18,DhkemSecp256k1HkdfSha256:19,DhkemX25519HkdfSha256:32,DhkemX448HkdfSha512:33,HybridkemX25519Kyber768:48},ji={HkdfSha256:1,HkdfSha384:2,HkdfSha512:3},Mi={Aes128Gcm:1,Aes256Gcm:2,Chacha20Poly1305:3,ExportOnly:65535};function Ct(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`positive integer expected, not ${t}`)}function hr(t){if(typeof t!="boolean")throw new Error(`boolean expected, not ${t}`)}function dr(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function fe(t,...e){if(!dr(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${t.length}`)}function pr(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function cn(t,e){fe(t);let r=e.outputLen;if(t.lengthnew Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),fn=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),qi=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!qi)throw new Error("Non little-endian hardware is not supported");function Fi(t){if(typeof t!="string")throw new Error(`string expected, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function Nt(t){if(typeof t=="string")t=Fi(t);else if(dr(t))t=t.slice();else throw new Error(`Uint8Array expected, got ${typeof t}`);return t}function un(t,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(t,e)}function ln(t,e){if(t.length!==e.length)return!1;let r=0;for(let n=0;n(Object.assign(e,t),e);function br(t,e,r,n){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,r,n);let i=BigInt(32),o=BigInt(4294967295),a=Number(r>>i&o),s=Number(r&o),c=n?4:0,u=n?0:4;t.setUint32(e+c,a,n),t.setUint32(e+u,s,n)}var oe=(t,e)=>t[e++]&255|(t[e++]&255)<<8,wr=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=Nt(e),fe(e,32);let r=oe(e,0),n=oe(e,2),i=oe(e,4),o=oe(e,6),a=oe(e,8),s=oe(e,10),c=oe(e,12),u=oe(e,14);this.r[0]=r&8191,this.r[1]=(r>>>13|n<<3)&8191,this.r[2]=(n>>>10|i<<6)&7939,this.r[3]=(i>>>7|o<<9)&8191,this.r[4]=(o>>>4|a<<12)&255,this.r[5]=a>>>1&8190,this.r[6]=(a>>>14|s<<2)&8191,this.r[7]=(s>>>11|c<<5)&8065,this.r[8]=(c>>>8|u<<8)&8191,this.r[9]=u>>>5&127;for(let f=0;f<8;f++)this.pad[f]=oe(e,16+2*f)}process(e,r,n=!1){let i=n?0:2048,{h:o,r:a}=this,s=a[0],c=a[1],u=a[2],f=a[3],l=a[4],h=a[5],b=a[6],g=a[7],x=a[8],E=a[9],P=oe(e,r+0),v=oe(e,r+2),y=oe(e,r+4),B=oe(e,r+6),F=oe(e,r+8),O=oe(e,r+10),C=oe(e,r+12),H=oe(e,r+14),K=o[0]+(P&8191),U=o[1]+((P>>>13|v<<3)&8191),I=o[2]+((v>>>10|y<<6)&8191),R=o[3]+((y>>>7|B<<9)&8191),D=o[4]+((B>>>4|F<<12)&8191),q=o[5]+(F>>>1&8191),N=o[6]+((F>>>14|O<<2)&8191),m=o[7]+((O>>>11|C<<5)&8191),d=o[8]+((C>>>8|H<<8)&8191),w=o[9]+(H>>>5|i),p=0,k=p+K*s+U*(5*E)+I*(5*x)+R*(5*g)+D*(5*b);p=k>>>13,k&=8191,k+=q*(5*h)+N*(5*l)+m*(5*f)+d*(5*u)+w*(5*c),p+=k>>>13,k&=8191;let S=p+K*c+U*s+I*(5*E)+R*(5*x)+D*(5*g);p=S>>>13,S&=8191,S+=q*(5*b)+N*(5*h)+m*(5*l)+d*(5*f)+w*(5*u),p+=S>>>13,S&=8191;let A=p+K*u+U*c+I*s+R*(5*E)+D*(5*x);p=A>>>13,A&=8191,A+=q*(5*g)+N*(5*b)+m*(5*h)+d*(5*l)+w*(5*f),p+=A>>>13,A&=8191;let T=p+K*f+U*u+I*c+R*s+D*(5*E);p=T>>>13,T&=8191,T+=q*(5*x)+N*(5*g)+m*(5*b)+d*(5*h)+w*(5*l),p+=T>>>13,T&=8191;let z=p+K*l+U*f+I*u+R*c+D*s;p=z>>>13,z&=8191,z+=q*(5*E)+N*(5*x)+m*(5*g)+d*(5*b)+w*(5*h),p+=z>>>13,z&=8191;let j=p+K*h+U*l+I*f+R*u+D*c;p=j>>>13,j&=8191,j+=q*s+N*(5*E)+m*(5*x)+d*(5*g)+w*(5*b),p+=j>>>13,j&=8191;let $=p+K*b+U*h+I*l+R*f+D*u;p=$>>>13,$&=8191,$+=q*c+N*s+m*(5*E)+d*(5*x)+w*(5*g),p+=$>>>13,$&=8191;let Z=p+K*g+U*b+I*h+R*l+D*f;p=Z>>>13,Z&=8191,Z+=q*u+N*c+m*s+d*(5*E)+w*(5*x),p+=Z>>>13,Z&=8191;let te=p+K*x+U*g+I*b+R*h+D*l;p=te>>>13,te&=8191,te+=q*f+N*u+m*c+d*s+w*(5*E),p+=te>>>13,te&=8191;let re=p+K*E+U*x+I*g+R*b+D*h;p=re>>>13,re&=8191,re+=q*l+N*f+m*u+d*c+w*s,p+=re>>>13,re&=8191,p=(p<<2)+p|0,p=p+k|0,k=p&8191,p=p>>>13,S+=p,o[0]=k,o[1]=S,o[2]=A,o[3]=T,o[4]=z,o[5]=j,o[6]=$,o[7]=Z,o[8]=te,o[9]=re}finalize(){let{h:e,pad:r}=this,n=new Uint16Array(10),i=e[1]>>>13;e[1]&=8191;for(let s=2;s<10;s++)e[s]+=i,i=e[s]>>>13,e[s]&=8191;e[0]+=i*5,i=e[0]>>>13,e[0]&=8191,e[1]+=i,i=e[1]>>>13,e[1]&=8191,e[2]+=i,n[0]=e[0]+5,i=n[0]>>>13,n[0]&=8191;for(let s=1;s<10;s++)n[s]=e[s]+i,i=n[s]>>>13,n[s]&=8191;n[9]-=8192;let o=(i^1)-1;for(let s=0;s<10;s++)n[s]&=o;o=~o;for(let s=0;s<10;s++)e[s]=e[s]&o|n[s];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let a=e[0]+r[0];e[0]=a&65535;for(let s=1;s<8;s++)a=(e[s]+r[s]|0)+(a>>>16)|0,e[s]=a&65535}update(e){pr(this);let{buffer:r,blockLen:n}=this;e=Nt(e);let i=e.length;for(let o=0;o>>0,e[o++]=n[a]>>>8;return e}digest(){let{buffer:e,outputLen:r}=this;this.digestInto(e);let n=e.slice(0,r);return this.destroy(),n}};function Gi(t){let e=(n,i)=>t(i).update(Nt(n)).digest(),r=t(new Uint8Array(32));return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=n=>t(n),e}var hn=Gi(t=>new wr(t));var pn=t=>Uint8Array.from(t.split("").map(e=>e.charCodeAt(0))),$i=pn("expand 16-byte k"),Xi=pn("expand 32-byte k"),Vi=Ee($i),yn=Ee(Xi),oc=yn.slice();function _(t,e){return t<>>32-e}function xr(t){return t.byteOffset%4===0}var jt=64,Zi=16,bn=2**32-1,dn=new Uint32Array;function Yi(t,e,r,n,i,o,a,s){let c=i.length,u=new Uint8Array(jt),f=Ee(u),l=xr(i)&&xr(o),h=l?Ee(i):dn,b=l?Ee(o):dn;for(let g=0;g=bn)throw new Error("arx: counter overflow");let x=Math.min(jt,c-g);if(l&&x===jt){let E=g/4;if(g%4!==0)throw new Error("arx: invalid block position");for(let P=0,v;P{fe(s),fe(c),fe(u);let h=u.length;if(f||(f=new Uint8Array(h)),fe(f),Ct(l),l<0||l>=bn)throw new Error("arx: counter overflow");if(f.length0;)b.pop().fill(0);return f}}function mn(t,e,r,n,i,o=20){let a=t[0],s=t[1],c=t[2],u=t[3],f=e[0],l=e[1],h=e[2],b=e[3],g=e[4],x=e[5],E=e[6],P=e[7],v=i,y=r[0],B=r[1],F=r[2],O=a,C=s,H=c,K=u,U=f,I=l,R=h,D=b,q=g,N=x,m=E,d=P,w=v,p=y,k=B,S=F;for(let T=0;T{t.update(e);let r=e.length%16;r&&t.update(eo.subarray(r))},to=new Uint8Array(32);function xn(t,e,r,n,i){let o=t(e,r,to),a=hn.create(o);i&&wn(a,i),wn(a,n);let s=new Uint8Array(16),c=fn(s);br(c,0,BigInt(i?i.length:0),!0),br(c,8,BigInt(n.length),!0),a.update(s);let u=a.digest();return o.fill(0),u}var gn=t=>(e,r,n)=>(fe(e,32),fe(r),{encrypt:(o,a)=>{let s=o.length,c=s+16;a?fe(a,c):a=new Uint8Array(c),t(e,r,o,a,1);let u=xn(t,e,r,a.subarray(0,-16),n);return a.set(u,s),a},decrypt:(o,a)=>{let s=o.length,c=s-16;if(s<16)throw new Error("encrypted data must be at least 16 bytes");a?fe(a,c):a=new Uint8Array(c);let u=o.subarray(0,-16),f=o.subarray(-16),l=xn(t,e,r,u,n);if(!ln(f,l))throw new Error("invalid tag");return t(e,r,u,a,1),a}}),gr=yr({blockSize:64,nonceLength:12,tagLength:16},gn(Ji)),lc=yr({blockSize:64,nonceLength:24,tagLength:16},gn(Qi));var _r=class{constructor(e){Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._key=new Uint8Array(e)}async seal(e,r,n){return await this._seal(e,r,n)}async open(e,r,n){return await this._open(e,r,n)}_seal(e,r,n){return new Promise(i=>{let o=gr(this._key,new Uint8Array(e),new Uint8Array(n)).encrypt(new Uint8Array(r));i(o.buffer)})}_open(e,r,n){return new Promise(i=>{let o=gr(this._key,new Uint8Array(e),new Uint8Array(n)).decrypt(new Uint8Array(r));i(o.buffer)})}},xt=class{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:ae.Chacha20Poly1305}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new _r(e)}};function mt(t){if(!Number.isSafeInteger(t)||t<0)throw new Error(`positive integer expected, not ${t}`)}function ro(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function Ue(t,...e){if(!ro(t))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(t.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${t.length}`)}function _n(t){if(typeof t!="function"||typeof t.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");mt(t.outputLen),mt(t.blockLen)}function ve(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function Mt(t,e){Ue(t);let r=e.outputLen;if(t.lengthnew Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4)),qt=t=>new DataView(t.buffer,t.byteOffset,t.byteLength),be=(t,e)=>t<<32-e|t>>>e;var Er=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,no=t=>t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255;function vr(t){for(let e=0;et().update(He(n)).digest(),r=t();return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=()=>t(),e}function vn(t){let e=(n,i)=>t(i).update(He(n)).digest(),r=t({});return e.outputLen=r.outputLen,e.blockLen=r.blockLen,e.create=n=>t(n),e}function gt(t=32){if(qe&&typeof qe.getRandomValues=="function")return qe.getRandomValues(new Uint8Array(t));if(qe&&typeof qe.randomBytes=="function")return qe.randomBytes(t);throw new Error("crypto.getRandomValues must be defined")}var Gt=class extends Oe{constructor(e,r){super(),this.finished=!1,this.destroyed=!1,_n(e);let n=He(r);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(n.length>i?e.create().update(n).digest():n);for(let a=0;anew Gt(t,e).update(r).digest();Fe.create=(t,e)=>new Gt(t,e);function io(t,e,r,n){if(typeof t.setBigUint64=="function")return t.setBigUint64(e,r,n);let i=BigInt(32),o=BigInt(4294967295),a=Number(r>>i&o),s=Number(r&o),c=n?4:0,u=n?0:4;t.setUint32(e+c,a,n),t.setUint32(e+u,s,n)}var kn=(t,e,r)=>t&e^~t&r,Sn=(t,e,r)=>t&e^t&r^e&r,rt=class extends Oe{constructor(e,r,n,i){super(),this.blockLen=e,this.outputLen=r,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=qt(this.buffer)}update(e){ve(this);let{view:r,buffer:n,blockLen:i}=this;e=He(e);let o=e.length;for(let a=0;ai-a&&(this.process(n,0),a=0);for(let l=a;lf.length)throw new Error("_sha2: outputLen bigger than state");for(let l=0;l>>3,x=be(b,17)^be(b,19)^b>>>10;Te[l]=x+Te[l-7]+g+Te[l-16]|0}let{A:n,B:i,C:o,D:a,E:s,F:c,G:u,H:f}=this;for(let l=0;l<64;l++){let h=be(s,6)^be(s,11)^be(s,25),b=f+h+kn(s,c,u)+oo[l]+Te[l]|0,x=(be(n,2)^be(n,13)^be(n,22))+Sn(n,i,o)|0;f=u,u=c,c=s,s=a+b|0,a=o,o=i,i=n,n=b+x|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,a=a+this.D|0,s=s+this.E|0,c=c+this.F|0,u=u+this.G|0,f=f+this.H|0,this.set(n,i,o,a,s,c,u,f)}roundClean(){Te.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var An=_e(()=>new Sr);var ke=class extends yt{async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return Fe(An,new Uint8Array(e),new Uint8Array(r));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}};var $t=BigInt(4294967295),Ar=BigInt(32);function Pn(t,e=!1){return e?{h:Number(t&$t),l:Number(t>>Ar&$t)}:{h:Number(t>>Ar&$t)|0,l:Number(t&$t)|0}}function Pr(t,e=!1){let r=new Uint32Array(t.length),n=new Uint32Array(t.length);for(let i=0;iBigInt(t>>>0)<>>0),ao=(t,e,r)=>t>>>r,co=(t,e,r)=>t<<32-r|e>>>r,fo=(t,e,r)=>t>>>r|e<<32-r,uo=(t,e,r)=>t<<32-r|e>>>r,lo=(t,e,r)=>t<<64-r|e>>>r-32,ho=(t,e,r)=>t>>>r-32|e<<64-r,po=(t,e)=>e,yo=(t,e)=>t,Br=(t,e,r)=>t<>>32-r,Kr=(t,e,r)=>e<>>32-r,Ir=(t,e,r)=>e<>>64-r,Lr=(t,e,r)=>t<>>64-r;function bo(t,e,r,n){let i=(e>>>0)+(n>>>0);return{h:t+r+(i/2**32|0)|0,l:i|0}}var wo=(t,e,r)=>(t>>>0)+(e>>>0)+(r>>>0),xo=(t,e,r,n)=>e+r+n+(t/2**32|0)|0,mo=(t,e,r,n)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0),go=(t,e,r,n,i)=>e+r+n+i+(t/2**32|0)|0,_o=(t,e,r,n,i)=>(t>>>0)+(e>>>0)+(r>>>0)+(n>>>0)+(i>>>0),Eo=(t,e,r,n,i,o)=>e+r+n+i+o+(t/2**32|0)|0;var vo={fromBig:Pn,split:Pr,toBig:so,shrSH:ao,shrSL:co,rotrSH:fo,rotrSL:uo,rotrBH:lo,rotrBL:ho,rotr32H:po,rotr32L:yo,rotlSH:Br,rotlSL:Kr,rotlBH:Ir,rotlBL:Lr,add:bo,add3L:wo,add3H:xo,add4L:mo,add4H:go,add5H:Eo,add5L:_o},L=vo;var[ko,So]=L.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),De=new Uint32Array(80),Re=new Uint32Array(80),Xt=class extends rt{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:r,Bh:n,Bl:i,Ch:o,Cl:a,Dh:s,Dl:c,Eh:u,El:f,Fh:l,Fl:h,Gh:b,Gl:g,Hh:x,Hl:E}=this;return[e,r,n,i,o,a,s,c,u,f,l,h,b,g,x,E]}set(e,r,n,i,o,a,s,c,u,f,l,h,b,g,x,E){this.Ah=e|0,this.Al=r|0,this.Bh=n|0,this.Bl=i|0,this.Ch=o|0,this.Cl=a|0,this.Dh=s|0,this.Dl=c|0,this.Eh=u|0,this.El=f|0,this.Fh=l|0,this.Fl=h|0,this.Gh=b|0,this.Gl=g|0,this.Hh=x|0,this.Hl=E|0}process(e,r){for(let y=0;y<16;y++,r+=4)De[y]=e.getUint32(r),Re[y]=e.getUint32(r+=4);for(let y=16;y<80;y++){let B=De[y-15]|0,F=Re[y-15]|0,O=L.rotrSH(B,F,1)^L.rotrSH(B,F,8)^L.shrSH(B,F,7),C=L.rotrSL(B,F,1)^L.rotrSL(B,F,8)^L.shrSL(B,F,7),H=De[y-2]|0,K=Re[y-2]|0,U=L.rotrSH(H,K,19)^L.rotrBH(H,K,61)^L.shrSH(H,K,6),I=L.rotrSL(H,K,19)^L.rotrBL(H,K,61)^L.shrSL(H,K,6),R=L.add4L(C,I,Re[y-7],Re[y-16]),D=L.add4H(R,O,U,De[y-7],De[y-16]);De[y]=D|0,Re[y]=R|0}let{Ah:n,Al:i,Bh:o,Bl:a,Ch:s,Cl:c,Dh:u,Dl:f,Eh:l,El:h,Fh:b,Fl:g,Gh:x,Gl:E,Hh:P,Hl:v}=this;for(let y=0;y<80;y++){let B=L.rotrSH(l,h,14)^L.rotrSH(l,h,18)^L.rotrBH(l,h,41),F=L.rotrSL(l,h,14)^L.rotrSL(l,h,18)^L.rotrBL(l,h,41),O=l&b^~l&x,C=h&g^~h&E,H=L.add5L(v,F,C,So[y],Re[y]),K=L.add5H(H,P,B,O,ko[y],De[y]),U=H|0,I=L.rotrSH(n,i,28)^L.rotrBH(n,i,34)^L.rotrBH(n,i,39),R=L.rotrSL(n,i,28)^L.rotrBL(n,i,34)^L.rotrBL(n,i,39),D=n&o^n&s^o&s,q=i&a^i&c^a&c;P=x|0,v=E|0,x=b|0,E=g|0,b=l|0,g=h|0,{h:l,l:h}=L.add(u|0,f|0,K|0,U|0),u=s|0,f=c|0,s=o|0,c=a|0,o=n|0,a=i|0;let N=L.add3L(U,R,q);n=L.add3H(N,K,I,D),i=N|0}({h:n,l:i}=L.add(this.Ah|0,this.Al|0,n|0,i|0)),{h:o,l:a}=L.add(this.Bh|0,this.Bl|0,o|0,a|0),{h:s,l:c}=L.add(this.Ch|0,this.Cl|0,s|0,c|0),{h:u,l:f}=L.add(this.Dh|0,this.Dl|0,u|0,f|0),{h:l,l:h}=L.add(this.Eh|0,this.El|0,l|0,h|0),{h:b,l:g}=L.add(this.Fh|0,this.Fl|0,b|0,g|0),{h:x,l:E}=L.add(this.Gh|0,this.Gl|0,x|0,E|0),{h:P,l:v}=L.add(this.Hh|0,this.Hl|0,P|0,v|0),this.set(n,i,o,a,s,c,u,f,l,h,b,g,x,E,P,v)}roundClean(){De.fill(0),Re.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var Ur=class extends Xt{constructor(){super(),this.Ah=-876896931,this.Al=-1056596264,this.Bh=1654270250,this.Bl=914150663,this.Ch=-1856437926,this.Cl=812702999,this.Dh=355462360,this.Dl=-150054599,this.Eh=1731405415,this.El=-4191439,this.Fh=-1900787065,this.Fl=1750603025,this.Gh=-619958771,this.Gl=1694076839,this.Hh=1203062813,this.Hl=-1090891868,this.outputLen=48}},Bn=_e(()=>new Xt);var Kn=_e(()=>new Ur);var Ln=BigInt(0),Un=BigInt(1),Ao=BigInt(2);function Hr(t){return t instanceof Uint8Array||t!=null&&typeof t=="object"&&t.constructor.name==="Uint8Array"}function zr(t){if(!Hr(t))throw new Error("Uint8Array expected")}function Vt(t,e){if(typeof e!="boolean")throw new Error(`${t} must be valid boolean, got "${e}".`)}var Po=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Zt(t){zr(t);let e="";for(let r=0;r=Se._0&&t<=Se._9)return t-Se._0;if(t>=Se._A&&t<=Se._F)return t-(Se._A-10);if(t>=Se._a&&t<=Se._f)return t-(Se._a-10)}function Hn(t){if(typeof t!="string")throw new Error("hex string expected, got "+typeof t);let e=t.length,r=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(r);for(let i=0,o=0;itypeof t=="bigint"&&Ln<=t;function Bo(t,e,r){return Or(t)&&Or(e)&&Or(r)&&e<=t&&tLn;t>>=Un,e+=1);return e}var Dn=t=>(Ao<typeof t=="bigint",function:t=>typeof t=="function",boolean:t=>typeof t=="boolean",string:t=>typeof t=="string",stringOrUint8Array:t=>typeof t=="string"||Hr(t),isSafeInteger:t=>Number.isSafeInteger(t),array:t=>Array.isArray(t),field:(t,e)=>e.Fp.isValid(t),hash:t=>typeof t=="function"&&Number.isSafeInteger(t.outputLen)};function Ce(t,e,r={}){let n=(i,o,a)=>{let s=Ko[o];if(typeof s!="function")throw new Error(`Invalid validator "${o}", expected function`);let c=t[i];if(!(a&&c===void 0)&&!s(c,t))throw new Error(`Invalid param ${String(i)}=${c} (${typeof c}), expected ${o}`)};for(let[i,o]of Object.entries(e))n(i,o,!1);for(let[i,o]of Object.entries(r))n(i,o,!0);return t}function Rr(t){let e=new WeakMap;return(r,...n)=>{let i=e.get(r);if(i!==void 0)return i;let o=t(r,...n);return e.set(r,o),o}}var Q=BigInt(0),J=BigInt(1),$e=BigInt(2),Lo=BigInt(3),Cr=BigInt(4),Rn=BigInt(5),Cn=BigInt(8),Uo=BigInt(9),Oo=BigInt(16);function X(t,e){let r=t%e;return r>=Q?r:e+r}function Nr(t,e,r){if(r<=Q||e 0");if(r===J)return Q;let n=J;for(;e>Q;)e&J&&(n=n*t%r),t=t*t%r,e>>=J;return n}function G(t,e,r){let n=t;for(;e-- >Q;)n*=n,n%=r;return n}function Nn(t,e){if(t===Q||e<=Q)throw new Error(`invert: expected positive integers, got n=${t} mod=${e}`);let r=X(t,e),n=e,i=Q,o=J,a=J,s=Q;for(;r!==Q;){let u=n/r,f=n%r,l=i-a*u,h=o-s*u;n=r,r=f,i=a,o=s,a=l,s=h}if(n!==J)throw new Error("invert: does not exist");return X(i,e)}function Ho(t){let e=(t-J)/$e,r,n,i;for(r=t-J,n=0;r%$e===Q;r/=$e,n++);for(i=$e;i(n[i]="function",n),e);return Ce(t,r)}function Do(t,e,r){if(r 0");if(r===Q)return t.ONE;if(r===J)return e;let n=t.ONE,i=e;for(;r>Q;)r&J&&(n=t.mul(n,i)),i=t.sqr(i),r>>=J;return n}function Ro(t,e){let r=new Array(e.length),n=e.reduce((o,a,s)=>t.is0(a)?o:(r[s]=o,t.mul(o,a)),t.ONE),i=t.inv(n);return e.reduceRight((o,a,s)=>t.is0(a)?o:(r[s]=t.mul(o,r[s]),t.mul(o,a)),i),r}function jr(t,e){let r=e!==void 0?e:t.toString(2).length,n=Math.ceil(r/8);return{nBitLength:r,nByteLength:n}}function _t(t,e,r=!1,n={}){if(t<=Q)throw new Error(`Expected Field ORDER > 0, got ${t}`);let{nBitLength:i,nByteLength:o}=jr(t,e);if(o>2048)throw new Error("Field lengths over 2048 bytes are not supported");let a=zo(t),s=Object.freeze({ORDER:t,BITS:i,BYTES:o,MASK:Dn(i),ZERO:Q,ONE:J,create:c=>X(c,t),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return Q<=c&&cc===Q,isOdd:c=>(c&J)===J,neg:c=>X(-c,t),eql:(c,u)=>c===u,sqr:c=>X(c*c,t),add:(c,u)=>X(c+u,t),sub:(c,u)=>X(c-u,t),mul:(c,u)=>X(c*u,t),pow:(c,u)=>Do(s,c,u),div:(c,u)=>X(c*Nn(u,t),t),sqrN:c=>c*c,addN:(c,u)=>c+u,subN:(c,u)=>c-u,mulN:(c,u)=>c*u,inv:c=>Nn(c,t),sqrt:n.sqrt||(c=>a(s,c)),invertBatch:c=>Ro(s,c),cmov:(c,u,f)=>f?u:c,toBytes:c=>r?Ge(c,o):Tr(c,o),fromBytes:c=>{if(c.length!==o)throw new Error(`Fp.fromBytes: expected ${o}, got ${c.length}`);return r?Ae(c):zn(c)}});return Object.freeze(s)}var Co=BigInt(0),Mr=BigInt(1),qr=new WeakMap,Mn=new WeakMap;function qn(t,e){let r=(o,a)=>{let s=a.negate();return o?s:a},n=o=>{if(!Number.isSafeInteger(o)||o<=0||o>e)throw new Error(`Wrong window size=${o}, should be [1..${e}]`)},i=o=>{n(o);let a=Math.ceil(e/o)+1,s=2**(o-1);return{windows:a,windowSize:s}};return{constTimeNegate:r,unsafeLadder(o,a){let s=t.ZERO,c=o;for(;a>Co;)a&Mr&&(s=s.add(c)),c=c.double(),a>>=Mr;return s},precomputeWindow(o,a){let{windows:s,windowSize:c}=i(a),u=[],f=o,l=f;for(let h=0;h>=g,P>u&&(P-=b,s+=Mr);let v=E,y=E+Math.abs(P)-1,B=x%2!==0,F=P<0;P===0?l=l.add(r(B,a[v])):f=f.add(r(F,a[y]))}return{p:f,f:l}},wNAFCached(o,a,s){let c=Mn.get(o)||1,u=qr.get(o);return u||(u=this.precomputeWindow(o,c),c!==1&&qr.set(o,s(u))),this.wNAF(c,u,a)},setWindowSize(o,a){n(a),Mn.set(o,a),qr.delete(o)}}}function Fn(t,e,r,n){if(!Array.isArray(r)||!Array.isArray(n)||n.length!==r.length)throw new Error("arrays of points and scalars must have equal length");n.forEach((f,l)=>{if(!e.isValid(f))throw new Error(`wrong scalar at index ${l}`)}),r.forEach((f,l)=>{if(!(f instanceof t))throw new Error(`wrong point at index ${l}`)});let i=Tn(BigInt(r.length)),o=i>12?i-3:i>4?i-2:i?2:1,a=(1<=0;f-=o){s.fill(t.ZERO);for(let h=0;h>BigInt(f)&BigInt(a));s[g]=s[g].add(r[h])}let l=t.ZERO;for(let h=s.length-1,b=t.ZERO;h>0;h--)b=b.add(s[h]),l=l.add(b);if(u=u.add(l),f!==0)for(let h=0;h{try{return{isValid:!0,value:r.sqrt(m*r.inv(d))}}catch{return{isValid:!1,value:we}}}),b=e.adjustScalarBytes||(m=>m),g=e.domain||((m,d,w)=>{if(Vt("phflag",w),d.length||w)throw new Error("Contexts/pre-hash are not supported");return m});function x(m,d){Pe("coordinate "+m,d,we,u)}function E(m){if(!(m instanceof y))throw new Error("ExtendedPoint expected")}let P=Rr((m,d)=>{let{ex:w,ey:p,ez:k}=m,S=m.is0();d==null&&(d=S?No:r.inv(k));let A=f(w*d),T=f(p*d),z=f(k*d);if(S)return{x:we,y:ue};if(z!==ue)throw new Error("invZ was invalid");return{x:A,y:T}}),v=Rr(m=>{let{a:d,d:w}=e;if(m.is0())throw new Error("bad point: ZERO");let{ex:p,ey:k,ez:S,et:A}=m,T=f(p*p),z=f(k*k),j=f(S*S),$=f(j*j),Z=f(T*d),te=f(j*f(Z+z)),re=f($+f(w*f(T*z)));if(te!==re)throw new Error("bad point: equation left != right (1)");let he=f(p*k),Ke=f(S*A);if(he!==Ke)throw new Error("bad point: equation left != right (2)");return!0});class y{constructor(d,w,p,k){this.ex=d,this.ey=w,this.ez=p,this.et=k,x("x",d),x("y",w),x("z",p),x("t",k),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(d){if(d instanceof y)throw new Error("extended point not allowed");let{x:w,y:p}=d||{};return x("x",w),x("y",p),new y(w,p,ue,f(w*p))}static normalizeZ(d){let w=r.invertBatch(d.map(p=>p.ez));return d.map((p,k)=>p.toAffine(w[k])).map(y.fromAffine)}static msm(d,w){return Fn(y,l,d,w)}_setWindowSize(d){O.setWindowSize(this,d)}assertValidity(){v(this)}equals(d){E(d);let{ex:w,ey:p,ez:k}=this,{ex:S,ey:A,ez:T}=d,z=f(w*T),j=f(S*k),$=f(p*T),Z=f(A*k);return z===j&&$===Z}is0(){return this.equals(y.ZERO)}negate(){return new y(f(-this.ex),this.ey,this.ez,f(-this.et))}double(){let{a:d}=e,{ex:w,ey:p,ez:k}=this,S=f(w*w),A=f(p*p),T=f(Yt*f(k*k)),z=f(d*S),j=w+p,$=f(f(j*j)-S-A),Z=z+A,te=Z-T,re=z-A,he=f($*te),Ke=f(Z*re),je=f($*re),Bt=f(te*Z);return new y(he,Ke,Bt,je)}add(d){E(d);let{a:w,d:p}=e,{ex:k,ey:S,ez:A,et:T}=this,{ex:z,ey:j,ez:$,et:Z}=d;if(w===BigInt(-1)){let Yr=f((S-k)*(j+z)),Wr=f((S+k)*(j-z)),sr=f(Wr-Yr);if(sr===we)return this.double();let Jr=f(A*Yt*Z),Qr=f(T*Yt*$),en=Qr+Jr,tn=Wr+Yr,rn=Qr-Jr,pi=f(en*sr),yi=f(tn*rn),bi=f(en*rn),wi=f(sr*tn);return new y(pi,yi,wi,bi)}let te=f(k*z),re=f(S*j),he=f(T*p*Z),Ke=f(A*$),je=f((k+S)*(z+j)-te-re),Bt=Ke-he,Vr=Ke+he,Zr=f(re-w*te),ui=f(je*Bt),li=f(Vr*Zr),hi=f(je*Zr),di=f(Bt*Vr);return new y(ui,li,di,hi)}subtract(d){return this.add(d.negate())}wNAF(d){return O.wNAFCached(this,d,y.normalizeZ)}multiply(d){let w=d;Pe("scalar",w,ue,n);let{p,f:k}=this.wNAF(w);return y.normalizeZ([p,k])[0]}multiplyUnsafe(d){let w=d;return Pe("scalar",w,we,n),w===we?F:this.equals(F)||w===ue?this:this.equals(B)?this.wNAF(w).p:O.unsafeLadder(this,w)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return O.unsafeLadder(this,n).is0()}toAffine(d){return P(this,d)}clearCofactor(){let{h:d}=e;return d===ue?this:this.multiplyUnsafe(d)}static fromHex(d,w=!1){let{d:p,a:k}=e,S=r.BYTES;d=le("pointHex",d,S),Vt("zip215",w);let A=d.slice(),T=d[S-1];A[S-1]=T&-129;let z=Ae(A),j=w?u:r.ORDER;Pe("pointHex.y",z,we,j);let $=f(z*z),Z=f($-ue),te=f(p*$-k),{isValid:re,value:he}=h(Z,te);if(!re)throw new Error("Point.fromHex: invalid y coordinate");let Ke=(he&ue)===ue,je=(T&128)!==0;if(!w&&he===we&&je)throw new Error("Point.fromHex: x=0 and x_0=1");return je!==Ke&&(he=f(-he)),y.fromAffine({x:he,y:z})}static fromPrivateKey(d){return K(d).point}toRawBytes(){let{x:d,y:w}=this.toAffine(),p=Ge(w,r.BYTES);return p[p.length-1]|=d&ue?128:0,p}toHex(){return Zt(this.toRawBytes())}}y.BASE=new y(e.Gx,e.Gy,ue,f(e.Gx*e.Gy)),y.ZERO=new y(we,ue,ue,we);let{BASE:B,ZERO:F}=y,O=qn(y,s*8);function C(m){return X(m,n)}function H(m){return C(Ae(m))}function K(m){let d=s;m=le("private key",m,d);let w=le("hashed private key",o(m),2*d),p=b(w.slice(0,d)),k=w.slice(d,2*d),S=H(p),A=B.multiply(S),T=A.toRawBytes();return{head:p,prefix:k,scalar:S,point:A,pointBytes:T}}function U(m){return K(m).pointBytes}function I(m=new Uint8Array,...d){let w=Dr(...d);return H(o(g(w,le("context",m),!!i)))}function R(m,d,w={}){m=le("message",m),i&&(m=i(m));let{prefix:p,scalar:k,pointBytes:S}=K(d),A=I(w.context,p,m),T=B.multiply(A).toRawBytes(),z=I(w.context,T,S,m),j=C(A+z*k);Pe("signature.s",j,we,n);let $=Dr(T,Ge(j,r.BYTES));return le("result",$,s*2)}let D=jo;function q(m,d,w,p=D){let{context:k,zip215:S}=p,A=r.BYTES;m=le("signature",m,2*A),d=le("message",d),S!==void 0&&Vt("zip215",S),i&&(d=i(d));let T=Ae(m.slice(A,2*A)),z,j,$;try{z=y.fromHex(w,S),j=y.fromHex(m.slice(0,A),S),$=B.multiplyUnsafe(T)}catch{return!1}if(!S&&z.isSmallOrder())return!1;let Z=I(k,j.toRawBytes(),z.toRawBytes(),d);return j.add(z.multiplyUnsafe(Z)).subtract($).clearCofactor().equals(y.ZERO)}return B._setWindowSize(8),{CURVE:e,getPublicKey:U,sign:R,verify:q,ExtendedPoint:y,utils:{getExtendedPublicKey:K,randomPrivateKey:()=>a(r.BYTES),precompute(m=8,d=y.BASE){return d._setWindowSize(m),d.multiply(BigInt(3)),d}}}}var nt=BigInt(0),Fr=BigInt(1);function qo(t){return Ce(t,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...t})}function Wt(t){let e=qo(t),{P:r}=e,n=v=>X(v,r),i=e.montgomeryBits,o=Math.ceil(i/8),a=e.nByteLength,s=e.adjustScalarBytes||(v=>v),c=e.powPminus2||(v=>Nr(v,r-BigInt(2),r));function u(v,y,B){let F=n(v*(y-B));return y=n(y-F),B=n(B+F),[y,B]}let f=(e.a-BigInt(2))/BigInt(4);function l(v,y){Pe("u",v,nt,r),Pe("scalar",y,nt,r);let B=y,F=v,O=Fr,C=nt,H=v,K=Fr,U=nt,I;for(let D=BigInt(i-1);D>=nt;D--){let q=B>>D&Fr;U^=q,I=u(U,O,H),O=I[0],H=I[1],I=u(U,C,K),C=I[0],K=I[1],U=q;let N=O+C,m=n(N*N),d=O-C,w=n(d*d),p=m-w,k=H+K,S=H-K,A=n(S*N),T=n(k*d),z=A+T,j=A-T;H=n(z*z),K=n(F*n(j*j)),O=n(m*w),C=n(p*(m+n(f*p)))}I=u(U,O,H),O=I[0],H=I[1],I=u(U,C,K),C=I[0],K=I[1];let R=c(C);return n(O*R)}function h(v){return Ge(n(v),o)}function b(v){let y=le("u coordinate",v,o);return a===32&&(y[31]&=127),Ae(y)}function g(v){let y=le("scalar",v),B=y.length;if(B!==o&&B!==a)throw new Error(`Expected ${o} or ${a} bytes, got ${B}`);return Ae(s(y))}function x(v,y){let B=b(y),F=g(v),O=l(B,F);if(O===nt)throw new Error("Invalid private or public key received");return h(O)}let E=h(e.Gu);function P(v){return x(v,E)}return{scalarMult:x,scalarMultBase:P,getSharedSecret:(v,y)=>x(v,y),getPublicKey:v=>P(v),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:E}}var Gr=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949");var of=BigInt(0),Go=BigInt(1),Xn=BigInt(2),$o=BigInt(3),Xo=BigInt(5),sf=BigInt(8);function Vo(t){let e=BigInt(10),r=BigInt(20),n=BigInt(40),i=BigInt(80),o=Gr,s=t*t%o*t%o,c=G(s,Xn,o)*s%o,u=G(c,Go,o)*t%o,f=G(u,Xo,o)*u%o,l=G(f,e,o)*f%o,h=G(l,r,o)*l%o,b=G(h,n,o)*h%o,g=G(b,i,o)*b%o,x=G(g,i,o)*b%o,E=G(x,e,o)*f%o;return{pow_p_5_8:G(E,Xn,o)*t%o,b2:s}}function Zo(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}var Jt=Wt({P:Gr,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:t=>{let e=Gr,{pow_p_5_8:r,b2:n}=Vo(t);return X(G(r,$o,e)*n,e)},adjustScalarBytes:Zo,randomBytes:gt});var it="X25519",Vn=new Uint8Array,Qt=["deriveBits"],Yo=new Uint8Array([100,107,112,95,112,114,107]),Wo=new Uint8Array([115,107]);function Zn(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),n=new Uint8Array(r.length);for(let i=0;i{r(e.key.buffer)})}_serializePrivateKey(e){return new Promise(r=>{r(e.key.buffer)})}_importRawKey(e,r){return new Promise((n,i)=>{r&&e.byteLength!==this._nPk&&i(new Error("Invalid length of the key")),!r&&e.byteLength!==this._nSk&&i(new Error("Invalid length of the key")),n(new ee(it,new Uint8Array(e),r?"public":"private",r?[]:Qt))})}_importJWK(e,r){return new Promise((n,i)=>{(typeof e.kty>"u"||e.kty!=="OKP")&&i(new Error(`Invalid kty: ${e.kty}`)),(typeof e.crv>"u"||e.crv!=="X25519")&&i(new Error(`Invalid crv: ${e.crv}`)),r?(typeof e.d<"u"&&i(new Error("Invalid key: `d` should not be set")),typeof e.x>"u"&&i(new Error("Invalid key: `x` not found")),n(new ee(it,Zn(e.x),"public"))):(typeof e.d!="string"&&i(new Error("Invalid key: `d` not found")),n(new ee(it,Zn(e.d),"private",Qt)))})}_derivePublicKey(e){return new Promise((r,n)=>{try{let i=Jt.getPublicKey(e.key);r(new ee(it,i,"public"))}catch(i){n(i)}})}_dh(e,r){return new Promise((n,i)=>{try{n(Jt.getSharedSecret(e.key,r.key).buffer)}catch(o){i(o)}})}};var vt=class extends ce{constructor(){let e=new ke;super(M.DhkemX25519HkdfSha256,new Et(e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:M.DhkemX25519HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}};var Be=class extends wt{async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return Fe(Bn,new Uint8Array(e),new Uint8Array(r));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}};var Jn=[],Qn=[],ei=[],Jo=BigInt(0),kt=BigInt(1),Qo=BigInt(2),es=BigInt(7),ts=BigInt(256),rs=BigInt(113);for(let t=0,e=kt,r=1,n=0;t<24;t++){[r,n]=[n,(2*r+3*n)%5],Jn.push(2*(5*n+r)),Qn.push((t+1)*(t+2)/2%64);let i=Jo;for(let o=0;o<7;o++)e=(e<>es)*rs)%ts,e&Qo&&(i^=kt<<(kt<r>32?Ir(t,e,r):Br(t,e,r),Wn=(t,e,r)=>r>32?Lr(t,e,r):Kr(t,e,r);function os(t,e=24){let r=new Uint32Array(10);for(let n=24-e;n<24;n++){for(let a=0;a<10;a++)r[a]=t[a]^t[a+10]^t[a+20]^t[a+30]^t[a+40];for(let a=0;a<10;a+=2){let s=(a+8)%10,c=(a+2)%10,u=r[c],f=r[c+1],l=Yn(u,f,1)^r[s],h=Wn(u,f,1)^r[s+1];for(let b=0;b<50;b+=10)t[a+b]^=l,t[a+b+1]^=h}let i=t[2],o=t[3];for(let a=0;a<24;a++){let s=Qn[a],c=Yn(i,o,s),u=Wn(i,o,s),f=Jn[a];i=t[f],o=t[f+1],t[f]=c,t[f+1]=u}for(let a=0;a<50;a+=10){for(let s=0;s<10;s++)r[s]=t[a+s];for(let s=0;s<10;s++)t[a+s]^=~r[(s+2)%10]&r[(s+4)%10]}t[0]^=ns[n],t[1]^=is[n]}r.fill(0)}var er=class t extends Oe{constructor(e,r,n,i=!1,o=24){if(super(),this.blockLen=e,this.suffix=r,this.outputLen=n,this.enableXOF=i,this.rounds=o,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,mt(n),0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=En(this.state)}keccak(){Er||vr(this.state32),os(this.state32,this.rounds),Er||vr(this.state32),this.posOut=0,this.pos=0}update(e){ve(this);let{blockLen:r,state:n}=this;e=He(e);let i=e.length;for(let o=0;o=n&&this.keccak();let a=Math.min(n-this.posOut,o-i);e.set(r.subarray(this.posOut,this.posOut+a),i),this.posOut+=a,i+=a}return e}xofInto(e){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return mt(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(Mt(e,this),this.finished)throw new Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(e){let{blockLen:r,suffix:n,outputLen:i,rounds:o,enableXOF:a}=this;return e||(e=new t(r,n,i,a,o)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=o,e.suffix=n,e.outputLen=i,e.enableXOF=a,e.destroyed=this.destroyed,e}},Ne=(t,e,r)=>_e(()=>new er(e,t,r)),Af=Ne(6,144,224/8),Pf=Ne(6,136,256/8),Bf=Ne(6,104,384/8),Kf=Ne(6,72,512/8),If=Ne(1,144,224/8),Lf=Ne(1,136,256/8),Uf=Ne(1,104,384/8),Of=Ne(1,72,512/8),ti=(t,e,r)=>vn((n={})=>new er(e,t,n.dkLen===void 0?r:n.dkLen,!0)),Hf=ti(31,168,128/8),$r=ti(31,136,256/8);var ss=_e(()=>$r.create({dkLen:114})),as=_e(()=>$r.create({dkLen:64})),St=BigInt("726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018365439"),cs=BigInt(1),ri=BigInt(2),ni=BigInt(3),jf=BigInt(4),fs=BigInt(11),us=BigInt(22),ii=BigInt(44),ls=BigInt(88),hs=BigInt(223);function oi(t){let e=St,r=t*t*t%e,n=r*r*t%e,i=G(n,ni,e)*n%e,o=G(i,ni,e)*n%e,a=G(o,ri,e)*r%e,s=G(a,fs,e)*a%e,c=G(s,us,e)*s%e,u=G(c,ii,e)*c%e,f=G(u,ls,e)*u%e,l=G(f,ii,e)*c%e,h=G(l,ri,e)*r%e,b=G(h,cs,e)*t%e;return G(b,hs,e)*h%e}function si(t){return t[0]&=252,t[55]|=128,t[56]=0,t}function ds(t,e){let r=St,n=X(t*t*e,r),i=X(n*t,r),o=X(i*n*e,r),a=oi(o),s=X(i*a,r),c=X(s*s,r);return{isValid:X(c*e,r)===t,value:s}}var ai=_t(St,456,!0),ps={a:BigInt(1),d:BigInt("726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018326358"),Fp:ai,n:BigInt("181709681073901722637330951972001133588410340171829515070372549795146003961539585716195755291692375963310293709091662304773755859649779"),nBitLength:456,h:BigInt(4),Gx:BigInt("224580040295924300187604334099896036246789641632564134246125461686950415467406032909029192869357953282578032075146446173674602635247710"),Gy:BigInt("298819210078481492676017930443930673437544040154080242095928241372331506189835876003536878655418784733982303233503462500531545062832660"),hash:ss,randomBytes:gt,adjustScalarBytes:si,domain:(t,e,r)=>{if(e.length>255)throw new Error(`Context is too big: ${e.length}`);return kr(Ft("SigEd448"),new Uint8Array([r?1:0,e.length]),e,t)},uvRatio:ds};var Mf=$n({...ps,prehash:as}),tr=Wt({a:BigInt(156326),montgomeryBits:448,nByteLength:56,P:St,Gu:BigInt(5),powPminus2:t=>{let e=St,r=oi(t),n=G(r,BigInt(2),e);return X(n*t,e)},adjustScalarBytes:si,randomBytes:gt});var qf=(ai.ORDER-BigInt(3))/BigInt(4),Ff=BigInt(156326);var Gf=BigInt("39082"),$f=BigInt("78163"),Xf=BigInt("98944233647732219769177004876929019128417576295529901074099889598043702116001257856802131563896515373927712232092845883226922417596214"),Vf=BigInt("315019913931389607337177038330951043522456072897266928557328499619017160722351061360252776265186336876723201881398623946864393857820716");var Zf=BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");var ot="X448",ci=new Uint8Array,rr=["deriveBits"],ys=new Uint8Array([100,107,112,95,112,114,107]),bs=new Uint8Array([115,107]);function fi(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),n=new Uint8Array(r.length);for(let i=0;i{r(e.key.buffer)})}_serializePrivateKey(e){return new Promise(r=>{r(e.key.buffer)})}_importRawKey(e,r){return new Promise((n,i)=>{r&&e.byteLength!==this._nPk&&i(new Error("Invalid length of the key")),!r&&e.byteLength!==this._nSk&&i(new Error("Invalid length of the key")),n(new ee(ot,new Uint8Array(e),r?"public":"private",r?[]:rr))})}_importJWK(e,r){return new Promise((n,i)=>{e.kty!=="OKP"&&i(new Error(`Invalid kty: ${e.kty}`)),e.crv!=="X448"&&i(new Error(`Invalid crv: ${e.crv}`)),r?(typeof e.d<"u"&&i(new Error("Invalid key: `d` should not be set")),typeof e.x!="string"&&i(new Error("Invalid key: `x` not found")),n(new ee(ot,fi(e.x),"public"))):(typeof e.d!="string"&&i(new Error("Invalid key: `d` not found")),n(new ee(ot,fi(e.d),"private",rr)))})}_derivePublicKey(e){return new Promise((r,n)=>{try{let i=tr.getPublicKey(e.key);r(new ee(ot,i,"public"))}catch(i){n(i)}})}_dh(e,r){return new Promise((n,i)=>{try{n(tr.getSharedSecret(e.key,r.key).buffer)}catch(o){i(o)}})}};var Pt=class extends ce{constructor(){let e=new Be;super(M.DhkemX448HkdfSha512,new At(e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:M.DhkemX448HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:56}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:56}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:56})}};var st=class extends bt{async extract(e,r){if(await this._setup(),e.byteLength===0&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)return Fe(Kn,new Uint8Array(e),new Uint8Array(r));let n=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",n,r)}};var nr=class extends ce{constructor(){let e=new ke,r=new ge(M.DhkemP256HkdfSha256,e);super(M.DhkemP256HkdfSha256,r,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:M.DhkemP256HkdfSha256}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}};var ir=class extends ce{constructor(){let e=new st,r=new ge(M.DhkemP384HkdfSha384,e);super(M.DhkemP384HkdfSha384,r,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:M.DhkemP384HkdfSha384}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:48}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:97}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:48})}};var or=class extends ce{constructor(){let e=new Be,r=new ge(M.DhkemP521HkdfSha512,e);super(M.DhkemP521HkdfSha512,r,e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:M.DhkemP521HkdfSha512}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:64}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:133}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:64})}};var Xr=class extends pt{constructor(e){if(typeof e.kem=="number")switch(e.kem){case M.DhkemP256HkdfSha256:e.kem=new nr;break;case M.DhkemP384HkdfSha384:e.kem=new ir;break;case M.DhkemP521HkdfSha512:e.kem=new or;break;case M.DhkemX25519HkdfSha256:e.kem=new vt;break;case M.DhkemX448HkdfSha512:e.kem=new Pt;break;default:throw new Y(`The KEM (${e.kem}) cannot be specified by KemId. Use submodule for the KEM`)}if(typeof e.kdf=="number")switch(e.kdf){case ye.HkdfSha256:e.kdf=new ke;break;case ye.HkdfSha384:e.kdf=new st;break;default:e.kdf=new Be;break}if(typeof e.aead=="number")switch(e.aead){case ae.Aes128Gcm:e.aead=new Qe;break;case ae.Aes256Gcm:e.aead=new ct;break;case ae.Chacha20Poly1305:e.aead=new xt;break;default:e.aead=new ft;break}super(e)}async generateKeyPair(){return await this._setup(),await this._kem.generateKeyPair()}async deriveKeyPair(e){return await this._setup(),await this._kem.deriveKeyPair(e)}async importKey(e,r,n=!0){return await this._setup(),await this._kem.importKey(e,r,n)}};export{Mi as Aead,ae as AeadId,at as BaseError,Xr as CipherSuite,Ve as DecapError,xe as DeriveKeyPairError,W as DeserializeError,Xe as EncapError,Ze as ExportError,se as HpkeError,Y as InvalidParamError,ji as Kdf,ye as KdfId,Ni as Kem,M as KemId,Je as MessageLimitReachedError,ie as NotSupportedError,We as OpenError,Ye as SealError,ne as SerializeError,Kt as ValidationError}; /*! Bundled license information: @noble/ciphers/esm/utils.js: