Validation par lots des signatures avec caches partagés
HotPDF peut valider en un seul passage toutes les signatures d’un document chargé grâce à trois caches partagés : un cache de chemins de certificats indexé par l’ensemble de certificats CMS et les options de validation effectives, un cache d’horodatages indexé par le blob CMS et /ByteRange, et le magasin de preuves THPDFRevocationEvidenceCache indexé par émetteur et numéro de série
THotPDF.ValidateLoadedSignatureBatch
Le point d’entrée au niveau du document énumère chaque champ de signature, vérifie chaque /ByteRange par rapport à la source, collecte les preuves DSS et /VRI et exécute la validation du chemin de certificats à l’aide des caches partagés. Une valeur WorkerLimit supérieure à un évalue les chemins sur des workers parallèles
var
Options: THPDFSignatureBatchOptions;
Result: THPDFSignatureBatchResult;
begin
PDF.LoadFromFile('Signed.pdf');
Options:= THPDFSignatureBatchOptions.Default;
Options.CertificateOptions.TrustAnchors:= MyAnchors;
Result:= PDF.ValidateLoadedSignatureBatch(Options);
if Result.AllSignaturesValid then
WriteLn('All ', Result.SignatureCount, ' signatures valid');
end;
Caches partagés
Les signatures qui répètent la même chaîne de signataire réutilisent le verdict précédent au lieu de le recalculer : les clés du cache couvrent l’ensemble de certificats CMS, les ancres de confiance, les intermédiaires, chaque blob OCSP, CRL et delta-CRL dans l’ordre d’évaluation, le mode de révocation, l’heure de validation et le bloc de politique complet. Les preuves injectées depuis un cache sont marquées avec la source vesCache
Le cache de révocation stocke chaque réponse OCSP et CRL vue durant un lot, indexée par DN d’émetteur, numéro de série et fenêtre de validité, afin que les signatures et lots ultérieurs partageant la même instance THPDFRevocationEvidenceCache résolvent la révocation sans fournir à nouveau les preuves
Le cache d’horodatages mémorise les verdicts de vérification d’octets pour les horodatages de document CMS entier (ETSI.RFC3161) et les jetons d’horodatage de signature intégrés. Un accès au cache pour un jeton intégré définit THPDFCMSVerifyOptions.SkipSignatureTimestampVerification, ce qui évite de vérifier à nouveau le jeton tout en vérifiant complètement la signature CMS principale
Moteur de lots autonome
THPDFSignatureValidationBatch accepte des tâches dont Info contient déjà le verdict de vérification des octets, pour les appelants qui possèdent le flux source ou vérifient hors du composant. FailFast cesse d’envoyer des tâches après le premier verdict négatif et un THPDFCancellationToken laisse les entrées restantes dans l’état sbsCancelled
Batch:= THPDFSignatureValidationBatch.Create(Options);
try
Batch.AddJob(Job);
Result:= Batch.Run;
finally
Batch.Free;
end;
Résultats structurés
Chaque entrée rapporte l’état de la signature et du certificat, le cache réutilisé et les diagnostics par signature ; HPDFSignatureBatchResultToJSON restitue le lot complet avec les statistiques des caches au format JSON exploitable par machine