PDFium Delphi Component Docs

Jedinica FPdfEncrypt

Unit: FPdfEncrypt
Izvodi AES-256 enkripcijske ključeve i emituje ISO 32000-2 AESV3-CBC ili ISO/TS 32003 AESV4-GCM stringove, tokove i enkripcijske rečnike

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 implementira PDF AES-256 security handler definisan u ISO 32000-2 sekciji 7.6 i AESV4-GCM proširenje definisano ISO/TS 32003. EncryptDocumentBytes pretvara običan PDF niz bajtova u enkriptovan dokument koristeći izabranu reviziju

DeriveEncryptionKeys izvodi izvođenje ključa iz lozinke koje proizvodi 32-bajtni ključ enkripcije fajla plus unose rečnika /O, /U, /OE, /UE i /Perms. BuildEncryptDictionary serializuje te unose u tekst /Encrypt rečnika. EncryptStreamPayload primenjuje AES-256-CBC enkripciju na jedan tok objekta koristeći ključ fajla

Napredni korisnik koji gradi prilagođeni save pipeline može pozvati tri primitiva direktno; aplikacijski kod obično koristi TPdf.SaveAsEncrypted ili TPdf.SaveAsEncryptedToStream, koji interno pozivaju EncryptDocumentBytes

Kada je EnableIntegrityProtection true, writer emituje PDF 2.0 ISO/TS 32004 samostalni autentifikacioni kod sa tačnim /ByteRange-om koji pokriva EOF, /KDFSalt-om, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap i HMAC-SHA256

PDFium trenutno ne izlaže AESV4 parsiranje kroz svoj javni ABI. Prvo pozovite DecryptAesGcmDocumentBytes i prosledite vraćene bajtove funkciji TPdf.LoadDocument; funkcija ne vraća delimičan otvoreni tekst posle neuspeha lozinke, dozvole, PDF MAC-a, string taga ili taga toka

ReadIncrementalEncryptionContext autentifikuje tekući lanac enkriptovanih revizija i povraćava nasleđeno bezbednosno stanje. EncryptIncrementalObjectBody enkriptuje stringove i sadržaj toka u jednom izmenjenom indirektnom objektu čuvajući izuzete metapodatke i ažurirajući direktne /Length vrednosti; ClearIncrementalEncryptionContext briše povraćeni materijal ključeva

Functions

FunctionDescription
DeriveEncryptionKeysIzvodi izvođenje ključa iz lozinke i vraća ključ fajla i pet unosa rečnika
BuildEncryptDictionarySerializuje ključeve i opcije u tekst /Encrypt rečnika
EncryptStreamPayloadEnkriptuje jedan tok objekta AES-256-CBC koristeći ključ fajla
EncryptDocumentBytesPomoćnik u jednom pozivu koji izvodi ključeve, prepiše tokove i ubacuje /Encrypt rečnik u ceo PDF niz bajtova
DecryptAesGcmDocumentBytesAutentifikuje i dekriptuje AESV4-GCM izlaz u bajtove otvorenog teksta koje PDFium može da učita
ValidateEncryptedDocumentMacValidira samostalni PDF MAC naspram originalnih enkriptovanih bajtova koristeći korisničku ili vlasničku lozinku
ReadIncrementalEncryptionContextAutentifikuje enkriptovani lanac revizija i povraćava nasleđeni ključ fajla, reviziju, politiku metapodataka, referencu /Encrypt i stanje PDF MAC-a
ClearIncrementalEncryptionContextBezbedno briše povraćeni materijal ključeva inkrementalne enkripcije
EncryptIncrementalObjectBodyEnkriptuje stringove i tokove u jednom izmenjenom telu indirektnog objekta pod nasleđenim bezbednosnim kontekstom

Types

TypeDescription
TPdfEncryptionRevisionEnumeracija koja bira AESV3-CBC reviziju erR5 ili erR6, ili ISO/TS 32003 AESV4-GCM reviziju erR7
TPdfEncryptOptionsZapis koji nosi lozinke, zastavice dozvola, politiku metapodataka, reviziju security handler-a i opcionu PDF MAC zaštitu integriteta
TPdfEncryptionKeysZapis koji drži ključ fajla, unose security handler-a i opcionu 32-bajtnu /KDFSalt vrednost
TPdfIncrementalEncryptionContextAutentifikovano nasleđeno bezbednosno stanje koje se koristi za dopisivanje enkriptovanih indirektnih objekata bez zamene postojećeg /Encrypt rečnika
TPdfMacValidationStatuspmvsValid, pmvsNotPresent, pmvsInvalid ili pmvsUnsupported
TPdfMacValidationResultValidacioni Status samostalnog PDF MAC-a i dijagnostički MessageText

Remarks

See Also

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