function BuildStandalonePdfMacToken(const FileEncryptionKey, KdfSalt,
DataDigest: TBytes): TBytes;
function VerifyStandalonePdfMacToken(const Token, FileEncryptionKey,
KdfSalt, ExpectedDataDigest: TBytes;
out ErrorText: string): Boolean;
function BuildAttachedPdfMacToken(const FileEncryptionKey, KdfSalt,
DataDigest, SignatureDigest: TBytes; SignatureObjectNumber,
SignatureGeneration: Integer): TBytes;
function VerifyAttachedPdfMacToken(const Token, FileEncryptionKey, KdfSalt,
ExpectedDataDigest, ExpectedSignatureDigest: TBytes;
SignatureObjectNumber, SignatureGeneration: Integer;
out ErrorText: string): Boolean;
ตัวสร้าง derive key สำหรับเข้ารหัส key แบบ AES-256 จาก file encryption key ขนาด 32 ไบต์และ /KDFSalt ด้วย HKDF-SHA256 และค่า info แบบ UTF-8 คือ PDFMAC
MAC key ขนาด 256 บิตแบบสุ่มจะถูกห่อด้วย RFC 3394 AES-256 Key Wrap และสร้างขึ้นใน PasswordRecipientInfo เดี่ยวที่ ISO/TS 32004 กำหนด
โทเค็นฝัง PdfMacIntegrityInfo แบบเวอร์ชันศูนย์ attribute ที่ต้องมีการตรวจสอบ, CMSAlgorithmProtection และค่า HMAC-SHA256 บนการเข้ารหัส SET แบบ DER canonical ของ attribute เหล่านั้น
ผู้เรียกเป็นเจ้าของการ serialize PDF และส่ง digest SHA-256 ของ segment /ByteRange ที่แน่นอนเข้ามา โค้ดแอปพลิเคชันปกติใช้ TPdfEncryptOptions.EnableIntegrityProtection และ TPdf.ValidatePdfMac
โทเค็นแบบแนบกับลายเซ็นจะผูก data digest เข้ากับ signature digest และหมายเลขอ็อบเจกต์กับ generation ของลายเซ็นก่อนสร้างหรือตรวจสอบโทเค็นที่ผ่านการตรวจสอบในรูปแบบเดียวกัน
| Function | Description |
|---|---|
BuildStandalonePdfMacToken | สร้างโทเค็น AuthenticatedData แบบสแตนด์อโลนจาก file-encryption key ขนาด 32 ไบต์, KDF salt และค่า data digest |
VerifyStandalonePdfMacToken | ตรวจสอบ DER canonical, อัลกอริทึม, attribute, wrapped key, data digest ที่คาดหวัง และ HMAC แบบเวลาคงที่ในจุดที่เปรียบเทียบค่าลับ |
BuildAttachedPdfMacToken | สร้างโทเค็นแบบแนบกับลายเซ็นโดย hash data digest, signature digest, หมายเลขอ็อบเจกต์ลายเซ็น และ generation ของลายเซ็นเข้าเป็น integrity digest ที่ผูกไว้ |
VerifyAttachedPdfMacToken | สร้าง binding digest แบบแนบกับลายเซ็นใหม่จากบริบทลายเซ็นที่คาดหวัง แล้วตรวจสอบโทเค็นที่ได้ |
การ implement รองรับ authentication code ทั้งแบบสแตนด์อโลนและแบบแนบกับลายเซ็น data digest และ signature digest แบบ SHA-256, HMAC-SHA256, AES-256 Key Wrap และ file key ขนาด 32 ไบต์ของ Standard Security Handler
public-key security handler และอัลกอริทึม digest ทางเลือกยังไม่ถูกสร้าง