CMS Placeholder Otomatik Boyutlandırma
HotPDF, özel anahtar işlemi, timestamp authority veya counter-signer devreye sokmadan ayrık bir CMS container'ının boyutunu tahmin edebilir; ardından geri döndürülemez imzalama sınırından önce yetersiz boyutlu imzasız PDF'yi yeniden inşa edebilir
Yan etkisiz tahmin
HPDFCMSEstimatePlaceholder imza uzunluğunu sırayla EstimatedSignatureBytes değerinden, spcEstimateSignatureSize sunan bir sağlayıcıdan veya imzalama sertifikasındaki RSA modulus'undan seçer
Tahminci, o uzunlukta sentetik bir imzayla tam statik CMS şeklini kurar; yapılandırılmış sertifikaları ve statik counter-signature değerlerini tutar, dinamik callback'leri çağıran tarafından yapılandırılabilir payload rezervleriyle değiştirir
THPDFCMSPlaceholderEstimateOptions.Default yüzde 50 pay, 1.024 baytlık alt sınır, 256 baytlık hizalama ve 16 MiB'lik üst sınır uygular; timestamp ve counter-signature tahminleri açık kalmayı sürdürür çünkü yanıt boyutları harici servislere bağlıdır
THPDFCMSPlaceholderEstimateInfo seçilen kaynağı, imza uzunluğunu, statik CMS uzunluğunu, dinamik rezervi, tahmini CMS uzunluğunu ve önerilen hizalanmış /Contents kapasitesini bildirir
İmzalamadan önce yeniden inşa
Otomatik boyutlandırma fonksiyonları, /ByteRange hazırladıktan sonra mevcut /Contents kapasitesini inceler
Kapasite önerinin altındaysa THPDFCMSRebuildUnsignedPDFCallback gereken bayt sayısını alır ve taze bir imzasız PDF'yi verilen hedef stream'e yazar; yeniden inşa edilen placeholder, herhangi bir imzalama callback'i çalışmadan önce doğrulanır
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);
Retry güvenlik sözleşmesi
HPDFCMSSignPDFStreamWithExternalSignerAutoSize, harici imzalayan bir imza döndürdükten sonra onu asla yeniden çağırmaz; beklenmeyen bir taşma, imzasız placeholder'ı geri yükler ve gerçek ile kullanılabilir boyutları içeren bir hata fırlatır
HPDFCMSSignPDFStreamWithProviderAutoSize yalnızca sağlayıcı spcSafeSignRetry sunuyorsa, bir rebuild callback'i mevcutsa ve MaximumSigningRetries tükenmemişse retry yapabilir
İçerik zaman damgaları, imza zaman damgaları veya dinamik counter-signature değerleri etkinse retry ayrıca DynamicCallbacksSafeToRetry=True gerektirir
Callback sağlayıcısı ConfigureSizeEstimation sunar; uzak sağlayıcılar isteğe bağlı bir tahminci ve safe-retry bildirimi kabul eder; PKCS#11 veya Windows key-storage sağlayıcıları, özel anahtara dokunmadan RSA çıktı uzunluğunu sertifikadan çıkarır
Teşhis ve sınırlar
THPDFCMSAutoSizeInfo başlangıç ve son kapasiteleri, gerçek CMS uzunluğunu, rebuild sayısını, imzalama denemelerini ve imzalamadan sonra retry olup olmadığını bildirir
Önerilen ve retry boyutları geniş aritmetikle denetlenir, yapılandırılmış üst sınır içinde hizalanır; geçersiz yüzdeler, retry sayıları, sıfır uzunluklar, hatalı biçimli sertifikalar, desteklenmeyen anahtarlar ve istenenden az rezerv yapan rebuild callback'leri reddedilir