const
TsaMaxResponseBytes = 4 * 1024 * 1024;
TsaRequestTimeoutSeconds = 30;
TsaConnectTimeoutSeconds = 30;
function TsaHttpAvailable: Boolean;
function TsaHttpBackendName: string;
function PostTimeStampQuery(const TsaUrl: string; const ReqDer: TBytes;
out RespDer: TBytes): Boolean;
FPdfTsaFpc is het timestamptransport voor niet-Windows dat door FPdfTsa wordt gebruikt, de tegenhanger van FPdfTsaWin. Het stuurt een gecodeerde TimeStampReq via POST naar de URL van een timestamp authority over HTTP of HTTPS en verzamelt de TimeStampResp-bytes; het bouwen en parsen van de DER blijft in FPdfTsa
Het transport is libcurl, tijdens runtime gebonden in plaats van gekoppeld, dus de bibliotheek is geen bouwtijdafhankelijkheid en de afwezigheid wordt gemeld in plaats van dat het laden mislukt. De route via libcurl houdt ook de TLS-stack buiten deze unit: libcurl kiest zijn eigen backend en valideert de serverketen tegen de platform-truststore
TsaHttpAvailable rapporteert of libcurl is gevonden en de vereiste entry points zijn opgezocht; TsaHttpBackendName noemt de opgezochte backend; PostTimeStampQuery verricht de HTTP-uitwisseling en geeft False terug (in plaats van een exceptie) bij elke transportfout, zodat de aanroeper zijn eigen context en hernieuwingsbeleid kan toevoegen
De hele interfacedeel wordt alleen onder FPC gecompileerd. Onder Delphi is de unit leeg, omdat Delphi zich op Windows richt en FPdfTsaWin daar de backend is. De unit compileert nog steeds op elk FPC-doel, inclusief Windows, waar FPdfTsa de voorkeur geeft aan de WinHttp-backend en niets in deze unit terechtkomt
De libcurl-handletypes, de entry-point-bindingen en de optieconstanten zitten in de implementatiedeel; de interface legt alleen de beschikbaarheidscontrole, de backendnaam, de post-hulpfunctie en de drie transportlimieten bloot
| Function | Description |
|---|---|
TsaHttpAvailable | Geeft True terug wanneer libcurl is gevonden en elk vereist entry point tijdens runtime is opgezocht |
TsaHttpBackendName | Geeft de naam van de opgezochte backend terug, libcurl wanneer het transport bruikbaar is en anders een lege string |
PostTimeStampQuery | Verstuurt ReqDer via POST naar TsaUrl en vult RespDer met de ruwe TimeStampResp-body; geeft False terug bij een transportfout |
| Constant | Value | Description |
|---|---|---|
TsaMaxResponseBytes | 4 * 1024 * 1024 | Bovengrens voor de geaccepteerde TimeStampResp-body; een grotere response breekt de overdracht af in plaats van de buffer onbeperkt te laten groeien. Wordt gelijk gehouden met dezelfde constante in FPdfTsaWin |
TsaRequestTimeoutSeconds | 30 | Budget voor het hele verzoek in seconden, gelijk aan de WinHttp-timeouts, zodat een dode TSA geen ondertekeningsthread op geen enkel platform kan laten vastlopen |
TsaConnectTimeoutSeconds | 30 | Verbindingsbudget in seconden, van kracht vóór het verzoekbudget |
Content-Type: application/timestamp-query en verwacht application/timestamp-reply; Expect: 100-continue wordt onderdrukt zodat een zwijgende responder geen body groter dan 1 KB kan laten vastlopenhttp- en https-URL's worden geaccepteerd, en redirects worden niet gevolgd: een responder die met een redirect antwoordt wordt als verkeerd geconfigureerd behandeld in plaats van stilletjes opnieuw bevraagd tegen een endpoint dat de aanroeper nooit heeft genoemdTsaHttpAvailable-aanroep en de handle wordt met opzet opengehouden zolang het proces leeft, omdat lossen terwijl een andere thread midden in een overdracht zit de host zou neerhalen. Signaalgebaseerde resolver-timeouts blijven uit zodat ondertekening op werkthreads kan draaienTsaHttpAvailable False terug en rapporteert FPdfTsa PadesTsaAvailable = False, tenzij via PadesTimestampOverride een ander transport is geregistreerd