PDFium Delphi Component Docs

Unitatea FPdfEncrypt

Unit: FPdfEncrypt
Derivă chei de criptare AES-256 și emite șiruri, fluxuri și dicționare de criptare ISO 32000-2 AESV3-CBC sau ISO/TS 32003 AESV4-GCM

Syntax

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;

Description

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

Functions

FunctionDescription
DeriveEncryptionKeysRulează derivarea cheii bazată pe parolă și returnează cheia fișierului și cele cinci intrări de dicționar
BuildEncryptDictionarySerializează cheile și opțiunile în textul dicționarului /Encrypt
EncryptStreamPayloadCriptează un singur flux de obiect cu AES-256-CBC, folosind cheia fișierului
EncryptDocumentBytesAjutor dintr-o singură mișcare, care derivă cheile, rescrie fluxurile și injectează dicționarul /Encrypt într-un vector complet de octeți PDF
DecryptAesGcmDocumentBytesAutentifică și decriptează ieșirea AESV4-GCM în octeți în clar pe care PDFium îi poate încărca
ValidateEncryptedDocumentMacValidează un PDF MAC autonom față de octeții criptați originali, folosind o parolă de utilizator sau de proprietar
ReadIncrementalEncryptionContextAutentifică un lanț de revizuiri criptate și recuperează cheia fișierului moștenită, revizuirea, politica de metadate, referința /Encrypt și starea PDF MAC
ClearIncrementalEncryptionContextCurăță în siguranță materialul de chei incrementale de criptare recuperat
EncryptIncrementalObjectBodyCriptează șirurile și fluxurile din corpul unui singur obiect indirect schimbat, sub contextul de securitate moștenit

Types

TypeDescription
TPdfEncryptionRevisionEnumerare 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
TPdfIncrementalEncryptionContextStare de securitate moștenită, autentificată, folosită pentru a adăuga obiecte indirecte criptate fără a înlocui dicționarul /Encrypt existent
TPdfMacValidationStatuspmvsValid, pmvsNotPresent, pmvsInvalid sau pmvsUnsupported
TPdfMacValidationResultStatus al validării autonome PDF MAC și MessageText de diagnostic

Remarks

See Also

FPdfAes, FPdfSha256, FPdfHmac, FPdfMac, TPdf.SaveAsEncrypted, TPdf.SaveAsEncryptedToStream