Dimensionnement automatique d’espace réservé CMS
HotPDF peut estimer un conteneur CMS détaché sans appeler une opération de clé privée, une autorité d’horodatage ou un contresignataire, puis reconstruire un PDF non signé trop petit avant la limite irréversible de signature
Estimation sans effet de bord
HPDFCMSEstimatePlaceholder sélectionne la longueur de signature, dans cet ordre, à partir de EstimatedSignatureBytes, d’un fournisseur qui annonce spcEstimateSignatureSize ou du module RSA du certificat de signature
L’estimateur construit la forme CMS statique exacte avec une signature synthétique de cette longueur, conserve les certificats configurés et les contresignatures statiques, puis remplace les rappels dynamiques par des réserves de charge utile configurables par l’appelant
THPDFCMSPlaceholderEstimateOptions.Default applique une marge de 50 %, un minimum de 1 024 octets, un alignement de 256 octets et un maximum de 16 Mio ; les estimations d’horodatage et de contresignature restent explicites car la taille de leurs réponses dépend de services externes
THPDFCMSPlaceholderEstimateInfo rapporte la source sélectionnée, la longueur de signature, la longueur CMS statique, la réserve dynamique, la longueur CMS estimée et la capacité /Contents alignée recommandée
Reconstruction avant signature
Les fonctions de dimensionnement automatique inspectent la capacité /Contents existante après préparation de /ByteRange
Si la capacité est inférieure à la recommandation, THPDFCMSRebuildUnsignedPDFCallback reçoit le nombre d’octets requis et écrit un nouveau PDF non signé dans le flux de destination fourni ; l’espace réservé reconstruit est validé avant l’exécution de tout rappel de signature
EstimateOptions := THPDFCMSPlaceholderEstimateOptions.Default;
AutoOptions := THPDFCMSAutoSizeOptions.Default;
AutoOptions.Estimate := EstimateOptions;
HPDFCMSSignPDFStreamWithProviderAutoSize(
InputStream, OutputStream, CertificateDER, Provider, KeyIdentifier,
SignOptions, AutoOptions,
procedure(ContentsBytes: Integer; Destination: TStream)
begin
BuildUnsignedPDF(ContentsBytes, Destination);
end,
AutoSizeInfo);
Contrat de sûreté des tentatives
HPDFCMSSignPDFStreamWithExternalSignerAutoSize n’appelle jamais à nouveau le signataire externe après que celui-ci a renvoyé une signature ; un débordement inattendu restaure l’espace réservé non signé et lève une erreur contenant les tailles réelle et disponible
HPDFCMSSignPDFStreamWithProviderAutoSize ne peut réessayer que si le fournisseur annonce spcSafeSignRetry, si un rappel de reconstruction est disponible et si MaximumSigningRetries n’est pas épuisé
Si les horodatages de contenu ou de signature, ou les contresignatures dynamiques sont activés, une nouvelle tentative exige en outre DynamicCallbacksSafeToRetry=True
Le fournisseur de rappel expose ConfigureSizeEstimation, les fournisseurs distants acceptent un estimateur facultatif et une déclaration de tentative sûre, et les fournisseurs PKCS#11 ou de stockage de clés Windows déduisent la longueur RSA depuis le certificat sans toucher la clé privée
Diagnostics et limites
THPDFCMSAutoSizeInfo rapporte les capacités initiale et finale, la longueur CMS réelle, le nombre de reconstructions, les tentatives de signature et l’existence d’une nouvelle tentative après signature
Les tailles recommandées et de nouvelle tentative sont contrôlées par une arithmétique large, alignées dans le maximum configuré et refusent les pourcentages, nombres de tentatives ou longueurs zéro non valides, les certificats mal formés, clés non prises en charge et rappels de reconstruction qui réservent moins que demandé