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