THPDFSignatureInfo 记录
描述一个已加载的 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 | 渲染后的证书主体 DN |
IssuerDN | 渲染后的证书签发者 DN |
SerialNumberHex | 证书序列号,十六进制编码 |
ValidFrom | 证书 notBefore,缺失时为 0 |
ValidTo | 证书 notAfter,缺失时为 0 |
SigningTime | 已签名属性 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可以判断签名之后是否有后续修订改动了文档- 同一条记录也供证书验证使用,一次调用即可覆盖身份、覆盖范围、算法与证书链检查