@e-sig/core 0.5.1 → 0.7.0
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.
- package/LICENSE +1 -1
- package/README.md +92 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/pem-signer.d.ts +26 -5
- package/dist/pem-signer.d.ts.map +1 -1
- package/dist/pem-signer.js +84 -13
- package/dist/pem-signer.js.map +1 -1
- package/dist/pq-cert.d.ts +76 -0
- package/dist/pq-cert.d.ts.map +1 -0
- package/dist/pq-cert.js +295 -0
- package/dist/pq-cert.js.map +1 -0
- package/dist/pq-embed.d.ts +22 -0
- package/dist/pq-embed.d.ts.map +1 -0
- package/dist/pq-embed.js +119 -0
- package/dist/pq-embed.js.map +1 -0
- package/dist/pq-lifecycle.d.ts +59 -0
- package/dist/pq-lifecycle.d.ts.map +1 -0
- package/dist/pq-lifecycle.js +55 -0
- package/dist/pq-lifecycle.js.map +1 -0
- package/dist/pq-seal.d.ts +183 -0
- package/dist/pq-seal.d.ts.map +1 -0
- package/dist/pq-seal.js +345 -0
- package/dist/pq-seal.js.map +1 -0
- package/dist/pq-verify.d.ts +99 -0
- package/dist/pq-verify.d.ts.map +1 -0
- package/dist/pq-verify.js +135 -0
- package/dist/pq-verify.js.map +1 -0
- package/dist/render-pdf.d.ts +5 -5
- package/dist/render-pdf.d.ts.map +1 -1
- package/dist/render-pdf.js +51 -17
- package/dist/render-pdf.js.map +1 -1
- package/dist/sign-document.d.ts +16 -0
- package/dist/sign-document.d.ts.map +1 -1
- package/dist/sign-document.js +10 -0
- package/dist/sign-document.js.map +1 -1
- package/dist/sign-pdf.d.ts +66 -4
- package/dist/sign-pdf.d.ts.map +1 -1
- package/dist/sign-pdf.js +51 -2
- package/dist/sign-pdf.js.map +1 -1
- package/dist/types.d.ts +36 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vendor/placeholder-plain/LICENSE-signpdf.md +47 -0
- package/dist/vendor/placeholder-plain/createBufferPageWithAnnotation.d.ts +6 -0
- package/dist/vendor/placeholder-plain/createBufferPageWithAnnotation.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/createBufferPageWithAnnotation.js +38 -0
- package/dist/vendor/placeholder-plain/createBufferPageWithAnnotation.js.map +1 -0
- package/dist/vendor/placeholder-plain/createBufferRootWithAcroform.d.ts +6 -0
- package/dist/vendor/placeholder-plain/createBufferRootWithAcroform.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/createBufferRootWithAcroform.js +15 -0
- package/dist/vendor/placeholder-plain/createBufferRootWithAcroform.js.map +1 -0
- package/dist/vendor/placeholder-plain/createBufferTrailer.d.ts +4 -0
- package/dist/vendor/placeholder-plain/createBufferTrailer.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/createBufferTrailer.js +26 -0
- package/dist/vendor/placeholder-plain/createBufferTrailer.js.map +1 -0
- package/dist/vendor/placeholder-plain/findObject.d.ts +4 -0
- package/dist/vendor/placeholder-plain/findObject.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/findObject.js +18 -0
- package/dist/vendor/placeholder-plain/findObject.js.map +1 -0
- package/dist/vendor/placeholder-plain/getIndexFromRef.d.ts +4 -0
- package/dist/vendor/placeholder-plain/getIndexFromRef.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/getIndexFromRef.js +13 -0
- package/dist/vendor/placeholder-plain/getIndexFromRef.js.map +1 -0
- package/dist/vendor/placeholder-plain/getPageRef.d.ts +6 -0
- package/dist/vendor/placeholder-plain/getPageRef.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/getPageRef.js +18 -0
- package/dist/vendor/placeholder-plain/getPageRef.js.map +1 -0
- package/dist/vendor/placeholder-plain/getPagesDictionaryRef.d.ts +3 -0
- package/dist/vendor/placeholder-plain/getPagesDictionaryRef.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/getPagesDictionaryRef.js +12 -0
- package/dist/vendor/placeholder-plain/getPagesDictionaryRef.js.map +1 -0
- package/dist/vendor/placeholder-plain/index.d.ts +2 -0
- package/dist/vendor/placeholder-plain/index.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/index.js +4 -0
- package/dist/vendor/placeholder-plain/index.js.map +1 -0
- package/dist/vendor/placeholder-plain/pdfObject.d.ts +13 -0
- package/dist/vendor/placeholder-plain/pdfObject.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/pdfObject.js +142 -0
- package/dist/vendor/placeholder-plain/pdfObject.js.map +1 -0
- package/dist/vendor/placeholder-plain/pdfkitAddPlaceholder.d.ts +49 -0
- package/dist/vendor/placeholder-plain/pdfkitAddPlaceholder.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/pdfkitAddPlaceholder.js +115 -0
- package/dist/vendor/placeholder-plain/pdfkitAddPlaceholder.js.map +1 -0
- package/dist/vendor/placeholder-plain/plainAddPlaceholder.d.ts +41 -0
- package/dist/vendor/placeholder-plain/plainAddPlaceholder.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/plainAddPlaceholder.js +95 -0
- package/dist/vendor/placeholder-plain/plainAddPlaceholder.js.map +1 -0
- package/dist/vendor/placeholder-plain/readPdf.d.ts +20 -0
- package/dist/vendor/placeholder-plain/readPdf.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/readPdf.js +47 -0
- package/dist/vendor/placeholder-plain/readPdf.js.map +1 -0
- package/dist/vendor/placeholder-plain/readRefTable.d.ts +17 -0
- package/dist/vendor/placeholder-plain/readRefTable.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/readRefTable.js +84 -0
- package/dist/vendor/placeholder-plain/readRefTable.js.map +1 -0
- package/dist/vendor/placeholder-plain/xrefToRefMap.d.ts +3 -0
- package/dist/vendor/placeholder-plain/xrefToRefMap.d.ts.map +1 -0
- package/dist/vendor/placeholder-plain/xrefToRefMap.js +38 -0
- package/dist/vendor/placeholder-plain/xrefToRefMap.js.map +1 -0
- package/package.json +10 -8
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -15,6 +15,7 @@ Given an HTML document and a person who wants to sign it, this library:
|
|
|
15
15
|
2. Generates or reuses a self-signed RSA-2048 X.509 cert for the signing tenant.
|
|
16
16
|
3. Embeds a PKCS#7 detached signature under the **ETSI.CAdES.detached** subfilter, with the ESS **signing-certificate-v2** attribute binding the signer cert into the signed data. Pass `padesStrict: true` for strict **PAdES B-B** (also drops the PAdES-forbidden `signing-time` attribute).
|
|
17
17
|
4. Produces a PDF that opens cleanly in Preview / Adobe Reader with a valid signature panel — any post-signing edit invalidates the signature. `verifyPdfSignature()` checks this cryptographically (recomputes the digest over the signed ByteRange and RSA-verifies the signature).
|
|
18
|
+
5. *(Optional)* Adds a **post-quantum hybrid seal** — **Ed25519 + ML-DSA-65 (FIPS 204)** — embedded under the classical signature so the PDF stays Acrobat-valid while gaining quantum resistance. See [Post-quantum seal](#post-quantum-seal--ml-dsa-65-fips-204).
|
|
18
19
|
|
|
19
20
|
> **Trust vs. validity.** The signature is cryptographically *valid*, but the cert is *self-issued* — stock Adobe Reader shows "validity unknown" until the cert is trusted (org trust-store import, or plug in an AATL/CA signer). This verifies the signature math and integrity, not third-party trust. See the compliance notes below.
|
|
20
21
|
|
|
@@ -45,6 +46,10 @@ The library gives you **crypto + rendering**. You bring **persistence + UI + aut
|
|
|
45
46
|
| `render-pdf.ts` | HTML → PDF via puppeteer-core; auto-detects Lambda vs local Chrome | ✅ |
|
|
46
47
|
| `sign-pdf.ts` | Combine placeholder injection + PKCS#7 sign (ETSI.CAdES) | ✅ |
|
|
47
48
|
| `verify-pdf.ts` | Structural verifier (parses /ByteRange + PKCS#7 blob, returns diagnostics) | ✅ |
|
|
49
|
+
| `pq-seal.ts` | Hybrid **Ed25519 + ML-DSA-65 (FIPS 204)** post-quantum seal — keygen, sign, verify | ✅ |
|
|
50
|
+
| `pq-embed.ts` | Embed/extract the seal in a PDF as an append-only incremental update | ✅ |
|
|
51
|
+
| `pq-verify.ts` | `verifyPqSeal` + `verifyDocument` (classical **and** post-quantum verdict) | ✅ |
|
|
52
|
+
| `pq-lifecycle.ts` | `ensureActivePqKeys` / `rotatePqKeys` over a bring-your-own `PqKeyStore` | ✅ |
|
|
48
53
|
| `signature-block.ts` | HTML helper to render N signature blocks for multi-party flows | ✅ |
|
|
49
54
|
| `types.ts` | Shared TS types (`Signer`, `SigningCertPem`, …) | ✅ |
|
|
50
55
|
| `index.ts` | Public re-export barrel | ✅ |
|
|
@@ -187,6 +192,93 @@ See `CONSUMING.md` for the full consumer guide.
|
|
|
187
192
|
|
|
188
193
|
---
|
|
189
194
|
|
|
195
|
+
## Post-quantum seal — ML-DSA-65 (FIPS 204)
|
|
196
|
+
|
|
197
|
+
Harvest-now-decrypt-later is a real threat to long-lived signed documents: a
|
|
198
|
+
signature that is only RSA/ECDSA today is forgeable the day a cryptographically
|
|
199
|
+
relevant quantum computer exists. `@e-sig/core` can add a **hybrid post-quantum
|
|
200
|
+
seal** — **Ed25519 + ML-DSA-65** (the FIPS 204 module-lattice signature, née
|
|
201
|
+
Dilithium) — to any signed PDF, without giving up compatibility.
|
|
202
|
+
|
|
203
|
+
**How it stays compatible:** the seal does **not** replace the PKCS#7/PAdES RSA
|
|
204
|
+
signature (no mainstream PDF reader validates ML-DSA in PAdES yet). The seal is
|
|
205
|
+
embedded *first*, as an append-only incremental update, and the classical RSA
|
|
206
|
+
signature is applied on top — so it **cryptographically covers the seal**. Adobe
|
|
207
|
+
Acrobat still shows a valid signature; your verifier additionally confirms the
|
|
208
|
+
quantum-resistant layer. This is the hybrid migration path NIST/CNSA 2.0
|
|
209
|
+
recommend over a hard cutover.
|
|
210
|
+
|
|
211
|
+
```ts
|
|
212
|
+
import {
|
|
213
|
+
generateSelfSignedCert,
|
|
214
|
+
generatePqKeyBundle,
|
|
215
|
+
loadPqSigningKeys,
|
|
216
|
+
signPdf,
|
|
217
|
+
verifyDocument,
|
|
218
|
+
} from "@e-sig/core";
|
|
219
|
+
|
|
220
|
+
const cert = generateSelfSignedCert({ subjectName: "Acme Corp" });
|
|
221
|
+
|
|
222
|
+
// One hybrid key bundle per signer/tenant (persist wrapPqKeyBundle(...) at rest;
|
|
223
|
+
// or use ensureActivePqKeys with a PqKeyStore — see below).
|
|
224
|
+
const pqKeys = loadPqSigningKeys(generatePqKeyBundle().bundle);
|
|
225
|
+
|
|
226
|
+
const { signedPdf } = await signPdf({
|
|
227
|
+
pdf: unsigned,
|
|
228
|
+
keyPem: cert.keyPem,
|
|
229
|
+
certPem: cert.certPem,
|
|
230
|
+
reason: "Service Agreement acceptance",
|
|
231
|
+
location: "",
|
|
232
|
+
contactInfo: "jane@example.com",
|
|
233
|
+
name: "Jane Doe",
|
|
234
|
+
pqSeal: { keys: pqKeys }, // ← adds the post-quantum seal
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
// One call, two verdicts:
|
|
238
|
+
const v = verifyDocument(signedPdf);
|
|
239
|
+
console.log("classical (PAdES/RSA):", v.classical.ok); // → true (Acrobat-grade)
|
|
240
|
+
console.log("post-quantum (ML-DSA-65):", v.postQuantum.ok); // → true
|
|
241
|
+
console.log("PQ signer fingerprint:", v.postQuantum.mldsa65Fpr);
|
|
242
|
+
// v.ok === true only when BOTH layers verify AND the seal lies inside the
|
|
243
|
+
// RSA-signed region. Tampering with one byte of the document fails BOTH.
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Managed keys.** `ensureActivePqKeys({ store, tenantId, passphrase })` mints +
|
|
247
|
+
wraps a bundle on first use and reuses it thereafter (implement the small
|
|
248
|
+
`PqKeyStore` interface against your DB, same pattern as `CertStore`);
|
|
249
|
+
`rotatePqKeys(...)` rolls to a fresh key while old documents keep verifying
|
|
250
|
+
against the public key embedded in each seal. `signDocument({ pq: { keys } })`
|
|
251
|
+
threads it through the end-to-end orchestrator and records the PQ key id +
|
|
252
|
+
ML-DSA fingerprint in the audit row.
|
|
253
|
+
|
|
254
|
+
**Trust model (v1).** The seal carries the raw ML-DSA-65 public key + its
|
|
255
|
+
SHA-256 fingerprint; a relying party pins/publishes the expected fingerprint
|
|
256
|
+
(TOFU). Assert it in-band:
|
|
257
|
+
|
|
258
|
+
```ts
|
|
259
|
+
verifyDocument(signedPdf, {
|
|
260
|
+
expectedMldsa65Fpr: "<the signer's published fingerprint>", // fails if it differs
|
|
261
|
+
requirePq: true, // fails if no seal present (no silent downgrade)
|
|
262
|
+
});
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**X.509 identity (RFC 9881).** For an enterprise-shaped identity, issue a
|
|
266
|
+
self-signed **ML-DSA-65 X.509 certificate** (OID `2.16.840.1.101.3.4.3.18`) —
|
|
267
|
+
its SubjectPublicKeyInfo *and* signature are ML-DSA-65, so it parses and verifies
|
|
268
|
+
in OpenSSL 3.5+ (validated against 3.6). Bind it to a seal at verify time:
|
|
269
|
+
|
|
270
|
+
```ts
|
|
271
|
+
const cert = issueMlDsaCertificate({ keys, subjectName: "Acme Inc" }); // publish cert.certPem
|
|
272
|
+
verifyDocument(signedPdf, { signerCert: cert.certPem }); // fails unless the cert is valid AND owns the seal's key
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
`verifyMlDsaCertificate()` checks the self-signature, algorithm, and validity
|
|
276
|
+
window; `certMatchesPqSeal()` ties it to a seal by public-key fingerprint. Both
|
|
277
|
+
seal signatures are required — if either Ed25519 **or** ML-DSA-65 fails (or the
|
|
278
|
+
seal's `fingerprint`/`keyId` don't match its keys), the seal fails.
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
190
282
|
## Persisting certs + audit logs across requests
|
|
191
283
|
|
|
192
284
|
For real usage you need to:
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
export { PemSigner, type PemSignerInput } from "./pem-signer.js";
|
|
2
2
|
export { generateSelfSignedCert, encryptKeyPem, decryptKeyPem, type GenerateCertOptions, type GeneratedCert, } from "./cert-issuer.js";
|
|
3
3
|
export { renderHtmlToPdf, type RenderHtmlToPdfOptions } from "./render-pdf.js";
|
|
4
|
-
export { signPdf, type SignPdfInput, type SignPdfResult } from "./sign-pdf.js";
|
|
4
|
+
export { signPdf, SUPPORTED_SUBFILTERS, type SubFilter, type SignPdfInput, type SignPdfResult, } from "./sign-pdf.js";
|
|
5
5
|
export { verifyPdfStructure, verifyPdfSignature, type VerifyResult } from "./verify-pdf.js";
|
|
6
6
|
export { buildTimeStampReq, parseTimeStampResp, parseTstInfo, OID_TIMESTAMP_TOKEN, } from "./timestamp.js";
|
|
7
|
-
export type { Signer, SigningCertPem, SignedPdfMetadata, TsaTransport, } from "./types.js";
|
|
7
|
+
export type { Signer, SigningCertPem, SignedPdfMetadata, TsaTransport, ExternalSigner, ExternalSignerKeyType, } from "./types.js";
|
|
8
8
|
export type { StoredCert, CertStore, AuditLogEntry, AuditLogRow, AuditLogStore, EsigAuditAction, PdfStorageStore, } from "./adapters.js";
|
|
9
9
|
export { ensureActiveCert, type EnsureCertResult } from "./cert-lifecycle.js";
|
|
10
10
|
export { createEnvelope, resolveSigningToken, recordSignature, declineEnvelope, voidEnvelope, composeEnvelopeHtml, EnvelopeError, type Envelope, type EnvelopeSigner, type EnvelopeStatus, type EnvelopeSignerStatus, type EnvelopeStore, type CreateEnvelopeInput, type CreateEnvelopeResult, type TokenResolution, } from "./envelope.js";
|
|
11
11
|
export { signDocument, type SignDocumentInput, type SignDocumentResult, } from "./sign-document.js";
|
|
12
|
+
export { generatePqKeyBundle, loadPqSigningKeys, publicMaterialForKeys, wrapPqKeyBundle, unwrapPqKeyBundle, buildPqSeal, verifyPqSealSignatures, isWellFormedUuaidAssertion, canonicalJson, PQ_SEAL_VERSION, PQ_SEAL_ALG, type GeneratePqKeyBundleOptions, type PqKeyBundle, type PqPublicMaterial, type PqSigningKeys, type PqSeal, type PqSealVerification, type BuildPqSealInput, } from "./pq-seal.js";
|
|
13
|
+
export { embedPqSeal, extractPqSeal, hasPqSeal } from "./pq-embed.js";
|
|
14
|
+
export { verifyPqSeal, verifyDocument, type PqSealVerdict, type DocumentVerification, type VerifyPqSealOptions, type VerifyDocumentOptions, } from "./pq-verify.js";
|
|
15
|
+
export { ensureActivePqKeys, rotatePqKeys, type PqKeyStore, type StoredPqKeys, type EnsurePqKeysResult, } from "./pq-lifecycle.js";
|
|
16
|
+
export { issueMlDsaCertificate, parseMlDsaCertificate, verifyMlDsaCertificate, certMatchesPqSeal, ID_ML_DSA_65, type IssueMlDsaCertOptions, type MlDsaCertificate, type ParsedMlDsaCertificate, type MlDsaCertVerdict, } from "./pq-cert.js";
|
|
12
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,EACb,eAAe,EACf,WAAW,EACX,KAAK,0BAA0B,EAC/B,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EACL,YAAY,EACZ,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,YAAY,EACZ,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
export { PemSigner } from "./pem-signer.js";
|
|
12
12
|
export { generateSelfSignedCert, encryptKeyPem, decryptKeyPem, } from "./cert-issuer.js";
|
|
13
13
|
export { renderHtmlToPdf } from "./render-pdf.js";
|
|
14
|
-
export { signPdf } from "./sign-pdf.js";
|
|
14
|
+
export { signPdf, SUPPORTED_SUBFILTERS, } from "./sign-pdf.js";
|
|
15
15
|
export { verifyPdfStructure, verifyPdfSignature } from "./verify-pdf.js";
|
|
16
16
|
export { buildTimeStampReq, parseTimeStampResp, parseTstInfo, OID_TIMESTAMP_TOKEN, } from "./timestamp.js";
|
|
17
17
|
// ---- Cert lifecycle (stack-agnostic; interface-only) ----
|
|
@@ -20,4 +20,10 @@ export { ensureActiveCert } from "./cert-lifecycle.js";
|
|
|
20
20
|
export { createEnvelope, resolveSigningToken, recordSignature, declineEnvelope, voidEnvelope, composeEnvelopeHtml, EnvelopeError, } from "./envelope.js";
|
|
21
21
|
// ---- End-to-end orchestrator ----
|
|
22
22
|
export { signDocument, } from "./sign-document.js";
|
|
23
|
+
// ---- Post-quantum hybrid seal (Ed25519 + ML-DSA-65, FIPS 204) ----
|
|
24
|
+
export { generatePqKeyBundle, loadPqSigningKeys, publicMaterialForKeys, wrapPqKeyBundle, unwrapPqKeyBundle, buildPqSeal, verifyPqSealSignatures, isWellFormedUuaidAssertion, canonicalJson, PQ_SEAL_VERSION, PQ_SEAL_ALG, } from "./pq-seal.js";
|
|
25
|
+
export { embedPqSeal, extractPqSeal, hasPqSeal } from "./pq-embed.js";
|
|
26
|
+
export { verifyPqSeal, verifyDocument, } from "./pq-verify.js";
|
|
27
|
+
export { ensureActivePqKeys, rotatePqKeys, } from "./pq-lifecycle.js";
|
|
28
|
+
export { issueMlDsaCertificate, parseMlDsaCertificate, verifyMlDsaCertificate, certMatchesPqSeal, ID_ML_DSA_65, } from "./pq-cert.js";
|
|
23
29
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,kEAAkE;AAClE,EAAE;AACF,mFAAmF;AACnF,iFAAiF;AACjF,gFAAgF;AAEhF,8BAA8B;AAC9B,OAAO,EAAE,SAAS,EAAuB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,GAGd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAA+B,MAAM,iBAAiB,CAAC;AAC/E,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,kEAAkE;AAClE,EAAE;AACF,mFAAmF;AACnF,iFAAiF;AACjF,gFAAgF;AAEhF,8BAA8B;AAC9B,OAAO,EAAE,SAAS,EAAuB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,GAGd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAA+B,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EACL,OAAO,EACP,oBAAoB,GAIrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAqB,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAqBxB,4DAA4D;AAC5D,OAAO,EAAE,gBAAgB,EAAyB,MAAM,qBAAqB,CAAC;AAE9E,6DAA6D;AAC7D,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,aAAa,GASd,MAAM,eAAe,CAAC;AAEvB,oCAAoC;AACpC,OAAO,EACL,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAE5B,qEAAqE;AACrE,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,EACb,eAAe,EACf,WAAW,GAQZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EACL,YAAY,EACZ,cAAc,GAKf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,YAAY,GAIb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,YAAY,GAKb,MAAM,cAAc,CAAC"}
|
package/dist/pem-signer.d.ts
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import { Signer } from "@signpdf/utils";
|
|
2
|
-
import type { TsaTransport } from "./types.js";
|
|
2
|
+
import type { ExternalSigner, TsaTransport } from "./types.js";
|
|
3
3
|
export interface PemSignerInput {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
/** PEM-encoded RSA private key. Required unless `externalSigner` is provided. */
|
|
5
|
+
keyPem?: string;
|
|
6
|
+
/**
|
|
7
|
+
* PEM-encoded X.509 certificate. Required on the `keyPem` path; on the
|
|
8
|
+
* `externalSigner` path it defaults to `externalSigner.certificatePem`.
|
|
9
|
+
*/
|
|
10
|
+
certPem?: string;
|
|
11
|
+
/**
|
|
12
|
+
* External signing seam (HSM / KMS — see `ExternalSigner` in types.ts).
|
|
13
|
+
* Mutually exclusive with `keyPem`. The private key never enters this
|
|
14
|
+
* process; the PKCS#7 signature is produced by `signRsaSha256` (sync or
|
|
15
|
+
* async) over the final signed-attributes SET.
|
|
16
|
+
*/
|
|
17
|
+
externalSigner?: ExternalSigner;
|
|
6
18
|
/**
|
|
7
19
|
* Optional RFC 3161 timestamp transport. When provided, each produced
|
|
8
20
|
* signature is upgraded from CAdES-B to CAdES-T by embedding a
|
|
@@ -20,7 +32,9 @@ export interface PemSignerInput {
|
|
|
20
32
|
padesStrict?: boolean;
|
|
21
33
|
}
|
|
22
34
|
export declare class PemSigner extends Signer {
|
|
23
|
-
|
|
35
|
+
/** Present on the in-memory path; absent when an ExternalSigner is used. */
|
|
36
|
+
private privateKey?;
|
|
37
|
+
private externalSigner?;
|
|
24
38
|
private certificate;
|
|
25
39
|
private tsa?;
|
|
26
40
|
private padesStrict;
|
|
@@ -28,7 +42,9 @@ export declare class PemSigner extends Signer {
|
|
|
28
42
|
lastTimestamped: boolean;
|
|
29
43
|
/** Set when a non-required TSA call failed (signature falls back to CAdES-B). */
|
|
30
44
|
lastTsaError?: string;
|
|
31
|
-
constructor({ keyPem, certPem, tsa, padesStrict }: PemSignerInput);
|
|
45
|
+
constructor({ keyPem, certPem, tsa, padesStrict, externalSigner }: PemSignerInput);
|
|
46
|
+
/** RSA modulus size in bytes (a PKCS1-v1_5 signature is exactly this long). */
|
|
47
|
+
private modulusBytes;
|
|
32
48
|
sign(pdfBuffer: Buffer, signingTime?: Date): Promise<Buffer>;
|
|
33
49
|
/**
|
|
34
50
|
* Insert the ESS signing-certificate-v2 signed attribute into the first
|
|
@@ -36,6 +52,11 @@ export declare class PemSigner extends Signer {
|
|
|
36
52
|
* modified set. In `padesStrict` mode the PAdES-forbidden signing-time
|
|
37
53
|
* attribute is also removed. Returns the new signatureValue (forge binary
|
|
38
54
|
* string) so the caller can timestamp the FINAL signature.
|
|
55
|
+
*
|
|
56
|
+
* This is the single point where the real signature is produced (the value
|
|
57
|
+
* forge computed during p7.sign() is overwritten unconditionally) — so it is
|
|
58
|
+
* also the ExternalSigner seam: on that path the raw DER of the SET is handed
|
|
59
|
+
* to `signRsaSha256` (awaited; sync or async), instead of the in-memory key.
|
|
39
60
|
*/
|
|
40
61
|
private addSigningCertV2AndResign;
|
|
41
62
|
}
|
package/dist/pem-signer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pem-signer.d.ts","sourceRoot":"","sources":["../src/pem-signer.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,MAAM,EAAgB,MAAM,gBAAgB,CAAC;AAStD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"pem-signer.d.ts","sourceRoot":"","sources":["../src/pem-signer.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,MAAM,EAAgB,MAAM,gBAAgB,CAAC;AAStD,OAAO,KAAK,EAAE,cAAc,EAAyB,YAAY,EAAE,MAAM,YAAY,CAAC;AAgBtF,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,SAAU,SAAQ,MAAM;IACnC,4EAA4E;IAC5E,OAAO,CAAC,UAAU,CAAC,CAA2B;IAC9C,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,GAAG,CAAC,CAAe;IAC3B,OAAO,CAAC,WAAW,CAAU;IAE7B,6EAA6E;IACtE,eAAe,UAAS;IAC/B,iFAAiF;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;gBAEjB,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,cAAc;IAuCjF,+EAA+E;IAC/E,OAAO,CAAC,YAAY;IAMd,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAsFlE;;;;;;;;;;;OAWG;YACW,yBAAyB;CAuDxC"}
|
package/dist/pem-signer.js
CHANGED
|
@@ -21,12 +21,20 @@ import forge from "node-forge";
|
|
|
21
21
|
import { Signer, SignPdfError } from "@signpdf/utils";
|
|
22
22
|
import { buildTimeStampReq, parseTimeStampResp, derStringToUint8, uint8ToDerString, OID_TIMESTAMP_TOKEN, } from "./timestamp.js";
|
|
23
23
|
const asn1 = forge.asn1;
|
|
24
|
+
/** Expected RSA modulus bit length per ExternalSigner keyType. */
|
|
25
|
+
const EXTERNAL_KEY_BITS = {
|
|
26
|
+
"rsa-2048": 2048,
|
|
27
|
+
"rsa-3072": 3072,
|
|
28
|
+
"rsa-4096": 4096,
|
|
29
|
+
};
|
|
24
30
|
/** id-aa-signingCertificateV2 (ESS, RFC 5035) — binds the signer cert into the signed data. */
|
|
25
31
|
const OID_SIGNING_CERT_V2 = "1.2.840.113549.1.9.16.2.47";
|
|
26
32
|
/** id-signingTime (PKCS#9) — PAdES forbids this signed attribute (time belongs in /M). */
|
|
27
33
|
const OID_SIGNING_TIME = "1.2.840.113549.1.9.5";
|
|
28
34
|
export class PemSigner extends Signer {
|
|
35
|
+
/** Present on the in-memory path; absent when an ExternalSigner is used. */
|
|
29
36
|
privateKey;
|
|
37
|
+
externalSigner;
|
|
30
38
|
certificate;
|
|
31
39
|
tsa;
|
|
32
40
|
padesStrict;
|
|
@@ -34,19 +42,45 @@ export class PemSigner extends Signer {
|
|
|
34
42
|
lastTimestamped = false;
|
|
35
43
|
/** Set when a non-required TSA call failed (signature falls back to CAdES-B). */
|
|
36
44
|
lastTsaError;
|
|
37
|
-
constructor({ keyPem, certPem, tsa, padesStrict }) {
|
|
45
|
+
constructor({ keyPem, certPem, tsa, padesStrict, externalSigner }) {
|
|
38
46
|
super();
|
|
39
|
-
if (
|
|
40
|
-
|
|
47
|
+
if (externalSigner) {
|
|
48
|
+
if (keyPem) {
|
|
49
|
+
throw new Error("PemSigner: pass either keyPem or externalSigner, not both");
|
|
50
|
+
}
|
|
51
|
+
const pem = certPem ?? externalSigner.certificatePem;
|
|
52
|
+
if (!pem || !pem.includes("-----BEGIN CERTIFICATE-----")) {
|
|
53
|
+
throw new Error("PemSigner: certPem must be a PEM-encoded X.509 certificate");
|
|
54
|
+
}
|
|
55
|
+
this.certificate = forge.pki.certificateFromPem(pem);
|
|
56
|
+
const expectedBits = EXTERNAL_KEY_BITS[externalSigner.keyType];
|
|
57
|
+
if (!expectedBits) {
|
|
58
|
+
throw new Error(`PemSigner: unsupported externalSigner.keyType "${String(externalSigner.keyType)}"`);
|
|
59
|
+
}
|
|
60
|
+
const actualBits = this.certificate.publicKey.n.bitLength();
|
|
61
|
+
if (actualBits !== expectedBits) {
|
|
62
|
+
throw new Error(`PemSigner: externalSigner.keyType ${externalSigner.keyType} does not match the ` +
|
|
63
|
+
`certificate's RSA modulus (${actualBits} bits)`);
|
|
64
|
+
}
|
|
65
|
+
this.externalSigner = externalSigner;
|
|
41
66
|
}
|
|
42
|
-
|
|
43
|
-
|
|
67
|
+
else {
|
|
68
|
+
if (!keyPem || !keyPem.includes("-----BEGIN")) {
|
|
69
|
+
throw new Error("PemSigner: keyPem must be PEM-encoded");
|
|
70
|
+
}
|
|
71
|
+
if (!certPem || !certPem.includes("-----BEGIN CERTIFICATE-----")) {
|
|
72
|
+
throw new Error("PemSigner: certPem must be a PEM-encoded X.509 certificate");
|
|
73
|
+
}
|
|
74
|
+
this.privateKey = forge.pki.privateKeyFromPem(keyPem);
|
|
75
|
+
this.certificate = forge.pki.certificateFromPem(certPem);
|
|
44
76
|
}
|
|
45
|
-
this.privateKey = forge.pki.privateKeyFromPem(keyPem);
|
|
46
|
-
this.certificate = forge.pki.certificateFromPem(certPem);
|
|
47
77
|
this.tsa = tsa;
|
|
48
78
|
this.padesStrict = padesStrict ?? false;
|
|
49
79
|
}
|
|
80
|
+
/** RSA modulus size in bytes (a PKCS1-v1_5 signature is exactly this long). */
|
|
81
|
+
modulusBytes() {
|
|
82
|
+
return Math.ceil(this.certificate.publicKey.n.bitLength() / 8);
|
|
83
|
+
}
|
|
50
84
|
async sign(pdfBuffer, signingTime) {
|
|
51
85
|
if (!Buffer.isBuffer(pdfBuffer)) {
|
|
52
86
|
throw new SignPdfError("PDF expected as Buffer.", SignPdfError.TYPE_INPUT);
|
|
@@ -54,11 +88,20 @@ export class PemSigner extends Signer {
|
|
|
54
88
|
// Reset per-call timestamp state (signpdf calls sign() once per signature).
|
|
55
89
|
this.lastTimestamped = false;
|
|
56
90
|
this.lastTsaError = undefined;
|
|
91
|
+
// Key handed to forge's synchronous p7.sign() pass. On the externalSigner
|
|
92
|
+
// path this is a placeholder shim: forge only needs an object with a
|
|
93
|
+
// sign(md) method, and the signature it produces here is ALWAYS discarded —
|
|
94
|
+
// addSigningCertV2AndResign() below recomputes the signature over the final
|
|
95
|
+
// (spliced) signed-attributes SET on BOTH paths. Doing the real external
|
|
96
|
+
// call there (in our own async code, with the raw to-be-signed bytes in
|
|
97
|
+
// hand) is what makes async HSM signers possible without a two-pass sign.
|
|
98
|
+
const forgeSigningKey = this.privateKey ??
|
|
99
|
+
placeholderForgeKey(this.modulusBytes());
|
|
57
100
|
const p7 = forge.pkcs7.createSignedData();
|
|
58
101
|
p7.content = forge.util.createBuffer(pdfBuffer.toString("binary"));
|
|
59
102
|
p7.addCertificate(this.certificate);
|
|
60
103
|
p7.addSigner({
|
|
61
|
-
key:
|
|
104
|
+
key: forgeSigningKey,
|
|
62
105
|
certificate: this.certificate,
|
|
63
106
|
digestAlgorithm: forge.pki.oids.sha256,
|
|
64
107
|
authenticatedAttributes: [
|
|
@@ -76,7 +119,7 @@ export class PemSigner extends Signer {
|
|
|
76
119
|
// authenticatedAttributes list, so we splice it in and recompute the RSA
|
|
77
120
|
// signature over the exact bytes. Returns the NEW signatureValue.
|
|
78
121
|
const p7Asn1 = p7.toAsn1();
|
|
79
|
-
const sigValue = this.addSigningCertV2AndResign(p7Asn1);
|
|
122
|
+
const sigValue = await this.addSigningCertV2AndResign(p7Asn1);
|
|
80
123
|
// No timestamp requested → CAdES-B (now cert-bound).
|
|
81
124
|
if (!this.tsa) {
|
|
82
125
|
return Buffer.from(forge.asn1.toDer(p7Asn1).getBytes(), "binary");
|
|
@@ -114,8 +157,13 @@ export class PemSigner extends Signer {
|
|
|
114
157
|
* modified set. In `padesStrict` mode the PAdES-forbidden signing-time
|
|
115
158
|
* attribute is also removed. Returns the new signatureValue (forge binary
|
|
116
159
|
* string) so the caller can timestamp the FINAL signature.
|
|
160
|
+
*
|
|
161
|
+
* This is the single point where the real signature is produced (the value
|
|
162
|
+
* forge computed during p7.sign() is overwritten unconditionally) — so it is
|
|
163
|
+
* also the ExternalSigner seam: on that path the raw DER of the SET is handed
|
|
164
|
+
* to `signRsaSha256` (awaited; sync or async), instead of the in-memory key.
|
|
117
165
|
*/
|
|
118
|
-
addSigningCertV2AndResign(p7Asn1) {
|
|
166
|
+
async addSigningCertV2AndResign(p7Asn1) {
|
|
119
167
|
const signerInfo = firstSignerInfoSeq(p7Asn1);
|
|
120
168
|
const siChildren = signerInfo.value;
|
|
121
169
|
// signedAttrs = the [0] IMPLICIT context node; encryptedDigest = the
|
|
@@ -144,13 +192,36 @@ export class PemSigner extends Signer {
|
|
|
144
192
|
signedAttrs.value = attrs;
|
|
145
193
|
// Re-sign: RSA over DER(signedAttrs re-tagged as SET OF), SHA-256.
|
|
146
194
|
const setDer = asn1.toDer(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, attrs)).getBytes();
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
195
|
+
let newSig;
|
|
196
|
+
if (this.externalSigner) {
|
|
197
|
+
// External seam: RSASSA-PKCS1-v1_5/SHA-256 over the same raw bytes —
|
|
198
|
+
// byte-identical to forge's key.sign(md) for the same key.
|
|
199
|
+
const sig = await this.externalSigner.signRsaSha256(derStringToUint8(setDer));
|
|
200
|
+
const expected = this.modulusBytes();
|
|
201
|
+
if (!(sig instanceof Uint8Array) || sig.length !== expected) {
|
|
202
|
+
throw new Error(`PemSigner: externalSigner.signRsaSha256 returned ${sig instanceof Uint8Array ? sig.length : typeof sig} bytes; expected exactly ${expected} (RSASSA-PKCS1-v1_5 signatures are modulus-sized)`);
|
|
203
|
+
}
|
|
204
|
+
newSig = uint8ToDerString(sig);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
const md = forge.md.sha256.create();
|
|
208
|
+
md.update(setDer);
|
|
209
|
+
newSig = this.privateKey.sign(md); // RSASSA-PKCS1-V1_5 (forge default)
|
|
210
|
+
}
|
|
150
211
|
sigOctet.value = newSig;
|
|
151
212
|
return newSig;
|
|
152
213
|
}
|
|
153
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Stand-in key for forge's internal (always-discarded) signing pass on the
|
|
217
|
+
* ExternalSigner path. node-forge accepts any object with a `sign(md)` method
|
|
218
|
+
* as a SignerInfo key; this one emits modulus-sized zero bytes so the ASN.1
|
|
219
|
+
* tree has a correctly-shaped signature OCTET STRING until
|
|
220
|
+
* addSigningCertV2AndResign() overwrites it with the real external signature.
|
|
221
|
+
*/
|
|
222
|
+
function placeholderForgeKey(modulusBytes) {
|
|
223
|
+
return { sign: () => "\x00".repeat(modulusBytes) };
|
|
224
|
+
}
|
|
154
225
|
/**
|
|
155
226
|
* Build the ESS signing-certificate-v2 signed attribute (RFC 5035) binding the
|
|
156
227
|
* signer certificate into the signed data:
|
package/dist/pem-signer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pem-signer.js","sourceRoot":"","sources":["../src/pem-signer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pem-signer.js","sourceRoot":"","sources":["../src/pem-signer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { PqSigningKeys, PqSeal } from "./pq-seal.js";
|
|
2
|
+
/** RFC 9881 / NIST: id-ml-dsa-65. Used for BOTH the SPKI alg and the cert signature alg. */
|
|
3
|
+
export declare const ID_ML_DSA_65: "2.16.840.1.101.3.4.3.18";
|
|
4
|
+
export interface IssueMlDsaCertOptions {
|
|
5
|
+
/** The signing keys — the ML-DSA-65 keypair is both subject and issuer (self-signed). */
|
|
6
|
+
keys: PqSigningKeys;
|
|
7
|
+
/** Subject CN / O seed. ASCII-only (matches cert-issuer's node-forge round-trip guard). */
|
|
8
|
+
subjectName: string;
|
|
9
|
+
/** Validity window in days. Default 365. */
|
|
10
|
+
validityDays?: number;
|
|
11
|
+
/** Optional 16-byte serial; a CSPRNG positive serial is generated otherwise. */
|
|
12
|
+
serial?: Uint8Array;
|
|
13
|
+
/** Backdate notBefore by this many seconds to tolerate clock skew. Default 0. */
|
|
14
|
+
notBefore?: Date;
|
|
15
|
+
}
|
|
16
|
+
export interface MlDsaCertificate {
|
|
17
|
+
certPem: string;
|
|
18
|
+
certDer: Uint8Array;
|
|
19
|
+
/** SHA-256 hex of the DER-encoded certificate. */
|
|
20
|
+
fingerprint: string;
|
|
21
|
+
/** SHA-256 hex of the raw ML-DSA-65 public key — equals a seal's `keys.mldsa65Fpr`. */
|
|
22
|
+
publicKeyFingerprint: string;
|
|
23
|
+
notBefore: Date;
|
|
24
|
+
notAfter: Date;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Issue a self-signed ML-DSA-65 X.509 certificate for the given signing keys.
|
|
28
|
+
* The certificate's public key is the raw 1952-byte ML-DSA-65 key, and its own
|
|
29
|
+
* signature is ML-DSA-65 over the TBSCertificate.
|
|
30
|
+
*/
|
|
31
|
+
export declare function issueMlDsaCertificate(opts: IssueMlDsaCertOptions): MlDsaCertificate;
|
|
32
|
+
export interface ParsedMlDsaCertificate {
|
|
33
|
+
subjectCommonName: string;
|
|
34
|
+
notBefore: Date;
|
|
35
|
+
notAfter: Date;
|
|
36
|
+
/** Raw ML-DSA-65 public key (1952 bytes). */
|
|
37
|
+
publicKey: Uint8Array;
|
|
38
|
+
/** SHA-256 hex of `publicKey` — compare to a seal's `keys.mldsa65Fpr`. */
|
|
39
|
+
publicKeyFingerprint: string;
|
|
40
|
+
/** signatureAlgorithm OID (must be ID_ML_DSA_65). */
|
|
41
|
+
signatureAlgOid: string;
|
|
42
|
+
/** Exact DER of the TBSCertificate (byte-sliced, not re-encoded) — what the signature covers. */
|
|
43
|
+
tbsDer: Uint8Array;
|
|
44
|
+
/** Raw ML-DSA-65 signature (3309 bytes). */
|
|
45
|
+
signature: Uint8Array;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parse a self-signed ML-DSA-65 certificate. The TBS bytes are recovered by a
|
|
49
|
+
* raw TLV slice of the original DER (never re-encoded), so signature
|
|
50
|
+
* verification is over the exact signed bytes.
|
|
51
|
+
*/
|
|
52
|
+
export declare function parseMlDsaCertificate(cert: string | Uint8Array): ParsedMlDsaCertificate;
|
|
53
|
+
export interface MlDsaCertVerdict {
|
|
54
|
+
ok: boolean;
|
|
55
|
+
/** signatureAlgorithm is id-ml-dsa-65. */
|
|
56
|
+
algOk: boolean;
|
|
57
|
+
/** The ML-DSA-65 self-signature over the TBS verifies against the cert's own public key. */
|
|
58
|
+
selfSignatureOk: boolean;
|
|
59
|
+
/** `now` is within [notBefore, notAfter]. */
|
|
60
|
+
timeValid: boolean;
|
|
61
|
+
failures: string[];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Verify a self-signed ML-DSA-65 certificate: correct algorithm, the self
|
|
65
|
+
* signature validates against the embedded public key, and it is within its
|
|
66
|
+
* validity window. Never throws.
|
|
67
|
+
*/
|
|
68
|
+
export declare function verifyMlDsaCertificate(cert: string | Uint8Array, now?: Date): MlDsaCertVerdict;
|
|
69
|
+
/**
|
|
70
|
+
* Bind a certificate to a post-quantum seal: the cert must be valid AND its
|
|
71
|
+
* public key must be the one that produced the seal (fingerprint match). This
|
|
72
|
+
* is how a relying party upgrades from raw-fingerprint pinning to an X.509
|
|
73
|
+
* identity without changing the seal format.
|
|
74
|
+
*/
|
|
75
|
+
export declare function certMatchesPqSeal(cert: string | Uint8Array, seal: PqSeal, now?: Date): boolean;
|
|
76
|
+
//# sourceMappingURL=pq-cert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pq-cert.d.ts","sourceRoot":"","sources":["../src/pq-cert.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE1D,4FAA4F;AAC5F,eAAO,MAAM,YAAY,EAAG,yBAAkC,CAAC;AAoF/D,MAAM,WAAW,qBAAqB;IACpC,yFAAyF;IACzF,IAAI,EAAE,aAAa,CAAC;IACpB,2FAA2F;IAC3F,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,iFAAiF;IACjF,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,uFAAuF;IACvF,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,GAAG,gBAAgB,CA8EnF;AAwCD,MAAM,WAAW,sBAAsB;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,IAAI,CAAC;IACf,6CAA6C;IAC7C,SAAS,EAAE,UAAU,CAAC;IACtB,0EAA0E;IAC1E,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAC;IACxB,iGAAiG;IACjG,MAAM,EAAE,UAAU,CAAC;IACnB,4CAA4C;IAC5C,SAAS,EAAE,UAAU,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,sBAAsB,CA2CvF;AAcD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,0CAA0C;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,4FAA4F;IAC5F,eAAe,EAAE,OAAO,CAAC;IACzB,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,GAAE,IAAiB,GAAG,gBAAgB,CAmC1G;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO,CAK1G"}
|