Windows Signing Timestamps
Operacja podpisywania Windows może zażądać prawdziwego znacznika czasu RFC3161 przez synchroniczny callback aplikacji i opublikować PDF dopiero po uwierzytelnieniu odpowiedzi
Signing options
{"schemaVersion":1,"type":"sign","incremental":true,
"existingField":true,"fieldName":"ApprovalOne",
"pfxFile":"C:/keys/signer.pfx","pfxPassword":"password",
"cades":true,"digestMethod":"SHA384","timestamp":true,
"timestampURL":"https://tsa.example/service",
"timestampTrustedCAFile":"C:/trust/tsa-roots.pem",
"timestampTrustedCRLFile":"C:/trust/tsa-crls.pem",
"requireTimestampRevocation":true}
timestamp domyślnie false; wartość true wymaga callbacka transportu aplikacji i jawnego timestampTrustedCAFile zawierającego zaufane korzenie certyfikatów PEM
digestMethod wybiera rzeczywisty digest CMS dokumentu i algorytm imprintu znacznika czasu z SHA256, SHA384 albo SHA512; messageImprint haszuje rzeczywiste oktety podpisu CMS dokładnie raz
timestampTrustedCRLFile opcjonalnie dostarcza CRL PEM; requireTimestampRevocation wymaga tego pliku i włącza sprawdzanie issuer i certyfikatów CRL, łącznie z revokowanymi certyfikatami i wygasłymi dowodami
Pliki wejścia zaufania pozostają otwarte z odmową współdzielenia zapisu podczas podpisywania, a ich łączny rozmiar jest ograniczony do jednej ósmej memoryBytes przed załadowaniem przez OpenSSL
Każde żądanie zawiera świeży kryptograficzny nonce i żąda certyfikatów TSA; walidacja odpowiedzi uwierzytelnia nonce żądania, imprint, kompletny podpis CMS, powiązanie certyfikatu podpisującego ESS, łańcuch certyfikatów i krytyczne EKU timestamp
C ABI transport
Przekaż hpdf_signing_operation_v1 do hpdf_document_execute_json_v1, ustaw operation.struct_size na sizeof(hpdf_signing_operation_v1) i dostarcz timestamp_transport i timestamp_user_data
Prefiks operacji zachowuje istniejący layout hpdf_operation_v1 i wersję ABI; zwykłe operacje nadal używają oryginalnej struktury
Callback otrzymuje kompletny TimeStampReq DER i pożyczone response_io; zapisz kompletny TimeStampResp DER przez response_io.write i zwróć hpdf_status
Callback działa na wątku wywołującym, a wskaźniki IO żądania i odpowiedzi pozostają poprawne wyłącznie podczas tego wywołania; aplikacja posiada transport sieciowy, uwierzytelnianie, timeout i politykę połączeń
response_io.is_cancelled odpytuje callbacki anulowania wejścia, wyjścia i wyniku operacji; zapisy odpowiedzi wymuszają maksimum 16 MiB dodatkowo ograniczone do jednej ósmej memoryBytes przed kopiowaniem pamięci callbacka
Awaria zapisu odpowiedzi albo anulowania pozostaje aktywna dla operacji nawet, gdy callback później zwróci sukces; nieudane odpowiedzi nie mogą publikować bajtów PDF
Pascal service entry
THPDFJobProcessor.ExecuteLoadedSigningOperation akceptuje załadowany dokument, obiekt JSON operacji, strumień wyjścia, checkpoint, callback THPDFHeadlessTimestampTransport i nieprzejrzysty kontekst callbacka
Transport Pascal otrzymuje żądanie DER i zwraca odpowiedź DER; zagnieżdżone synchroniczne podpisywanie przywraca otaczający kontekst callbacka po powrocie operacji wewnętrznej
Seed values and provenance
Wymagane ograniczenie SV TimeStamp jest spełniane przez rzeczywistą uwierzytelnioną odpowiedź; gdy wymagany słownik TimeStamp określa URL, timestampURL musi pasować do tej wartości
timestampURL to proweniencja transportu stwierdzana przez aplikację; porównanie zadeklarowanego URL nie ustanawia tożsamości serwera HTTPS, a aplikacja musi uwierzytelnić swój wybrany punkt końcowy
Samodzielne zadania plikowe bez callbacka aplikacji nie mogą wykonać żądania znacznika czasu; sam ciąg URL nie może spełnić wymaganego znacznika czasu
Zobacz inkrementalne podpisywanie PFX i natywna weryfikacja RFC3161