Automatyczne doboru rozmiaru zastępnika CMS

HotPDF może oszacować odłączony kontener CMS bez wywoływania operacji klucza prywatnego, urzędu znaczników czasu ani współsygnatariusza, a następnie przebudować zbyt mały niepodpisany PDF przed nieodwracalną granicą podpisywania

Oszacowanie bez efektów ubocznych

HPDFCMSEstimatePlaceholder wybiera długość podpisu z EstimatedSignatureBytes, dostawcy reklamującego spcEstimateSignatureSize lub modułu RSA w certyfikacie podpisującym, w tej kolejności

Estymator buduje dokładny statyczny kształt CMS z syntetycznym podpisem o tej długości, zachowuje skonfigurowane certyfikaty i statyczne współpodpisy oraz zastępuje dynamiczne wywołania zwrotne rezerwami ładunku konfigurowanymi przez wywołującego

THPDFCMSPlaceholderEstimateOptions.Default stosuje 50-procentowy margines, co najmniej 1 024 bajty, wyrównanie do 256 bajtów i maksimum 16 MiB; oszacowania znacznika czasu i współpodpisu pozostają jawne, ponieważ ich rozmiary odpowiedzi zależą od zewnętrznych usług

THPDFCMSPlaceholderEstimateInfo raportuje wybrane źródło, długość podpisu, statyczną długość CMS, rezerwę dynamiczną, szacowaną długość CMS i zalecaną wyrównaną pojemność /Contents

Przebudowa przed podpisaniem

Funkcje automatycznego rozmiaru sprawdzają istniejącą pojemność /Contents po przygotowaniu /ByteRange

Jeśli pojemność jest poniżej zalecenia, THPDFCMSRebuildUnsignedPDFCallback otrzymuje wymaganą liczbę bajtów i zapisuje świeży, niepodpisany PDF do dostarczonego strumienia docelowego; przebudowany zastępnik jest sprawdzany przed uruchomieniem jakiegokolwiek wywołania zwrotnego podpisywania

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 bezpieczeństwa ponawiania

HPDFCMSSignPDFStreamWithExternalSignerAutoSize nigdy nie wywołuje zewnętrznego podpisującego ponownie po zwróceniu podpisu; nieoczekiwane przepełnienie przywraca niepodpisany zastępnik i zgłasza błąd zawierający rzeczywiste i dostępne rozmiary

HPDFCMSSignPDFStreamWithProviderAutoSize może ponawiać próbę tylko wtedy, gdy dostawca reklamuje spcSafeSignRetry, dostępne jest wywołanie zwrotne przebudowy i MaximumSigningRetries nie zostało wyczerpane

Jeśli znaczniki czasu treści, znaczniki czasu podpisu lub dynamiczne współpodpisy są włączone, ponawianie wymaga dodatkowo DynamicCallbacksSafeToRetry=True

Dostawca wywołania zwrotnego wystawia ConfigureSizeEstimation, zdalni dostawcy akceptują opcjonalny estymator i deklarację bezpiecznego ponawiania, a dostawcy PKCS#11 lub magazynu kluczy Windows wyprowadzają długość wyniku RSA z certyfikatu bez dotykania klucza prywatnego

Diagnostyka i limity

THPDFCMSAutoSizeInfo raportuje początkowe i końcowe pojemności, rzeczywistą długość CMS, liczbę przebudów, próby podpisywania oraz to, czy wystąpiło ponawianie po podpisie

Zalecane rozmiary i rozmiary ponawiania są sprawdzane arytmetyką szerszą, wyrównane w obrębie skonfigurowanego maksimum oraz odrzucają nieprawidłowe procenty, liczby ponawiań, zerowe długości, źle uformowane certyfikaty, nieobsługiwane klucze i wywołania zwrotne przebudowy rezerwujące mniej niż zażądano