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ı