Automatické dimenzování zástupného místa CMS

HotPDF umí odhadnout oddělený kontejner CMS bez vyvolání operace soukromým klíčem, autority časového razítka nebo protistrany podpisu a před nevratnou hranicí podpisu znovu sestavit nepodepsané PDF s příliš malým místem

Odhad bez vedlejších účinků

HPDFCMSEstimatePlaceholder vybírá délku podpisu z EstimatedSignatureBytes, poskytovatele oznamujícího spcEstimateSignatureSize nebo z modulu RSA v podpisovém certifikátu

Odhadce sestaví přesný statický tvar CMS se syntetickým podpisem, zachová konfigurované certifikáty a statické protipodpisy a dynamická zpětná volání nahradí rezervami dat konfigurovanými volajícím

THPDFCMSPlaceholderEstimateOptions.Default použije 50procentní rezervu, minimum 1 024 bajtů, zarovnání 256 bajtů a maximum 16 MiB

Funkce automatické velikosti po přípravě zkontrolují stávající kapacitu /Contents. Pokud je kapacita pod doporučením, THPDFCMSRebuildUnsignedPDFCallback dostane potřebný počet bajtů a zapíše nové nepodepsané PDF do cílového streamu

Bezpečnost opakování

HPDFCMSSignPDFStreamWithExternalSignerAutoSize po vrácení podpisu nikdy znovu nevolá externí podepisovač. Poskytovatel může opakovat jen při spcSafeSignRetry, dostupném zpětném volání pro sestavení a nevyčerpaném limitu pokusů

Pokud kapacita zůstává pod doporučením, obdrží THPDFCMSRebuildUnsignedPDFCallback potřebný počet bajtů a zapíše čerstvé nepodepsané PDF do dodaného cílového streamu; znovu sestavené zástupné místo se zvaliduje dřív, než se spustí jakékoliv podepisovací zpětné volání

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);

Smlouva o bezpečnosti opakování

HPDFCMSSignPDFStreamWithExternalSignerAutoSize po vrácení podpisu externího podepisovače už nikdy nevolá; neočekávané přetečení obnoví nepodepsané zástupné místo a vyvolá chybu, která obsahuje skutečnou i dostupnou velikost

HPDFCMSSignPDFStreamWithProviderAutoSize smí operaci zopakovat jen tehdy, když poskytovatel oznamuje spcSafeSignRetry, existuje zpětné volání pro sestavení a MaximumSigningRetries nebyl vyčerpán

Pokud jsou povolená časová razítka obsahu, časová razítka podpisu nebo dynamické protipodpisy, musí opakování navíc splňovat DynamicCallbacksSafeToRetry=True; horní mez počtu pokusů je přitom dána hodnotou

MaximumSigningRetries

Diagnostika a limity

THPDFCMSAutoSizeInfo uvádí počáteční a konečnou kapacitu, skutečnou délku CMS, počet sestavení, pokusy o podpis a případné opakování po podpisu

Doporučené i opakované velikosti se ověřují širokou aritmetikou a zarovnávají v rámci nakonfigurovaného maxima; odmítají neplatná procenta, počty pokusů, nulové délky, poškozené certifikáty, nepodporované klíče i zpětná volání pro sestavení, která si rezervují méně místa, než kolik bylo vyžádáno