@@ -68,6 +68,8 @@ __export(src_exports, {
6868 getNistCurveFromOid : ( ) => getNistCurveFromOid ,
6969 getPublicKeyAlgorithmNameFromOid : ( ) => getPublicKeyAlgorithmNameFromOid ,
7070 getWebcrypto : ( ) => getWebcrypto ,
71+ importPrivateKey : ( ) => importPrivateKey ,
72+ importPublicKey : ( ) => importPublicKey ,
7173 keyHashAlgosForDraftDecoding : ( ) => keyHashAlgosForDraftDecoding ,
7274 keyHashAlgosForDraftEncofing : ( ) => keyHashAlgosForDraftEncofing ,
7375 lcObjectGet : ( ) => lcObjectGet ,
@@ -262,6 +264,10 @@ function parsePublicKey(input) {
262264 }
263265 }
264266}
267+ async function importPublicKey ( key , keyUsages , defaults ) {
268+ const parsedPublicKey = parsePublicKey ( key ) ;
269+ return await ( await getWebcrypto ( ) ) . subtle . importKey ( "spki" , parsedPublicKey . der , genSignInfo ( parsedPublicKey ) , false , keyUsages ) ;
270+ }
265271
266272// src/utils.ts
267273async function getWebcrypto ( ) {
@@ -386,6 +392,11 @@ function parsePkcs8(input) {
386392 attributesRaw : attributes ? asn1ToArrayBuffer ( attributes ) : null
387393 } ;
388394}
395+ async function importPrivateKey ( key , keyUsages , defaults ) {
396+ const parsedPrivateKey = parsePkcs8 ( key ) ;
397+ const importParams = genSignInfo ( parsedPrivateKey , defaults ) ;
398+ return await ( await getWebcrypto ( ) ) . subtle . importKey ( "pkcs8" , parsedPrivateKey . der , importParams , false , keyUsages ) ;
399+ }
389400
390401// src/draft/const.ts
391402var keyHashAlgosForDraftEncofing = {
@@ -405,29 +416,29 @@ var keyHashAlgosForDraftDecoding = {
405416} ;
406417
407418// src/draft/sign.ts
408- function getDraftAlgoString ( algorithm ) {
419+ function getDraftAlgoString ( keyAlgorithm , hashAlgorithm ) {
409420 const verifyHash = ( ) => {
410- if ( ! algorithm . hash )
421+ if ( ! hashAlgorithm )
411422 throw new Error ( `hash is required` ) ;
412- if ( ! ( algorithm . hash in keyHashAlgosForDraftEncofing ) )
413- throw new Error ( `unsupported hash: ${ algorithm . hash } ` ) ;
423+ if ( ! ( hashAlgorithm in keyHashAlgosForDraftEncofing ) )
424+ throw new Error ( `unsupported hash: ${ hashAlgorithm } ` ) ;
414425 } ;
415- if ( algorithm . name === "RSASSA-PKCS1-v1_5" ) {
426+ if ( keyAlgorithm === "RSASSA-PKCS1-v1_5" ) {
416427 verifyHash ( ) ;
417- return `rsa-${ keyHashAlgosForDraftEncofing [ algorithm . hash ] } ` ;
428+ return `rsa-${ keyHashAlgosForDraftEncofing [ hashAlgorithm ] } ` ;
418429 }
419- if ( algorithm . name === "ECDSA" ) {
430+ if ( keyAlgorithm === "ECDSA" ) {
420431 verifyHash ( ) ;
421- return `ecdsa-${ keyHashAlgosForDraftEncofing [ algorithm . hash ] } ` ;
432+ return `ecdsa-${ keyHashAlgosForDraftEncofing [ hashAlgorithm ] } ` ;
422433 }
423- if ( algorithm . name === "ECDH" ) {
434+ if ( keyAlgorithm === "ECDH" ) {
424435 verifyHash ( ) ;
425- return `ecdh-${ keyHashAlgosForDraftEncofing [ algorithm . hash ] } ` ;
436+ return `ecdh-${ keyHashAlgosForDraftEncofing [ hashAlgorithm ] } ` ;
426437 }
427- if ( algorithm . name === "Ed25519" ) {
438+ if ( keyAlgorithm === "Ed25519" ) {
428439 return `ed25519-sha512` ;
429440 }
430- if ( algorithm . name === "Ed448" ) {
441+ if ( keyAlgorithm === "Ed448" ) {
431442 return `ed448` ;
432443 }
433444 throw new Error ( `unsupported keyAlgorithm` ) ;
@@ -467,10 +478,8 @@ function genDraftSignatureHeader(includeHeaders, keyId, signature, algorithm) {
467478}
468479async function signAsDraftToRequest ( request , key , includeHeaders , opts = { } ) {
469480 const hash = opts ?. hashAlgorithm || "SHA-256" ;
470- const parsedPrivateKey = parsePkcs8 ( key . privateKeyPem ) ;
471- const importParams = genSignInfo ( parsedPrivateKey , { hash, ec : "DSA" } ) ;
472- const privateKey = await ( await getWebcrypto ( ) ) . subtle . importKey ( "pkcs8" , parsedPrivateKey . der , importParams , false , [ "sign" ] ) ;
473- const algoString = getDraftAlgoString ( importParams ) ;
481+ const privateKey = "privateKey" in key ? key . privateKey : await importPrivateKey ( key . privateKeyPem , [ "sign" ] , { hash, ec : "DSA" } ) ;
482+ const algoString = getDraftAlgoString ( privateKey . algorithm . name , hash ) ;
474483 const signingString = genDraftSigningString ( request , includeHeaders , { keyId : key . keyId , algorithm : algoString } ) ;
475484 const signature = await genDraftSignature ( privateKey , signingString ) ;
476485 const signatureHeader = genDraftSignatureHeader ( includeHeaders , key . keyId , signature , algoString ) ;
@@ -958,10 +967,9 @@ function parseSignInfo(algorithm, parsed, errorLogger) {
958967
959968// src/draft/verify.ts
960969var genSignInfoDraft = parseSignInfo ;
961- async function verifyDraftSignature ( parsed , publicKeyPem , errorLogger ) {
970+ async function verifyDraftSignature ( parsed , key , errorLogger ) {
962971 try {
963- const parsedSpki = parsePublicKey ( publicKeyPem ) ;
964- const publicKey = await ( await getWebcrypto ( ) ) . subtle . importKey ( "spki" , parsedSpki . der , genSignInfo ( parsedSpki ) , false , [ "verify" ] ) ;
972+ const publicKey = typeof key === "string" ? await importPublicKey ( key , [ "verify" ] ) : key ;
965973 const verify = await ( await getWebcrypto ( ) ) . subtle . verify ( publicKey . algorithm , publicKey , decodeBase64ToUint8Array ( parsed . params . signature ) , new TextEncoder ( ) . encode ( parsed . signingString ) ) ;
966974 return verify ;
967975 } catch ( e ) {
@@ -1010,6 +1018,8 @@ async function verifyDraftSignature(parsed, publicKeyPem, errorLogger) {
10101018 getNistCurveFromOid,
10111019 getPublicKeyAlgorithmNameFromOid,
10121020 getWebcrypto,
1021+ importPrivateKey,
1022+ importPublicKey,
10131023 keyHashAlgosForDraftDecoding,
10141024 keyHashAlgosForDraftEncofing,
10151025 lcObjectGet,
0 commit comments