TPadesTimestamp = record
TokenDer: TBytes;
GenTime: TDateTime;
PolicyOid: AnsiString;
Nonce: Int64;
end;
function PadesTsaAvailable: Boolean;
function PadesTsaBackendName: string;
function BuildTimeStampReq(const HashInput: TBytes; DigestOid: AnsiString;
Nonce: Int64; CertReq: Boolean): TBytes;
function BuildTimeStampReqFromDigest(const Digest: TSHA256Digest;
DigestOid: AnsiString; Nonce: Int64; CertReq: Boolean): TBytes;
function ParseTimeStampResp(const RespDer: TBytes; ExpectedNonce: Int64;
out Ts: TPadesTimestamp): Boolean; overload;
function ParseTimeStampResp(const RespDer: TBytes; ExpectedNonce: Int64;
const ExpectedDigest: TSHA256Digest; out Ts: TPadesTimestamp): Boolean; overload;
function ValidateTimeStampToken(const TokenDer: TBytes;
const ExpectedDigest: TSHA256Digest; out Ts: TPadesTimestamp): Boolean;
function RequestTimestamp(const TsaUrl: string;
const SignatureValueOctets: TBytes; Nonce: Int64): TPadesTimestamp;
function RequestTimestampDigest(const TsaUrl: string;
const Digest: TSHA256Digest; Nonce: Int64): TPadesTimestamp;
TPadesTimestampProc = function(const TsaUrl: string;
const Digest: TSHA256Digest; Nonce: Int64): TPadesTimestamp;
var PadesTimestampOverride: TPadesTimestampProc;
var PadesTsaAvailableOverride: Integer;
FPdfTsa מממש את הצד הלקוחי של RFC 3161 עבור חתימות PAdES ארוכות-טווח. הוא מקודד הודעות TimeStampReq, מפענח הודעות TimeStampResp, ומציע עטיפות נוחות שמבצעות את חילופי ה-HTTP המלאים מול כתובת של רשות חותמות זמן (TSA)
עורף התעבורה ניתן להחלפה: ב-Windows עורף FPdfTsaWin מבוסס ה-WinHttp נמצא בשימוש באופן אוטומטי; PadesTsaAvailable מדווח אם עורף כלשהו חובר, ו-PadesTsaBackendName מזהה אותו
שתי פונקציות נוחות, RequestTimestamp ו-RequestTimestampDigest, מחשבות hash של ערך החתימה (או מקבלות digest שחושב מראש), בונות את הבקשה, שולחות אותה ומנתחות את התשובה בקריאה אחת, תוך ביצוע אימות nonce ו-digest
| Function | Description |
|---|---|
PadesTsaAvailable | מחזיר True כאשר עורף תעבורה של חותמות זמן זמין בפלטפורמה הנוכחית |
PadesTsaBackendName | מחזיר את שם התצוגה של עורף חותמות הזמן הפעיל |
BuildTimeStampReq | בונה הודעת TimeStampReq מתוך קלט hash גולמי, OID של אלגוריתם digest, nonce שהקורא בחר ודגל בקשת אישור |
BuildTimeStampReqFromDigest | בונה הודעת TimeStampReq מתוך digest של SHA-256 שחושב מראש, תוך דילוג על שלב ה-hashing הפנימי |
ParseTimeStampResp (2 overloads) | מנתח TimeStampResp ומאמת את ה-nonce; ה-overload השני מאמת בנוסף שה-digest שקיבל חותמת זמן תואם את ExpectedDigest |
ValidateTimeStampToken | מאמת TimeStampToken עצמאי מול digest SHA-256 צפוי ומחזיר את נתוני חותמת הזמן המנותחים שלו |
RequestTimestamp | מחשב hash של ערך החתימה, שולח את הבקשה אל TsaUrl ומחזיר את TPadesTimestamp המאומת |
RequestTimestampDigest | זהה ל-RequestTimestamp אך מקבל digest שחושב מראש במקום ערך החתימה הגולמי |
| Type | Description |
|---|---|
EPadesTsa | חריגה שנזרקת עבור כשלי קידוד, תעבורה או אימות של חותמות זמן |
TPadesTimestamp | רשומה עם השדות TokenDer, GenTime, PolicyOid ו-Nonce עבור חותמת הזמן המוחזרת |
TPadesTimestampProc | חתימת callback שבה משתמשים כדי להחליף את הרכישה של חותמות זמן מבוססת ה-digest |
| Variable | Description |
|---|---|
PadesTimestampOverride | TPadesTimestampProc אופציונלי שמשמש במקום עורף ה-HTTP של הפלטפורמה |
PadesTsaAvailableOverride | עקיפת זמינות שבה 0 משתמש בבדיקת העורף, 1 כופה זמינות ו--1 כופה אי-זמינות |
PadesTimestampOverride ו-PadesTsaAvailableOverride מאפשרים ליישום המארח להחליף את תעבורת חותמות הזמן שלו עצמו, לצורכי בדיקות או עם מחסנית HTTP מותאמתNonce אקראי קריפטוגרפית ואמתו אותו דרך ParseTimeStampResp כדי לזהות החלפת תשובות