Запись THPDFSignatureInfo
Описывает одну загруженную PDF-подпись: от личностей сертификатов через покрытие byte range до вердикта проверки
Объявление
THPDFSignatureInfo= record
FieldName: AnsiString; // signature form field partial name
SubFilter: AnsiString; // /SubFilter of the signature dictionary
SignerName: AnsiString; // CN субъекта сертификата подписанта
SubjectDN: AnsiString; // rendered subject distinguished name
IssuerDN: AnsiString; // rendered issuer distinguished name
SerialNumberHex: AnsiString; // certificate serial number, hex encoded
ValidFrom: TDateTime; // certificate notBefore (0 when absent)
ValidTo: TDateTime; // certificate notAfter (0 when absent)
SigningTime: TDateTime; // signed attribute 1.2.840.113549.1.9.5,
// else the /M entry, else 0
HashAlgorithm: AnsiString; // SHA-1, SHA-2, SHA-3, or SHAKE256
DigestAlgorithmOID: AnsiString;
DigestConsistencyIssue: THPDFCMSDigestConsistencyIssue;
SignaturePolicy: THPDFSignaturePolicyInfo;
Reason: AnsiString; // /Reason from the signature dictionary
Location: AnsiString; // /Location
ContactInfo: AnsiString; // /ContactInfo
ByteRange: array of Int64; // /ByteRange pairs (offset, length, ...)
CoversWholeDocument: boolean; // ByteRange spans the file except /Contents
SignedRevisionLength: Int64; // source prefix covered by this signature
UnsignedTrailingBytes: Int64; // bytes appended after the signed revision
CertificateTimeValidity: THPDFSignatureTimeValidity;
Status: THPDFSignatureVerifyStatus;
PublicKeyAlgorithm: AnsiString; // RSA, ECDSA, EdDSA, or ML-DSA
SignatureAlgorithm: AnsiString; // Имя алгоритма подписи CMS
SignatureAlgorithmOID: AnsiString;
CurveName: AnsiString; // ECDSA curve, such as 'P-256'
Timestamp: THPDFTimestampInfo; // RFC 3161 signature or document timestamp
CMSAttributes: THPDFCMSAttributeSummary;
CertificateValidation: THPDFCertificateValidationInfo;
end;
Модуль
HPDFSignVerify
Поля
| Поле | Назначение |
|---|---|
FieldName | Частичное имя поля формы подписи |
SubFilter | Значение записи /SubFilter в словаре подписи |
SignerName | CN субъекта сертификата подписанта |
SubjectDN | Отформатированное distinguished name субъекта сертификата |
IssuerDN | Отформатированное distinguished name издателя сертификата |
SerialNumberHex | Серийный номер сертификата в hex |
ValidFrom | notBefore сертификата, 0 при отсутствии |
ValidTo | notAfter сертификата, 0 при отсутствии |
SigningTime | Подписанный атрибут 1.2.840.113549.1.9.5, иначе запись /M, иначе 0 |
HashAlgorithm | Имя семейства digest: SHA-1, SHA-2, SHA-3 или SHAKE256 |
DigestAlgorithmOID | OID алгоритма digest |
DigestConsistencyIssue | Обнаруженное расхождение digest-алгоритмов внутри CMS-структуры |
SignaturePolicy | Детали политики подписи, когда подпись несёт политику |
Reason | Значение записи /Reason |
Location | Значение записи /Location |
ContactInfo | Значение записи /ContactInfo |
ByteRange | Пары смещение-длина /ByteRange, описывающие покрытые интервалы байтов |
CoversWholeDocument | True, когда byte range покрывает весь файл, кроме промежутка /Contents |
SignedRevisionLength | Длина префикса источника, покрытого этой подписью |
UnsignedTrailingBytes | Байты, добавленные после подписанной ревизии |
CertificateTimeValidity | Попадает ли время подписания в окно действия сертификата |
Status | Вердикт проверки типа THPDFSignatureVerifyStatus |
PublicKeyAlgorithm | Семейство открытого ключа: RSA, ECDSA, EdDSA или ML-DSA |
SignatureAlgorithm | Имя алгоритма подписи CMS |
SignatureAlgorithmOID | OID алгоритма подписи |
CurveName | Имя кривой ECDSA, например P-256 |
Timestamp | Детали signature timestamp или document timestamp по RFC 3161 |
CMSAttributes | Сводка подписанных CMS-атрибутов |
CertificateValidation | Итог валидации цепочки сертификатов |
Примечания по использованию
GetLoadedSignatureInfoвозвращает описательные поля;VerifyLoadedSignatureиVerifyLoadedSignatureExзаполняют поля статуса и валидации после проверки digestCoversWholeDocumentвместе сUnsignedTrailingBytesпоказывает, меняла ли документ после подписания последующие ревизии- Та же запись подаётся на вход валидации сертификатов, так что один вызов покрывает личности, покрытие, алгоритмы и проверки цепочки