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 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
| Function | Description |
|---|---|
DeriveEncryptionKeys | Izvodi izvođenje ključa iz lozinke i vraća ključ fajla i pet unosa rečnika |
BuildEncryptDictionary | Serializuje ključeve i opcije u tekst /Encrypt rečnika |
EncryptStreamPayload | Enkriptuje jedan tok objekta AES-256-CBC koristeći ključ fajla |
EncryptDocumentBytes | Pomoćnik u jednom pozivu koji izvodi ključeve, prepiše tokove i ubacuje /Encrypt rečnik u ceo PDF niz bajtova |
DecryptAesGcmDocumentBytes | Autentifikuje i dekriptuje AESV4-GCM izlaz u bajtove otvorenog teksta koje PDFium može da učita |
ValidateEncryptedDocumentMac | Validira samostalni PDF MAC naspram originalnih enkriptovanih bajtova koristeći korisničku ili vlasničku lozinku |
ReadIncrementalEncryptionContext | Autentifikuje enkriptovani lanac revizija i povraćava nasleđeni ključ fajla, reviziju, politiku metapodataka, referencu /Encrypt i stanje PDF MAC-a |
ClearIncrementalEncryptionContext | Bezbedno briše povraćeni materijal ključeva inkrementalne enkripcije |
EncryptIncrementalObjectBody | Enkriptuje stringove i tokove u jednom izmenjenom telu indirektnog objekta pod nasleđenim bezbednosnim kontekstom |
| Type | Description |
|---|---|
TPdfEncryptionRevision | Enumeracija koja bira AESV3-CBC reviziju erR5 ili erR6, ili ISO/TS 32003 AESV4-GCM reviziju erR7 |
TPdfEncryptOptions | Zapis koji nosi lozinke, zastavice dozvola, politiku metapodataka, reviziju security handler-a i opcionu PDF MAC zaštitu integriteta |
TPdfEncryptionKeys | Zapis koji drži ključ fajla, unose security handler-a i opcionu 32-bajtnu /KDFSalt vrednost |
TPdfIncrementalEncryptionContext | Autentifikovano nasleđeno bezbednosno stanje koje se koristi za dopisivanje enkriptovanih indirektnih objekata bez zamene postojećeg /Encrypt rečnika |
TPdfMacValidationStatus | pmvsValid, pmvsNotPresent, pmvsInvalid ili pmvsUnsupported |
TPdfMacValidationResult | Validacioni Status samostalnog PDF MAC-a i dijagnostički MessageText |
DecryptAesGcmDocumentBytes prati klasične /Prev lance revizija koje emituje enkriptovani inkrementalni writer i razrešava najnoviju aktivnu generaciju objekta; nativno PDFium AESV4 učitavanje i eksterni xref-stream AESV4 ulaz nisu dostupni u ovom izdanjuPermissions koristi bit raspored ISO 32000-1 Table 22 (/P zastavice)