CMS Placeholder Auto-Sizing

HotPDF có thể ước tính một container CMS tách rời mà không gọi phép toán khóa riêng, cơ quan dấu thời gian, hoặc người ký đối chứng, rồi dựng lại một PDF chưa ký quá nhỏ trước ranh giới ký không thể đảo ngược

Ước tính không tác dụng phụ

HPDFCMSEstimatePlaceholder chọn độ dài chữ ký từ EstimatedSignatureBytes, một nhà cung cấp quảng cáo spcEstimateSignatureSize, hoặc modulus RSA trong chứng chỉ ký, theo thứ tự đó

Bộ ước tính dựng hình dạng CMS tĩnh chính xác với một chữ ký tổng hợp có độ dài đó, giữ các chứng chỉ đã cấu hình và chữ ký đối chứng tĩnh, và thay callback động bằng các khoản dự trữ payload do caller cấu hình

THPDFCMSPlaceholderEstimateOptions.Default áp dụng biên 50 phần trăm, tối thiểu 1.024 byte, căn chỉnh 256 byte, và tối đa 16 MiB; ước tính dấu thời gian và chữ ký đối chứng vẫn tường minh vì kích thước phản hồi của chúng phụ thuộc dịch vụ bên ngoài

THPDFCMSPlaceholderEstimateInfo báo cáo nguồn đã chọn, độ dài chữ ký, độ dài CMS tĩnh, dự trữ động, độ dài CMS ước tính, và dung lượng /Contents được căn chỉnh được khuyến nghị

Dựng lại trước khi ký

Các hàm auto-size kiểm tra dung lượng /Contents hiện có sau khi chuẩn bị /ByteRange

Nếu dung lượng dưới khuyến nghị, THPDFCMSRebuildUnsignedPDFCallback nhận số byte được yêu cầu và ghi một PDF chưa ký mới vào stream đích được cung cấp; placeholder đã dựng lại được xác thực trước khi bất kỳ callback ký nào chạy

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);

Hợp đồng an toàn thử lại

HPDFCMSSignPDFStreamWithExternalSignerAutoSize không bao giờ gọi lại người ký bên ngoài sau khi nó trả về một chữ ký; một tràn bất ngờ khôi phục placeholder chưa ký và nâng lỗi chứa kích thước thực tế và kích thước có sẵn

HPDFCMSSignPDFStreamWithProviderAutoSize chỉ có thể thử lại khi nhà cung cấp quảng cáo spcSafeSignRetry, một callback dựng lại có sẵn, và MaximumSigningRetries chưa cạn

Nếu dấu thời gian nội dung, dấu thời gian chữ ký, hoặc chữ ký đối chứng động được bật, việc thử lại còn yêu cầu DynamicCallbacksSafeToRetry=True

Nhà cung cấp callback cung cấp ConfigureSizeEstimation, nhà cung cấp từ xa chấp nhận một bộ ước tính tùy chọn và khai báo thử lại an toàn, và nhà cung cấp PKCS#11 hoặc kho khóa Windows suy ra độ dài đầu ra RSA từ chứng chỉ mà không chạm khóa riêng

Chẩn đoán và giới hạn

THPDFCMSAutoSizeInfo báo cáo dung lượng ban đầu và cuối cùng, độ dài CMS thực tế, số lần dựng lại, số lần thử ký, và liệu có thử lại sau ký hay không

Các kích thước khuyến nghị và thử lại được kiểm tra bằng số học rộng, được căn chỉnh trong mức tối đa đã cấu hình, và từ chối phần trăm không hợp lệ, số lần thử lại, độ dài không, chứng chỉ sai định dạng, khóa không được hỗ trợ, và callback dựng lại dự trữ ít hơn yêu cầu