Validación de firmas por lotes con cachés compartidas

HotPDF puede validar cada firma de un documento cargado en una sola pasada mediante tres cachés compartidas: una caché de ruta de certificado con clave en el conjunto de certificados CMS y las opciones de validación efectivas, una caché de marcas de tiempo con clave en el blob CMS y el /ByteRange, y el almacén de evidencia THPDFRevocationEvidenceCache con clave en el emisor y el número de serie

THotPDF.ValidateLoadedSignatureBatch

El punto de entrada a nivel de documento enumera cada campo de firma, verifica por bytes cada /ByteRange contra el origen, recopila evidencia DSS y /VRI y ejecuta la validación de ruta de certificado con las cachés compartidas. Un WorkerLimit mayor que uno evalúa las rutas en trabajadores paralelos

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;

Cachés compartidas

Las firmas que repiten la misma cadena de firmantes reutilizan el veredicto de ruta anterior en lugar de volver a calcularlo: las claves de la caché de ruta abarcan el conjunto de certificados CMS, los anclajes de confianza, los intermedios, cada blob OCSP, CRL y CRL delta en orden de evaluación, el modo de revocación, el tiempo de validación y el bloque completo de políticas. La evidencia inyectada desde una caché se etiqueta con el origen de evidencia vesCache

La caché de revocación almacena cada respuesta OCSP y CRL vista durante un lote, con clave en el DN del emisor, el número de serie y la ventana de validez, de modo que las firmas posteriores y los lotes posteriores que comparten la misma instancia de THPDFRevocationEvidenceCache resuelvan la revocación sin volver a suministrar evidencia

La caché de marcas de tiempo memoriza los veredictos de verificación por bytes para las marcas de tiempo de documento CMS completo (ETSI.RFC3161) y los tokens de marca de tiempo de firma incrustados. Un acierto de caché en un token incrustado define THPDFCMSVerifyOptions.SkipSignatureTimestampVerification, omitiendo la re-verificación del token mientras la firma CMS primaria aún se comprueba por completo

Motor de lotes independiente

THPDFSignatureValidationBatch acepta trabajos cuyo Info ya lleva el veredicto de verificación por bytes, para quienes son propietarios del flujo de origen o verifican fuera del componente. FailFast detiene el envío después del primer veredicto negativo, y un THPDFCancellationToken deja las entradas restantes en sbsCancelled

Batch:= THPDFSignatureValidationBatch.Create(Options);
try
  Batch.AddJob(Job);
  Result:= Batch.Run;
finally
  Batch.Free;
end;

Resultados estructurados

Cada entrada informa el estado de la firma y del certificado, la caché que reutilizó y los diagnósticos por firma; HPDFSignatureBatchResultToJSON renderiza el lote completo con estadísticas de caché como JSON legible por máquinas