Validation de la politique de signature PAdES
HotPDF crée et valide l'attribut signé CMS explicite signature-policy-identifier utilisé par les signatures PAdES E-EPES
Générer une politique explicite
Définissez SignaturePolicyOID et le condensat du document de politique sur THPDFCMSSignOptions, puis choisissez des qualificateurs structurés facultatifs
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 prend par défaut SHA-256 lorsqu'il est vide, tandis que SignaturePolicyURI reste un raccourci de compatibilité pour un qualificateur SPuri unique et peut être combiné avec SignaturePolicyQualifiers
Le modèle de qualificateur structuré prend en charge SPuri, SPUserNotice avec une référence d'avis et un texte explicite facultatifs, et SPDocSpecification identifié par un OID ou un URI
Définissez SignaturePolicyHashIsUnknown uniquement lorsque le signataire ne connaît pas le condensat de la politique ; HotPDF émet alors la représentation ETSI entièrement à zéro à la longueur de condensat sélectionnée
Analyse et rapport
HPDFParseCMSSignature expose l'attribut via THPDFSignatureInfo.SignaturePolicy, y compris son identifiant, son algorithme de hachage, ses octets de hachage, l'indicateur de hachage inconnu, ses qualificateurs et son statut de validation
Les valeurs de qualificateur connues sont décodées en champs typés, tandis qu'un qualificateur non reconnu conserve son OID et sa valeur DER brute pour un traitement au niveau de l'application
HPDFSignatureValidationReportToJSON sérialise les mêmes données de politique et de qualificateur avec un statut de validation lisible par machine
Épingler une politique requise
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);
Les champs OID et hachage attendus ne contraignent que la valeur correspondante, et la vérification du document de politique hache même un document volontairement vide lorsque VerifySignaturePolicyDocumentHash est vrai
Les politiques manquantes, incohérentes, non prises en charge ou rejetées comme inconnues renvoient svSignaturePolicyMismatch et vfcSignaturePolicyMismatch avec un THPDFSignaturePolicyValidationStatus précis
Les vérifications de politique s'exécutent avant le travail de fournisseur de signature, de chemin de certificat ou de preuve et ne s'appliquent qu'aux enregistrements SignerInfo primaires, donc une politique de document parent ne contraint pas les contre-signatures
Stricteté et limites
L'analyseur rejette les attributs de politique dupliqués, les valeurs multiples, la valeur NULL de politique implicite, les qualificateurs connus mal formés, les valeurs IA5String non ASCII, l'Unicode invalide, les longueurs connues de condensat erronées et les tailles de collection supérieures aux limites d'implémentation configurées
PAdES E-EPES exige l'attribut de politique explicite exactement une fois et interdit l'entrée /Reason du dictionnaire de signature PDF lorsque cet attribut est présent ; la couche CMS ne peut pas inspecter le dictionnaire PDF, donc le flux de travail de production PDF doit imposer cette contrainte finale
Voir signataires primaires multiples CMS, cohérence des algorithmes de condensat CMS, et rapports de validation CMS