THPDFSignatureInfo Record
描述一個已載入的 PDF 簽章,從憑證身分、位元組範圍覆蓋情形一路到驗證結論
宣告
THPDFSignatureInfo= record
FieldName: AnsiString; // signature form field partial name
SubFilter: AnsiString; // /SubFilter of the signature dictionary
SignerName: AnsiString; // CN of the signer certificate subject
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 signature algorithm name
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 | 憑證主體辨別名稱的渲染結果 |
IssuerDN | 憑證簽發者辨別名稱的渲染結果 |
SerialNumberHex | 憑證序號,十六進位編碼 |
ValidFrom | 憑證 notBefore,缺席時為 0 |
ValidTo | 憑證 notAfter,缺席時為 0 |
SigningTime | signed 屬性 1.2.840.113549.1.9.5,其次 /M 項,再其次 0 |
HashAlgorithm | 摘要家族名稱:SHA-1、SHA-2、SHA-3 或 SHAKE256 |
DigestAlgorithmOID | 摘要演算法的物件識別碼 |
DigestConsistencyIssue | CMS 結構內部偵測到的摘要演算法不一致 |
SignaturePolicy | 簽章帶有原則時的原則細節 |
Reason | /Reason 項的值 |
Location | /Location 項的值 |
ContactInfo | /ContactInfo 項的值 |
ByteRange | 描述被覆蓋位元組區間的 /ByteRange 偏移與長度對 |
CoversWholeDocument | 位元組範圍涵蓋除 /Contents 空洞外的整個檔案時為 True |
SignedRevisionLength | 此簽章覆蓋的來源前綴長度 |
UnsignedTrailingBytes | 簽署修訂之後附加的位元組數 |
CertificateTimeValidity | 簽署時間是否落在憑證有效期間內 |
Status | THPDFSignatureVerifyStatus 型別的驗證結論 |
PublicKeyAlgorithm | 公開金鑰家族:RSA、ECDSA、EdDSA 或 ML-DSA |
SignatureAlgorithm | CMS 簽章演算法名稱 |
SignatureAlgorithmOID | 簽章演算法的物件識別碼 |
CurveName | ECDSA 曲線名稱,例如 P-256 |
Timestamp | RFC 3161 簽章時間戳記或文件時間戳記的細節 |
CMSAttributes | 已簽署 CMS 屬性的摘要 |
CertificateValidation | 憑證鏈驗證結果 |
使用說明
GetLoadedSignatureInfo回傳描述欄位;VerifyLoadedSignature與VerifyLoadedSignatureEx在檢查摘要後填入狀態與驗證欄位CoversWholeDocument加上UnsignedTrailingBytes可以看出簽署後的修訂是否改動過文件- 同一筆記錄也會餵給憑證驗證,一次呼叫就涵蓋身分、覆蓋範圍、演算法與憑證鏈檢查