@gjsify/crypto 0.4.36 → 0.4.37

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.
@@ -0,0 +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 +1 @@
1
- import"../_virtual/_rolldown/runtime.js";function notSupported(e,t){let n=`${e} is not supported in browser builds.${t?` `+t:``}`,r=Error(n);throw r.code=`ENOTSUP`,r}function createDiffieHellman(...e){return notSupported(`createDiffieHellman`,`WebCrypto does not expose classic DH. Use crypto.subtle.deriveBits({name:"ECDH",…}) instead.`)}function getDiffieHellman(e){return notSupported(`getDiffieHellman`)}var DiffieHellman=class{constructor(){notSupported(`DiffieHellman`)}},DiffieHellmanGroup=class{constructor(){notSupported(`DiffieHellmanGroup`)}};function createDiffieHellmanGroup(e){return notSupported(`createDiffieHellmanGroup`)}function createECDH(e){return notSupported(`createECDH`,`Use crypto.subtle.generateKey({name:"ECDH",namedCurve:…}) + subtle.deriveBits instead.`)}function getCurves(){return[`prime256v1`,`secp256r1`,`secp384r1`,`secp521r1`]}function ecdsaSign(){return notSupported(`ecdsaSign`,`Use createSign("sha256").update(…).signAsync(cryptoKey).`)}function ecdsaVerify(){return notSupported(`ecdsaVerify`,`Use createVerify("sha256").update(…).verifyAsync(cryptoKey, signature).`)}function publicEncrypt(e,t){return notSupported(`publicEncrypt`,`Use crypto.subtle.encrypt({name:"RSA-OAEP",…}, cryptoKey, plaintext).`)}function privateDecrypt(e,t){return notSupported(`privateDecrypt`,`Use crypto.subtle.decrypt({name:"RSA-OAEP",…}, cryptoKey, ciphertext).`)}function privateEncrypt(e,t){return notSupported(`privateEncrypt`,`No WebCrypto equivalent — used by legacy JWT libraries only.`)}function publicDecrypt(e,t){return notSupported(`publicDecrypt`,`No WebCrypto equivalent — used by legacy JWT libraries only.`)}function rsaPssSign(){return notSupported(`rsaPssSign`,`Use createSign(digest).signAsync(rsaPssCryptoKey).`)}function rsaPssVerify(){return notSupported(`rsaPssVerify`,`Use createVerify(digest).verifyAsync(rsaPssCryptoKey, signature).`)}function rsaOaepEncrypt(){return notSupported(`rsaOaepEncrypt`,`Use crypto.subtle.encrypt({name:"RSA-OAEP",…}, cryptoKey, plaintext).`)}function rsaOaepDecrypt(){return notSupported(`rsaOaepDecrypt`,`Use crypto.subtle.decrypt({name:"RSA-OAEP",…}, cryptoKey, ciphertext).`)}function mgf1(){return notSupported(`mgf1`,`WebCrypto does not expose MGF1 directly — it is internal to RSA-OAEP/PSS.`)}var KeyObject=class{constructor(){notSupported(`KeyObject`,`Use crypto.subtle.importKey / exportKey to obtain a CryptoKey instead.`)}static from(){return notSupported(`KeyObject.from`)}};function createSecretKey(e){return notSupported(`createSecretKey`,`Use crypto.subtle.importKey("raw", key, …).`)}function createPublicKey(e){return notSupported(`createPublicKey`,`Use crypto.subtle.importKey("spki" | "jwk", …).`)}function createPrivateKey(e){return notSupported(`createPrivateKey`,`Use crypto.subtle.importKey("pkcs8" | "jwk", …).`)}function generateKeyPair(...e){return notSupported(`generateKeyPair`,`Use crypto.subtle.generateKey({name:…, …}, true, [usages]).`)}function generateKeyPairSync(...e){return notSupported(`generateKeyPairSync`,`No sync key-pair gen in WebCrypto. Use crypto.subtle.generateKey (async).`)}function generateKey(...e){return notSupported(`generateKey`,`Use crypto.subtle.generateKey for symmetric keys.`)}var X509Certificate=class{constructor(){notSupported(`X509Certificate`,`WebCrypto does not expose X.509 parsing. Use a third-party library or the platform certificate APIs.`)}};export{DiffieHellman,DiffieHellmanGroup,KeyObject,X509Certificate,createDiffieHellman,createDiffieHellmanGroup,createECDH,createPrivateKey,createPublicKey,createSecretKey,ecdsaSign,ecdsaVerify,generateKey,generateKeyPair,generateKeyPairSync,getCurves,getDiffieHellman,mgf1,privateDecrypt,privateEncrypt,publicDecrypt,publicEncrypt,rsaOaepDecrypt,rsaOaepEncrypt,rsaPssSign,rsaPssVerify};
1
+ import"../_virtual/_rolldown/runtime.js";function notSupported(e,t){let n=`${e} is not supported in browser builds.${t?` `+t:``}`,r=Error(n);throw r.code=`ENOTSUP`,r}function createDiffieHellman(...e){return notSupported(`createDiffieHellman`,`WebCrypto does not expose classic DH. Use crypto.subtle.deriveBits({name:"ECDH",…}) instead.`)}function getDiffieHellman(e){return notSupported(`getDiffieHellman`)}var DiffieHellman=class{constructor(){notSupported(`DiffieHellman`)}},DiffieHellmanGroup=class{constructor(){notSupported(`DiffieHellmanGroup`)}};function createDiffieHellmanGroup(e){return notSupported(`createDiffieHellmanGroup`)}function ecdsaSign(){return notSupported(`ecdsaSign`,`Use createSign("sha256").update(…).signAsync(cryptoKey).`)}function ecdsaVerify(){return notSupported(`ecdsaVerify`,`Use createVerify("sha256").update(…).verifyAsync(cryptoKey, signature).`)}function publicEncrypt(e,t){return notSupported(`publicEncrypt`,`Use crypto.subtle.encrypt({name:"RSA-OAEP",…}, cryptoKey, plaintext).`)}function privateDecrypt(e,t){return notSupported(`privateDecrypt`,`Use crypto.subtle.decrypt({name:"RSA-OAEP",…}, cryptoKey, ciphertext).`)}function privateEncrypt(e,t){return notSupported(`privateEncrypt`,`No WebCrypto equivalent — used by legacy JWT libraries only.`)}function publicDecrypt(e,t){return notSupported(`publicDecrypt`,`No WebCrypto equivalent — used by legacy JWT libraries only.`)}function rsaPssSign(){return notSupported(`rsaPssSign`,`Use createSign(digest).signAsync(rsaPssCryptoKey).`)}function rsaPssVerify(){return notSupported(`rsaPssVerify`,`Use createVerify(digest).verifyAsync(rsaPssCryptoKey, signature).`)}function rsaOaepEncrypt(){return notSupported(`rsaOaepEncrypt`,`Use crypto.subtle.encrypt({name:"RSA-OAEP",…}, cryptoKey, plaintext).`)}function rsaOaepDecrypt(){return notSupported(`rsaOaepDecrypt`,`Use crypto.subtle.decrypt({name:"RSA-OAEP",…}, cryptoKey, ciphertext).`)}function mgf1(){return notSupported(`mgf1`,`WebCrypto does not expose MGF1 directly — it is internal to RSA-OAEP/PSS.`)}var KeyObject=class{constructor(){notSupported(`KeyObject`,`Use crypto.subtle.importKey / exportKey to obtain a CryptoKey instead.`)}static from(){return notSupported(`KeyObject.from`)}};function createSecretKey(e){return notSupported(`createSecretKey`,`Use crypto.subtle.importKey("raw", key, …).`)}function createPublicKey(e){return notSupported(`createPublicKey`,`Use crypto.subtle.importKey("spki" | "jwk", …).`)}function createPrivateKey(e){return notSupported(`createPrivateKey`,`Use crypto.subtle.importKey("pkcs8" | "jwk", …).`)}function generateKeyPair(...e){return notSupported(`generateKeyPair`,`Use crypto.subtle.generateKey({name:…, …}, true, [usages]).`)}function generateKeyPairSync(...e){return notSupported(`generateKeyPairSync`,`No sync key-pair gen in WebCrypto. Use crypto.subtle.generateKey (async).`)}function generateKey(...e){return notSupported(`generateKey`,`Use crypto.subtle.generateKey for symmetric keys.`)}var X509Certificate=class{constructor(){notSupported(`X509Certificate`,`WebCrypto does not expose X.509 parsing. Use a third-party library or the platform certificate APIs.`)}};export{DiffieHellman,DiffieHellmanGroup,KeyObject,X509Certificate,createDiffieHellman,createDiffieHellmanGroup,createPrivateKey,createPublicKey,createSecretKey,ecdsaSign,ecdsaVerify,generateKey,generateKeyPair,generateKeyPairSync,getDiffieHellman,mgf1,privateDecrypt,privateEncrypt,publicDecrypt,publicEncrypt,rsaOaepDecrypt,rsaOaepEncrypt,rsaPssSign,rsaPssVerify};
@@ -1 +1 @@
1
- import{constants as e}from"./constants.js";import{randomBytes as t,randomFill as n,randomFillSync as r,randomInt as i,randomUUID as a}from"./browser/random.js";import{Hash as o,createHash as s,getHashes as c,hash as l}from"./browser/hash.js";import{Hmac as u,createHmac as d}from"./browser/hmac.js";import{hkdf as f,hkdfSync as p,pbkdf2 as m,pbkdf2Sync as h,scrypt as g,scryptSync as _}from"./browser/kdf.js";import{Cipher as v,Decipher as y,createCipher as b,createCipheriv as x,createDecipher as S,createDecipheriv as C,getCiphers as w}from"./browser/cipher.js";import{Sign as T,Verify as E,createSign as D,createVerify as O,sign as k,verify as A}from"./browser/sign.js";import{DiffieHellman as j,DiffieHellmanGroup as M,KeyObject as N,X509Certificate as P,createDiffieHellman as F,createDiffieHellmanGroup as I,createECDH as L,createPrivateKey as R,createPublicKey as z,createSecretKey as B,ecdsaSign as V,ecdsaVerify as H,generateKey as U,generateKeyPair as W,generateKeyPairSync as G,getCurves as K,getDiffieHellman as q,mgf1 as J,privateDecrypt as Y,privateEncrypt as X,publicDecrypt as Z,publicEncrypt as Q,rsaOaepDecrypt as $,rsaOaepEncrypt as ee,rsaPssSign as te,rsaPssVerify as ne}from"./browser/stubs.js";import{timingSafeEqual as re}from"./timing-safe-equal.js";const ie=globalThis.crypto,ae=globalThis.crypto.subtle;var oe={webcrypto:ie,subtle:ae,constants:e,randomBytes:t,randomFill:n,randomFillSync:r,randomUUID:a,randomInt:i,Hash:o,createHash:s,getHashes:c,hash:l,Hmac:u,createHmac:d,pbkdf2:m,pbkdf2Sync:h,hkdf:f,hkdfSync:p,scrypt:g,scryptSync:_,Cipher:v,Decipher:y,createCipher:b,createCipheriv:x,createDecipher:S,createDecipheriv:C,getCiphers:w,Sign:T,Verify:E,createSign:D,createVerify:O,sign:k,verify:A,createDiffieHellman:F,getDiffieHellman:q,DiffieHellman:j,DiffieHellmanGroup:M,createDiffieHellmanGroup:I,createECDH:L,getCurves:K,ecdsaSign:V,ecdsaVerify:H,publicEncrypt:Q,privateDecrypt:Y,privateEncrypt:X,publicDecrypt:Z,rsaPssSign:te,rsaPssVerify:ne,rsaOaepEncrypt:ee,rsaOaepDecrypt:$,mgf1:J,KeyObject:N,createSecretKey:B,createPublicKey:z,createPrivateKey:R,generateKeyPair:W,generateKeyPairSync:G,generateKey:U,X509Certificate:P,timingSafeEqual:re};export{v as Cipher,y as Decipher,j as DiffieHellman,M as DiffieHellmanGroup,o as Hash,u as Hmac,N as KeyObject,T as Sign,E as Verify,P as X509Certificate,e as constants,b as createCipher,x as createCipheriv,S as createDecipher,C as createDecipheriv,F as createDiffieHellman,I as createDiffieHellmanGroup,L as createECDH,s as createHash,d as createHmac,R as createPrivateKey,z as createPublicKey,B as createSecretKey,D as createSign,O as createVerify,oe as default,V as ecdsaSign,H as ecdsaVerify,U as generateKey,W as generateKeyPair,G as generateKeyPairSync,w as getCiphers,K as getCurves,q as getDiffieHellman,c as getHashes,l as hash,f as hkdf,p as hkdfSync,J as mgf1,m as pbkdf2,h as pbkdf2Sync,Y as privateDecrypt,X as privateEncrypt,Z as publicDecrypt,Q as publicEncrypt,t as randomBytes,n as randomFill,r as randomFillSync,i as randomInt,a as randomUUID,$ as rsaOaepDecrypt,ee as rsaOaepEncrypt,te as rsaPssSign,ne as rsaPssVerify,g as scrypt,_ as scryptSync,k as sign,ae as subtle,re as timingSafeEqual,A as verify,ie as webcrypto};
1
+ import{constants as e}from"./constants.js";import{randomBytes as t,randomFill as n,randomFillSync as r,randomInt as i,randomUUID as a}from"./browser/random.js";import{Hash as o,createHash as s,getHashes as c,hash as l}from"./browser/hash.js";import{Hmac as u,createHmac as d}from"./browser/hmac.js";import{hkdf as f,hkdfSync as p,pbkdf2 as m,pbkdf2Sync as h,scrypt as g,scryptSync as _}from"./browser/kdf.js";import{Cipher as v,Decipher as y,createCipher as b,createCipheriv as x,createDecipher as S,createDecipheriv as C,getCiphers as w}from"./browser/cipher.js";import{Sign as T,Verify as E,createSign as D,createVerify as O,sign as k,verify as A}from"./browser/sign.js";import{createECDH as j,getCurves as M}from"./browser/ecdh.js";import{DiffieHellman as N,DiffieHellmanGroup as P,KeyObject as F,X509Certificate as I,createDiffieHellman as L,createDiffieHellmanGroup as R,createPrivateKey as z,createPublicKey as B,createSecretKey as V,ecdsaSign as H,ecdsaVerify as U,generateKey as W,generateKeyPair as G,generateKeyPairSync as K,getDiffieHellman as q,mgf1 as J,privateDecrypt as Y,privateEncrypt as X,publicDecrypt as Z,publicEncrypt as Q,rsaOaepDecrypt as $,rsaOaepEncrypt as ee,rsaPssSign as te,rsaPssVerify as ne}from"./browser/stubs.js";import{timingSafeEqual as re}from"./timing-safe-equal.js";const ie=globalThis.crypto,ae=globalThis.crypto.subtle;var oe={webcrypto:ie,subtle:ae,constants:e,randomBytes:t,randomFill:n,randomFillSync:r,randomUUID:a,randomInt:i,Hash:o,createHash:s,getHashes:c,hash:l,Hmac:u,createHmac:d,pbkdf2:m,pbkdf2Sync:h,hkdf:f,hkdfSync:p,scrypt:g,scryptSync:_,Cipher:v,Decipher:y,createCipher:b,createCipheriv:x,createDecipher:S,createDecipheriv:C,getCiphers:w,Sign:T,Verify:E,createSign:D,createVerify:O,sign:k,verify:A,createDiffieHellman:L,getDiffieHellman:q,DiffieHellman:N,DiffieHellmanGroup:P,createDiffieHellmanGroup:R,createECDH:j,getCurves:M,ecdsaSign:H,ecdsaVerify:U,publicEncrypt:Q,privateDecrypt:Y,privateEncrypt:X,publicDecrypt:Z,rsaPssSign:te,rsaPssVerify:ne,rsaOaepEncrypt:ee,rsaOaepDecrypt:$,mgf1:J,KeyObject:F,createSecretKey:V,createPublicKey:B,createPrivateKey:z,generateKeyPair:G,generateKeyPairSync:K,generateKey:W,X509Certificate:I,timingSafeEqual:re};export{v as Cipher,y as Decipher,N as DiffieHellman,P as DiffieHellmanGroup,o as Hash,u as Hmac,F as KeyObject,T as Sign,E as Verify,I as X509Certificate,e as constants,b as createCipher,x as createCipheriv,S as createDecipher,C as createDecipheriv,L as createDiffieHellman,R as createDiffieHellmanGroup,j as createECDH,s as createHash,d as createHmac,z as createPrivateKey,B as createPublicKey,V as createSecretKey,D as createSign,O as createVerify,oe as default,H as ecdsaSign,U as ecdsaVerify,W as generateKey,G as generateKeyPair,K as generateKeyPairSync,w as getCiphers,M as getCurves,q as getDiffieHellman,c as getHashes,l as hash,f as hkdf,p as hkdfSync,J as mgf1,m as pbkdf2,h as pbkdf2Sync,Y as privateDecrypt,X as privateEncrypt,Z as publicDecrypt,Q as publicEncrypt,t as randomBytes,n as randomFill,r as randomFillSync,i as randomInt,a as randomUUID,$ as rsaOaepDecrypt,ee as rsaOaepEncrypt,te as rsaPssSign,ne as rsaPssVerify,g as scrypt,_ as scryptSync,k as sign,ae as subtle,re as timingSafeEqual,A as verify,ie as webcrypto};
@@ -0,0 +1,31 @@
1
+ import { Buffer } from 'node:buffer';
2
+ declare class ECDH {
3
+ private _curve;
4
+ private _curveName;
5
+ private _privateKey;
6
+ private _publicKey;
7
+ constructor(curveName: string);
8
+ /** Generate a random private key + derive the public key. Returns the public key. */
9
+ generateKeys(): Buffer;
10
+ generateKeys(encoding: BufferEncoding, format?: 'uncompressed' | 'compressed' | 'hybrid'): string;
11
+ /** Compute the shared secret using the other party's public key. */
12
+ computeSecret(otherPublicKey: string | Buffer | Uint8Array | ArrayBufferView, inputEncoding?: BufferEncoding, outputEncoding?: BufferEncoding): Buffer | string;
13
+ /** Return the public key. Optionally encode as a string. */
14
+ getPublicKey(): Buffer;
15
+ getPublicKey(encoding: BufferEncoding, format?: 'uncompressed' | 'compressed' | 'hybrid'): string;
16
+ /** Return the private key. Optionally encode as a string. */
17
+ getPrivateKey(): Buffer;
18
+ getPrivateKey(encoding: BufferEncoding): string;
19
+ /** Set the public key. */
20
+ setPublicKey(key: string | Buffer | Uint8Array | ArrayBufferView, encoding?: BufferEncoding): void;
21
+ /** Set the private key and derive the corresponding public key. */
22
+ setPrivateKey(key: string | Buffer | Uint8Array | ArrayBufferView, encoding?: BufferEncoding): void;
23
+ }
24
+ /**
25
+ * Create an ECDH key exchange object for the specified curve.
26
+ * Supported curves: secp256k1, prime256v1 (P-256), secp384r1 (P-384), secp521r1 (P-521).
27
+ */
28
+ export declare function createECDH(curveName: string): ECDH;
29
+ /** Return a list of supported elliptic curve names. */
30
+ export declare function getCurves(): string[];
31
+ export { ECDH };
@@ -8,8 +8,6 @@ export declare class DiffieHellmanGroup {
8
8
  constructor();
9
9
  }
10
10
  export declare function createDiffieHellmanGroup(_groupName: string): never;
11
- export declare function createECDH(_curveName: string): never;
12
- export declare function getCurves(): string[];
13
11
  export declare function ecdsaSign(): never;
14
12
  export declare function ecdsaVerify(): never;
15
13
  export declare function publicEncrypt(_keyLike: unknown, _data: Buffer | Uint8Array): never;
@@ -8,7 +8,8 @@ export { Hmac, createHmac } from './browser/hmac.js';
8
8
  export { pbkdf2, pbkdf2Sync, hkdf, hkdfSync, scrypt, scryptSync } from './browser/kdf.js';
9
9
  export { Cipher, Decipher, createCipher, createCipheriv, createDecipher, createDecipheriv, getCiphers, } from './browser/cipher.js';
10
10
  export { Sign, Verify, createSign, createVerify, sign, verify } from './browser/sign.js';
11
- export { createDiffieHellman, getDiffieHellman, DiffieHellman, DiffieHellmanGroup, createDiffieHellmanGroup, createECDH, getCurves, ecdsaSign, ecdsaVerify, publicEncrypt, privateDecrypt, privateEncrypt, publicDecrypt, rsaPssSign, rsaPssVerify, rsaOaepEncrypt, rsaOaepDecrypt, mgf1, KeyObject, createSecretKey, createPublicKey, createPrivateKey, generateKeyPair, generateKeyPairSync, generateKey, X509Certificate, } from './browser/stubs.js';
11
+ export { createECDH, getCurves } from './browser/ecdh.js';
12
+ export { createDiffieHellman, getDiffieHellman, DiffieHellman, DiffieHellmanGroup, createDiffieHellmanGroup, ecdsaSign, ecdsaVerify, publicEncrypt, privateDecrypt, privateEncrypt, publicDecrypt, rsaPssSign, rsaPssVerify, rsaOaepEncrypt, rsaOaepDecrypt, mgf1, KeyObject, createSecretKey, createPublicKey, createPrivateKey, generateKeyPair, generateKeyPairSync, generateKey, X509Certificate, } from './browser/stubs.js';
12
13
  export { timingSafeEqual } from './timing-safe-equal.js';
13
14
  import { randomBytes, randomFill, randomFillSync, randomUUID, randomInt } from './browser/random.js';
14
15
  import { Hash, createHash, getHashes, hash } from './browser/hash.js';
@@ -16,7 +17,8 @@ import { Hmac, createHmac } from './browser/hmac.js';
16
17
  import { pbkdf2, pbkdf2Sync, hkdf, hkdfSync, scrypt, scryptSync } from './browser/kdf.js';
17
18
  import { Cipher, Decipher, createCipher, createCipheriv, createDecipher, createDecipheriv, getCiphers } from './browser/cipher.js';
18
19
  import { Sign, Verify, createSign, createVerify, sign, verify } from './browser/sign.js';
19
- import { createDiffieHellman, getDiffieHellman, DiffieHellman, DiffieHellmanGroup, createDiffieHellmanGroup, createECDH, getCurves, ecdsaSign, ecdsaVerify, publicEncrypt, privateDecrypt, privateEncrypt, publicDecrypt, rsaPssSign, rsaPssVerify, rsaOaepEncrypt, rsaOaepDecrypt, mgf1, KeyObject, createSecretKey, createPublicKey, createPrivateKey, generateKeyPair, generateKeyPairSync, generateKey, X509Certificate } from './browser/stubs.js';
20
+ import { createECDH, getCurves } from './browser/ecdh.js';
21
+ import { createDiffieHellman, getDiffieHellman, DiffieHellman, DiffieHellmanGroup, createDiffieHellmanGroup, ecdsaSign, ecdsaVerify, publicEncrypt, privateDecrypt, privateEncrypt, publicDecrypt, rsaPssSign, rsaPssVerify, rsaOaepEncrypt, rsaOaepDecrypt, mgf1, KeyObject, createSecretKey, createPublicKey, createPrivateKey, generateKeyPair, generateKeyPairSync, generateKey, X509Certificate } from './browser/stubs.js';
20
22
  import { timingSafeEqual } from './timing-safe-equal.js';
21
23
  export type { Buffer };
22
24
  declare const _default: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gjsify/crypto",
3
- "version": "0.4.36",
3
+ "version": "0.4.37",
4
4
  "description": "Node.js crypto module for Gjs",
5
5
  "type": "module",
6
6
  "module": "lib/esm/index.js",
@@ -38,6 +38,10 @@
38
38
  "types": "./lib/types/browser/sign.d.ts",
39
39
  "default": "./lib/esm/browser/sign.js"
40
40
  },
41
+ "./browser/ecdh": {
42
+ "types": "./lib/types/browser/ecdh.d.ts",
43
+ "default": "./lib/esm/browser/ecdh.js"
44
+ },
41
45
  "./browser/stubs": {
42
46
  "types": "./lib/types/browser/stubs.d.ts",
43
47
  "default": "./lib/esm/browser/stubs.js"
@@ -52,9 +56,10 @@
52
56
  "build": "gjsify run build:gjsify && gjsify run build:types",
53
57
  "build:gjsify": "gjsify build --library 'src/**/*.{ts,js}' --exclude 'src/**/*.spec.{mts,ts}' 'src/test.{mts,ts}'",
54
58
  "build:types": "tsc",
55
- "build:test": "gjsify run build:test:gjs && gjsify run build:test:node",
59
+ "build:test": "gjsify run build:test:gjs && gjsify run build:test:node && gjsify run build:test:browser",
56
60
  "build:test:gjs": "gjsify build src/test.mts --app gjs --outfile test.gjs.mjs",
57
61
  "build:test:node": "gjsify build src/test.mts --app node --outfile test.node.mjs",
62
+ "build:test:browser": "gjsify build src/test.browser.mts --app browser --outfile dist/test.browser.mjs",
58
63
  "test": "gjsify run build:gjsify && gjsify run build:test && gjsify run test:node && gjsify run test:gjs",
59
64
  "test:gjs": "gjsify run test.gjs.mjs",
60
65
  "test:node": "node test.node.mjs"
@@ -65,23 +70,24 @@
65
70
  "crypto"
66
71
  ],
67
72
  "devDependencies": {
68
- "@gjsify/cli": "^0.4.36",
69
- "@gjsify/unit": "^0.4.36",
73
+ "@gjsify/cli": "^0.4.37",
74
+ "@gjsify/unit": "^0.4.37",
70
75
  "@types/diffie-hellman": "^5.0.3",
71
76
  "@types/node": "^25.9.1",
72
77
  "typescript": "^5.9.3"
73
78
  },
74
79
  "dependencies": {
75
80
  "@girs/glib-2.0": "2.88.0-4.0.4",
76
- "@gjsify/buffer": "^0.4.36",
77
- "@gjsify/stream": "^0.4.36",
78
- "@gjsify/utils": "^0.4.36"
81
+ "@gjsify/buffer": "^0.4.37",
82
+ "@gjsify/stream": "^0.4.37",
83
+ "@gjsify/utils": "^0.4.37"
79
84
  },
80
85
  "gjsify": {
81
86
  "runtimes": {
82
87
  "gjs": "polyfill",
83
88
  "node": "none",
84
- "browser": "partial"
89
+ "browser": "partial",
90
+ "nativescript": "none"
85
91
  }
86
92
  },
87
93
  "license": "MIT",