@@ -628,7 +628,7 @@ __export(src_exports, {
628
628
decodePem : ( ) => decodePem ,
629
629
defaultSignInfoDefaults : ( ) => defaultSignInfoDefaults ,
630
630
digestHeaderRegEx : ( ) => digestHeaderRegEx ,
631
- encodeArrayBufferToBase64NonRFC4648 : ( ) => encodeArrayBufferToBase64NonRFC4648 ,
631
+ encodeArrayBufferToBase64 : ( ) => encodeArrayBufferToBase64 ,
632
632
exportPrivateKeyPem : ( ) => exportPrivateKeyPem ,
633
633
exportPublicKeyPem : ( ) => exportPublicKeyPem ,
634
634
genASN1Length : ( ) => genASN1Length ,
@@ -973,6 +973,7 @@ async function parseAndImportPublicKey(source, keyUsages = ["verify"], providedA
973
973
}
974
974
975
975
// src/utils.ts
976
+ var import_rfc4648 = require ( "rfc4648" ) ;
976
977
async function getWebcrypto ( ) {
977
978
return globalThis . crypto ?? ( await import ( "node:crypto" ) ) . webcrypto ;
978
979
}
@@ -1091,15 +1092,18 @@ function genASN1Length(length) {
1091
1092
const lengthUint8Array = numberToUint8Array ( length ) ;
1092
1093
return new Uint8Array ( [ 128 + lengthUint8Array . length , ...lengthUint8Array ] ) ;
1093
1094
}
1094
- function encodeArrayBufferToBase64NonRFC4648 ( buffer ) {
1095
+ function encodeArrayBufferToBase64 ( buffer ) {
1095
1096
const uint8Array = new Uint8Array ( buffer ) ;
1096
- const binary = String . fromCharCode ( ...uint8Array ) ;
1097
- return btoa ( binary ) ;
1097
+ return import_rfc4648 . base64 . stringify ( uint8Array ) ;
1098
1098
}
1099
1099
function compareUint8Array ( a , b ) {
1100
1100
if ( a . length !== b . length )
1101
1101
return false ;
1102
- return a . every ( ( v , i ) => v === b [ i ] ) ;
1102
+ for ( let i = 0 ; i < a . length ; i ++ ) {
1103
+ if ( a [ i ] !== b [ i ] )
1104
+ return false ;
1105
+ }
1106
+ return true ;
1103
1107
}
1104
1108
var KeyValidationError = class extends Error {
1105
1109
constructor ( message ) {
@@ -1193,6 +1197,9 @@ async function importPrivateKey(key, keyUsages = ["sign"], defaults = defaultSig
1193
1197
return await ( await getWebcrypto ( ) ) . subtle . importKey ( "pkcs8" , parsedPrivateKey . der , importParams , extractable , keyUsages ) ;
1194
1198
}
1195
1199
1200
+ // src/const.ts
1201
+ var textEncoder = new TextEncoder ( ) ;
1202
+
1196
1203
// src/draft/sign.ts
1197
1204
function getDraftAlgoString ( keyAlgorithm , hashAlgorithm ) {
1198
1205
const verifyHash = ( ) => {
@@ -1254,8 +1261,8 @@ function genDraftSigningString(source, includeHeaders, additional) {
1254
1261
return results . join ( "\n" ) ;
1255
1262
}
1256
1263
async function genDraftSignature ( privateKey , signingString , defaults = defaultSignInfoDefaults ) {
1257
- const signatureAB = await ( await getWebcrypto ( ) ) . subtle . sign ( genAlgorithmForSignAndVerify ( privateKey . algorithm , defaults . hash ) , privateKey , new TextEncoder ( ) . encode ( signingString ) ) ;
1258
- return encodeArrayBufferToBase64NonRFC4648 ( signatureAB ) ;
1264
+ const signatureAB = await ( await getWebcrypto ( ) ) . subtle . sign ( genAlgorithmForSignAndVerify ( privateKey . algorithm , defaults . hash ) , privateKey , textEncoder . encode ( signingString ) ) ;
1265
+ return encodeArrayBufferToBase64 ( signatureAB ) ;
1259
1266
}
1260
1267
function genDraftSignatureHeader ( includeHeaders , keyId , signature , algorithm ) {
1261
1268
return `keyId="${ keyId } ",algorithm="${ algorithm } ",headers="${ includeHeaders . join ( " " ) } ",signature="${ signature } "` ;
@@ -1519,11 +1526,11 @@ function parseRequestSignature(request, options) {
1519
1526
// src/keypair.ts
1520
1527
async function exportPublicKeyPem ( key ) {
1521
1528
const ab = await ( await getWebcrypto ( ) ) . subtle . exportKey ( "spki" , key ) ;
1522
- return "-----BEGIN PUBLIC KEY-----\n" + splitPer64Chars ( encodeArrayBufferToBase64NonRFC4648 ( ab ) ) . join ( "\n" ) + "\n-----END PUBLIC KEY-----\n" ;
1529
+ return "-----BEGIN PUBLIC KEY-----\n" + splitPer64Chars ( encodeArrayBufferToBase64 ( ab ) ) . join ( "\n" ) + "\n-----END PUBLIC KEY-----\n" ;
1523
1530
}
1524
1531
async function exportPrivateKeyPem ( key ) {
1525
1532
const ab = await ( await getWebcrypto ( ) ) . subtle . exportKey ( "pkcs8" , key ) ;
1526
- return "-----BEGIN PRIVATE KEY-----\n" + splitPer64Chars ( encodeArrayBufferToBase64NonRFC4648 ( ab ) ) . join ( "\n" ) + "\n-----END PRIVATE KEY-----\n" ;
1533
+ return "-----BEGIN PRIVATE KEY-----\n" + splitPer64Chars ( encodeArrayBufferToBase64 ( ab ) ) . join ( "\n" ) + "\n-----END PRIVATE KEY-----\n" ;
1527
1534
}
1528
1535
async function genRsaKeyPair ( modulusLength = 4096 , keyUsage = [ "sign" , "verify" ] ) {
1529
1536
const keyPair = await ( await getWebcrypto ( ) ) . subtle . generateKey (
@@ -1588,15 +1595,15 @@ async function createBase64Digest(body, hash = "SHA-256") {
1588
1595
hash = "SHA-1" ;
1589
1596
}
1590
1597
if ( typeof body === "string" ) {
1591
- body = new TextEncoder ( ) . encode ( body ) ;
1598
+ body = textEncoder . encode ( body ) ;
1592
1599
}
1593
1600
return await ( await getWebcrypto ( ) ) . subtle . digest ( hash , body ) ;
1594
1601
}
1595
1602
1596
1603
// src/digest/digest-rfc3230.ts
1597
- var import_rfc4648 = require ( "rfc4648" ) ;
1604
+ var import_rfc46482 = require ( "rfc4648" ) ;
1598
1605
async function genRFC3230DigestHeader ( body , hashAlgorithm ) {
1599
- return `${ hashAlgorithm } =${ await createBase64Digest ( body , hashAlgorithm ) . then ( encodeArrayBufferToBase64NonRFC4648 ) } ` ;
1606
+ return `${ hashAlgorithm } =${ await createBase64Digest ( body , hashAlgorithm ) . then ( encodeArrayBufferToBase64 ) } ` ;
1600
1607
}
1601
1608
var digestHeaderRegEx = / ^ ( [ a - z A - Z 0 - 9 \- ] + ) = ( [ ^ \, ] + ) / ;
1602
1609
async function verifyRFC3230DigestHeader ( request , rawBody , failOnNoDigest = true , errorLogger ) {
@@ -1620,7 +1627,7 @@ async function verifyRFC3230DigestHeader(request, rawBody, failOnNoDigest = true
1620
1627
errorLogger ( "Invalid Digest header format" ) ;
1621
1628
return false ;
1622
1629
}
1623
- const value = import_rfc4648 . base64 . parse ( match [ 2 ] ) ;
1630
+ const value = import_rfc46482 . base64 . parse ( match [ 2 ] ) ;
1624
1631
const algo = match [ 1 ] ;
1625
1632
if ( ! algo ) {
1626
1633
if ( errorLogger )
@@ -1663,12 +1670,12 @@ async function verifyDigestHeader(request, rawBody, failOnNoDigest = true, error
1663
1670
}
1664
1671
1665
1672
// src/draft/verify.ts
1666
- var import_rfc46482 = require ( "rfc4648" ) ;
1673
+ var import_rfc46483 = require ( "rfc4648" ) ;
1667
1674
var genSignInfoDraft = parseSignInfo ;
1668
1675
async function verifyDraftSignature ( parsed , key , errorLogger ) {
1669
1676
try {
1670
1677
const { publicKey, algorithm } = await parseAndImportPublicKey ( key , [ "verify" ] , parsed . algorithm ) ;
1671
- const verify = await ( await getWebcrypto ( ) ) . subtle . verify ( algorithm , publicKey , import_rfc46482 . base64 . parse ( parsed . params . signature ) , new TextEncoder ( ) . encode ( parsed . signingString ) ) ;
1678
+ const verify = await ( await getWebcrypto ( ) ) . subtle . verify ( algorithm , publicKey , import_rfc46483 . base64 . parse ( parsed . params . signature ) , textEncoder . encode ( parsed . signingString ) ) ;
1672
1679
if ( verify !== true )
1673
1680
throw new Error ( `verification simply failed, result: ${ verify } ` ) ;
1674
1681
return verify ;
@@ -1910,7 +1917,19 @@ var RFC9421SignatureBaseFactory = class _RFC9421SignatureBaseFactory {
1910
1917
}
1911
1918
}
1912
1919
if ( isBs ) {
1913
- const sequences = ( Array . isArray ( rawValue ) ? rawValue : [ rawValue ] ) . map ( ( x ) => canonicalizeHeaderValue ( x ) ) . map ( ( x ) => new TextEncoder ( ) . encode ( x ) ) . map ( ( x ) => encodeArrayBufferToBase64NonRFC4648 ( x . buffer ) ) . map ( ( x ) => new sh . ByteSequence ( x ) ) . map ( ( x ) => [ x , /* @__PURE__ */ new Map ( ) ] ) ;
1920
+ const sequences = ( Array . isArray ( rawValue ) ? rawValue : [ rawValue ] ) . map ( ( x ) => {
1921
+ if ( typeof x !== "string" ) {
1922
+ throw new Error ( `Invalid header value type: ${ typeof x } ` ) ;
1923
+ }
1924
+ return [
1925
+ new sh . ByteSequence (
1926
+ encodeArrayBufferToBase64 (
1927
+ textEncoder . encode ( canonicalizeHeaderValue ( x ) ) . buffer
1928
+ )
1929
+ ) ,
1930
+ /* @__PURE__ */ new Map ( )
1931
+ ] ;
1932
+ } ) ;
1914
1933
return sh . serializeList ( sequences ) ;
1915
1934
}
1916
1935
return canonicalizeHeaderValue ( rawValue ) ;
@@ -1971,7 +1990,7 @@ var RFC9421SignatureBaseFactory = class _RFC9421SignatureBaseFactory {
1971
1990
decodePem,
1972
1991
defaultSignInfoDefaults,
1973
1992
digestHeaderRegEx,
1974
- encodeArrayBufferToBase64NonRFC4648 ,
1993
+ encodeArrayBufferToBase64 ,
1975
1994
exportPrivateKeyPem,
1976
1995
exportPublicKeyPem,
1977
1996
genASN1Length,
0 commit comments