@@ -67,6 +67,7 @@ __export(src_exports, {
6767 getDraftAlgoString : ( ) => getDraftAlgoString ,
6868 getNistCurveFromOid : ( ) => getNistCurveFromOid ,
6969 getPublicKeyAlgorithmNameFromOid : ( ) => getPublicKeyAlgorithmNameFromOid ,
70+ getWebcrypto : ( ) => getWebcrypto ,
7071 keyHashAlgosForDraftDecoding : ( ) => keyHashAlgosForDraftDecoding ,
7172 keyHashAlgosForDraftEncofing : ( ) => keyHashAlgosForDraftEncofing ,
7273 lcObjectGet : ( ) => lcObjectGet ,
@@ -263,6 +264,9 @@ function parsePublicKey(input) {
263264}
264265
265266// src/utils.ts
267+ async function getWebcrypto ( ) {
268+ return globalThis . crypto ?? ( await import ( "node:crypto" ) ) . webcrypto ;
269+ }
266270function lcObjectKey ( src ) {
267271 return Object . entries ( src ) . reduce ( ( dst , [ key , value ] ) => {
268272 if ( key === "__proto__" )
@@ -455,7 +459,7 @@ function genDraftSigningString(request, includeHeaders, additional) {
455459 return results . join ( "\n" ) ;
456460}
457461async function genDraftSignature ( privateKey , signingString ) {
458- const signatureAB = await globalThis . crypto . subtle . sign ( privateKey . algorithm , privateKey , new TextEncoder ( ) . encode ( signingString ) ) ;
462+ const signatureAB = await ( await getWebcrypto ( ) ) . subtle . sign ( privateKey . algorithm , privateKey , new TextEncoder ( ) . encode ( signingString ) ) ;
459463 return encodeArrayBufferToBase64 ( signatureAB ) ;
460464}
461465function genDraftSignatureHeader ( includeHeaders , keyId , signature , algorithm ) {
@@ -465,7 +469,7 @@ async function signAsDraftToRequest(request, key, includeHeaders, opts = {}) {
465469 const hash = opts ?. hashAlgorithm || "SHA-256" ;
466470 const parsedPrivateKey = parsePkcs8 ( key . privateKeyPem ) ;
467471 const importParams = genSignInfo ( parsedPrivateKey , { hash, ec : "DSA" } ) ;
468- const privateKey = await globalThis . crypto . subtle . importKey ( "pkcs8" , parsedPrivateKey . der , importParams , false , [ "sign" ] ) ;
472+ const privateKey = await ( await getWebcrypto ( ) ) . subtle . importKey ( "pkcs8" , parsedPrivateKey . der , importParams , false , [ "sign" ] ) ;
469473 const algoString = getDraftAlgoString ( importParams ) ;
470474 const signingString = genDraftSigningString ( request , includeHeaders , { keyId : key . keyId , algorithm : algoString } ) ;
471475 const signature = await genDraftSignature ( privateKey , signingString ) ;
@@ -722,15 +726,15 @@ function parseRequestSignature(request, options) {
722726
723727// src/keypair.ts
724728async function exportPublicKeyPem ( key ) {
725- const ab = await globalThis . crypto . subtle . exportKey ( "spki" , key ) ;
729+ const ab = await ( await getWebcrypto ( ) ) . subtle . exportKey ( "spki" , key ) ;
726730 return "-----BEGIN PUBLIC KEY-----\n" + splitPer64Chars ( encodeArrayBufferToBase64 ( ab ) ) . join ( "\n" ) + "\n-----END PUBLIC KEY-----\n" ;
727731}
728732async function exportPrivateKeyPem ( key ) {
729- const ab = await globalThis . crypto . subtle . exportKey ( "pkcs8" , key ) ;
733+ const ab = await ( await getWebcrypto ( ) ) . subtle . exportKey ( "pkcs8" , key ) ;
730734 return "-----BEGIN PRIVATE KEY-----\n" + splitPer64Chars ( encodeArrayBufferToBase64 ( ab ) ) . join ( "\n" ) + "\n-----END PRIVATE KEY-----\n" ;
731735}
732736async function genRsaKeyPair ( modulusLength = 4096 , keyUsage = [ "sign" , "verify" ] ) {
733- const keyPair = await globalThis . crypto . subtle . generateKey (
737+ const keyPair = await ( await getWebcrypto ( ) ) . subtle . generateKey (
734738 {
735739 name : "RSASSA-PKCS1-v1_5" ,
736740 modulusLength,
@@ -746,7 +750,7 @@ async function genRsaKeyPair(modulusLength = 4096, keyUsage = ["sign", "verify"]
746750 } ;
747751}
748752async function genEcKeyPair ( namedCurve = "P-256" , keyUsage = [ "sign" , "verify" ] ) {
749- const keyPair = await globalThis . crypto . subtle . generateKey (
753+ const keyPair = await ( await getWebcrypto ( ) ) . subtle . generateKey (
750754 {
751755 name : "ECDSA" ,
752756 namedCurve
@@ -760,7 +764,7 @@ async function genEcKeyPair(namedCurve = "P-256", keyUsage = ["sign", "verify"])
760764 } ;
761765}
762766async function genEd25519KeyPair ( keyUsage = [ "sign" , "verify" ] ) {
763- const keyPair = await globalThis . crypto . subtle . generateKey (
767+ const keyPair = await ( await getWebcrypto ( ) ) . subtle . generateKey (
764768 {
765769 name : "Ed25519"
766770 } ,
@@ -773,7 +777,7 @@ async function genEd25519KeyPair(keyUsage = ["sign", "verify"]) {
773777 } ;
774778}
775779async function genEd448KeyPair ( keyUsage ) {
776- const keyPair = await globalThis . crypto . subtle . generateKey (
780+ const keyPair = await ( await getWebcrypto ( ) ) . subtle . generateKey (
777781 {
778782 name : "Ed448"
779783 } ,
@@ -787,7 +791,6 @@ async function genEd448KeyPair(keyUsage) {
787791}
788792
789793// src/digest/utils.ts
790- var import_node_crypto = require ( "node:crypto" ) ;
791794async function createBase64Digest ( body , hash = "SHA-256" ) {
792795 if ( Array . isArray ( hash ) ) {
793796 return new Map ( await Promise . all ( hash . map ( ( h ) => {
@@ -800,7 +803,7 @@ async function createBase64Digest(body, hash = "SHA-256") {
800803 if ( typeof body === "string" ) {
801804 body = new TextEncoder ( ) . encode ( body ) ;
802805 }
803- const hashAb = await import_node_crypto . webcrypto . subtle . digest ( hash , body ) ;
806+ const hashAb = await ( await getWebcrypto ( ) ) . subtle . digest ( hash , body ) ;
804807 return encodeArrayBufferToBase64 ( hashAb ) ;
805808}
806809
@@ -851,7 +854,6 @@ async function verifyRFC3230DigestHeader(request, rawBody, failOnNoDigest = true
851854 }
852855 throw e ;
853856 }
854- ;
855857 if ( hash !== value ) {
856858 if ( errorLogger )
857859 errorLogger ( `Digest header hash mismatch` ) ;
@@ -959,8 +961,8 @@ var genSignInfoDraft = parseSignInfo;
959961async function verifyDraftSignature ( parsed , publicKeyPem , errorLogger ) {
960962 try {
961963 const parsedSpki = parsePublicKey ( publicKeyPem ) ;
962- const publicKey = await globalThis . crypto . subtle . importKey ( "spki" , parsedSpki . der , genSignInfo ( parsedSpki ) , false , [ "verify" ] ) ;
963- const verify = await globalThis . crypto . subtle . verify ( publicKey . algorithm , publicKey , decodeBase64ToUint8Array ( parsed . params . signature ) , new TextEncoder ( ) . encode ( parsed . signingString ) ) ;
964+ const publicKey = await ( await getWebcrypto ( ) ) . subtle . importKey ( "spki" , parsedSpki . der , genSignInfo ( parsedSpki ) , false , [ "verify" ] ) ;
965+ const verify = await ( await getWebcrypto ( ) ) . subtle . verify ( publicKey . algorithm , publicKey , decodeBase64ToUint8Array ( parsed . params . signature ) , new TextEncoder ( ) . encode ( parsed . signingString ) ) ;
964966 return verify ;
965967 } catch ( e ) {
966968 if ( errorLogger )
@@ -1007,6 +1009,7 @@ async function verifyDraftSignature(parsed, publicKeyPem, errorLogger) {
10071009 getDraftAlgoString,
10081010 getNistCurveFromOid,
10091011 getPublicKeyAlgorithmNameFromOid,
1012+ getWebcrypto,
10101013 keyHashAlgosForDraftDecoding,
10111014 keyHashAlgosForDraftEncofing,
10121015 lcObjectGet,
0 commit comments