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