Windows Signing Timestamps
Windows sign operace může vyžádat skutečný RFC3161 timestamp přes synchronní aplikační callback a publikovat PDF až po autentizaci odpovědi
Podepisovací volby
{"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 defaultuje na false; hodnota true vyžaduje transportní callback aplikace i explicitní timestampTrustedCAFile obsahující důvěryhodné PEM certifikátové rooty
digestMethod vybere skutečný dokumentový CMS digest i algoritmus timestamp imprintu z SHA256, SHA384 či SHA512; messageImprint hasuje skutečné oktety CMS signatury přesně jednou
timestampTrustedCRLFile volitelně dodá PEM CRL; requireTimestampRevocation ten soubor vyžaduje a zapne kontroly CRL vystavitelů i certifikátů, tedy i revoked certifikáty i expirované důkazy
Trust vstupní soubory zůstávají během podepisování otevřené se zakázaným sdílením zápisu a jejich kombinovaná velikost je omezená na jednu osminu memoryBytes, dřív než je načte OpenSSL
Každá žádost obsahuje čerstvé kryptografické nonce a žádá certifikáty TSA; validace odpovědi autentizuje request nonce, imprint, kompletní CMS signaturu, vazbu ESS signing-certificate, certifikátový řetězec i kritické timestamp EKU
C ABI transport
Předejte hpdf_signing_operation_v1 do hpdf_document_execute_json_v1, nastavte operation.struct_size na sizeof(hpdf_signing_operation_v1) a dodávejte timestamp_transport a timestamp_user_data
Operation prefix si uchovává stávající rozložení i ABI verzi hpdf_operation_v1; běžné operace dál používají původní strukturu
Callback dostane kompletní DER TimeStampReq a vypůjčené response_io; kompletní DER TimeStampResp zapište přes response_io.write a vraťte hpdf_status
Callback běží na volajícím vlákně a IO pointery požadavku i odpovědi zůstávají platné jen během toho vyvolání; síťový transport, autentizaci, timeout i politiku spojení vlastní aplikace
response_io.is_cancelled dotazuje cancellation callbacky vstupu, výstupu i výsledku operace; zápisy odpovědí vynucují maximum 16 MiB, navíc oříznuté na jednu osminu memoryBytes, dřív než se zkopíruje paměť callbacku
Selhání zápisu odpovědi či zrušení zůstává pro operaci aktivní, i když callback poté vrátí úspěch; neúspěšné odpovědi nemohou publikovat PDF bajty
Pascal servisní vstup
THPDFJobProcessor.ExecuteLoadedSigningOperation přijme načtený dokument, JSON objekt operace, výstupní stream, checkpoint, callback THPDFHeadlessTimestampTransport i neprůhledný callback kontext
Pascal transport dostane DER žádosti a vrátí DER odpovědi; vnořené synchronní podepisování obnoví obklopující callback kontext, když se vnitřní operace vrátí
Seed hodnoty a provenience
Vyžadované omezení SV TimeStamp uspokojí skutečná autentizovaná odpověď; když vyžadovaný slovník TimeStamp specifikuje URL, timestampURL se musí shodovat s tou hodnotou
timestampURL je transportní provenience tvrzená aplikací; porovnání deklarované URL nezakládá identitu HTTPS serveru a aplikace si musí autentizovat vybraný endpoint
Samostatné file joby bez aplikačního callbacku žádost o timestamp provést nemohou; samotný řetězec URL nemůže uspokojit povinný timestamp
Viz inkrementální PFX podepisování a nativní RFC3161 verifikace