Επαλήθευση πολιτικής υπογραφής PAdES
Το HotPDF δημιουργεί και επαληθεύει το ρητό signed attribute CMS signature-policy-identifier που χρησιμοποιούν οι υπογραφές PAdES E-EPES
Δημιουργία ρητής πολιτικής
Ορίστε το SignaturePolicyOID και το digest του εγγράφου πολιτικής στο THPDFCMSSignOptions και έπειτα επιλέξτε προαιρετικά δομημένα qualifiers
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 προεπιλέγει το SHA-256 όταν είναι κενό, ενώ το SignaturePolicyURI παραμένει μια συμβατική συντόμευση για ένα μοναδικό qualifier SPuri και μπορεί να συνδυαστεί με το SignaturePolicyQualifiers
Το δομημένο μοντέλο qualifiers υποστηρίζει το SPuri, το SPUserNotice με προαιρετική αναφορά ανακοίνωσης και ρητό κείμενο, καθώς και το SPDocSpecification που ταυτοποιείται μέσω OID ή URI
Ορίστε το SignaturePolicyHashIsUnknown μόνο όταν ο υπογράφων δεν γνωρίζει το hash της πολιτικής· σε αυτή την περίπτωση το HotPDF εκπέμπει την αναπαράσταση όλων των μηδενικών της ETSI στο επιλεγμένο μήκος digest
Ανάλυση και αναφορά
Η HPDFParseCMSSignature εκθέτει το attribute μέσω του THPDFSignatureInfo.SignaturePolicy, συμπεριλαμβανομένου του αναγνωριστικού, του αλγορίθμου hash, των bytes του hash, της σημαίας άγνωστου hash, των qualifiers και της κατάστασης επαλήθευσης
Γνωστές τιμές qualifiers αποκωδικοποιούνται σε τυποποιημένα πεδία, ενώ ένα μη αναγνωρισμένο qualifier διατηρεί το OID και το ωμό DER της τιμής του για χειρισμό σε επίπεδο εφαρμογής
Η HPDFSignatureValidationReportToJSON σειριοποιεί τα ίδια δεδομένα πολιτικής και qualifiers με μια αναγνώσιμη από μηχανή κατάσταση επαλήθευσης
Δέσμευση σε απαιτούμενη πολιτική
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);
Τα πεδία αναμενόμενου OID και hash περιορίζουν μόνο την αντίστοιχη τιμή, και η επαλήθευση εγγράφου πολιτικής υπολογίζει hash ακόμα και για σκόπιμα κενό έγγραφο όταν το VerifySignaturePolicyDocumentHash είναι αληθές
Απούσες, μη συμβαδίζουσες, μη υποστηριζόμενες ή απορριφθείσες άγνωστες πολιτικές επιστρέφουν svSignaturePolicyMismatch και vfcSignaturePolicyMismatch με ένα ακριβές THPDFSignaturePolicyValidationStatus
Οι έλεγχοι πολιτικής εκτελούνται πριν από την εργασία του παρόχου υπογραφής, του μονοπατιού πιστοποιητικών ή των αποδεικτικών στοιχείων και εφαρμόζονται μόνο σε πρωτεύουσες εγγραφές SignerInfo, ώστε η πολιτική ενός γονικού εγγράφου να μη δεσμεύει τις αντιυπογραφές
Αυστηρότητα και όρια
Ο parser απορρίπτει διπλότυπα attributes πολιτικής, πολλαπλές τιμές, NULL σιωπηρής πολιτικής, εσφαλμένα δομημένα γνωστά qualifiers, μη ASCII τιμές IA5String, μη έγκυρο Unicode, λανθασμένα γνωστά μήκη digest και μεγέθη συλλογών άνω των ρυθμισμένων ορίων υλοποίησης
Το PAdES E-EPES απαιτεί το ρητό attribute πολιτικής ακριβώς μία φορά και απαγορεύει την καταχώρηση /Reason του PDF Signature Dictionary όταν το attribute αυτό παρίσταται· το επίπεδο CMS δεν μπορεί να επιθεωρήσει το PDF dictionary, οπότε η ροή εργασίας που παράγει το PDF πρέπει να επιβάλει αυτόν τον τελευταίο περιορισμό
Δείτε Πολλαπλοί πρωτεύοντες υπογράφοντες CMS, Συνέπεια αλγορίθμου digest CMS και Αναφορές επαλήθευσης CMS