PAdES-validering av signaturpolicy

HotPDF skapar och validerar det explicita CMS-attributet signature-policy-identifier som används av PAdES E-EPES-signaturer

Generera en explicit policy

Ställ in SignaturePolicyOID och sammanfattningen av policydokumentet på THPDFCMSSignOptions, välj sedan valfria strukturerade kvalificerare

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 antar SHA-256 som standard när fältet är tomt, medan SignaturePolicyURI förblir en kompatibilitetsgenväg för en SPuri-kvalificerare och kan kombineras med SignaturePolicyQualifiers

Modellen för strukturerade kvalificerare stöder SPuri, SPUserNotice med en valfri referens och explicit text samt SPDocSpecification som identifieras av en OID eller URI

Ställ in SignaturePolicyHashIsUnknown endast när signeraren inte känner till policy-hash-värdet; HotPDF avger då ETSI-representationen med allt nollor vid den valda sammanfattningslängden

Parsa och rapportera

HPDFParseCMSSignature exponerar attributet genom THPDFSignatureInfo.SignaturePolicy, inklusive dess identifierare, hash-algoritm, hash-byte, okänt-hash-flagga, kvalificerare och valideringsstatus

Kända kvalificerarvärden avkodas till typade fält, medan en okänd kvalificerare behåller sin OID och råa DER-värde för hantering på applikationsnivå

HPDFSignatureValidationReportToJSON serialiserar samma policy- och kvalificerardata med en maskinläsbar valideringsstatus

Fäst en obligatorisk policy

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);

Fälten för förväntad OID och hash begränsar endast motsvarande värde, och verifiering av policydokumentet hashar även ett avsiktligt tomt dokument när VerifySignaturePolicyDocumentHash är true

Saknade, missmatchade, ej stödda eller avvisade okända policyer returnerar svSignaturePolicyMismatch och vfcSignaturePolicyMismatch med en precis THPDFSignaturePolicyValidationStatus

Policykontroller körs före arbete med signaturleverantör, certifikatsökväg eller bevis och tillämpas endast på primära SignerInfo-poster, så en överordnad dokumentpolicy begränsar inte kontrasignaturer

Striktethet och gränser

Parsern avvisar duplicerade policyattribut, flera värden, implicit-policy NULL, felformaterade kända kvalificerare, icke-ASCII IA5String-värden, ogiltig Unicode, felaktiga kända sammanfattningslängder och samlingsstorlekar över de konfigurerade implementeringsgränserna

PAdES E-EPES kräver det explicita policyattributet exakt en gång och förbjuder /Reason-posten i PDF-signaturordlistan när attributet finns; CMS-lagret kan inte inspektera PDF-ordlistan, så arbetsflödet som producerar PDF:en måste upprätthålla den slutliga begränsningen

Se CMS multiple primary signers, CMS digest-algorithm consistency och CMS validation reports