function BuildPadesEvidenceReport(const Options: TPadesEvidenceReportOptions): TPadesEvidenceReport;
Объединяет факты подписей от PDFium с инспекцией алгоритмов и политик CMS, статусом доверия и отзыва сертификатов, статусом меток времени RFC 3161, покрытием DSS/VRI и анализом политики инкрементных ревизий
Метод удерживает один неизменяемый снимок исходных байтов и повторно использует его на этапах соответствия, доверия, DSS и ревизий без пересохранения документа
Идентичности подписанта и упорядоченного пути сертификатов выдаются как значения SHA-256, а не копированием тел сертификатов в отчёт
TrustOptions управляет офлайн- или онлайн-оценкой доверия, проверкой отзыва, проверкой меток времени, прогрессом, таймаутом и отменойMaxSourceBytes отклоняет слишком большие удерживаемые источники до начала анализа доказательствMaxSignatures ограничивает собранные доказательства по каждой подписиMaxRevisionChangesPerSignature ограничивает удерживаемые для каждой подписи изменения объектов между ревизиямиMaxValidationMaterials и MaxStoredValidationBytes ограничивают доказательства сертификатов, OCSP и CRL без декодирования сжатых потоковMaxVriEntries ограничивает словари VRI, специфичные для подписейTPadesEvidenceReport включает сводки проверки и ревизий, хешированные записи материалов DSS, графы ссылок VRI, счётчик подписей PDFium, состояние усечения и по одному TPadesSignatureEvidence на каждую удержанную подпись
ToJson выдаёт вложенный документ доказательств, а ToCsv выдаёт по строке на каждую удержанную ревизионную правку либо одну итоговую строку, когда у подписи нет удержанных правок
TPadesSignatureEvidence.Validation сохраняет RevocationReason и NativeRevocationError подписи независимо от TimeStampRevocationReason и NativeTimeStampRevocationError метки времени
Каждая запись JSON в signatures включает revocationReason, nativeRevocationError, timeStampSignatureStatus, timeStampTrustStatus, timeStampRevocationStatus, timeStampRevocationReason и nativeTimeStampRevocationError. Существующие члены и их смыслы не меняются; члена со схемой-версией в формате JSON нет, поэтому потребителям следует читать поля по именам и мириться с дополнительными членами
CSV сохраняет исходные 40 столбцов в исходном порядке и дописывает те же семь полей в перечисленном выше порядке — всего 47 столбцов. И итоговые строки, и строки ревизионных правок несут диагностику; существующие позиции столбцов не меняются. Читающим следует опираться на имена заголовков или терпеть дополнительные столбцы в конце, а не требовать ровно 40 столбцов
Строки причин — это none, certificateRevoked, crlExpired, crlNotYetValid, crlUnavailable, crlSignatureInvalid, crlInvalid, chainUntrusted или unknown. Нативные ошибки — числовые коды конкретного бэкенда, например ошибки проверки X509 в OpenSSL или сырые значения провайдера Windows либо DWORD из GetLastError, где ноль означает отсутствие нативной диагностики. Значения Windows экспортируются как есть, и их нельзя трактовать как агрегатные маски доверия цепочки или общее пространство HRESULT
Вердикт определяйте по revocationStatus и timeStampRevocationStatus. Причина none или нулевая ошибка встречаются и когда проверка выключена, не достигнута или лишена детальной диагностики бэкенда; экспорт доказательств не выполняет дополнительного прохода проверки
Active, равного TrueIsTruncated устанавливается, когда любой из бюджетов — подписей, ревизионных правок, материалов проверки, сохранённых байтов или VRI — усекает детализацию отчётаpvssIncomplete
var
Options: TPadesEvidenceReportOptions;
Report: TPadesEvidenceReport;
begin
Options := TPadesEvidenceReportOptions.Default;
Report := Pdf1.BuildPadesEvidenceReport(Options);
TFile.WriteAllText('signature-evidence.json', Report.ToJson);
end;