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