Automatisk størrelsesfastsættelse af CMS-pladsholder

HotPDF kan estimere en frakoblet CMS-beholder uden at kalde en privat nøglehandling, tidsstempelmyndighed eller medunderskriver og derefter genopbygge en for lille usigneret PDF før den uigenkaldelige underskriftsgrænse

Estimering uden bivirkninger

HPDFCMSEstimatePlaceholder vælger signaturlængden fra EstimatedSignatureBytes, en udbyder der angiver spcEstimateSignatureSize, eller RSA-modulet i signeringscertifikatet, i denne rækkefølge

Estimatoren bygger den nøjagtige statiske CMS-form med en syntetisk signatur af den længde, bevarer konfigurerede certifikater og statiske medunderskrifter og erstatter dynamiske tilbagekald med reserver, som kan konfigureres af kaldende kode

THPDFCMSPlaceholderEstimateOptions.Default anvender en margin på 50 procent, et minimum på 1.024 byte, 256-bytejustering og et maksimum på 16 MiB. Estimater for tidsstempel og medunderskrift er fortsat eksplicitte, fordi deres svarstørrelser afhænger af eksterne tjenester

THPDFCMSPlaceholderEstimateInfo rapporterer den valgte kilde, signaturlængden, den statiske CMS-længde, dynamisk reserve, estimeret CMS-længde og anbefalet justeret /Contents-kapacitet

Genopbygning før signering

Funktionerne til automatisk størrelse undersøger den eksisterende /Contents-kapacitet efter forberedelse af /ByteRange

Hvis kapaciteten er under anbefalingen, modtager THPDFCMSRebuildUnsignedPDFCallback det krævede antal byte og skriver en ny usigneret PDF til den angivne destinationsstream. Den genopbyggede pladsholder valideres, før noget signeringstilbagekald kører

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

Kontrakt om sikker gentagelse

HPDFCMSSignPDFStreamWithExternalSignerAutoSize kalder aldrig den eksterne underskriver igen efter at den har returneret en signatur. En uventet overskridelse gendanner den usignerede pladsholder og udløser en fejl med de faktiske og tilgængelige størrelser

HPDFCMSSignPDFStreamWithProviderAutoSize kan kun gentage, når udbyderen angiver spcSafeSignRetry, et genopbygningstilbagekald er tilgængeligt, og MaximumSigningRetries ikke er opbrugt

Hvis indholdstidsstempler, signaturtidsstempler eller dynamiske medunderskrifter er aktiveret, kræver gentagelse også DynamicCallbacksSafeToRetry=True

Tilbagekaldsudbyderen eksponerer ConfigureSizeEstimation, fjernudbydere accepterer en valgfri estimator og erklæring om sikker gentagelse, og PKCS#11- eller Windows-nøglelagerudbydere udleder RSA-outputlængden fra certifikatet uden at røre den private nøgle

Diagnosticering og grænser

THPDFCMSAutoSizeInfo rapporterer indledende og endelige kapaciteter, den faktiske CMS-længde, antal genopbygninger, signeringsforsøg og om en gentagelse efter signering fandt sted

Anbefalede størrelser og gentagelsesstørrelser kontrolleres med bred aritmetik, justeres inden for det konfigurerede maksimum og afviser ugyldige procentsatser, antal gentagelser, nul-længder, fejlbehæftede certifikater, ikke-understøttede nøgler og genopbygningstilbagekald, der reserverer mindre end anmodet