@gjsify/crypto 0.22.0 → 0.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- import"../_virtual/_rolldown/runtime.js";import{randomBytes as e}from"./random.js";import{Buffer as t}from"node:buffer";const n={secp256k1:{p:115792089237316195423570985008687907853269984665640564039457584007908834671663n,a:0n,b:7n,Gx:55066263022277343669578718895168534326250603453777594175500187360389116729240n,Gy:32670510020758816978083085130507043184471273380659243275938904335757337482424n,n:115792089237316195423570985008687907852837564279074904382605163141518161494337n,byteLength:32},prime256v1:{p:115792089210356248762697446949407573530086143415290314195533631308867097853951n,a:115792089210356248762697446949407573530086143415290314195533631308867097853951n-3n,b:41058363725152142129326129780047268409114441015993725554835256314039467401291n,Gx:48439561293906451759052585252797914202762949526041747995844080717082404635286n,Gy:36134250956749795798585127919587881956611106672985015071877198253568414405109n,n:115792089210356248762697446949407573529996955224135760342422259061068512044369n,byteLength:32},secp384r1:{p:39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319n,a:39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319n-3n,b:27580193559959705877849011840389048093056905856361568521428707301988689241309860865136260764883745107765439761230575n,Gx:26247035095799689268623156744566981891852923491109213387815615900925518854738050089022388053975719786650872476732087n,Gy:8325710961489029985546751289520108179287853048861315594709205902480503199884419224438643760392947333078086511627871n,n:39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643n,byteLength:48},secp521r1:{p:6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151n,a:6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151n-3n,b:1093849038073734274511112390766805569936207598951683748994586394495953116150735016013708737573759623248592132296706313309438452531591012912142327488478985984n,Gx:2661740802050217063228768716723360960729859168756973147706671368418802944996427808491545080627771902352094241225065558662157113545570916814161637315895999846n,Gy:3757180025770020463545507224491183603594455134769762486694567779615544477440556316691234405012945539562144444537289428522585666729196580810124344277578376784n,n:6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449n,byteLength:66}},r={secp256k1:`secp256k1`,prime256v1:`prime256v1`,secp256r1:`prime256v1`,"p-256":`prime256v1`,p256:`prime256v1`,secp384r1:`secp384r1`,"p-384":`secp384r1`,p384:`secp384r1`,secp521r1:`secp521r1`,"p-521":`secp521r1`,p521:`secp521r1`};function modPow(e,t,n){if(n===1n)return 0n;e=mod(e,n);let r=1n;for(;t>0n;)t&1n&&(r=r*e%n),t>>=1n,e=e*e%n;return r}function mod(e,t){let n=e%t;return n<0n?n+t:n}function modInverse(e,t){if(e=mod(e,t),e===0n)throw Error(`No modular inverse for zero`);let[n,r]=[e,t],[i,a]=[1n,0n];for(;r!==0n;){let e=n/r;[n,r]=[r,n-e*r],[i,a]=[a,i-e*a]}if(n!==1n)throw Error(`Modular inverse does not exist`);return mod(i,t)}function pointAdd(e,t,n){if(e===null)return t;if(t===null)return e;let{p:r}=n;if(e.x===t.x)return mod(e.y+t.y,r)===0n?null:pointDouble(e,n);let i=mod(t.x-e.x,r),a=mod(mod(t.y-e.y,r)*modInverse(i,r),r),o=mod(a*a-e.x-t.x,r);return{x:o,y:mod(a*(e.x-o)-e.y,r)}}function pointDouble(e,t){if(e===null)return null;let{a:n,p:r}=t;if(e.y===0n)return null;let i=mod(mod(3n*e.x*e.x+n,r)*modInverse(mod(2n*e.y,r),r),r),a=mod(i*i-2n*e.x,r);return{x:a,y:mod(i*(e.x-a)-e.y,r)}}function scalarMul(e,t,n){if(t===null||e===0n)return null;let{n:r}=n;if(e=mod(e,r),e===0n)return null;let i=null,a=t,o=e.toString(2);for(let e=0;e<o.length;e++)o[e]===`1`?(i=pointAdd(i,a,n),a=pointDouble(a,n)):(a=pointAdd(i,a,n),i=pointDouble(i,n));return i}function bigintToBuffer(e,n){let r=e.toString(16).padStart(n*2,`0`);return t.from(r,`hex`)}function bufferToBigint(e){let n=t.from(e).toString(`hex`);return n.length===0?0n:BigInt(`0x`+n)}function encodePublicKey(e,n,r=`uncompressed`){if(e===null)throw Error(`Cannot encode the point at infinity`);let i=bigintToBuffer(e.x,n);if(r===`compressed`){let n=e.y%2n==0n?2:3;return t.concat([t.from([n]),i])}let a=bigintToBuffer(e.y,n);if(r===`hybrid`){let n=e.y%2n==0n?6:7;return t.concat([t.from([n]),i,a])}return t.concat([t.from([4]),i,a])}function decodePublicKey(e,n){let r=t.from(e);if(r.length===0)throw Error(`Invalid public key: empty buffer`);let i=r[0],{p:a,a:o,b:s,byteLength:c}=n;if(i===4||i===6||i===7){if(r.length!==1+2*c)throw Error(`Invalid public key length: expected ${1+2*c} bytes, got ${r.length}`);let e=bufferToBigint(r.subarray(1,1+c)),t=bufferToBigint(r.subarray(1+c));if(mod(t*t,a)!==mod(e*e*e+o*e+s,a))throw Error(`Invalid public key: point is not on the curve`);return{x:e,y:t}}if(i===2||i===3){if(r.length!==1+c)throw Error(`Invalid public key length: expected ${1+c} bytes, got ${r.length}`);let e=bufferToBigint(r.subarray(1,1+c)),t=sqrtMod(mod(e*e*e+o*e+s,a),a);if(t===null)throw Error(`Invalid public key: no valid y coordinate for the given x`);let n=i===3;return{x:e,y:t%2n!=0n===n?t:mod(a-t,a)}}throw Error(`Invalid public key prefix: 0x${i.toString(16).padStart(2,`0`)}`)}function sqrtMod(e,t){if(e=mod(e,t),e===0n)return 0n;if(modPow(e,(t-1n)/2n,t)!==1n)return null;if(mod(t,4n)===3n)return modPow(e,(t+1n)/4n,t);let n=0n,r=t-1n;for(;mod(r,2n)===0n;)r/=2n,n++;let i=2n;for(;modPow(i,(t-1n)/2n,t)!==t-1n;)i++;let a=n,o=modPow(i,r,t),s=modPow(e,r,t),c=modPow(e,(r+1n)/2n,t);for(;;){if(s===0n)return 0n;if(s===1n)return c;let e=1n,n=mod(s*s,t);for(;n!==1n;)n=mod(n*n,t),e++;let r=modPow(o,modPow(2n,a-e-1n,t-1n),t);a=e,o=mod(r*r,t),s=mod(s*o,t),c=mod(c*r,t)}}function toBuffer(e,n){if(t.isBuffer(e))return e;if(e instanceof Uint8Array)return t.from(e);if(typeof e==`string`)return t.from(e,n||`utf8`);if(ArrayBuffer.isView(e))return t.from(e.buffer,e.byteOffset,e.byteLength);throw TypeError(`The "key" argument must be of type string or an instance of Buffer, TypedArray, or DataView.`)}function formatReturnValue(e,t){return t?e.toString(t):e}function resolveCurve(e){let t=r[e.toLowerCase()];if(!t)throw Error(`Unsupported curve: ${e}`);let i=n[t];if(!i)throw Error(`Unsupported curve: ${e}`);return{canonical:t,params:i}}var ECDH=class{_curve;_curveName;_privateKey=null;_publicKey=null;constructor(e){let t=resolveCurve(e);this._curve=t.params,this._curveName=t.canonical}generateKeys(t,n){let{n:r,byteLength:i}=this._curve,a;do a=bufferToBigint(e(i));while(a===0n||a>=r);this._privateKey=a;let o={x:this._curve.Gx,y:this._curve.Gy};return this._publicKey=scalarMul(a,o,this._curve),t===void 0?this.getPublicKey():this.getPublicKey(t,n)}computeSecret(e,t,n){if(this._privateKey===null)throw Error(`ECDH key not generated. Call generateKeys() or setPrivateKey() first.`);let r=decodePublicKey(toBuffer(e,t),this._curve);if(r===null)throw Error(`Invalid public key: point at infinity`);let i=scalarMul(this._privateKey,r,this._curve);if(i===null)throw Error(`Shared secret computation resulted in the point at infinity`);return formatReturnValue(bigintToBuffer(i.x,this._curve.byteLength),n)}getPublicKey(e,t){if(this._publicKey===null)throw Error(`ECDH key not generated. Call generateKeys() or setPrivateKey() first.`);return formatReturnValue(encodePublicKey(this._publicKey,this._curve.byteLength,t||`uncompressed`),e)}getPrivateKey(e){if(this._privateKey===null)throw Error(`ECDH key not generated. Call generateKeys() or setPrivateKey() first.`);return formatReturnValue(bigintToBuffer(this._privateKey,this._curve.byteLength),e)}setPublicKey(e,t){let n=toBuffer(e,t);this._publicKey=decodePublicKey(n,this._curve)}setPrivateKey(e,t){let n=bufferToBigint(toBuffer(e,t));if(n===0n||n>=this._curve.n)throw Error(`Private key is out of range [1, n-1]`);this._privateKey=n;let r={x:this._curve.Gx,y:this._curve.Gy};this._publicKey=scalarMul(n,r,this._curve)}};function createECDH(e){return new ECDH(e)}function getCurves(){return[`secp256k1`,`prime256v1`,`secp256r1`,`secp384r1`,`secp521r1`]}export{ECDH,createECDH,getCurves};
1
+ import"../_virtual/_rolldown/runtime.js";import{randomBytes as e}from"./random.js";import{Buffer as t}from"node:buffer";const n={secp256k1:{p:115792089237316195423570985008687907853269984665640564039457584007908834671663n,a:0n,b:7n,Gx:55066263022277343669578718895168534326250603453777594175500187360389116729240n,Gy:32670510020758816978083085130507043184471273380659243275938904335757337482424n,n:115792089237316195423570985008687907852837564279074904382605163141518161494337n,byteLength:32},prime256v1:{p:115792089210356248762697446949407573530086143415290314195533631308867097853951n,a:115792089210356248762697446949407573530086143415290314195533631308867097853951n-3n,b:41058363725152142129326129780047268409114441015993725554835256314039467401291n,Gx:48439561293906451759052585252797914202762949526041747995844080717082404635286n,Gy:36134250956749795798585127919587881956611106672985015071877198253568414405109n,n:115792089210356248762697446949407573529996955224135760342422259061068512044369n,byteLength:32},secp384r1:{p:39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319n,a:39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319n-3n,b:27580193559959705877849011840389048093056905856361568521428707301988689241309860865136260764883745107765439761230575n,Gx:26247035095799689268623156744566981891852923491109213387815615900925518854738050089022388053975719786650872476732087n,Gy:8325710961489029985546751289520108179287853048861315594709205902480503199884419224438643760392947333078086511627871n,n:39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643n,byteLength:48},secp521r1:{p:6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151n,a:6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151n-3n,b:1093849038073734274511112390766805569936207598951683748994586394495953116150735016013708737573759623248592132296706313309438452531591012912142327488478985984n,Gx:2661740802050217063228768716723360960729859168756973147706671368418802944996427808491545080627771902352094241225065558662157113545570916814161637315895999846n,Gy:3757180025770020463545507224491183603594455134769762486694567779615544477440556316691234405012945539562144444537289428522585666729196580810124344277578376784n,n:6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449n,byteLength:66}},r={secp256k1:`secp256k1`,prime256v1:`prime256v1`,secp256r1:`prime256v1`,"p-256":`prime256v1`,p256:`prime256v1`,secp384r1:`secp384r1`,"p-384":`secp384r1`,p384:`secp384r1`,secp521r1:`secp521r1`,"p-521":`secp521r1`,p521:`secp521r1`};function modPow(e,t,n){if(n===1n)return 0n;e=mod(e,n);let r=1n;for(;t>0n;)t&1n&&(r=r*e%n),t>>=1n,e=e*e%n;return r}function mod(e,t){let n=e%t;return n<0n?n+t:n}function modInverse(e,t){if(e=mod(e,t),e===0n)throw Error(`No modular inverse for zero`);let[n,r]=[e,t],[i,a]=[1n,0n];for(;r!==0n;){let e=n/r;[n,r]=[r,n-e*r],[i,a]=[a,i-e*a]}if(n!==1n)throw Error(`Modular inverse does not exist`);return mod(i,t)}function pointAdd(e,t,n){if(e===null)return t;if(t===null)return e;let{p:r}=n;if(e.x===t.x)return mod(e.y+t.y,r)===0n?null:pointDouble(e,n);let i=mod(t.x-e.x,r),a=mod(mod(t.y-e.y,r)*modInverse(i,r),r),o=mod(a*a-e.x-t.x,r);return{x:o,y:mod(a*(e.x-o)-e.y,r)}}function pointDouble(e,t){if(e===null)return null;let{a:n,p:r}=t;if(e.y===0n)return null;let i=mod(mod(3n*e.x*e.x+n,r)*modInverse(mod(2n*e.y,r),r),r),a=mod(i*i-2n*e.x,r);return{x:a,y:mod(i*(e.x-a)-e.y,r)}}function scalarMul(e,t,n){if(t===null||e===0n)return null;let{n:r}=n;if(e=mod(e,r),e===0n)return null;let i=null,a=t,o=e.toString(2);for(let e=0;e<o.length;e++)o[e]===`1`?(i=pointAdd(i,a,n),a=pointDouble(a,n)):(a=pointAdd(i,a,n),i=pointDouble(i,n));return i}function bigintToBuffer(e,n){let r=e.toString(16).padStart(n*2,`0`);return t.from(r,`hex`)}function bufferToBigint(e){let n=t.from(e).toString(`hex`);return n.length===0?0n:BigInt(`0x`+n)}function encodePublicKey(e,n,r=`uncompressed`){if(e===null)throw Error(`Cannot encode the point at infinity`);let i=bigintToBuffer(e.x,n);if(r===`compressed`){let n=e.y%2n==0n?2:3;return t.concat([t.from([n]),i])}let a=bigintToBuffer(e.y,n);if(r===`hybrid`){let n=e.y%2n==0n?6:7;return t.concat([t.from([n]),i,a])}return t.concat([t.from([4]),i,a])}function decodePublicKey(e,n){let r=t.from(e);if(r.length===0)throw Error(`Invalid public key: empty buffer`);let i=r[0],{p:a,a:o,b:s,byteLength:c}=n;if(i===4||i===6||i===7){if(r.length!==1+2*c)throw Error(`Invalid public key length: expected ${1+2*c} bytes, got ${r.length}`);let e=bufferToBigint(r.subarray(1,1+c)),t=bufferToBigint(r.subarray(1+c));if(mod(t*t,a)!==mod(e*e*e+o*e+s,a))throw Error(`Invalid public key: point is not on the curve`);return{x:e,y:t}}if(i===2||i===3){if(r.length!==1+c)throw Error(`Invalid public key length: expected ${1+c} bytes, got ${r.length}`);let e=bufferToBigint(r.subarray(1,1+c)),t=sqrtMod(mod(e*e*e+o*e+s,a),a);if(t===null)throw Error(`Invalid public key: no valid y coordinate for the given x`);let n=i===3;return{x:e,y:t%2n!=0n===n?t:mod(a-t,a)}}throw Error(`Invalid public key prefix: 0x${i.toString(16).padStart(2,`0`)}`)}function sqrtMod(e,t){if(e=mod(e,t),e===0n)return 0n;if(modPow(e,(t-1n)/2n,t)!==1n)return null;if(mod(t,4n)===3n)return modPow(e,(t+1n)/4n,t);let n=0n,r=t-1n;for(;mod(r,2n)===0n;)r/=2n,n++;let i=2n;for(;modPow(i,(t-1n)/2n,t)!==t-1n;)i++;let a=n,o=modPow(i,r,t),s=modPow(e,r,t),c=modPow(e,(r+1n)/2n,t);for(;;){if(s===0n)return 0n;if(s===1n)return c;let e=1n,n=mod(s*s,t);for(;n!==1n;)n=mod(n*n,t),e++;let r=modPow(o,modPow(2n,a-e-1n,t-1n),t);a=e,o=mod(r*r,t),s=mod(s*o,t),c=mod(c*r,t)}}function toBuffer(e,n){if(t.isBuffer(e))return e;if(e instanceof Uint8Array)return t.from(e);if(typeof e==`string`)return t.from(e,n||`utf8`);if(ArrayBuffer.isView(e))return t.from(e.buffer,e.byteOffset,e.byteLength);throw TypeError(`The "key" argument must be of type string or an instance of Buffer, TypedArray, or DataView.`)}function formatReturnValue(e,t){return t?e.toString(t):e}function resolveCurve(e){let t=e.toLowerCase(),i=r[t];if(!i)throw Error(`Unsupported curve: ${e}`);let a=n[i];if(!a)throw Error(`Unsupported curve: ${e}`);return{canonical:i,params:a}}var ECDH=class{_curve;_curveName;_privateKey=null;_publicKey=null;constructor(e){let t=resolveCurve(e);this._curve=t.params,this._curveName=t.canonical}generateKeys(t,n){let{n:r,byteLength:i}=this._curve,a;do a=bufferToBigint(e(i));while(a===0n||a>=r);this._privateKey=a;let o={x:this._curve.Gx,y:this._curve.Gy};return this._publicKey=scalarMul(a,o,this._curve),t===void 0?this.getPublicKey():this.getPublicKey(t,n)}computeSecret(e,t,n){if(this._privateKey===null)throw Error(`ECDH key not generated. Call generateKeys() or setPrivateKey() first.`);let r=decodePublicKey(toBuffer(e,t),this._curve);if(r===null)throw Error(`Invalid public key: point at infinity`);let i=scalarMul(this._privateKey,r,this._curve);if(i===null)throw Error(`Shared secret computation resulted in the point at infinity`);return formatReturnValue(bigintToBuffer(i.x,this._curve.byteLength),n)}getPublicKey(e,t){if(this._publicKey===null)throw Error(`ECDH key not generated. Call generateKeys() or setPrivateKey() first.`);return formatReturnValue(encodePublicKey(this._publicKey,this._curve.byteLength,t||`uncompressed`),e)}getPrivateKey(e){if(this._privateKey===null)throw Error(`ECDH key not generated. Call generateKeys() or setPrivateKey() first.`);return formatReturnValue(bigintToBuffer(this._privateKey,this._curve.byteLength),e)}setPublicKey(e,t){let n=toBuffer(e,t);this._publicKey=decodePublicKey(n,this._curve)}setPrivateKey(e,t){let n=bufferToBigint(toBuffer(e,t));if(n===0n||n>=this._curve.n)throw Error(`Private key is out of range [1, n-1]`);this._privateKey=n;let r={x:this._curve.Gx,y:this._curve.Gy};this._publicKey=scalarMul(n,r,this._curve)}};function createECDH(e){return new ECDH(e)}function getCurves(){return[`secp256k1`,`prime256v1`,`secp256r1`,`secp384r1`,`secp521r1`]}export{ECDH,createECDH,getCurves};
@@ -1 +1 @@
1
- import"../_virtual/_rolldown/runtime.js";import{Buffer as e}from"node:buffer";const t={sha1:`SHA-1`,sha256:`SHA-256`,sha384:`SHA-384`,sha512:`SHA-512`};function normalizeAlgorithm(e){return e.toLowerCase().replace(/-/g,``)}function getWebSubtle(){if(globalThis.crypto===void 0||globalThis.crypto.subtle===void 0)throw Error(`WebCrypto SubtleCrypto is unavailable in this environment`);return globalThis.crypto.subtle}function toBytes(t){return typeof t==`string`?e.from(t,`utf8`):t instanceof Uint8Array?t:e.from(t)}function resolveWebAlgo(e){let n=t[normalizeAlgorithm(e)];if(!n)throw Error(`Unsupported PBKDF2/HKDF digest: ${e}`);return n}function pbkdf2(t,n,r,i,a,o){let s,c;typeof a==`function`?(s=`sha1`,c=a):(s=a,c=o);let l=resolveWebAlgo(s),u=toBytes(t),d=toBytes(n),f=getWebSubtle();f.importKey(`raw`,u,{name:`PBKDF2`},!1,[`deriveBits`]).then(e=>f.deriveBits({name:`PBKDF2`,salt:d,iterations:r,hash:l},e,i*8)).then(t=>c(null,e.from(t))).catch(t=>c(t,e.alloc(0)))}function pbkdf2Sync(e,t,n,r,i){let a=Error(`Synchronous pbkdf2Sync is not supported in browser builds. Use pbkdf2() with a callback, or await crypto.subtle.deriveBits({name:"PBKDF2", …}) directly.`);throw a.code=`ENOTSUP_SYNC_KDF`,a}function hkdf(e,t,n,r,i,a){let o=resolveWebAlgo(e),s=getWebSubtle();s.importKey(`raw`,toBytes(t),{name:`HKDF`},!1,[`deriveBits`]).then(e=>s.deriveBits({name:`HKDF`,hash:o,salt:toBytes(n),info:toBytes(r)},e,i*8)).then(e=>a(null,e)).catch(e=>a(e,new ArrayBuffer(0)))}function hkdfSync(e,t,n,r,i){let a=Error(`Synchronous hkdfSync is not supported in browser builds. Use hkdf() with a callback, or await crypto.subtle.deriveBits({name:"HKDF", …}) directly.`);throw a.code=`ENOTSUP_SYNC_KDF`,a}function scrypt(t,n,r,i,a){let o=Error(`scrypt is not supported in browser builds — WebCrypto does not provide a scrypt primitive.`);o.code=`ENOTSUP_NO_WEBCRYPTO_PRIMITIVE`;let s=typeof i==`function`?i:a;if(s){s(o,e.alloc(0));return}throw o}function scryptSync(e,t,n,r){let i=Error(`scryptSync is not supported in browser builds — WebCrypto does not provide a scrypt primitive.`);throw i.code=`ENOTSUP_NO_WEBCRYPTO_PRIMITIVE`,i}export{hkdf,hkdfSync,pbkdf2,pbkdf2Sync,scrypt,scryptSync};
1
+ import"../_virtual/_rolldown/runtime.js";import{Buffer as e}from"node:buffer";const t={sha1:`SHA-1`,sha256:`SHA-256`,sha384:`SHA-384`,sha512:`SHA-512`};function normalizeAlgorithm(e){return e.toLowerCase().replace(/-/g,``)}function getWebSubtle(){if(globalThis.crypto===void 0||globalThis.crypto.subtle===void 0)throw Error(`WebCrypto SubtleCrypto is unavailable in this environment`);return globalThis.crypto.subtle}function toBytes(t){return typeof t==`string`?e.from(t,`utf8`):t instanceof Uint8Array?t:e.from(t)}function resolveWebAlgo(e){let n=normalizeAlgorithm(e),r=t[n];if(!r)throw Error(`Unsupported PBKDF2/HKDF digest: ${e}`);return r}function pbkdf2(t,n,r,i,a,o){let s,c;typeof a==`function`?(s=`sha1`,c=a):(s=a,c=o);let l=resolveWebAlgo(s),u=toBytes(t),d=toBytes(n),f=getWebSubtle();f.importKey(`raw`,u,{name:`PBKDF2`},!1,[`deriveBits`]).then(e=>f.deriveBits({name:`PBKDF2`,salt:d,iterations:r,hash:l},e,i*8)).then(t=>c(null,e.from(t))).catch(t=>c(t,e.alloc(0)))}function pbkdf2Sync(e,t,n,r,i){let a=Error(`Synchronous pbkdf2Sync is not supported in browser builds. Use pbkdf2() with a callback, or await crypto.subtle.deriveBits({name:"PBKDF2", …}) directly.`);throw a.code=`ENOTSUP_SYNC_KDF`,a}function hkdf(e,t,n,r,i,a){let o=resolveWebAlgo(e),s=getWebSubtle();s.importKey(`raw`,toBytes(t),{name:`HKDF`},!1,[`deriveBits`]).then(e=>s.deriveBits({name:`HKDF`,hash:o,salt:toBytes(n),info:toBytes(r)},e,i*8)).then(e=>a(null,e)).catch(e=>a(e,new ArrayBuffer(0)))}function hkdfSync(e,t,n,r,i){let a=Error(`Synchronous hkdfSync is not supported in browser builds. Use hkdf() with a callback, or await crypto.subtle.deriveBits({name:"HKDF", …}) directly.`);throw a.code=`ENOTSUP_SYNC_KDF`,a}function scrypt(t,n,r,i,a){let o=Error(`scrypt is not supported in browser builds — WebCrypto does not provide a scrypt primitive.`);o.code=`ENOTSUP_NO_WEBCRYPTO_PRIMITIVE`;let s=typeof i==`function`?i:a;if(s){s(o,e.alloc(0));return}throw o}function scryptSync(e,t,n,r){let i=Error(`scryptSync is not supported in browser builds — WebCrypto does not provide a scrypt primitive.`);throw i.code=`ENOTSUP_NO_WEBCRYPTO_PRIMITIVE`,i}export{hkdf,hkdfSync,pbkdf2,pbkdf2Sync,scrypt,scryptSync};
@@ -1 +1 @@
1
- import"../_virtual/_rolldown/runtime.js";import{Buffer as e}from"node:buffer";const t={sha1:`SHA-1`,sha256:`SHA-256`,sha384:`SHA-384`,sha512:`SHA-512`};function normalizeHash(e){let n=t[e.toLowerCase().replace(/-/g,``)];if(!n)throw Error(`Unsupported digest in browser builds: ${e}`);return n}function getWebSubtle(){if(globalThis.crypto===void 0||globalThis.crypto.subtle===void 0)throw Error(`WebCrypto SubtleCrypto is unavailable in this environment`);return globalThis.crypto.subtle}function syncUnsupportedError(){let e=Error(`Synchronous Sign.sign() / Verify.verify() is not supported in browser builds. Use signAsync(cryptoKey) / verifyAsync(cryptoKey, signature) with a pre-imported CryptoKey.`);return e.code=`ENOTSUP_SYNC_SIGN`,e}var SignBase=class{_algorithm;_webAlgo;_chunks=[];_finalized=!1;constructor(e){this._algorithm=e.toLowerCase(),this._webAlgo=normalizeHash(e)}update(t,n){if(this._finalized)throw Error(`Sign/Verify already finalised`);let r=typeof t==`string`?e.from(t,n??`utf8`):t instanceof Uint8Array?t:e.from(t);return this._chunks.push(r),this}_allBytes(){if(this._chunks.length===0)return new Uint8Array;if(this._chunks.length===1)return this._chunks[0];let e=this._chunks.reduce((e,t)=>e+t.byteLength,0),t=new Uint8Array(e),n=0;for(let e of this._chunks)t.set(e,n),n+=e.byteLength;return t}},Sign=class extends SignBase{sign(e,t){throw syncUnsupportedError()}async signAsync(t,n){if(this._finalized)throw Error(`Sign already finalised`);this._finalized=!0;let r=getWebSubtle(),i=t.algorithm.name,a;a=i===`ECDSA`?{name:`ECDSA`,hash:this._webAlgo}:i===`RSA-PSS`?{name:`RSA-PSS`,saltLength:32}:i;let o=await r.sign(a,t,this._allBytes()),s=e.from(o);return n?s.toString(n):s}},Verify=class extends SignBase{verify(e,t,n){throw syncUnsupportedError()}async verifyAsync(e,t){if(this._finalized)throw Error(`Verify already finalised`);this._finalized=!0;let n=getWebSubtle(),r=e.algorithm.name,i;return i=r===`ECDSA`?{name:`ECDSA`,hash:this._webAlgo}:r===`RSA-PSS`?{name:`RSA-PSS`,saltLength:32}:r,n.verify(i,e,t,this._allBytes())}};function createSign(e){return new Sign(e)}function createVerify(e){return new Verify(e)}async function sign(t,n,r){let i=getWebSubtle(),a=r.algorithm.name,o;return o=a===`ECDSA`?{name:`ECDSA`,hash:t?normalizeHash(t):`SHA-256`}:a===`RSA-PSS`?{name:`RSA-PSS`,saltLength:32}:a,e.from(await i.sign(o,r,n))}async function verify(e,t,n,r){let i=getWebSubtle(),a=n.algorithm.name,o;return o=a===`ECDSA`?{name:`ECDSA`,hash:e?normalizeHash(e):`SHA-256`}:a===`RSA-PSS`?{name:`RSA-PSS`,saltLength:32}:a,i.verify(o,n,r,t)}export{Sign,Verify,createSign,createVerify,sign,verify};
1
+ import"../_virtual/_rolldown/runtime.js";import{Buffer as e}from"node:buffer";const t={sha1:`SHA-1`,sha256:`SHA-256`,sha384:`SHA-384`,sha512:`SHA-512`};function normalizeHash(e){let n=e.toLowerCase().replace(/-/g,``),r=t[n];if(!r)throw Error(`Unsupported digest in browser builds: ${e}`);return r}function getWebSubtle(){if(globalThis.crypto===void 0||globalThis.crypto.subtle===void 0)throw Error(`WebCrypto SubtleCrypto is unavailable in this environment`);return globalThis.crypto.subtle}function syncUnsupportedError(){let e=Error(`Synchronous Sign.sign() / Verify.verify() is not supported in browser builds. Use signAsync(cryptoKey) / verifyAsync(cryptoKey, signature) with a pre-imported CryptoKey.`);return e.code=`ENOTSUP_SYNC_SIGN`,e}var SignBase=class{_algorithm;_webAlgo;_chunks=[];_finalized=!1;constructor(e){this._algorithm=e.toLowerCase(),this._webAlgo=normalizeHash(e)}update(t,n){if(this._finalized)throw Error(`Sign/Verify already finalised`);let r=typeof t==`string`?e.from(t,n??`utf8`):t instanceof Uint8Array?t:e.from(t);return this._chunks.push(r),this}_allBytes(){if(this._chunks.length===0)return new Uint8Array;if(this._chunks.length===1)return this._chunks[0];let e=this._chunks.reduce((e,t)=>e+t.byteLength,0),t=new Uint8Array(e),n=0;for(let e of this._chunks)t.set(e,n),n+=e.byteLength;return t}},Sign=class extends SignBase{sign(e,t){throw syncUnsupportedError()}async signAsync(t,n){if(this._finalized)throw Error(`Sign already finalised`);this._finalized=!0;let r=getWebSubtle(),i=t.algorithm.name,a;a=i===`ECDSA`?{name:`ECDSA`,hash:this._webAlgo}:i===`RSA-PSS`?{name:`RSA-PSS`,saltLength:32}:i;let o=await r.sign(a,t,this._allBytes()),s=e.from(o);return n?s.toString(n):s}},Verify=class extends SignBase{verify(e,t,n){throw syncUnsupportedError()}async verifyAsync(e,t){if(this._finalized)throw Error(`Verify already finalised`);this._finalized=!0;let n=getWebSubtle(),r=e.algorithm.name,i;return i=r===`ECDSA`?{name:`ECDSA`,hash:this._webAlgo}:r===`RSA-PSS`?{name:`RSA-PSS`,saltLength:32}:r,n.verify(i,e,t,this._allBytes())}};function createSign(e){return new Sign(e)}function createVerify(e){return new Verify(e)}async function sign(t,n,r){let i=getWebSubtle(),a=r.algorithm.name,o;return o=a===`ECDSA`?{name:`ECDSA`,hash:t?normalizeHash(t):`SHA-256`}:a===`RSA-PSS`?{name:`RSA-PSS`,saltLength:32}:a,e.from(await i.sign(o,r,n))}async function verify(e,t,n,r){let i=getWebSubtle(),a=n.algorithm.name,o;return o=a===`ECDSA`?{name:`ECDSA`,hash:e?normalizeHash(e):`SHA-256`}:a===`RSA-PSS`?{name:`RSA-PSS`,saltLength:32}:a,i.verify(o,n,r,t)}export{Sign,Verify,createSign,createVerify,sign,verify};
@@ -1 +1 @@
1
- import"./_virtual/_rolldown/runtime.js";import{Buffer as e}from"node:buffer";function normalizeAlgorithm(e){return e.toLowerCase().replace(/-/g,``)}const t={md5:16,sha1:20,sha256:32,sha384:48,sha512:64},n={md5:64,sha1:64,sha256:64,sha384:128,sha512:128},r=new Set([`md5`,`sha1`,`sha256`,`sha384`,`sha512`]);function hashSize(e){let n=t[normalizeAlgorithm(e)];if(n===void 0)throw Error(`Unknown hash algorithm: ${e}`);return n}function toBuffer(t,n){return typeof t==`string`?e.from(t,n||`utf8`):t instanceof DataView?e.from(t.buffer,t.byteOffset,t.byteLength):(t instanceof ArrayBuffer,e.from(t))}export{n as BLOCK_SIZES,t as DIGEST_SIZES,r as SUPPORTED_ALGORITHMS,hashSize,normalizeAlgorithm,toBuffer};
1
+ import"./_virtual/_rolldown/runtime.js";import{Buffer as e}from"node:buffer";function normalizeAlgorithm(e){return e.toLowerCase().replace(/-/g,``)}const t={md5:16,sha1:20,sha256:32,sha384:48,sha512:64},n={md5:64,sha1:64,sha256:64,sha384:128,sha512:128},r=new Set([`md5`,`sha1`,`sha256`,`sha384`,`sha512`]);function hashSize(e){let n=normalizeAlgorithm(e),r=t[n];if(r===void 0)throw Error(`Unknown hash algorithm: ${e}`);return r}function toBuffer(t,n){return typeof t==`string`?e.from(t,n||`utf8`):t instanceof DataView?e.from(t.buffer,t.byteOffset,t.byteLength):(t instanceof ArrayBuffer,e.from(t))}export{n as BLOCK_SIZES,t as DIGEST_SIZES,r as SUPPORTED_ALGORITHMS,hashSize,normalizeAlgorithm,toBuffer};
package/lib/esm/dh.js CHANGED
@@ -1 +1 @@
1
- import"./_virtual/_rolldown/runtime.js";import{modPow as e}from"./bigint-math.js";import{randomBytes as t}from"./random.js";import{Buffer as n}from"node:buffer";const r={modp1:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff`},modp2:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff`},modp5:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff`},modp14:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff`},modp15:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff`},modp16:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff`},modp17:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff`},modp18:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff`}};function bigIntToBuffer(e){if(e===0n)return n.from([0]);let t=e.toString(16);return t.length%2!=0&&(t=`0`+t),n.from(t,`hex`)}function bufferToBigInt(e){if(e.length===0)return 0n;let t=n.from(e).toString(`hex`);return t.length===0?0n:BigInt(`0x`+t)}function bitLength(e){return e===0n?0:e.toString(2).length}const i=[];{let e=1e3,t=new Uint8Array(e+1);for(let n=2;n*n<=e;n++)if(!t[n])for(let r=n*n;r<=e;r+=n)t[r]=1;for(let n=2;n<=e;n++)t[n]||i.push(n)}function simpleSieve(e){for(let t of i){let n=BigInt(t);if(e%n===0n)return e===n}return!0}function fermatTest(t){return e(2n,t-1n,t)===1n}function millerRabinTest(t){if(t<2n)return!1;if(t===2n||t===3n)return!0;if(t%2n==0n)return!1;let n=t-1n,r=0;for(;n%2n==0n;)n/=2n,r++;for(let i of[2n,3n,5n,7n,11n,13n]){if(i>=t)continue;let a=e(i,n,t);if(a===1n||a===t-1n)continue;let o=!0;for(let n=0;n<r-1;n++)if(a=e(a,2n,t),a===t-1n){o=!1;break}if(o)return!1}return!0}function checkPrime(e,t){let n=t.toString(`hex`),r=0;if(e%2n==0n||!simpleSieve(e)||!fermatTest(e)||!millerRabinTest(e))return r+=1,n===`02`||n===`05`?r+=8:r+=4,r;switch(millerRabinTest(e>>1n)||(r+=2),n){case`02`:e%24n!=11n&&(r+=8);break;case`05`:{let t=e%10n;t!==3n&&t!==7n&&(r+=8)}break;default:r+=4}return r}const a={};function getCachedCheckPrime(e,t){let n=t.toString(`hex`)+`_`+e.toString(16);if(n in a)return a[n];let r=checkPrime(e,t);return a[n]=r,r}function formatReturnValue(e,t){let n=bigIntToBuffer(e);return t?n.toString(t):n}var DiffieHellman=class{_prime;_generator;_generatorBuf;_primeByteLength;_pubKey;_privKey;_primeCode;_malleable;constructor(e,t,n=!1){this._prime=bufferToBigInt(e),this._generatorBuf=t,this._generator=bufferToBigInt(t),this._primeByteLength=e.length,this._pubKey=void 0,this._privKey=void 0,this._primeCode=void 0,this._malleable=n,n||(this._primeCode=0,this.setPublicKey=void 0,this.setPrivateKey=void 0)}get verifyError(){return typeof this._primeCode!=`number`&&(this._primeCode=getCachedCheckPrime(this._prime,this._generatorBuf)),this._primeCode}generateKeys(n){if(!this._privKey){let e=t(this._primeByteLength);this._privKey=bufferToBigInt(e)}return this._pubKey=e(this._generator,this._privKey,this._prime),this.getPublicKey(n)}computeSecret(t,r,i){let a;a=typeof t==`string`?n.from(t,r||`utf8`):n.from(t);let o=bufferToBigInt(a);if(!this._privKey)throw Error(`You must generate keys before computing a secret`);if(o<=0n||o>=this._prime)throw Error(`Supplied key is too large`);let s=bigIntToBuffer(e(o,this._privKey,this._prime)),c=this._primeByteLength;if(s.length<c){let e=n.alloc(c);s.copy(e,c-s.length),s=e}return i?s.toString(i):s}getPrime(e){return formatReturnValue(this._prime,e)}getGenerator(e){return formatReturnValue(this._generator,e)}getPublicKey(e){if(!this._pubKey)throw Error(`No public key - call generateKeys() first`);return formatReturnValue(this._pubKey,e)}getPrivateKey(e){if(!this._privKey)throw Error(`No private key - call generateKeys() first`);return formatReturnValue(this._privKey,e)}setPublicKey(e,t){if(!this._malleable)throw Error(`setPublicKey is not available for predefined DH groups`);let r=typeof e==`string`?n.from(e,t||`utf8`):n.from(e);this._pubKey=bufferToBigInt(r)}setPrivateKey(e,t){if(!this._malleable)throw Error(`setPrivateKey is not available for predefined DH groups`);let r=typeof e==`string`?n.from(e,t||`utf8`):n.from(e);this._privKey=bufferToBigInt(r)}};function generatePrime(e,r){let i=bufferToBigInt(r);if(e<16)return i===2n||i===5n?n.from([140,123]):n.from([140,39]);let a=Math.ceil(e/8),o=2n,s=4n;for(;;){let n=bufferToBigInt(t(a));for(;bitLength(n)>e;)n>>=1n;if(n%o===0n&&(n+=1n),n&o||(n+=o),i===o)for(;n%24n!=11n;)n+=s;else if(i===5n)for(;n%10n!=3n;)n+=s;let r=n>>1n;if(simpleSieve(r)&&simpleSieve(n)&&fermatTest(r)&&fermatTest(n)&&millerRabinTest(r)&&millerRabinTest(n))return bigIntToBuffer(n)}}const o={binary:!0,hex:!0,base64:!0,latin1:!0,utf8:!0,"utf-8":!0,base64url:!0,ascii:!0,ucs2:!0,"ucs-2":!0,utf16le:!0,"utf-16le":!0};function createDiffieHellman(e,t,r,i){if(t!==void 0&&typeof t!=`number`&&(n.isBuffer(t)||t instanceof Uint8Array||typeof t==`string`&&!(t in o)))return createDiffieHellman(e,`binary`,t,r);let a=t||`binary`,s=i||`binary`,c=n.from([2]);if(r!==void 0&&(typeof r==`number`?(c=n.alloc(1),c[0]=r):c=n.isBuffer(r)?r:n.from(r,s)),typeof e==`number`)return new DiffieHellman(generatePrime(e,c),c,!0);let l;return l=n.isBuffer(e)?e:e instanceof Uint8Array?n.from(e):n.from(e,a),new DiffieHellman(l,c,!0)}function getDiffieHellman(e){let t=r[e];if(!t)throw Error(`Unknown group: ${e}. Supported groups: ${Object.keys(r).join(`, `)}`);return new DiffieHellman(n.from(t.prime,`hex`),n.from(t.gen,`hex`),!1)}const s=getDiffieHellman,c=getDiffieHellman;export{DiffieHellman,c as DiffieHellmanGroup,createDiffieHellman,s as createDiffieHellmanGroup,getDiffieHellman};
1
+ import"./_virtual/_rolldown/runtime.js";import{modPow as e}from"./bigint-math.js";import{randomBytes as t}from"./random.js";import{Buffer as n}from"node:buffer";const r={modp1:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff`},modp2:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff`},modp5:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff`},modp14:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff`},modp15:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff`},modp16:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff`},modp17:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff`},modp18:{gen:`02`,prime:`ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff`}};function bigIntToBuffer(e){if(e===0n)return n.from([0]);let t=e.toString(16);return t.length%2!=0&&(t=`0`+t),n.from(t,`hex`)}function bufferToBigInt(e){if(e.length===0)return 0n;let t=n.from(e).toString(`hex`);return t.length===0?0n:BigInt(`0x`+t)}function bitLength(e){return e===0n?0:e.toString(2).length}const i=[];{let e=1e3,t=new Uint8Array(1001);for(let n=2;n*n<=e;n++)if(!t[n])for(let r=n*n;r<=e;r+=n)t[r]=1;for(let n=2;n<=e;n++)t[n]||i.push(n)}function simpleSieve(e){for(let t of i){let n=BigInt(t);if(e%n===0n)return e===n}return!0}function fermatTest(t){return e(2n,t-1n,t)===1n}function millerRabinTest(t){if(t<2n)return!1;if(t===2n||t===3n)return!0;if(t%2n==0n)return!1;let n=t-1n,r=0;for(;n%2n==0n;)n/=2n,r++;for(let i of[2n,3n,5n,7n,11n,13n]){if(i>=t)continue;let a=e(i,n,t);if(a===1n||a===t-1n)continue;let o=!0;for(let n=0;n<r-1;n++)if(a=e(a,2n,t),a===t-1n){o=!1;break}if(o)return!1}return!0}function checkPrime(e,t){let n=t.toString(`hex`),r=0;if(e%2n==0n||!simpleSieve(e)||!fermatTest(e)||!millerRabinTest(e))return r+=1,n===`02`||n===`05`?r+=8:r+=4,r;switch(millerRabinTest(e>>1n)||(r+=2),n){case`02`:e%24n!=11n&&(r+=8);break;case`05`:{let t=e%10n;t!==3n&&t!==7n&&(r+=8)}break;default:r+=4}return r}const a={};function getCachedCheckPrime(e,t){let n=t.toString(`hex`)+`_`+e.toString(16);if(n in a)return a[n];let r=checkPrime(e,t);return a[n]=r,r}function formatReturnValue(e,t){let n=bigIntToBuffer(e);return t?n.toString(t):n}var DiffieHellman=class{_prime;_generator;_generatorBuf;_primeByteLength;_pubKey;_privKey;_primeCode;_malleable;constructor(e,t,n=!1){this._prime=bufferToBigInt(e),this._generatorBuf=t,this._generator=bufferToBigInt(t),this._primeByteLength=e.length,this._pubKey=void 0,this._privKey=void 0,this._primeCode=void 0,this._malleable=n,n||(this._primeCode=0,this.setPublicKey=void 0,this.setPrivateKey=void 0)}get verifyError(){return typeof this._primeCode!=`number`&&(this._primeCode=getCachedCheckPrime(this._prime,this._generatorBuf)),this._primeCode}generateKeys(n){if(!this._privKey){let e=t(this._primeByteLength);this._privKey=bufferToBigInt(e)}return this._pubKey=e(this._generator,this._privKey,this._prime),this.getPublicKey(n)}computeSecret(t,r,i){let a;a=typeof t==`string`?n.from(t,r||`utf8`):n.from(t);let o=bufferToBigInt(a);if(!this._privKey)throw Error(`You must generate keys before computing a secret`);if(o<=0n||o>=this._prime)throw Error(`Supplied key is too large`);let s=bigIntToBuffer(e(o,this._privKey,this._prime)),c=this._primeByteLength;if(s.length<c){let e=n.alloc(c);s.copy(e,c-s.length),s=e}return i?s.toString(i):s}getPrime(e){return formatReturnValue(this._prime,e)}getGenerator(e){return formatReturnValue(this._generator,e)}getPublicKey(e){if(!this._pubKey)throw Error(`No public key - call generateKeys() first`);return formatReturnValue(this._pubKey,e)}getPrivateKey(e){if(!this._privKey)throw Error(`No private key - call generateKeys() first`);return formatReturnValue(this._privKey,e)}setPublicKey(e,t){if(!this._malleable)throw Error(`setPublicKey is not available for predefined DH groups`);let r=typeof e==`string`?n.from(e,t||`utf8`):n.from(e);this._pubKey=bufferToBigInt(r)}setPrivateKey(e,t){if(!this._malleable)throw Error(`setPrivateKey is not available for predefined DH groups`);let r=typeof e==`string`?n.from(e,t||`utf8`):n.from(e);this._privKey=bufferToBigInt(r)}};function generatePrime(e,r){let i=bufferToBigInt(r);if(e<16)return i===2n||i===5n?n.from([140,123]):n.from([140,39]);let a=Math.ceil(e/8),o=2n,s=4n;for(;;){let n=bufferToBigInt(t(a));for(;bitLength(n)>e;)n>>=1n;if(n%o==0n&&(n+=1n),n&o||(n+=o),i===o)for(;n%24n!=11n;)n+=s;else if(i===5n)for(;n%10n!=3n;)n+=s;let r=n>>1n;if(simpleSieve(r)&&simpleSieve(n)&&fermatTest(r)&&fermatTest(n)&&millerRabinTest(r)&&millerRabinTest(n))return bigIntToBuffer(n)}}const o={binary:!0,hex:!0,base64:!0,latin1:!0,utf8:!0,"utf-8":!0,base64url:!0,ascii:!0,ucs2:!0,"ucs-2":!0,utf16le:!0,"utf-16le":!0};function createDiffieHellman(e,t,r,i){if(t!==void 0&&typeof t!=`number`&&(n.isBuffer(t)||t instanceof Uint8Array||typeof t==`string`&&!(t in o)))return createDiffieHellman(e,`binary`,t,r);let a=t||`binary`,s=i||`binary`,c=n.from([2]);if(r!==void 0&&(typeof r==`number`?(c=n.alloc(1),c[0]=r):c=n.isBuffer(r)?r:n.from(r,s)),typeof e==`number`)return new DiffieHellman(generatePrime(e,c),c,!0);let l;return l=n.isBuffer(e)?e:e instanceof Uint8Array?n.from(e):n.from(e,a),new DiffieHellman(l,c,!0)}function getDiffieHellman(e){let t=r[e];if(!t)throw Error(`Unknown group: ${e}. Supported groups: ${Object.keys(r).join(`, `)}`);return new DiffieHellman(n.from(t.prime,`hex`),n.from(t.gen,`hex`),!1)}const s=getDiffieHellman,c=getDiffieHellman;export{DiffieHellman,c as DiffieHellmanGroup,createDiffieHellman,s as createDiffieHellmanGroup,getDiffieHellman};
package/lib/esm/ecdh.js CHANGED
@@ -1 +1 @@
1
- import"./_virtual/_rolldown/runtime.js";import{modPow as e}from"./bigint-math.js";import{randomBytes as t}from"./random.js";import{Buffer as n}from"node:buffer";const r={secp256k1:{p:115792089237316195423570985008687907853269984665640564039457584007908834671663n,a:0n,b:7n,Gx:55066263022277343669578718895168534326250603453777594175500187360389116729240n,Gy:32670510020758816978083085130507043184471273380659243275938904335757337482424n,n:115792089237316195423570985008687907852837564279074904382605163141518161494337n,byteLength:32},prime256v1:{p:115792089210356248762697446949407573530086143415290314195533631308867097853951n,a:115792089210356248762697446949407573530086143415290314195533631308867097853951n-3n,b:41058363725152142129326129780047268409114441015993725554835256314039467401291n,Gx:48439561293906451759052585252797914202762949526041747995844080717082404635286n,Gy:36134250956749795798585127919587881956611106672985015071877198253568414405109n,n:115792089210356248762697446949407573529996955224135760342422259061068512044369n,byteLength:32},secp384r1:{p:39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319n,a:39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319n-3n,b:27580193559959705877849011840389048093056905856361568521428707301988689241309860865136260764883745107765439761230575n,Gx:26247035095799689268623156744566981891852923491109213387815615900925518854738050089022388053975719786650872476732087n,Gy:8325710961489029985546751289520108179287853048861315594709205902480503199884419224438643760392947333078086511627871n,n:39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643n,byteLength:48},secp521r1:{p:6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151n,a:6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151n-3n,b:1093849038073734274511112390766805569936207598951683748994586394495953116150735016013708737573759623248592132296706313309438452531591012912142327488478985984n,Gx:2661740802050217063228768716723360960729859168756973147706671368418802944996427808491545080627771902352094241225065558662157113545570916814161637315895999846n,Gy:3757180025770020463545507224491183603594455134769762486694567779615544477440556316691234405012945539562144444537289428522585666729196580810124344277578376784n,n:6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449n,byteLength:66}},i={secp256k1:`secp256k1`,prime256v1:`prime256v1`,secp256r1:`prime256v1`,"p-256":`prime256v1`,p256:`prime256v1`,secp384r1:`secp384r1`,"p-384":`secp384r1`,p384:`secp384r1`,secp521r1:`secp521r1`,"p-521":`secp521r1`,p521:`secp521r1`};function mod(e,t){let n=e%t;return n<0n?n+t:n}function modInverse(e,t){if(e=mod(e,t),e===0n)throw Error(`No modular inverse for zero`);let[n,r]=[e,t],[i,a]=[1n,0n];for(;r!==0n;){let e=n/r;[n,r]=[r,n-e*r],[i,a]=[a,i-e*a]}if(n!==1n)throw Error(`Modular inverse does not exist`);return mod(i,t)}function pointAdd(e,t,n){if(e===null)return t;if(t===null)return e;let{p:r}=n;if(e.x===t.x)return mod(e.y+t.y,r)===0n?null:pointDouble(e,n);let i=mod(t.x-e.x,r),a=mod(mod(t.y-e.y,r)*modInverse(i,r),r),o=mod(a*a-e.x-t.x,r);return{x:o,y:mod(a*(e.x-o)-e.y,r)}}function pointDouble(e,t){if(e===null)return null;let{a:n,p:r}=t;if(e.y===0n)return null;let i=mod(mod(3n*e.x*e.x+n,r)*modInverse(mod(2n*e.y,r),r),r),a=mod(i*i-2n*e.x,r);return{x:a,y:mod(i*(e.x-a)-e.y,r)}}function scalarMul(e,t,n){if(t===null||e===0n)return null;let{n:r}=n;if(e=mod(e,r),e===0n)return null;let i=null,a=t,o=e.toString(2);for(let e=0;e<o.length;e++)o[e]===`1`?(i=pointAdd(i,a,n),a=pointDouble(a,n)):(a=pointAdd(i,a,n),i=pointDouble(i,n));return i}function bigintToBuffer(e,t){let r=e.toString(16).padStart(t*2,`0`);return n.from(r,`hex`)}function bufferToBigint(e){let t=n.from(e).toString(`hex`);return t.length===0?0n:BigInt(`0x`+t)}function encodePublicKey(e,t,r=`uncompressed`){if(e===null)throw Error(`Cannot encode the point at infinity`);let i=bigintToBuffer(e.x,t);if(r===`compressed`){let t=e.y%2n==0n?2:3;return n.concat([n.from([t]),i])}let a=bigintToBuffer(e.y,t);if(r===`hybrid`){let t=e.y%2n==0n?6:7;return n.concat([n.from([t]),i,a])}return n.concat([n.from([4]),i,a])}function decodePublicKey(e,t){let r=n.from(e);if(r.length===0)throw Error(`Invalid public key: empty buffer`);let i=r[0],{p:a,a:o,b:s,byteLength:c}=t;if(i===4||i===6||i===7){if(r.length!==1+2*c)throw Error(`Invalid public key length: expected ${1+2*c} bytes, got ${r.length}`);let e=bufferToBigint(r.subarray(1,1+c)),t=bufferToBigint(r.subarray(1+c));if(mod(t*t,a)!==mod(e*e*e+o*e+s,a))throw Error(`Invalid public key: point is not on the curve`);return{x:e,y:t}}if(i===2||i===3){if(r.length!==1+c)throw Error(`Invalid public key length: expected ${1+c} bytes, got ${r.length}`);let e=bufferToBigint(r.subarray(1,1+c)),t=sqrtMod(mod(e*e*e+o*e+s,a),a);if(t===null)throw Error(`Invalid public key: no valid y coordinate for the given x`);let n=i===3;return{x:e,y:t%2n!=0n===n?t:mod(a-t,a)}}throw Error(`Invalid public key prefix: 0x${i.toString(16).padStart(2,`0`)}`)}function sqrtMod(t,n){if(t=mod(t,n),t===0n)return 0n;if(e(t,(n-1n)/2n,n)!==1n)return null;if(mod(n,4n)===3n)return e(t,(n+1n)/4n,n);let r=0n,i=n-1n;for(;mod(i,2n)===0n;)i/=2n,r++;let a=2n;for(;e(a,(n-1n)/2n,n)!==n-1n;)a++;let o=r,s=e(a,i,n),c=e(t,i,n),l=e(t,(i+1n)/2n,n);for(;;){if(c===0n)return 0n;if(c===1n)return l;let t=1n,r=mod(c*c,n);for(;r!==1n;)r=mod(r*r,n),t++;let i=e(s,e(2n,o-t-1n,n-1n),n);o=t,s=mod(i*i,n),c=mod(c*s,n),l=mod(l*i,n)}}function toBuffer(e,t){if(n.isBuffer(e))return e;if(e instanceof Uint8Array)return n.from(e);if(typeof e==`string`)return n.from(e,t||`utf8`);if(ArrayBuffer.isView(e))return n.from(e.buffer,e.byteOffset,e.byteLength);throw TypeError(`The "key" argument must be of type string or an instance of Buffer, TypedArray, or DataView.`)}function formatReturnValue(e,t){return t?e.toString(t):e}function resolveCurve(e){let t=i[e.toLowerCase()];if(!t)throw Error(`Unsupported curve: ${e}`);let n=r[t];if(!n)throw Error(`Unsupported curve: ${e}`);return{canonical:t,params:n}}var ECDH=class{_curve;_curveName;_privateKey=null;_publicKey=null;constructor(e){let t=resolveCurve(e);this._curve=t.params,this._curveName=t.canonical}generateKeys(e,n){let{n:r,byteLength:i}=this._curve,a;do a=bufferToBigint(t(i));while(a===0n||a>=r);this._privateKey=a;let o={x:this._curve.Gx,y:this._curve.Gy};return this._publicKey=scalarMul(a,o,this._curve),e===void 0?this.getPublicKey():this.getPublicKey(e,n)}computeSecret(e,t,n){if(this._privateKey===null)throw Error(`ECDH key not generated. Call generateKeys() or setPrivateKey() first.`);let r=decodePublicKey(toBuffer(e,t),this._curve);if(r===null)throw Error(`Invalid public key: point at infinity`);let i=scalarMul(this._privateKey,r,this._curve);if(i===null)throw Error(`Shared secret computation resulted in the point at infinity`);return formatReturnValue(bigintToBuffer(i.x,this._curve.byteLength),n)}getPublicKey(e,t){if(this._publicKey===null)throw Error(`ECDH key not generated. Call generateKeys() or setPrivateKey() first.`);return formatReturnValue(encodePublicKey(this._publicKey,this._curve.byteLength,t||`uncompressed`),e)}getPrivateKey(e){if(this._privateKey===null)throw Error(`ECDH key not generated. Call generateKeys() or setPrivateKey() first.`);return formatReturnValue(bigintToBuffer(this._privateKey,this._curve.byteLength),e)}setPublicKey(e,t){let n=toBuffer(e,t);this._publicKey=decodePublicKey(n,this._curve)}setPrivateKey(e,t){let n=bufferToBigint(toBuffer(e,t));if(n===0n||n>=this._curve.n)throw Error(`Private key is out of range [1, n-1]`);this._privateKey=n;let r={x:this._curve.Gx,y:this._curve.Gy};this._publicKey=scalarMul(n,r,this._curve)}};function createECDH(e){return new ECDH(e)}function getCurves(){return[`secp256k1`,`prime256v1`,`secp256r1`,`secp384r1`,`secp521r1`]}export{r as CURVES,i as CURVE_ALIASES,createECDH,getCurves,mod,modInverse,pointAdd,scalarMul};
1
+ import"./_virtual/_rolldown/runtime.js";import{modPow as e}from"./bigint-math.js";import{randomBytes as t}from"./random.js";import{Buffer as n}from"node:buffer";const r={secp256k1:{p:115792089237316195423570985008687907853269984665640564039457584007908834671663n,a:0n,b:7n,Gx:55066263022277343669578718895168534326250603453777594175500187360389116729240n,Gy:32670510020758816978083085130507043184471273380659243275938904335757337482424n,n:115792089237316195423570985008687907852837564279074904382605163141518161494337n,byteLength:32},prime256v1:{p:115792089210356248762697446949407573530086143415290314195533631308867097853951n,a:115792089210356248762697446949407573530086143415290314195533631308867097853951n-3n,b:41058363725152142129326129780047268409114441015993725554835256314039467401291n,Gx:48439561293906451759052585252797914202762949526041747995844080717082404635286n,Gy:36134250956749795798585127919587881956611106672985015071877198253568414405109n,n:115792089210356248762697446949407573529996955224135760342422259061068512044369n,byteLength:32},secp384r1:{p:39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319n,a:39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319n-3n,b:27580193559959705877849011840389048093056905856361568521428707301988689241309860865136260764883745107765439761230575n,Gx:26247035095799689268623156744566981891852923491109213387815615900925518854738050089022388053975719786650872476732087n,Gy:8325710961489029985546751289520108179287853048861315594709205902480503199884419224438643760392947333078086511627871n,n:39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643n,byteLength:48},secp521r1:{p:6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151n,a:6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151n-3n,b:1093849038073734274511112390766805569936207598951683748994586394495953116150735016013708737573759623248592132296706313309438452531591012912142327488478985984n,Gx:2661740802050217063228768716723360960729859168756973147706671368418802944996427808491545080627771902352094241225065558662157113545570916814161637315895999846n,Gy:3757180025770020463545507224491183603594455134769762486694567779615544477440556316691234405012945539562144444537289428522585666729196580810124344277578376784n,n:6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449n,byteLength:66}},i={secp256k1:`secp256k1`,prime256v1:`prime256v1`,secp256r1:`prime256v1`,"p-256":`prime256v1`,p256:`prime256v1`,secp384r1:`secp384r1`,"p-384":`secp384r1`,p384:`secp384r1`,secp521r1:`secp521r1`,"p-521":`secp521r1`,p521:`secp521r1`};function mod(e,t){let n=e%t;return n<0n?n+t:n}function modInverse(e,t){if(e=mod(e,t),e===0n)throw Error(`No modular inverse for zero`);let[n,r]=[e,t],[i,a]=[1n,0n];for(;r!==0n;){let e=n/r;[n,r]=[r,n-e*r],[i,a]=[a,i-e*a]}if(n!==1n)throw Error(`Modular inverse does not exist`);return mod(i,t)}function pointAdd(e,t,n){if(e===null)return t;if(t===null)return e;let{p:r}=n;if(e.x===t.x)return mod(e.y+t.y,r)===0n?null:pointDouble(e,n);let i=mod(t.x-e.x,r),a=mod(mod(t.y-e.y,r)*modInverse(i,r),r),o=mod(a*a-e.x-t.x,r);return{x:o,y:mod(a*(e.x-o)-e.y,r)}}function pointDouble(e,t){if(e===null)return null;let{a:n,p:r}=t;if(e.y===0n)return null;let i=mod(mod(3n*e.x*e.x+n,r)*modInverse(mod(2n*e.y,r),r),r),a=mod(i*i-2n*e.x,r);return{x:a,y:mod(i*(e.x-a)-e.y,r)}}function scalarMul(e,t,n){if(t===null||e===0n)return null;let{n:r}=n;if(e=mod(e,r),e===0n)return null;let i=null,a=t,o=e.toString(2);for(let e=0;e<o.length;e++)o[e]===`1`?(i=pointAdd(i,a,n),a=pointDouble(a,n)):(a=pointAdd(i,a,n),i=pointDouble(i,n));return i}function bigintToBuffer(e,t){let r=e.toString(16).padStart(t*2,`0`);return n.from(r,`hex`)}function bufferToBigint(e){let t=n.from(e).toString(`hex`);return t.length===0?0n:BigInt(`0x`+t)}function encodePublicKey(e,t,r=`uncompressed`){if(e===null)throw Error(`Cannot encode the point at infinity`);let i=bigintToBuffer(e.x,t);if(r===`compressed`){let t=e.y%2n==0n?2:3;return n.concat([n.from([t]),i])}let a=bigintToBuffer(e.y,t);if(r===`hybrid`){let t=e.y%2n==0n?6:7;return n.concat([n.from([t]),i,a])}return n.concat([n.from([4]),i,a])}function decodePublicKey(e,t){let r=n.from(e);if(r.length===0)throw Error(`Invalid public key: empty buffer`);let i=r[0],{p:a,a:o,b:s,byteLength:c}=t;if(i===4||i===6||i===7){if(r.length!==1+2*c)throw Error(`Invalid public key length: expected ${1+2*c} bytes, got ${r.length}`);let e=bufferToBigint(r.subarray(1,1+c)),t=bufferToBigint(r.subarray(1+c));if(mod(t*t,a)!==mod(e*e*e+o*e+s,a))throw Error(`Invalid public key: point is not on the curve`);return{x:e,y:t}}if(i===2||i===3){if(r.length!==1+c)throw Error(`Invalid public key length: expected ${1+c} bytes, got ${r.length}`);let e=bufferToBigint(r.subarray(1,1+c)),t=sqrtMod(mod(e*e*e+o*e+s,a),a);if(t===null)throw Error(`Invalid public key: no valid y coordinate for the given x`);let n=i===3;return{x:e,y:t%2n!=0n===n?t:mod(a-t,a)}}throw Error(`Invalid public key prefix: 0x${i.toString(16).padStart(2,`0`)}`)}function sqrtMod(t,n){if(t=mod(t,n),t===0n)return 0n;if(e(t,(n-1n)/2n,n)!==1n)return null;if(mod(n,4n)===3n)return e(t,(n+1n)/4n,n);let r=0n,i=n-1n;for(;mod(i,2n)===0n;)i/=2n,r++;let a=2n;for(;e(a,(n-1n)/2n,n)!==n-1n;)a++;let o=r,s=e(a,i,n),c=e(t,i,n),l=e(t,(i+1n)/2n,n);for(;;){if(c===0n)return 0n;if(c===1n)return l;let t=1n,r=mod(c*c,n);for(;r!==1n;)r=mod(r*r,n),t++;let i=e(s,e(2n,o-t-1n,n-1n),n);o=t,s=mod(i*i,n),c=mod(c*s,n),l=mod(l*i,n)}}function toBuffer(e,t){if(n.isBuffer(e))return e;if(e instanceof Uint8Array)return n.from(e);if(typeof e==`string`)return n.from(e,t||`utf8`);if(ArrayBuffer.isView(e))return n.from(e.buffer,e.byteOffset,e.byteLength);throw TypeError(`The "key" argument must be of type string or an instance of Buffer, TypedArray, or DataView.`)}function formatReturnValue(e,t){return t?e.toString(t):e}function resolveCurve(e){let t=e.toLowerCase(),n=i[t];if(!n)throw Error(`Unsupported curve: ${e}`);let a=r[n];if(!a)throw Error(`Unsupported curve: ${e}`);return{canonical:n,params:a}}var ECDH=class{_curve;_curveName;_privateKey=null;_publicKey=null;constructor(e){let t=resolveCurve(e);this._curve=t.params,this._curveName=t.canonical}generateKeys(e,n){let{n:r,byteLength:i}=this._curve,a;do a=bufferToBigint(t(i));while(a===0n||a>=r);this._privateKey=a;let o={x:this._curve.Gx,y:this._curve.Gy};return this._publicKey=scalarMul(a,o,this._curve),e===void 0?this.getPublicKey():this.getPublicKey(e,n)}computeSecret(e,t,n){if(this._privateKey===null)throw Error(`ECDH key not generated. Call generateKeys() or setPrivateKey() first.`);let r=decodePublicKey(toBuffer(e,t),this._curve);if(r===null)throw Error(`Invalid public key: point at infinity`);let i=scalarMul(this._privateKey,r,this._curve);if(i===null)throw Error(`Shared secret computation resulted in the point at infinity`);return formatReturnValue(bigintToBuffer(i.x,this._curve.byteLength),n)}getPublicKey(e,t){if(this._publicKey===null)throw Error(`ECDH key not generated. Call generateKeys() or setPrivateKey() first.`);return formatReturnValue(encodePublicKey(this._publicKey,this._curve.byteLength,t||`uncompressed`),e)}getPrivateKey(e){if(this._privateKey===null)throw Error(`ECDH key not generated. Call generateKeys() or setPrivateKey() first.`);return formatReturnValue(bigintToBuffer(this._privateKey,this._curve.byteLength),e)}setPublicKey(e,t){let n=toBuffer(e,t);this._publicKey=decodePublicKey(n,this._curve)}setPrivateKey(e,t){let n=bufferToBigint(toBuffer(e,t));if(n===0n||n>=this._curve.n)throw Error(`Private key is out of range [1, n-1]`);this._privateKey=n;let r={x:this._curve.Gx,y:this._curve.Gy};this._publicKey=scalarMul(n,r,this._curve)}};function createECDH(e){return new ECDH(e)}function getCurves(){return[`secp256k1`,`prime256v1`,`secp256r1`,`secp384r1`,`secp521r1`]}export{r as CURVES,i as CURVE_ALIASES,createECDH,getCurves,mod,modInverse,pointAdd,scalarMul};
package/lib/esm/hash.js CHANGED
@@ -1 +1 @@
1
- import"./_virtual/_rolldown/runtime.js";import{normalizeAlgorithm as e}from"./crypto-utils.js";import{Buffer as t}from"node:buffer";import n from"@girs/glib-2.0";import{Transform as r}from"node:stream";import{normalizeEncoding as i}from"@gjsify/buffer";const a={md5:n.ChecksumType.MD5,sha1:n.ChecksumType.SHA1,sha256:n.ChecksumType.SHA256,sha384:n.ChecksumType.SHA384,sha512:n.ChecksumType.SHA512};function getChecksumType(t){let n=a[e(t)];if(n===void 0){let e=Error(`Unknown message digest: ${t}`);throw e.code=`ERR_CRYPTO_HASH_UNKNOWN`,e}return n}var o=class Hash extends r{_algorithm;_checksum;_finalized=!1;constructor(t){super();let r=e(t),i=getChecksumType(r);this._algorithm=r,this._checksum=new n.Checksum(i)}update(e,n){if(this._finalized)throw Error(`Digest already called`);let r;if(typeof e==`string`){let a=i(n);r=t.from(e,a)}else r=e instanceof Uint8Array?e:t.from(e);return this._checksum.update(r),this}digest(e){if(this._finalized)throw Error(`Digest already called`);this._finalized=!0;let n=this._checksum.get_string(),r=t.from(n,`hex`);return e?r.toString(e):r}copy(){if(this._finalized)throw Error(`Digest already called`);let e=Object.create(Hash.prototype);return r.call(e),e._algorithm=this._algorithm,e._finalized=!1,e._checksum=this._checksum.copy(),e}_transform(e,t,n){try{this.update(e,t),n()}catch(e){n(e)}}_flush(e){try{this.push(this.digest()),e()}catch(t){e(t)}}};function getHashes(){return[`md5`,`sha1`,`sha256`,`sha384`,`sha512`]}function hash(e,t,n){return new o(e).update(t).digest(n)}export{o as Hash,getHashes,hash};
1
+ import"./_virtual/_rolldown/runtime.js";import{normalizeAlgorithm as e}from"./crypto-utils.js";import{Buffer as t}from"node:buffer";import n from"@girs/glib-2.0";import{Transform as r}from"node:stream";import{normalizeEncoding as i}from"@gjsify/buffer";const a={md5:n.ChecksumType.MD5,sha1:n.ChecksumType.SHA1,sha256:n.ChecksumType.SHA256,sha384:n.ChecksumType.SHA384,sha512:n.ChecksumType.SHA512};function getChecksumType(t){let n=e(t),r=a[n];if(r===void 0){let e=Error(`Unknown message digest: ${t}`);throw e.code=`ERR_CRYPTO_HASH_UNKNOWN`,e}return r}var o=class Hash extends r{_algorithm;_checksum;_finalized=!1;constructor(t){super();let r=e(t),i=getChecksumType(r);this._algorithm=r,this._checksum=new n.Checksum(i)}update(e,n){if(this._finalized)throw Error(`Digest already called`);let r;if(typeof e==`string`){let a=i(n);r=t.from(e,a)}else r=e instanceof Uint8Array?e:t.from(e);return this._checksum.update(r),this}digest(e){if(this._finalized)throw Error(`Digest already called`);this._finalized=!0;let n=this._checksum.get_string(),r=t.from(n,`hex`);return e?r.toString(e):r}copy(){if(this._finalized)throw Error(`Digest already called`);let e=Object.create(Hash.prototype);return r.call(e),e._algorithm=this._algorithm,e._finalized=!1,e._checksum=this._checksum.copy(),e}_transform(e,t,n){try{this.update(e,t),n()}catch(e){n(e)}}_flush(e){try{this.push(this.digest()),e()}catch(t){e(t)}}};function getHashes(){return[`md5`,`sha1`,`sha256`,`sha384`,`sha512`]}function hash(e,t,n){return new o(e).update(t).digest(n)}export{o as Hash,getHashes,hash};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gjsify/crypto",
3
- "version": "0.22.0",
3
+ "version": "0.24.1",
4
4
  "description": "Node.js crypto module for Gjs",
5
5
  "type": "module",
6
6
  "module": "lib/esm/index.js",
@@ -74,17 +74,17 @@
74
74
  "crypto"
75
75
  ],
76
76
  "devDependencies": {
77
- "@gjsify/cli": "^0.22.0",
78
- "@gjsify/unit": "^0.22.0",
77
+ "@gjsify/cli": "^0.24.1",
78
+ "@gjsify/unit": "^0.24.1",
79
79
  "@types/diffie-hellman": "^5.0.3",
80
80
  "@types/node": "^25.9.2",
81
81
  "typescript": "^6.0.3"
82
82
  },
83
83
  "dependencies": {
84
84
  "@girs/glib-2.0": "^4.1.0",
85
- "@gjsify/buffer": "^0.22.0",
86
- "@gjsify/stream": "^0.22.0",
87
- "@gjsify/utils": "^0.22.0",
85
+ "@gjsify/buffer": "^0.24.1",
86
+ "@gjsify/stream": "^0.24.1",
87
+ "@gjsify/utils": "^0.24.1",
88
88
  "@noble/hashes": "^2.2.0"
89
89
  },
90
90
  "gjsify": {