Skip to content

Commit 0d08a83

Browse files
committed
build
1 parent 4f1aad4 commit 0d08a83

File tree

11 files changed

+86
-47
lines changed

11 files changed

+86
-47
lines changed

dist/const.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export declare const textEncoder: TextEncoder;

dist/digest/digest-rfc3230.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { DigestSource } from './utils';
2-
import { DigestHashAlgorithm, IncomingRequest } from '../types';
1+
import { DigestSource } from './utils.js';
2+
import { DigestHashAlgorithm, IncomingRequest } from '../types.js';
33
export declare function genRFC3230DigestHeader(body: DigestSource, hashAlgorithm: DigestHashAlgorithm): Promise<string>;
44
export declare const digestHeaderRegEx: RegExp;
55
export declare function verifyRFC3230DigestHeader(request: IncomingRequest, rawBody: DigestSource, failOnNoDigest?: boolean, errorLogger?: ((message: any) => any)): Promise<boolean>;

dist/digest/digest.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
import { IncomingRequest } from "../types";
2-
import { DigestSource } from "./utils";
1+
import { IncomingRequest } from "../types.js";
2+
import { DigestSource } from "./utils.js";
33
export declare function verifyDigestHeader(request: IncomingRequest, rawBody: DigestSource, failOnNoDigest?: boolean, errorLogger?: ((message: any) => any)): Promise<boolean>;

dist/digest/utils.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
import { DigestHashAlgorithm } from '../types';
1+
import { DigestHashAlgorithm } from '../types.js';
22
export type DigestSource = BufferSource | string;
33
export declare function createBase64Digest(body: DigestSource, hash?: DigestHashAlgorithm): Promise<ArrayBuffer>;

dist/draft/verify.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { ParsedDraftSignature } from "../types";
2-
import { parseSignInfo } from "../shared/verify";
1+
import { ParsedDraftSignature } from "../types.js";
2+
import { parseSignInfo } from "../shared/verify.js";
33
/**
44
* @deprecated Use `parseSignInfo`
55
*/

dist/index.cjs

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,7 @@ __export(src_exports, {
628628
decodePem: () => decodePem,
629629
defaultSignInfoDefaults: () => defaultSignInfoDefaults,
630630
digestHeaderRegEx: () => digestHeaderRegEx,
631-
encodeArrayBufferToBase64NonRFC4648: () => encodeArrayBufferToBase64NonRFC4648,
631+
encodeArrayBufferToBase64: () => encodeArrayBufferToBase64,
632632
exportPrivateKeyPem: () => exportPrivateKeyPem,
633633
exportPublicKeyPem: () => exportPublicKeyPem,
634634
genASN1Length: () => genASN1Length,
@@ -973,6 +973,7 @@ async function parseAndImportPublicKey(source, keyUsages = ["verify"], providedA
973973
}
974974

975975
// src/utils.ts
976+
var import_rfc4648 = require("rfc4648");
976977
async function getWebcrypto() {
977978
return globalThis.crypto ?? (await import("node:crypto")).webcrypto;
978979
}
@@ -1091,15 +1092,18 @@ function genASN1Length(length) {
10911092
const lengthUint8Array = numberToUint8Array(length);
10921093
return new Uint8Array([128 + lengthUint8Array.length, ...lengthUint8Array]);
10931094
}
1094-
function encodeArrayBufferToBase64NonRFC4648(buffer) {
1095+
function encodeArrayBufferToBase64(buffer) {
10951096
const uint8Array = new Uint8Array(buffer);
1096-
const binary = String.fromCharCode(...uint8Array);
1097-
return btoa(binary);
1097+
return import_rfc4648.base64.stringify(uint8Array);
10981098
}
10991099
function compareUint8Array(a, b) {
11001100
if (a.length !== b.length)
11011101
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;
11031107
}
11041108
var KeyValidationError = class extends Error {
11051109
constructor(message) {
@@ -1193,6 +1197,9 @@ async function importPrivateKey(key, keyUsages = ["sign"], defaults = defaultSig
11931197
return await (await getWebcrypto()).subtle.importKey("pkcs8", parsedPrivateKey.der, importParams, extractable, keyUsages);
11941198
}
11951199

1200+
// src/const.ts
1201+
var textEncoder = new TextEncoder();
1202+
11961203
// src/draft/sign.ts
11971204
function getDraftAlgoString(keyAlgorithm, hashAlgorithm) {
11981205
const verifyHash = () => {
@@ -1254,8 +1261,8 @@ function genDraftSigningString(source, includeHeaders, additional) {
12541261
return results.join("\n");
12551262
}
12561263
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);
12591266
}
12601267
function genDraftSignatureHeader(includeHeaders, keyId, signature, algorithm) {
12611268
return `keyId="${keyId}",algorithm="${algorithm}",headers="${includeHeaders.join(" ")}",signature="${signature}"`;
@@ -1519,11 +1526,11 @@ function parseRequestSignature(request, options) {
15191526
// src/keypair.ts
15201527
async function exportPublicKeyPem(key) {
15211528
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";
15231530
}
15241531
async function exportPrivateKeyPem(key) {
15251532
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";
15271534
}
15281535
async function genRsaKeyPair(modulusLength = 4096, keyUsage = ["sign", "verify"]) {
15291536
const keyPair = await (await getWebcrypto()).subtle.generateKey(
@@ -1588,15 +1595,15 @@ async function createBase64Digest(body, hash = "SHA-256") {
15881595
hash = "SHA-1";
15891596
}
15901597
if (typeof body === "string") {
1591-
body = new TextEncoder().encode(body);
1598+
body = textEncoder.encode(body);
15921599
}
15931600
return await (await getWebcrypto()).subtle.digest(hash, body);
15941601
}
15951602

15961603
// src/digest/digest-rfc3230.ts
1597-
var import_rfc4648 = require("rfc4648");
1604+
var import_rfc46482 = require("rfc4648");
15981605
async function genRFC3230DigestHeader(body, hashAlgorithm) {
1599-
return `${hashAlgorithm}=${await createBase64Digest(body, hashAlgorithm).then(encodeArrayBufferToBase64NonRFC4648)}`;
1606+
return `${hashAlgorithm}=${await createBase64Digest(body, hashAlgorithm).then(encodeArrayBufferToBase64)}`;
16001607
}
16011608
var digestHeaderRegEx = /^([a-zA-Z0-9\-]+)=([^\,]+)/;
16021609
async function verifyRFC3230DigestHeader(request, rawBody, failOnNoDigest = true, errorLogger) {
@@ -1620,7 +1627,7 @@ async function verifyRFC3230DigestHeader(request, rawBody, failOnNoDigest = true
16201627
errorLogger("Invalid Digest header format");
16211628
return false;
16221629
}
1623-
const value = import_rfc4648.base64.parse(match[2]);
1630+
const value = import_rfc46482.base64.parse(match[2]);
16241631
const algo = match[1];
16251632
if (!algo) {
16261633
if (errorLogger)
@@ -1663,12 +1670,12 @@ async function verifyDigestHeader(request, rawBody, failOnNoDigest = true, error
16631670
}
16641671

16651672
// src/draft/verify.ts
1666-
var import_rfc46482 = require("rfc4648");
1673+
var import_rfc46483 = require("rfc4648");
16671674
var genSignInfoDraft = parseSignInfo;
16681675
async function verifyDraftSignature(parsed, key, errorLogger) {
16691676
try {
16701677
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));
16721679
if (verify !== true)
16731680
throw new Error(`verification simply failed, result: ${verify}`);
16741681
return verify;
@@ -1910,7 +1917,19 @@ var RFC9421SignatureBaseFactory = class _RFC9421SignatureBaseFactory {
19101917
}
19111918
}
19121919
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+
});
19141933
return sh.serializeList(sequences);
19151934
}
19161935
return canonicalizeHeaderValue(rawValue);
@@ -1971,7 +1990,7 @@ var RFC9421SignatureBaseFactory = class _RFC9421SignatureBaseFactory {
19711990
decodePem,
19721991
defaultSignInfoDefaults,
19731992
digestHeaderRegEx,
1974-
encodeArrayBufferToBase64NonRFC4648,
1993+
encodeArrayBufferToBase64,
19751994
exportPrivateKeyPem,
19761995
exportPublicKeyPem,
19771996
genASN1Length,

dist/index.mjs

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -880,6 +880,7 @@ async function parseAndImportPublicKey(source, keyUsages = ["verify"], providedA
880880
}
881881

882882
// src/utils.ts
883+
import { base64 } from "rfc4648";
883884
async function getWebcrypto() {
884885
return globalThis.crypto ?? (await import("node:crypto")).webcrypto;
885886
}
@@ -998,15 +999,18 @@ function genASN1Length(length) {
998999
const lengthUint8Array = numberToUint8Array(length);
9991000
return new Uint8Array([128 + lengthUint8Array.length, ...lengthUint8Array]);
10001001
}
1001-
function encodeArrayBufferToBase64NonRFC4648(buffer) {
1002+
function encodeArrayBufferToBase64(buffer) {
10021003
const uint8Array = new Uint8Array(buffer);
1003-
const binary = String.fromCharCode(...uint8Array);
1004-
return btoa(binary);
1004+
return base64.stringify(uint8Array);
10051005
}
10061006
function compareUint8Array(a, b) {
10071007
if (a.length !== b.length)
10081008
return false;
1009-
return a.every((v, i) => v === b[i]);
1009+
for (let i = 0; i < a.length; i++) {
1010+
if (a[i] !== b[i])
1011+
return false;
1012+
}
1013+
return true;
10101014
}
10111015
var KeyValidationError = class extends Error {
10121016
constructor(message) {
@@ -1100,6 +1104,9 @@ async function importPrivateKey(key, keyUsages = ["sign"], defaults = defaultSig
11001104
return await (await getWebcrypto()).subtle.importKey("pkcs8", parsedPrivateKey.der, importParams, extractable, keyUsages);
11011105
}
11021106

1107+
// src/const.ts
1108+
var textEncoder = new TextEncoder();
1109+
11031110
// src/draft/sign.ts
11041111
function getDraftAlgoString(keyAlgorithm, hashAlgorithm) {
11051112
const verifyHash = () => {
@@ -1161,8 +1168,8 @@ function genDraftSigningString(source, includeHeaders, additional) {
11611168
return results.join("\n");
11621169
}
11631170
async function genDraftSignature(privateKey, signingString, defaults = defaultSignInfoDefaults) {
1164-
const signatureAB = await (await getWebcrypto()).subtle.sign(genAlgorithmForSignAndVerify(privateKey.algorithm, defaults.hash), privateKey, new TextEncoder().encode(signingString));
1165-
return encodeArrayBufferToBase64NonRFC4648(signatureAB);
1171+
const signatureAB = await (await getWebcrypto()).subtle.sign(genAlgorithmForSignAndVerify(privateKey.algorithm, defaults.hash), privateKey, textEncoder.encode(signingString));
1172+
return encodeArrayBufferToBase64(signatureAB);
11661173
}
11671174
function genDraftSignatureHeader(includeHeaders, keyId, signature, algorithm) {
11681175
return `keyId="${keyId}",algorithm="${algorithm}",headers="${includeHeaders.join(" ")}",signature="${signature}"`;
@@ -1426,11 +1433,11 @@ function parseRequestSignature(request, options) {
14261433
// src/keypair.ts
14271434
async function exportPublicKeyPem(key) {
14281435
const ab = await (await getWebcrypto()).subtle.exportKey("spki", key);
1429-
return "-----BEGIN PUBLIC KEY-----\n" + splitPer64Chars(encodeArrayBufferToBase64NonRFC4648(ab)).join("\n") + "\n-----END PUBLIC KEY-----\n";
1436+
return "-----BEGIN PUBLIC KEY-----\n" + splitPer64Chars(encodeArrayBufferToBase64(ab)).join("\n") + "\n-----END PUBLIC KEY-----\n";
14301437
}
14311438
async function exportPrivateKeyPem(key) {
14321439
const ab = await (await getWebcrypto()).subtle.exportKey("pkcs8", key);
1433-
return "-----BEGIN PRIVATE KEY-----\n" + splitPer64Chars(encodeArrayBufferToBase64NonRFC4648(ab)).join("\n") + "\n-----END PRIVATE KEY-----\n";
1440+
return "-----BEGIN PRIVATE KEY-----\n" + splitPer64Chars(encodeArrayBufferToBase64(ab)).join("\n") + "\n-----END PRIVATE KEY-----\n";
14341441
}
14351442
async function genRsaKeyPair(modulusLength = 4096, keyUsage = ["sign", "verify"]) {
14361443
const keyPair = await (await getWebcrypto()).subtle.generateKey(
@@ -1495,15 +1502,15 @@ async function createBase64Digest(body, hash = "SHA-256") {
14951502
hash = "SHA-1";
14961503
}
14971504
if (typeof body === "string") {
1498-
body = new TextEncoder().encode(body);
1505+
body = textEncoder.encode(body);
14991506
}
15001507
return await (await getWebcrypto()).subtle.digest(hash, body);
15011508
}
15021509

15031510
// src/digest/digest-rfc3230.ts
1504-
import { base64 } from "rfc4648";
1511+
import { base64 as base642 } from "rfc4648";
15051512
async function genRFC3230DigestHeader(body, hashAlgorithm) {
1506-
return `${hashAlgorithm}=${await createBase64Digest(body, hashAlgorithm).then(encodeArrayBufferToBase64NonRFC4648)}`;
1513+
return `${hashAlgorithm}=${await createBase64Digest(body, hashAlgorithm).then(encodeArrayBufferToBase64)}`;
15071514
}
15081515
var digestHeaderRegEx = /^([a-zA-Z0-9\-]+)=([^\,]+)/;
15091516
async function verifyRFC3230DigestHeader(request, rawBody, failOnNoDigest = true, errorLogger) {
@@ -1527,7 +1534,7 @@ async function verifyRFC3230DigestHeader(request, rawBody, failOnNoDigest = true
15271534
errorLogger("Invalid Digest header format");
15281535
return false;
15291536
}
1530-
const value = base64.parse(match[2]);
1537+
const value = base642.parse(match[2]);
15311538
const algo = match[1];
15321539
if (!algo) {
15331540
if (errorLogger)
@@ -1570,12 +1577,12 @@ async function verifyDigestHeader(request, rawBody, failOnNoDigest = true, error
15701577
}
15711578

15721579
// src/draft/verify.ts
1573-
import { base64 as base642 } from "rfc4648";
1580+
import { base64 as base643 } from "rfc4648";
15741581
var genSignInfoDraft = parseSignInfo;
15751582
async function verifyDraftSignature(parsed, key, errorLogger) {
15761583
try {
15771584
const { publicKey, algorithm } = await parseAndImportPublicKey(key, ["verify"], parsed.algorithm);
1578-
const verify = await (await getWebcrypto()).subtle.verify(algorithm, publicKey, base642.parse(parsed.params.signature), new TextEncoder().encode(parsed.signingString));
1585+
const verify = await (await getWebcrypto()).subtle.verify(algorithm, publicKey, base643.parse(parsed.params.signature), textEncoder.encode(parsed.signingString));
15791586
if (verify !== true)
15801587
throw new Error(`verification simply failed, result: ${verify}`);
15811588
return verify;
@@ -1817,7 +1824,19 @@ var RFC9421SignatureBaseFactory = class _RFC9421SignatureBaseFactory {
18171824
}
18181825
}
18191826
if (isBs) {
1820-
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()]);
1827+
const sequences = (Array.isArray(rawValue) ? rawValue : [rawValue]).map((x) => {
1828+
if (typeof x !== "string") {
1829+
throw new Error(`Invalid header value type: ${typeof x}`);
1830+
}
1831+
return [
1832+
new sh.ByteSequence(
1833+
encodeArrayBufferToBase64(
1834+
textEncoder.encode(canonicalizeHeaderValue(x)).buffer
1835+
)
1836+
),
1837+
/* @__PURE__ */ new Map()
1838+
];
1839+
});
18211840
return sh.serializeList(sequences);
18221841
}
18231842
return canonicalizeHeaderValue(rawValue);
@@ -1877,7 +1896,7 @@ export {
18771896
decodePem,
18781897
defaultSignInfoDefaults,
18791898
digestHeaderRegEx,
1880-
encodeArrayBufferToBase64NonRFC4648,
1899+
encodeArrayBufferToBase64,
18811900
exportPrivateKeyPem,
18821901
exportPublicKeyPem,
18831902
genASN1Length,

dist/keypair.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { ECNamedCurve } from './types';
1+
import type { ECNamedCurve } from './types.js';
22
export declare function exportPublicKeyPem(key: CryptoKey): Promise<string>;
33
export declare function exportPrivateKeyPem(key: CryptoKey): Promise<string>;
44
export declare function genRsaKeyPair(modulusLength?: number, keyUsage?: KeyUsage[]): Promise<{

dist/pem/spki.d.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import ASN1 from '@lapo/asn1js';
2-
import { ECNamedCurve, KeyAlgorithmName } from '../types';
3-
import { SignInfoDefaults } from '../utils';
2+
import { ECNamedCurve, KeyAlgorithmName } from '../types.js';
3+
import { SignInfoDefaults } from '../utils.js';
44
export declare class SpkiParseError extends Error {
55
constructor(message: string);
66
}
@@ -112,6 +112,6 @@ export declare function parseAndImportPublicKey(source: ASN1.StreamOrBinary | Cr
112112
publicKey: CryptoKey;
113113
algorithm: {
114114
name: string;
115-
hash: import("../types").SignatureHashAlgorithmUpperSnake;
115+
hash: import("../types.js").SignatureHashAlgorithmUpperSnake;
116116
};
117117
}>;

dist/rfc9421/sign.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import type { IncomingRequest, MapLikeObj, OutgoingResponse, SFVSignatureInputDictionary, SFVSignatureInputDictionaryForInput, HeadersLike } from "../types";
2-
import { SFVHeaderTypeDictionary } from "./const";
1+
import type { IncomingRequest, MapLikeObj, OutgoingResponse, SFVSignatureInputDictionary, SFVSignatureInputDictionaryForInput, HeadersLike } from "../types.js";
2+
import { SFVHeaderTypeDictionary } from "./const.js";
33
export declare const requestTargetDerivedComponents: string[];
44
export declare const responseTargetDerivedComponents: string[];
55
export type Kot<T> = keyof T extends 'req' ? T : null;

0 commit comments

Comments
 (0)