Validarea politicii de semnătură PAdES
HotPDF creează și validează atributul semnat CMS explicit signature-policy-identifier, folosit de semnăturile PAdES E-EPES
Generarea unei politici explicite
Setați SignaturePolicyOID și digestul documentului de politică pe THPDFCMSSignOptions, apoi alegeți calificatori structurați opționali
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 are implicit SHA-256 când rămâne gol, în timp ce SignaturePolicyURI este o scurtătură de compatibilitate pentru un singur calificator SPuri și poate fi combinat cu SignaturePolicyQualifiers
Modelul de calificatori structurați suportă SPuri, SPUserNotice cu o referință de notificare opțională și text explicit, și SPDocSpecification identificat printr-un OID sau URI
Setați SignaturePolicyHashIsUnknown doar când semnatarul nu cunoaște hash-ul politicii; HotPDF emite atunci reprezentarea ETSI de zerouri la lungimea de digest selectată
Parsare și raportare
HPDFParseCMSSignature expune atributul prin THPDFSignatureInfo.SignaturePolicy, inclusiv identificatorul, algoritmul de hash, octeții de hash, indicatorul de hash necunoscut, calificatorii și statusul de validare
Valorile cunoscute de calificatori sunt decodate în câmpuri tipizate, în timp ce un calificator nerecunoscut își păstrează OID-ul și valoarea DER brută, pentru tratare la nivel de aplicație
HPDFSignatureValidationReportToJSON serializa aceleași date de politică și de calificatori, cu un status de validare interpretabil de mașină
Fixarea unei politici obligatorii
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);
Câmpurile de OID și de hash așteptat constrâng doar valoarea corespunzătoare, iar verificarea documentului de politică face hash chiar și unui document intenționat gol când VerifySignaturePolicyDocumentHash este true
Politicile lipsă, nepotrivite, nesuportate sau necunoscute-respinse returnează svSignaturePolicyMismatch și vfcSignaturePolicyMismatch cu un THPDFSignaturePolicyValidationStatus precis
Verificările de politică rulează înainte de lucrul cu furnizorul de semnătură, lanțul de certificate sau dovezile și se aplică doar înregistrărilor primare SignerInfo, astfel încât politica documentului părinte nu constrânge contra-semnăturile
Rigoare și limite
Parser-ul respinge atribute de politică duplicate, valori multiple, NULL de politică implicită, calificatori cunoscuți malformați, valori IA5String non-ASCII, Unicode invalid, lungimi greșite de digeste cunoscute și dimensiuni de colecții peste limitele configurate ale implementării
PAdES E-EPES cere atributul de politică explicită exact o dată și interzice intrarea /Reason din PDF Signature Dictionary când atributul este prezent; stratul CMS nu poate inspecta dicționarul PDF, astfel încât fluxul de lucru care produce PDF-ul trebuie să impună acea constrângere finală
Consultați CMS cu semnături primare multiple, coerența algoritmului de digest CMS și Rapoarte de validare a semnăturilor CMS