TPdfEncryptionRevision = (erR5, erR6, erR7);
TPdfEncryptOptions = record
UserPassword: AnsiString;
OwnerPassword: AnsiString;
Permissions: Cardinal;
EncryptMetadata: Boolean;
Revision: TPdfEncryptionRevision;
EnableIntegrityProtection: Boolean;
class function Default: TPdfEncryptOptions; static;
end;
TPdfEncryptionKeys = record
FileEncryptionKey: TBytes;
OEntry: TBytes;
UEntry: TBytes;
OEEntry: TBytes;
UEEntry: TBytes;
PermsEntry: TBytes;
KdfSalt: TBytes;
end;
TPdfIncrementalEncryptionContext = record
FileEncryptionKey: TBytes;
KdfSalt: TBytes;
Revision: TPdfEncryptionRevision;
EncryptMetadata: Boolean;
EncryptObjectNumber: Integer;
EncryptGeneration: Integer;
HasAuthenticationCode: Boolean;
end;
procedure DeriveEncryptionKeys(const Options: TPdfEncryptOptions;
out Keys: TPdfEncryptionKeys);
function BuildEncryptDictionary(const Keys: TPdfEncryptionKeys;
const Options: TPdfEncryptOptions): AnsiString;
function EncryptStreamPayload(const FileKey: TBytes;
const Plain: TBytes): TBytes;
function EncryptDocumentBytes(const PlainPdf: TBytes;
const Options: TPdfEncryptOptions): TBytes;
function DecryptAesGcmDocumentBytes(const EncryptedPdf: TBytes;
const Password: AnsiString; out PlainPdf: TBytes;
out ErrorText: string): Boolean;
function ValidateEncryptedDocumentMac(const EncryptedPdf: TBytes;
const Password: AnsiString): TPdfMacValidationResult;
function ReadIncrementalEncryptionContext(const EncryptedPdf: TBytes;
const Password: AnsiString;
out Context: TPdfIncrementalEncryptionContext;
out ErrorText: string): Boolean;
procedure ClearIncrementalEncryptionContext(
var Context: TPdfIncrementalEncryptionContext);
function EncryptIncrementalObjectBody(const PlainBody: TBytes;
const Context: TPdfIncrementalEncryptionContext;
out EncryptedBody: TBytes;
out ErrorText: string): Boolean;
FPdfEncrypt implementează gestionarul de securitate PDF AES-256 definit în ISO 32000-2 secțiunea 7.6 și extensia AESV4-GCM definită de ISO/TS 32003. EncryptDocumentBytes transformă un vector de octeți PDF în clar într-un document criptat, folosind revizuirea selectată
DeriveEncryptionKeys rulează derivarea cheii bazată pe parolă, care produce cheia de criptare a fișierului de 32 de octeți plus intrările de dicționar /O, /U, /OE, /UE și /Perms. BuildEncryptDictionary serializează aceste intrări în textul dicționarului /Encrypt. EncryptStreamPayload aplică criptarea AES-256-CBC unui singur flux de obiect, folosind cheia fișierului
Un utilizator avansat care construiește un pipeline de salvare personalizat poate apela direct cele trei primitive; codul de aplicație folosește în mod normal TPdf.SaveAsEncrypted sau TPdf.SaveAsEncryptedToStream, care apelează EncryptDocumentBytes intern
Când EnableIntegrityProtection este true, writer-ul emite un cod de autentificare autonom PDF 2.0 ISO/TS 32004, cu un /ByteRange exact care acoperă EOF, /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap și HMAC-SHA256
PDFium nu expune în prezent parsarea AESV4 prin ABI-ul său public. Apelați mai întâi DecryptAesGcmDocumentBytes și transmiteți octeții returnați către TPdf.LoadDocument; funcția nu returnează niciun text clar parțial după un eșec de parolă, de permisiune, de PDF MAC, de tag de șir sau de tag de flux
ReadIncrementalEncryptionContext autentifică lanțul curent de revizuiri criptate și recuperează starea de securitate moștenită. EncryptIncrementalObjectBody criptează șirurile și sarcina utilă a fluxului într-un singur obiect indirect schimbat, păstrând excluderile de metadate și actualizând valorile directe /Length; ClearIncrementalEncryptionContext curăță materialul de chei recuperat
| Function | Description |
|---|---|
DeriveEncryptionKeys | Rulează derivarea cheii bazată pe parolă și returnează cheia fișierului și cele cinci intrări de dicționar |
BuildEncryptDictionary | Serializează cheile și opțiunile în textul dicționarului /Encrypt |
EncryptStreamPayload | Criptează un singur flux de obiect cu AES-256-CBC, folosind cheia fișierului |
EncryptDocumentBytes | Ajutor dintr-o singură mișcare, care derivă cheile, rescrie fluxurile și injectează dicționarul /Encrypt într-un vector complet de octeți PDF |
DecryptAesGcmDocumentBytes | Autentifică și decriptează ieșirea AESV4-GCM în octeți în clar pe care PDFium îi poate încărca |
ValidateEncryptedDocumentMac | Validează un PDF MAC autonom față de octeții criptați originali, folosind o parolă de utilizator sau de proprietar |
ReadIncrementalEncryptionContext | Autentifică un lanț de revizuiri criptate și recuperează cheia fișierului moștenită, revizuirea, politica de metadate, referința /Encrypt și starea PDF MAC |
ClearIncrementalEncryptionContext | Curăță în siguranță materialul de chei incrementale de criptare recuperat |
EncryptIncrementalObjectBody | Criptează șirurile și fluxurile din corpul unui singur obiect indirect schimbat, sub contextul de securitate moștenit |
| Type | Description |
|---|---|
TPdfEncryptionRevision | Enumerare care alege revizuirea AESV3-CBC erR5 sau erR6, sau revizuirea AESV4-GCM ISO/TS 32003 erR7 |
TPdfEncryptOptions | Înregistrare care poartă parole, fanioane de permisiuni, politică de metadate, revizuirea gestionarului de securitate și protecție opțională de integritate PDF MAC |
TPdfEncryptionKeys | Înregistrare care reține cheia fișierului, intrările gestionarului de securitate și /KDFSalt opțional de 32 de octeți |
TPdfIncrementalEncryptionContext | Stare de securitate moștenită, autentificată, folosită pentru a adăuga obiecte indirecte criptate fără a înlocui dicționarul /Encrypt existent |
TPdfMacValidationStatus | pmvsValid, pmvsNotPresent, pmvsInvalid sau pmvsUnsupported |
TPdfMacValidationResult | Status al validării autonome PDF MAC și MessageText de diagnostic |
DecryptAesGcmDocumentBytes urmează lanțurile clasice de revizuiri /Prev emise de writer-ul incremental criptat și rezolvă cea mai nouă generație activă de obiect; încărcarea nativă PDFium AESV4 și intrarea AESV4 externă xref-stream nu sunt disponibile în acest releasePermissions folosește așezarea în biți din ISO 32000-1 Table 22 (fanioanele /P)