PAdES Signature-Policy Doğrulaması
HotPDF, PAdES E-EPES imzalarının kullandığı açık CMS signature-policy-identifier signed attribute'unu oluşturur ve doğrular
Açık bir policy oluşturma
THPDFCMSSignOptions üzerinde SignaturePolicyOID ve policy belgesinin digest'ini ayarlayın, ardından opsiyonel structured qualifier'ları seçin
Options := HPDFCMSDefaultOptions(palExtended_E_EPES);
Options.SignaturePolicyOID := '1.2.3.4.5.1';
Options.SignaturePolicyHash := HPDFCMSDigestBytes(PolicyDocument, cmsdaSHA256);
Options.SignaturePolicyURI := 'https://policies.example/approval-v1';
SetLength(Options.SignaturePolicyQualifiers, 1);
Options.SignaturePolicyQualifiers[0].Kind := cmsqUserNotice;
Options.SignaturePolicyQualifiers[0].ExplicitText := 'Approval policy applies';
CMS := HPDFCMSBuildSignedDataEx(KeyMaterial, DocumentDigest, Options);
SignaturePolicyHashAlgOID, boş bırakıldığında SHA-256 varsayılır; SignaturePolicyURI ise tek bir SPuri qualifier'ı için uyumluluk kısayolu olarak kalır ve SignaturePolicyQualifiers ile birleştirilebilir
Structured qualifier modeli, SPuri'yi, opsiyonel notice reference ve açık metinle SPUserNotice'i ve OID veya URI ile tanımlanan SPDocSpecification'ı destekler
SignaturePolicyHashIsUnknown değerini yalnızca signer policy hash'ini bilmiyorken ayarlayın; HotPDF bu durumda seçilen digest uzunluğunda ETSI all-zero gösterimini yayınlar
Ayrıştırma ve raporlama
HPDFParseCMSSignature, attribute'u THPDFSignatureInfo.SignaturePolicy üzerinden dışa açar; identifier, hash algoritması, hash baytları, unknown-hash bayrağı, qualifier'lar ve doğrulama durumu dâhil
Bilinen qualifier değerleri tipli alanlara decode edilir; tanınmayan bir qualifier ise OID'ini ve raw value DER'ini uygulama düzeyi işlem için korur
HPDFSignatureValidationReportToJSON, aynı policy ve qualifier verisini makine tarafından okunabilir bir doğrulama durumuyla serileştirir
Zorunlu bir policy sabitleme
VerifyOptions := THPDFCMSVerifyOptions.Default;
VerifyOptions.RequireSignaturePolicy := True;
VerifyOptions.ExpectedSignaturePolicyOID := '1.2.3.4.5.1';
VerifyOptions.ExpectedSignaturePolicyHash := ExpectedPolicyHash;
VerifyOptions.SignaturePolicyDocument := PolicyDocument;
VerifyOptions.VerifySignaturePolicyDocumentHash := True;
VerifyOptions.RejectUnknownSignaturePolicyHash := True;
Status := HPDFVerifyCMSSignatureEx(Source, ByteRange, CMS,
VerifyOptions, SignatureInfo);
Beklenen OID ve hash alanları yalnızca karşılık gelen değeri kısıtlar; VerifySignaturePolicyDocumentHash true olduğunda policy belgesi doğrulaması, kasıtlı olarak boş bırakılmış bir belgeyi bile hash'ler
Eksik, uyuşmayan, desteklenmeyen veya reddedilen bilinmeyen politikalar svSignaturePolicyMismatch ve vfcSignaturePolicyMismatch döndürür; ayrıntılı neden THPDFSignaturePolicyValidationStatus ile verilir
Policy kontrolleri, signature-provider, certificate-path veya evidence işlemlerinden önce çalışır ve yalnızca primary SignerInfo kayıtlarına uygulanır; böylece ana belge policy'si counter-signature'ları kısıtlamaz
Katılık ve sınırlar
Parser, yinelenen policy attribute'larını, birden çok değeri, implied-policy NULL'u, bozuk bilinen qualifier'ları, ASCII dışı IA5String değerlerini, geçersiz Unicode'u, hatalı bilinen digest uzunluklarını ve yapılandırılmış implementation limitlerinin üzerindeki collection boyutlarını reddeder
PAdES E-EPES, açık policy attribute'unu tam olarak bir kez ister ve bu attribute mevcutken PDF Signature Dictionary /Reason girdisini yasaklar; CMS katmanı PDF dictionary'sini inceleyemediği için bu son kısıtı PDF üreten iş akışı uygulamak zorundadır
Bkz. CMS multiple primary signers, CMS özet algoritması tutarlılığı ve CMS doğrulama raporları