Ověření politiky podpisu PAdES
HotPDF vytváří a ověřuje explicitní CMS atribut signature-policy-identifier používaný podpisy PAdES E-EPES
Generování explicitní politiky
Nastavte SignaturePolicyOID a hash dokumentu politiky na THPDFCMSSignOptions a poté zvolte volitelné strukturované kvalifikátory
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 při prázdné hodnotě nastaví na SHA-256, zatímco SignaturePolicyURI zůstává zkratkou kompatibility pro jeden kvalifikátor SPuri a lze jej kombinovat s SignaturePolicyQualifiers
Model strukturovaných kvalifikátorů podporuje SPuri, SPUserNotice s volitelnou referencí oznámení a explicitním textem a SPDocSpecification identifikovaný OID nebo URI
Nastavte SignaturePolicyHashIsUnknown pouze tehdy, když podepisující nezná hash politiky; HotPDF pak vygeneruje reprezentaci ETSI s nulami na vybrané délce digestu
Parsování a reportování
HPDFParseCMSSignature vystaví atribut přes THPDFSignatureInfo.SignaturePolicy včetně jeho identifikátoru, algoritmu hashe, bajtů hashe, příznaku neznámého hashe, kvalifikátorů a stavu validace
Známé hodnoty kvalifikátorů se dekódují do typovaných polí, zatímco nerozpoznaný kvalifikátor si zachová svůj OID a surovou hodnotu DER pro zpracování na úrovni aplikace
HPDFSignatureValidationReportToJSON serializuje stejná data politiky a kvalifikátorů se strojově čitelným stavem validace
Ukotvení povinné politiky
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);
Pole očekávaného OID a hashe omezují pouze odpovídající hodnotu a ověření dokumentu politiky hashuje i záměrně prázdný dokument, když je VerifySignaturePolicyDocumentHash pravdivé
Chybějící, neshodné, nepodporované nebo odmítnuté neznámé politiky vracejí svSignaturePolicyMismatch a vfcSignaturePolicyMismatch s přesným THPDFSignaturePolicyValidationStatus
Kontroly politiky probíhají před prací s poskytovatelem podpisu, cestou certifikátu nebo důkazy a aplikují se pouze na primární záznamy SignerInfo, takže politika rodičovského dokumentu neomezuje protipodpisy
Striktnost a meze
Parser odmítá duplicitní atributy politiky, vícenásobné hodnoty, implied-policy NULL, poškozené známé kvalifikátory, ne-ASCII hodnoty IA5String, neplatný Unicode, nesprávné známé délky digestu a velikosti kolekcí nad nakonfigurované limity implementace
PAdES E-EPES vyžaduje atribut explicitní politiky přesně jednou a zakazuje záznam /Reason ve slovníku podpisu PDF, když je tento atribut přítomen; vrstva CMS nemůže nahlížet do slovníku PDF, takže finální omezení musí vynutit pracovní postup vytvářející PDF
Viz více primárních podepisujících CMS, konzistence algoritmu digestu CMS a zprávy o validaci CMS