PdfSigner
One-call signing, sync and async. The certificate's private key may live in a PFX file, the OS store, or hardware-backed storage.
Digital signatures usually mean a signing service and documents
leaving your infrastructure. LM-Kit ships the whole chain in
process: PdfSigner produces PAdES and PKCS#7
signatures with certification, RFC 3161 timestamps, and long-term
validation; PdfSignatureValidator verifies any signed
PDF against your own trust anchors. Keys load from files, OS
stores, or hardware, and can stay in an HSM entirely.
PdfSignerOne-call signing, sync and async. The certificate's private key may live in a PFX file, the OS store, or hardware-backed storage.
PdfSignatureValidatorOne verdict per signature: Valid, Indeterminate, or Invalid. Integrity, identity, revocation, and timestamp judged separately.
BeginSign prepares the document; your HSM or signing service returns the CMS container. Private keys never touch the process.
Sign, certify, countersign, timestamp, and keep signatures verifiable for decades. Every operation runs on your machines.
Standards
PAdES detached signatures (ETSI.CAdES.detached) by default, classic PKCS#7 when a legacy workflow requires it. Standard PDFs, readable everywhere.
Revisions
Signing appends an incremental revision, so the original bytes survive verbatim and existing signatures keep verifying. Countersigning is just signing again.
Certify
Certify a document with DocMDP permissions: forbid all changes, or allow form filling and annotations while the certification stays intact.
Time
Attach a timestamp token from any TSA to a signature, or add standalone document timestamps that prove the file existed at a point in time.
LTV
ExtendLtv embeds certificates and revocation data into the document security store, so signatures still verify after certificates expire.
Visible
Visible marks with text and images, auto-composed in 14 languages, placed by exact bounds. Embed your own font for non-Latin scripts.
Verify
Verification chains each signer to trust anchors you control and reports whether the signature covers the whole document or an earlier revision.
Agents
Built-in tools (pdf_sign, pdf_signature_verify, pdf_signature_list, pdf_document_timestamp, pdf_ltv_extend) put signing under agent permission policies.
One call signs the document with a PAdES signature. The original bytes survive verbatim in the signed file.
using LMKit.Document.Pdf; // The certificate's private key may live in a PFX file, // the OS certificate store, or hardware-backed storage. var options = new PdfSigningOptions { Certificate = certificate, Reason = "Approved", }; PdfSigner.Sign("contract.pdf", "contract-signed.pdf", options);
Verification returns one result per signature, with integrity, identity, revocation, and coverage judged separately.
using LMKit.Document.Pdf; var report = PdfSignatureValidator.Validate("contract-signed.pdf"); Console.WriteLine($"Overall: {report.OverallStatus}"); foreach (var result in report.Signatures) { Console.WriteLine($"#{result.Signature.Index}: {result.Status}"); Console.WriteLine($" Integrity: {result.Integrity}, identity: {result.Identity}"); Console.WriteLine($" Covers whole file: {result.Signature.CoversEntireDocument}"); }
Timestamp the signed file through your TSA, then embed revocation material so it verifies long after certificates expire.
using LMKit.Document.Pdf; // RFC 3161 document timestamp from your TSA. byte[] stamped = PdfSigner.AddDocumentTimestamp( File.ReadAllBytes("contract-signed.pdf"), new PdfTimestampOptions { TimestampAuthority = new Uri("https://tsa.example.com") }); // Embed certificates and revocation data (DSS) so the // signature stays verifiable after certificates expire. byte[] archival = PdfSigner.ExtendLtv(stamped); File.WriteAllBytes("contract-ltv.pdf", archival);
Verification follows the three-state model professional viewers use, so a verdict you store is a verdict you can defend.
Valid
The document bytes match the signature and the signer chains to a trust anchor you configured.
Indeterminate
Nothing proves the signature broken, but it could not be fully verified: an untrusted signer or missing information. Reported as exactly that.
Invalid
The document was modified after signing, the signature value does not verify, or the signer certificate is revoked.
The same signing engine ships in LM-Kit One as REST endpoints: sign, verify, timestamp, and LTV-extend PDFs from any language over HTTP.
Archive what you sign: PdfAConverter produces ISO 19005 output and PdfAValidator checks any file's claim independently.
PdfRedactor permanently removes sensitive content before the document is signed and released. Content is deleted, not covered.
Merge, split, render, search-highlight, unlock, and inspect PDFs with the same library.
Working console demos on GitHub, step-by-step how-to guides on the docs site, and the API reference for the classes used on this page.
Sign, verify, timestamp, and LTV-extend PDFs end to end via PdfSigner and PdfSignatureValidator.
Open on GitHub → SampleStep-by-step doc page: prerequisites, setup, code path, expected output.
Read on docs → API referenceAPI reference for signing, document timestamps, and LTV extension.
Open the reference → API referenceAPI reference for signature verification and the per-signature report.
Open the reference →