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 implement ฝั่งไคลเอนต์ของ RFC 3161 สำหรับลายเซ็นระยะยาวแบบ PAdES หน่วยนี้ encode ข้อความ TimeStampReq, decode ข้อความ TimeStampResp และมีตัวช่วยครอบที่ทำการแลกเปลี่ยน HTTP ฉบับเต็มกับ URL ของ timestamp authority (TSA)
transport backend เปลี่ยนได้: บน Windows จะใช้ backend ที่อิง WinHttp ใน FPdfTsaWin โดยอัตโนมัติ; PadesTsaAvailable รายงานว่ามี backend ต่ออยู่หรือไม่ และ PadesTsaBackendName ระบุชื่อของมัน
ฟังก์ชันความสะดวกสองตัว ได้แก่ RequestTimestamp และ RequestTimestampDigest จะ hash ค่าลายเซ็น (หรือรับ digest ที่คำนวณไว้แล้ว) สร้างคำขอ ส่งออกไป และ parse คำตอบในการเรียกเดียว พร้อมตรวจ nonce กับ digest
| Function | Description |
|---|---|
PadesTsaAvailable | คืน True เมื่อมี transport backend สำหรับ timestamp บนแพลตฟอร์มปัจจุบัน |
PadesTsaBackendName | คืนชื่อที่แสดงของ timestamp backend ที่ใช้งานอยู่ |
BuildTimeStampReq | สร้างข้อความ TimeStampReq จากอินพุต hash ดิบ, OID ของอัลกอริทึม digest, nonce ที่ผู้เรียกเลือก และ flag การร้องขอใบรับรอง |
BuildTimeStampReqFromDigest | สร้างข้อความ TimeStampReq จาก digest SHA-256 ที่คำนวณไว้แล้ว โดยข้ามขั้นตอน hash ภายใน |
ParseTimeStampResp (2 overloads) | parse TimeStampResp และตรวจ nonce; overload ตัวที่สองตรวจเพิ่มด้วยว่า digest ที่ถูกประทับ timestamp ตรงกับ ExpectedDigest |
ValidateTimeStampToken | ตรวจสอบ TimeStampToken แบบ standalone เทียบกับ digest SHA-256 ที่คาดไว้ แล้วคืนข้อมูล timestamp ที่ parse แล้ว |
RequestTimestamp | hash ค่าลายเซ็น ส่งคำขอไปที่ TsaUrl แล้วคืน TPadesTimestamp ที่ผ่านการตรวจแล้ว |
RequestTimestampDigest | เหมือน RequestTimestamp แต่รับ digest ที่คำนวณไว้แล้วแทนค่าลายเซ็นดิบ |
| Type | Description |
|---|---|
EPadesTsa | exception ที่เกิดจากความล้มเหลวในการ encode, การขนส่ง หรือการตรวจสอบ timestamp |
TPadesTimestamp | เรกคอร์ดที่มีฟิลด์ TokenDer, GenTime, PolicyOid และ Nonce สำหรับ timestamp ที่ได้กลับมา |
TPadesTimestampProc | signature ของ callback ที่ใช้แทนการหา timestamp ด้วย digest |
| Variable | Description |
|---|---|
PadesTimestampOverride | TPadesTimestampProc เสริมที่ใช้แทน HTTP backend ของแพลตฟอร์ม |
PadesTsaAvailableOverride | ตัวแทนค่าความพร้อมใช้ โดย 0 ใช้การตรวจของ backend, 1 บังคับว่าพร้อมใช้ และ -1 บังคับว่าไม่พร้อม |
PadesTimestampOverride กับ PadesTsaAvailableOverride ช่วยให้แอปพลิเคชันเจ้าภาพแทน transport timestamp ของตัวเองได้ เพื่อการทดสอบหรือเพื่อใช้ HTTP stack ของตัวเองNonce แบบสุ่มระดับเข้ารหัสลับเสมอ และตรวจมันผ่าน ParseTimeStampResp เพื่อจับการสลับคำตอบ