CMS-platshållar-autostorlek

HotPDF kan uppskatta en fristående CMS-behållare utan att anropa en privat nyckeloperation, tidsstämpelauktoritet eller kontrasignerare, och sedan bygga om ett för litet osignerat PDF före den oåterkalleliga signeringsgränsen

Uppskattning utan sidoeffekter

HPDFCMSEstimatePlaceholder väljer signaturlängden från EstimatedSignatureBytes, en leverantör som annonserar spcEstimateSignatureSize, eller RSA-modulen i signeringscertifikatet, i den ordningen

Uppskattaren bygger den exakta statiska CMS-formen med en syntetisk signatur av den längden, behåller konfigurerade certifikat och statiska kontrasignaturer samt ersätter dynamiska callbacks med anropare-konfigurerbara nyttolastreserver

THPDFCMSPlaceholderEstimateOptions.Default tillämpar en marginal på 50 procent, ett minimum på 1,024 byte, inriktning på 256 byte och ett maximum på 16 MiB; tidsstämpel- och kontrasignaturuppskattningar förblir explicita eftersom deras svarsstorlekar beror på externa tjänster

THPDFCMSPlaceholderEstimateInfo rapporterar den valda källan, signaturlängden, den statiska CMS-längden, den dynamiska reserven, den uppskattade CMS-längden och den rekommenderade inriktade /Contents-kapaciteten

Bygg om före signering

Autostorleksfunktionerna inspekterar den befintliga /Contents-kapaciteten efter förberedelse av /ByteRange

Om kapaciteten är under rekommendationen tar THPDFCMSRebuildUnsignedPDFCallback emot det krävda byteantalet och skriver ett färskt osignerat PDF till destinationsströmmen; den ombyggda platshållaren valideras före varje signeringscallback körs

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

Återförsökssäkerhetskontrakt

HPDFCMSSignPDFStreamWithExternalSignerAutoSize anropar aldrig den externa signeraren igen efter att den returnerat en signatur; ett oväntat överflöde återställer den osignerade platshållaren och utlöser ett fel som innehåller de faktiska och tillgängliga storlekarna

HPDFCMSSignPDFStreamWithProviderAutoSize får endast försöka igen när leverantören annonserar spcSafeSignRetry, en ombyggnads-callback finns tillgänglig och MaximumSigningRetries inte har förbrukats

Om innehållstidsstämplar, signaturtidsstämplar eller dynamiska kontrasignaturer är aktiverade kräver återförsök dessutom DynamicCallbacksSafeToRetry=True

Callback-leverantören exponerar ConfigureSizeEstimation, fjärrleverantörer accepterar en valfri uppskattare och säker-återförsök-deklaration, och PKCS#11- eller Windows-nyckellagringsleverantörer härleder RSA-utgångslängd från certifikatet utan att röra den privata nyckeln

Diagnostik och gränser

THPDFCMSAutoSizeInfo rapporterar initiala och slutliga kapaciteter, den faktiska CMS-längden, ombyggnadsantalet, signeringsförsöken och om ett efter-signering-återförsök inträffade

Rekommenderade och återförsöks-storlekar kontrolleras med bred aritmetik, inriktas inom det konfigurerade maximumet och avvisar ogiltiga procenttal, återförsöksantal, nollängder, felformaterade certifikat, icke-stödda nycklar och ombyggnads-callbacks som reserverar mindre än begärt