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