TAesBlock = array[0..15] of Byte;
TAes128Key = array[0..15] of Byte;
TAes128ExpandedKey = array[0..175] of Byte;
TAes256Key = array[0..31] of Byte;
TAes256ExpandedKey = array[0..239] of Byte;
procedure Aes128KeyExpansion(const Key: TAes128Key; var Expanded: TAes128ExpandedKey);
procedure Aes128EncryptBlock(const Expanded: TAes128ExpandedKey;
const Input: TAesBlock; var Output: TAesBlock);
procedure Aes256KeyExpansion(const Key: TAes256Key; var Expanded: TAes256ExpandedKey);
procedure Aes256EncryptBlock(const Expanded: TAes256ExpandedKey;
const Input: TAesBlock; var Output: TAesBlock);
procedure Aes256DecryptBlock(const Expanded: TAes256ExpandedKey;
const Input: TAesBlock; var Output: TAesBlock);
function Aes256CbcEncryptPKCS7(const Key: TAes256Key; const IV: TAesBlock;
const Plain: TBytes): TBytes;
function Aes256CbcEncryptNoPad(const Key: TAes256Key; const IV: TAesBlock;
const Plain: TBytes): TBytes;
function Aes256CbcDecryptPKCS7(const Key: TAes256Key; const IV: TAesBlock;
const Cipher: TBytes): TBytes;
function Aes256CbcDecryptNoPad(const Key: TAes256Key; const IV: TAesBlock;
const Cipher: TBytes): TBytes;
function Aes256KeyWrap(const Key: TAes256Key;
const PlainKeyData: TBytes): TBytes;
function Aes256KeyUnwrap(const Key: TAes256Key; const Wrapped: TBytes;
out PlainKeyData: TBytes): Boolean;
procedure AesGenerateRandomBytes(Buffer: Pointer; Count: Integer);
FPdfAes เป็นการ implement AES ที่ไม่ต้องพึ่ง dependency ภายนอก เพื่อให้ PDFium Delphi Component เข้ารหัสและถอดรหัส stream ของ PDF บน Delphi, C++Builder และ Free Pascal ได้โดยไม่ต้องพึ่งไลบรารี crypto ภายนอก โดยถูกใช้งานโดย security handler AES-256 ของ PDF ใน FPdfEncrypt และโดยโหมด GCM ใน FPdfAesGcm
primitive ระดับบล็อกทำงานกับบล็อกขนาด 16 ไบต์คงที่ผ่าน round key ที่ขยายแล้ว ส่วน CBC wrapper จัดการ PKCS#7 padding หรือไม่มี padding กับอาร์เรย์ไบต์ความยาวผันแปร ตรงกับโหมดการเข้ารหัส stream สองแบบที่ข้อกำหนด PDF กำหนดไว้
AesGenerateRandomBytes เติมบัฟเฟอร์ด้วยไบต์สุ่มระดับ cryptographic สำหรับใช้เป็น IV, salt และ key
| Function | Description |
|---|---|
Aes128KeyExpansion | ขยาย key ขนาด 128 บิตให้เป็น round-key schedule ขนาด 176 ไบต์ |
Aes128EncryptBlock | เข้ารหัสบล็อกขนาด 16 ไบต์หนึ่งบล็อกด้วย key AES-128 ที่ขยายแล้ว |
Aes256KeyExpansion | ขยาย key ขนาด 256 บิตให้เป็น round-key schedule ขนาด 240 ไบต์ |
Aes256EncryptBlock | เข้ารหัสบล็อกขนาด 16 ไบต์หนึ่งบล็อกด้วย key AES-256 ที่ขยายแล้ว |
Aes256DecryptBlock | ถอดรหัสบล็อกขนาด 16 ไบต์หนึ่งบล็อกด้วย key AES-256 ที่ขยายแล้ว |
Aes256CbcEncryptPKCS7 | เข้ารหัสอาร์เรย์ไบต์ในโหมด CBC ด้วย PKCS#7 padding |
Aes256CbcEncryptNoPad | เข้ารหัสอาร์เรย์ไบต์ในโหมด CBC โดยไม่มี padding (ความยาวอินพุตต้องเป็นจำนวนเท่าของบล็อก) |
Aes256CbcDecryptPKCS7 | ถอดรหัส ciphertext แบบ CBC และตัด PKCS#7 padding ออก |
Aes256CbcDecryptNoPad | ถอดรหัส ciphertext แบบ CBC โดยไม่ตัด padding ออก |
Aes256KeyWrap | ห่อหุ้ม key data ด้วย AES-256 โดยใช้การปกป้องความถูกต้องตาม RFC 3394 |
Aes256KeyUnwrap | ตรวจสอบและคลาย key data แบบ RFC 3394 โดยไม่คืน plaintext เมื่อ integrity ล้มเหลว |
AesGenerateRandomBytes | เติมบัฟเฟอร์ด้วยไบต์สุ่มระดับ cryptographic |
| Constant | Value | Description |
|---|---|---|
AES_BLOCK_SIZE | 16 | ขนาดบล็อกของ AES เป็นไบต์ |
AES128_KEY_SIZE | 16 | ขนาด key ของ AES-128 เป็นไบต์ |
AES128_ROUND_KEY_SIZE | 176 | ขนาด round key ที่ขยายแล้วของ AES-128 เป็นไบต์ |
AES256_KEY_SIZE | 32 | ขนาด key ของ AES-256 เป็นไบต์ |
AES256_ROUND_KEY_SIZE | 240 | ขนาด round key ที่ขยายแล้วของ AES-256 เป็นไบต์ |