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