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 varnostni obravnavnik PDF AES-256, opredeljen v oddelku 7.6 ISO 32000-2, in razširitev AESV4-GCM, opredeljeno v ISO/TS 32003. EncryptDocumentBytes spremeni nešifrirano bajtno polje PDF v šifriran dokument z izbrano revizijo
DeriveEncryptionKeys izvede izpeljavo ključev iz gesel, ki izda 32-bajtni ključ za šifriranje datoteke plus slovarske vnose /O, /U, /OE, /UE in /Perms. BuildEncryptDictionary serializira te vnose v besedilo slovarja /Encrypt. EncryptStreamPayload uveljavi šifriranje AES-256-CBC na enem toku objekta z uporabo ključa datoteke
Napreden uporabnik, ki gradi shranjevalni cevovod po meri, lahko tri primitivne pokliče neposredno; aplikacijska koda običajno uporablja TPdf.SaveAsEncrypted ali TPdf.SaveAsEncryptedToStream, ki interno kličejo EncryptDocumentBytes
Kadar je EnableIntegrityProtection resnična, pisalnik izda samostojno overjanje po ISO/TS 32004 za PDF 2.0 z natančnim /ByteRange, ki pokriva EOF, ter s /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap in HMAC-SHA256
PDFium razčlenjanja AESV4 trenutno ne izpostavlja prek svojega javnega ABI. Najprej pokličite DecryptAesGcmDocumentBytes in vrnjene bajte posredujte TPdf.LoadDocument; funkcija po napaki gesla, dovoljenja, PDF MAC, oznake niza ali oznake toka ne vrne nobenega delnega odprtega besedila
ReadIncrementalEncryptionContext overi trenutno verigo šifriranih revizij in obnovi podedovano varnostno stanje. EncryptIncrementalObjectBody šifrira nize in vsebino toka v enem spremenjenem posrednem objektu, pri čemer ohrani izjeme metapodatkov in posodobi neposredne vrednosti /Length; ClearIncrementalEncryptionContext počisti obnovljeno ključno gradivo
| Function | Description |
|---|---|
DeriveEncryptionKeys | Izvede izpeljavo ključev iz gesel in vrne ključ datoteke ter pet slovarskih vnosov |
BuildEncryptDictionary | Ključe in možnosti serializira v besedilo slovarja /Encrypt |
EncryptStreamPayload | Šifrira en tok objekta z AES-256-CBC z uporabo ključa datoteke |
EncryptDocumentBytes | Pomočnik za en sam klic, ki izpelje ključe, prepise tokove in vstavi slovar /Encrypt v celotno bajtno polje PDF |
DecryptAesGcmDocumentBytes | Overi in dešifrira izhod AESV4-GCM v bajte odprtega besedila, ki jih lahko naloži PDFium |
ValidateEncryptedDocumentMac | Preveri samostojni PDF MAC proti izvirnim šifriranim bajtom z uporabniškim ali lastniškim geslom |
ReadIncrementalEncryptionContext | Overi šifrirano verigo revizij in obnovi podedovani ključ datoteke, revizijo, pravilnik metapodatkov, sklic /Encrypt in stanje PDF MAC |
ClearIncrementalEncryptionContext | Varno počisti obnovljeno ključno gradivo prirastkovnega šifriranja |
EncryptIncrementalObjectBody | Šifrira nize in tokove v telesu enega spremenjenega posrednega objekta v podedovanem varnostnem kontekstu |
| Type | Description |
|---|---|
TPdfEncryptionRevision | Oštevilčenje, ki izbere revizijo AESV3-CBC erR5 ali erR6 ali revizijo ISO/TS 32003 AESV4-GCM erR7 |
TPdfEncryptOptions | Zapis, ki nosi gesla, zastavice dovoljenj, pravilnik metapodatkov, revizijo varnostnega obravnavnika in neobvezno zaščito integritete PDF MAC |
TPdfEncryptionKeys | Zapis, ki hrani ključ datoteke, vnose varnostnega obravnavnika in neobvezni 32-bajtni /KDFSalt |
TPdfIncrementalEncryptionContext | Overjeno podedovano varnostno stanje, uporabljeno za pripetje šifriranih posrednih objektov, brez zamenjave obstoječega slovarja /Encrypt |
TPdfMacValidationStatus | pmvsValid, pmvsNotPresent, pmvsInvalid ali pmvsUnsupported |
TPdfMacValidationResult | Status validacije samostojnega PDF MAC in diagnostično MessageText |
DecryptAesGcmDocumentBytes sledi klasičnim verigam revizij /Prev, ki jih izda šifrirni prirastkovni pisalnik, in razreši najnovejšo dejavno generacijo objekta; nativno nalaganje AESV4 v PDFium in zunanji vhod AESV4 v xref-tokih v tej izdaji nista na voljoPermissions uporablja bitno postavitev Tabele 22 ISO 32000-1 (zastavice /P)