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