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 길이, 재구축 횟수, 서명 시도, 서명 후 재시도 발생 여부를 보고합니다

권장 및 재시도 크기는 넓은 산술로 검사되고 구성된 최대값 내에서 정렬되며, 잘못된 백분율, 재시도 횟수, 0 길이, 잘못된 인증서, 지원되지 않는 키, 요청보다 적게 예약하는 재구축 콜백을 거부합니다