Provjera pravila potpisa u PAdES-u
HotPDF stvara i provjerava eksplicitni CMS atribut signature-policy-identifier koji potpisuju PAdES E-EPES potpisi
Generiranje eksplicitnog pravila
Postavite SignaturePolicyOID i digest dokumenta pravila na THPDFCMSSignOptions, a zatim odaberite opcionalne strukturirane kvalifikatore
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 se, kada je prazan, prema zadanim postavkama postavlja na SHA-256, dok SignaturePolicyURI ostaje kratkom putanjom kompatibilnosti za jedan SPuri kvalifikator i može se kombinirati s SignaturePolicyQualifiers
Model strukturiranih kvalifikatora podržava SPuri, SPUserNotice s opcionalnom referencom na bilješku i eksplicitnim tekstom te SPDocSpecification identificiran OID-om ili URI-jem
Postavite SignaturePolicyHashIsUnknown samo kada potpisnik ne poznaje hash pravila; HotPDF tada šalje ETSI reprezentaciju od samih nula na odabranoj duljini digesta
Parsiranje i izvješće
HPDFParseCMSSignature izlaže atribut kroz THPDFSignatureInfo.SignaturePolicy, uključujući njegov identifikator, algoritam hasha, hash bajtove, zastavicu nepoznatog hasha, kvalifikatore i status provjere
Poznate vrijednosti kvalifikatora dekodiraju se u tipizirana polja, dok neprepoznati kvalifikator zadržava svoj OID i sirove DER vrijednosti za obradu na razini aplikacije
HPDFSignatureValidationReportToJSON serijalizira iste podatke o pravilu i kvalifikatorima uz strojno čitljiv status provjere
Zaključavanje obaveznog pravila
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);
Polja očekivanog OID-a i hasha ograničavaju samo odgovarajuću vrijednost, a provjera dokumenta pravila hashira čak i namjerno prazan dokument kada je VerifySignaturePolicyDocumentHash postavljen na true
Nedostajuća, neusklađena, nepodržana ili odbijena nepoznata pravila vraćaju svSignaturePolicyMismatch i vfcSignaturePolicyMismatch s preciznim THPDFSignaturePolicyValidationStatus stanjem
Provjere pravila izvode se prije rada providera potpisa, lanca certifikata ili dokaza i primjenjuju se samo na primarne SignerInfo zapise, tako da pravilo nadređenoga dokumenta ne ograničava counter-potpise
Strogost i ograničenja
Parser odbacuje duplicirane atribute pravila, višestruke vrijednosti, implied-policy NULL, neispravne poznate kvalifikatore, vrijednosti IA5String koje nisu ASCII, nevažeći Unicode, pogrešne duljine poznatih digest-a i veličine kolekcija iznad konfiguriranih ograničenja implementacije
PAdES E-EPES zahtijeva eksplicitni atribut pravila točno jednom i zabranjuje unos /Reason u PDF Signature Dictionary kada je taj atribut prisutan; CMS sloj ne može pregledati PDF dictionary, pa radni tijek koji stvara PDF mora osigurati to posljednje ograničenje
Vidi CMS multiple primary signers, CMS digest-algorithm consistency i CMS validation reports