function BuildPadesEvidenceReport(const Options: TPadesEvidenceReportOptions): TPadesEvidenceReport;
Combines PDFium signature facts with CMS algorithm and policy inspection, certificate trust and revocation status, RFC 3161 timestamp status, DSS/VRI coverage, and incremental revision policy analysis
The method retains one immutable source-byte capture and reuses it across compliance, trust, DSS, and revision stages without re-saving the document
Signer and ordered certificate-path identities are emitted as SHA-256 values rather than copying certificate bodies into the report
TrustOptions controls offline or online trust evaluation, revocation checking, timestamp checking, progress, timeout, and cancellationMaxSourceBytes rejects oversized retained sources before evidence analysis beginsMaxSignatures limits collected per-signature evidenceMaxRevisionChangesPerSignature limits object-level revision changes retained for each signatureMaxValidationMaterials and MaxStoredValidationBytes bound certificate, OCSP, and CRL evidence without decoding compressed streamsMaxVriEntries limits signature-specific VRI dictionariesTPadesEvidenceReport includes validation and revision summaries, hashed DSS material records, VRI reference graphs, PDFium signature count, truncation state, and one TPadesSignatureEvidence per retained signature
ToJson emits a nested evidence document and ToCsv emits one row per retained revision change, or one summary row when a signature has no retained changes
TPadesSignatureEvidence.Validation preserves the signature's RevocationReason and NativeRevocationError independently of the timestamp's TimeStampRevocationReason and NativeTimeStampRevocationError
Each JSON entry in signatures includes revocationReason, nativeRevocationError, timeStampSignatureStatus, timeStampTrustStatus, timeStampRevocationStatus, timeStampRevocationReason and nativeTimeStampRevocationError. Existing members keep their names and meanings; the JSON format carries no schema-version member, so consumers should read fields by name and tolerate additional members
CSV keeps its original 40 columns in their original order and appends those same seven fields in the order given above, 47 columns in total. Both summary rows and revision-change rows carry the diagnostics; existing column positions are untouched. Readers should rely on the header names, or tolerate additional trailing columns, rather than expecting exactly 40 columns
Reason strings are none, certificateRevoked, crlExpired, crlNotYetValid, crlUnavailable, crlSignatureInvalid, crlInvalid, chainUntrusted or unknown. Native errors are numeric backend-specific codes, such as OpenSSL X509 verification errors or raw Windows provider or GetLastError DWORD values, zero meaning no native diagnostic. Windows values are exported unchanged and must not be read as aggregate chain trust masks or a common HRESULT space
Use revocationStatus and timeStampRevocationStatus to settle the verdict. A reason of none or a zero error also occurs when checking is disabled, never reached, or lacks detailed backend diagnostics; exporting evidence performs no extra verification pass
Active to be TrueIsTruncated is set when any signature, revision-change, validation-material, stored-byte, or VRI budget clips report detailpvssIncomplete
var
Options: TPadesEvidenceReportOptions;
Report: TPadesEvidenceReport;
begin
Options := TPadesEvidenceReportOptions.Default;
Report := Pdf1.BuildPadesEvidenceReport(Options);
TFile.WriteAllText('signature-evidence.json', Report.ToJson);
end;