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