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 är den icke-Windows tidsstempeltransport som FPdfTsa konsumerar, motparten till FPdfTsaWin. Den POSTar en kodad TimeStampReq till en tidsstämpelmyndighets URL över HTTP eller HTTPS och samlar TimeStampResp-bytes; byggandet och tolkningen av DER stannar i FPdfTsa
Transporten är libcurl, bunden vid körning i stället för länkad, så biblioteket är inget byggberoende och dess frånvaro rapporteras i stället för att misslyckas med inläsningen. Att gå via libcurl håller också TLS-stacken utanför denna enhet: libcurl väljer sin egen backend och validerar serverkedjan mot plattformens trust store
TsaHttpAvailable rapporterar huruvida libcurl hittades och de nödvändiga ingångspunkterna löstes upp; TsaHttpBackendName namnger den upplösta backenden; PostTimeStampQuery utför HTTP-utbytet och returnerar False (i stället för att kasta) vid varje transportfel, vilket låter anroparen lägga till egen kontext och återförsökspolicy
Hela interface-sektionen kompileras endast under FPC. Under Delphi är enheten tom, eftersom Delphi riktar sig mot Windows och FPdfTsaWin är backenden där. Enheten kompileras ändå på alla FPC-mål inklusive Windows, där FPdfTsa föredrar WinHttp-backenden och inget anropar denna
Libcurl-handelstyperna, ingångspunktsbindningarna och optionskonstanterna ligger i implementation-sektionen; interfacet exponerar endast tillgänglighetskontrollen, backend-namnet, POST-hjälparen och de tre transportgränserna
| Function | Description |
|---|---|
TsaHttpAvailable | Returnerar True när libcurl hittades och alla nödvändiga ingångspunkter löstes upp vid körning |
TsaHttpBackendName | Returnerar namnet på den upplösta backenden, libcurl när transporten är användbar och en tom sträng annars |
PostTimeStampQuery | POSTar ReqDer till TsaUrl och fyller RespDer med den råa TimeStampResp-kroppen; returnerar False vid transportfel |
| Constant | Value | Description |
|---|---|---|
TsaMaxResponseBytes | 4 * 1024 * 1024 | Övre gräns för den accepterade TimeStampResp-kroppen; ett större svar avbryter överföringen i stället för att växa bufferten utan gräns. Hålls synkad med samma konstant i FPdfTsaWin |
TsaRequestTimeoutSeconds | 30 | Budget för hela begäran i sekunder, matchad mot WinHttp-timeouterna så att en död TSA inte kan hänga en signerartråd på någon av plattformarna |
TsaConnectTimeoutSeconds | 30 | Uppkopplingsbudget i sekunder, tillämpad före begäranbudgeten |
Content-Type: application/timestamp-query och förväntar application/timestamp-reply; Expect: 100-continue undertrycks så att en tyst svarande inte kan ställa en kropp större än 1 KBhttp och https accepteras, och omdirigeringar följs inte: en svarande som svarar med en omdirigering behandlas som felkonfigurerad i stället för att tyst försökas igen mot en ändpunkt anroparen aldrig namngavTsaHttpAvailable-anrop och handtaget hålls medvetet öppet under processens livstid, eftersom att lämna ut det medan en annan tråd är inne i en överföring skulle fälla värden. Signaalbaserade resolver-timeouts hålls av så att signering kan köras på arbetstrådarTsaHttpAvailable False och FPdfTsa rapporterar PadesTsaAvailable = False om inte en annan transport registrerats via PadesTimestampOverride