Ridimensionamento Automatico del Segnaposto CMS
HotPDF può stimare un contenitore CMS staccato senza invocare un'operazione con chiave privata, un'autorità di timestamp o un contro-firmatario, quindi ricostruire un PDF non firmato di dimensioni insufficienti prima del confine di firma irreversibile
Stima senza effetti collaterali
HPDFCMSEstimatePlaceholder seleziona la lunghezza della firma da EstimatedSignatureBytes, da un provider che pubblicizza spcEstimateSignatureSize o dal modulo RSA nel certificato di firma, in quest'ordine
Lo stimatore costruisce la forma CMS statica esatta con una firma sintetica di quella lunghezza, conserva i certificati configurati e le contro-firme statiche e sostituisce le callback dinamiche con riserve di payload configurabili dal chiamante
THPDFCMSPlaceholderEstimateOptions.Default applica un margine del 50 percento, un minimo di 1.024 byte, un allineamento di 256 byte e un massimo di 16 MiB; le stime di timestamp e contro-firma restano esplicite perché le loro dimensioni di risposta dipendono da servizi esterni
THPDFCMSPlaceholderEstimateInfo riporta la sorgente selezionata, la lunghezza della firma, la lunghezza CMS statica, la riserva dinamica, la lunghezza CMS stimata e la capacità /Contents allineata raccomandata
Ricostruzione prima della firma
Le funzioni di ridimensionamento automatico ispezionano la capacità /Contents esistente dopo aver preparato /ByteRange
Se la capacità è inferiore alla raccomandazione, THPDFCMSRebuildUnsignedPDFCallback riceve il conteggio di byte richiesto e scrive un nuovo PDF non firmato nel flusso di destinazione fornito; il segnaposto ricostruito viene validato prima che venga eseguita una callback di firma
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);
Contratto di sicurezza del nuovo tentativo
HPDFCMSSignPDFStreamWithExternalSignerAutoSize non chiama mai più il firmatario esterno dopo che ha restituito una firma; un overflow inatteso ripristina il segnaposto non firmato e genera un errore contenente le dimensioni effettive e disponibili
HPDFCMSSignPDFStreamWithProviderAutoSize può riprovare solo quando il provider pubblicizza spcSafeSignRetry, è disponibile una callback di ricostruzione e MaximumSigningRetries non è esaurito
Se sono abilitati i timestamp dei contenuti, i timestamp della firma o le contro-firme dinamiche, il nuovo tentativo richiede inoltre DynamicCallbacksSafeToRetry=True
Il provider delle callback espone ConfigureSizeEstimation, i provider remoti accettano uno stimatore facoltativo e una dichiarazione di nuovo tentativo sicuro e i provider PKCS#11 o di archivio chiavi di Windows deducono la lunghezza dell'output RSA dal certificato senza toccare la chiave privata
Diagnostica e limiti
THPDFCMSAutoSizeInfo riporta le capacità iniziali e finali, la lunghezza CMS effettiva, il conteggio delle ricostruzioni, i tentativi di firma e se si è verificato un nuovo tentativo post-firma
Le dimensioni raccomandate e di nuovo tentativo vengono controllate con aritmetica ampia, allineate entro il massimo configurato e rifiutano percentuali non valide, conteggi di tentativi, lunghezze zero, certificati non validi, chiavi non supportate e callback di ricostruzione che riservano meno del richiesto