Automatische CMS-Platzhaltergröße
HotPDF kann einen abgetrennten CMS-Container schätzen, ohne eine Operation mit privatem Schlüssel, eine Zeitstempelstelle oder eine Gegenzeichnerin aufzurufen, und vor der unumkehrbaren Signaturgrenze ein zu kleines unsigniertes PDF neu erstellen
Schätzung ohne Nebenwirkungen
HPDFCMSEstimatePlaceholder bestimmt die Signaturlänge in dieser Reihenfolge aus EstimatedSignatureBytes, einem Anbieter mit spcEstimateSignatureSize oder dem RSA-Modul im Signaturzertifikat
Der Schätzer erstellt die exakte statische CMS-Struktur mit einer synthetischen Signatur dieser Länge, behält konfigurierte Zertifikate und statische Gegenzeichnungen bei und ersetzt dynamische Callbacks durch vom Aufrufer konfigurierbare Nutzlastreserven
THPDFCMSPlaceholderEstimateOptions.Default verwendet 50 Prozent Reserve, mindestens 1.024 Byte, 256-Byte-Ausrichtung und höchstens 16 MiB; Schätzungen für Zeitstempel und Gegenzeichnungen bleiben explizit, weil ihre Antwortgrößen von externen Diensten abhängen
THPDFCMSPlaceholderEstimateInfo meldet die gewählte Quelle, Signaturlänge, statische CMS-Länge, dynamische Reserve, geschätzte CMS-Länge und die empfohlene ausgerichtete /Contents-Kapazität
Neuerstellung vor dem Signieren
Die Funktionen zur automatischen Größenanpassung prüfen die vorhandene /Contents-Kapazität nach dem Vorbereiten von /ByteRange
Liegt die Kapazität unter der Empfehlung, erhält THPDFCMSRebuildUnsignedPDFCallback die benötigte Bytezahl und schreibt ein frisches unsigniertes PDF in den bereitgestellten Zielstream; der neu erstellte Platzhalter wird vor jedem Signatur-Callback geprüft
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);
Vertrag zur Wiederholungssicherheit
HPDFCMSSignPDFStreamWithExternalSignerAutoSize ruft den externen Signierer nach dessen Rückgabe einer Signatur nie erneut auf; ein unerwarteter Überlauf stellt den unsignierten Platzhalter wieder her und löst einen Fehler mit tatsächlicher und verfügbarer Größe aus
HPDFCMSSignPDFStreamWithProviderAutoSize darf nur wiederholen, wenn der Anbieter spcSafeSignRetry ausweist, ein Callback zum Neuaufbau vorhanden ist und MaximumSigningRetries noch nicht ausgeschöpft ist
Sind Inhaltszeitstempel, Signaturzeitstempel oder dynamische Gegenzeichnungen aktiviert, erfordert die Wiederholung zusätzlich DynamicCallbacksSafeToRetry=True
Der Callback-Anbieter stellt ConfigureSizeEstimation bereit, Remote-Anbieter akzeptieren optional einen Schätzer und eine Erklärung zur sicheren Wiederholung, und PKCS#11- oder Windows-Schlüsselspeicheranbieter leiten die RSA-Ausgabelänge aus dem Zertifikat ab, ohne den privaten Schlüssel anzufassen
Diagnosen und Grenzen
THPDFCMSAutoSizeInfo meldet anfängliche und endgültige Kapazitäten, die tatsächliche CMS-Länge, Anzahl der Neuaufbauten, Signaturversuche und ob eine Wiederholung nach dem Signieren erfolgte
Empfohlene und Wiederholungsgrößen werden mit breiter Arithmetik geprüft, innerhalb des konfigurierten Maximums ausgerichtet und weisen ungültige Prozentsätze, Wiederholungszahlen, Nulllängen, fehlerhafte Zertifikate, nicht unterstützte Schlüssel sowie Neuaufbau-Callbacks mit zu kleiner Reserve zurück