CMS プレースホルダー自動サイズ調整
HotPDF は、秘密鍵操作、タイムスタンプ機関、またはカウンター署名者を呼び出すことなく分離 CMS コンテナを推定し、不可逆的な署名境界の前にサイズ不足の未署名 PDF を再構築できます
副作用なしの推定
HPDFCMSEstimatePlaceholder は、その順序で EstimatedSignatureBytes、spcEstimateSignatureSize を公表するプロバイダー、または署名証明書内の RSA モジュラスから署名長を選択します
推定器は、その長さの合成署名で正確な静的 CMS シェイプを構築し、設定済みの証明書と静的カウンター署名を保持し、動的コールバックを呼び出し元が設定可能なペイロード予約に置き換えます
THPDFCMSPlaceholderEstimateOptions.Default は 50 パーセントのマージン、1,024 バイトの最小値、256 バイトの整列、16 MiB の最大値を適用します。タイムスタンプとカウンター署名の推定は、そのレスポンスサイズが外部サービスに依存するため明示的なままです
THPDFCMSPlaceholderEstimateInfo は、選択したソース、署名長、静的 CMS 長、動的予約、推定 CMS 長、推奨される整列済み /Contents 容量を報告します
署名前の再構築
自動サイズ関数は、/ByteRange を準備した後、既存の /Contents 容量を検査します
容量が推奨を下回る場合、THPDFCMSRebuildUnsignedPDFCallback は必要なバイト数を受け取り、供給された宛先ストリームに新しい未署名 PDF を書き込みます。再構築されたプレースホルダーは、署名コールバックが実行される前に検証されます
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);
再試行の安全契約
HPDFCMSSignPDFStreamWithExternalSignerAutoSize は、署名を返した後で外部署名者を再び呼び出すことはありません。予期しないオーバーフローは未署名プレースホルダーを復元し、実際と利用可能なサイズを含むエラーを発生させます
HPDFCMSSignPDFStreamWithProviderAutoSize は、プロバイダーが spcSafeSignRetry を公表し、再構築コールバックが利用可能であり、MaximumSigningRetries が使い果たされていない場合にのみ再試行できます
コンテンツタイムスタンプ、署名タイムスタンプ、または動的カウンター署名が有効な場合、再試行にはさらに DynamicCallbacksSafeToRetry=True が必要です
コールバックプロバイダーは ConfigureSizeEstimation を公開し、リモートプロバイダーは任意の推定器と安全な再試行宣言を受け入れ、PKCS#11 または Windows キーストレージプロバイダーは証明書から RSA 出力長を秘密鍵に触れることなく推測します
診断と制限
THPDFCMSAutoSizeInfo は、初期容量と最終容量、実際の CMS 長、再構築回数、署名試行回数、署名後再試行が発生したかどうかを報告します
推奨サイズと再試行サイズはワイド演算で検査され、設定済み最大値内で整列され、無効なパーセンテージ、再試行回数、ゼロ長、不正な証明書、サポートされていないキー、要求より少なく予約する再構築コールバックを拒否します