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