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 implementerer PDF AES-256-sikkerhetshandleren definert i ISO 32000-2 avsnitt 7.6 og AESV4-GCM-utvidelsen definert av ISO/TS 32003. EncryptDocumentBytes gjør en klartekst PDF byte-array om til et kryptert dokument med den valgte revisjonen
DeriveEncryptionKeys kjører den passordbaserte nøkkelavledingen som produserer den 32 byte store filkrypteringsnøkkelen pluss ordbokoppføringene /O, /U, /OE, /UE og /Perms. BuildEncryptDictionary serialiserer disse oppføringene til /Encrypt-ordbokteksten. EncryptStreamPayload anvender AES-256-CBC-kryptering på én enkelt objektstrøm med filnøkkelen
En avansert bruker som bygger en egen lagringspipeline kan kalle de tre primitivene direkte; applikasjonskode bruker normalt TPdf.SaveAsEncrypted eller TPdf.SaveAsEncryptedToStream, som kaller EncryptDocumentBytes internt
Når EnableIntegrityProtection er true, sender skriveren ut en frittstående PDF 2.0 ISO/TS 32004 autentiseringskode med en eksakt EOF-dekkende /ByteRange, /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap og HMAC-SHA256
PDFium eksponerer foreløpig ikke AESV4-parsing gjennom sitt offentlige ABI. Kall DecryptAesGcmDocumentBytes først og send de returnerte bytene til TPdf.LoadDocument; funksjonen returnerer ingen delvis klartekst etter en passord-, tillatelses-, PDF MAC-, strengtag- eller strømtag-feil
ReadIncrementalEncryptionContext autentiserer den gjeldende kjeden av krypterte revisjoner og gjenoppretter den arvede sikkerhetstilstanden. EncryptIncrementalObjectBody krypterer strengene og strømnyttelasten i ett endret indirekte objekt, samtidig som metadata-ekskluseringer bevares og direkte /Length-verdier oppdateres; ClearIncrementalEncryptionContext tømmer gjenopprettet nøkkelmateriale
| Function | Description |
|---|---|
DeriveEncryptionKeys | Kjører passordbasert nøkkelavledning og returnerer filnøkkelen og de fem ordbokoppføringene |
BuildEncryptDictionary | Serialiserer nøklene og options til /Encrypt-ordbokteksten |
EncryptStreamPayload | Krypterer én objektstrøm med AES-256-CBC ved hjelp av filnøkkelen |
EncryptDocumentBytes | Én-gangs-hjelper som avleder nøkler, omskriver strømmer og innplanter /Encrypt-ordboken i en hel PDF byte-array |
DecryptAesGcmDocumentBytes | Autentiserer og dekrypterer AESV4-GCM-utdata til klartekstbytes som PDFium kan laste |
ValidateEncryptedDocumentMac | Validerer en frittstående PDF MAC mot de opprinnelige krypterte bytene med et bruker- eller eierpassord |
ReadIncrementalEncryptionContext | Autentiserer en kryptert revisjonskjede og gjenoppretter den arvede filnøkkelen, revisjonen, metadatapolicyen, /Encrypt-referansen og PDF MAC-tilstanden |
ClearIncrementalEncryptionContext | Tømmer gjenopprettet inkrementelt krypteringsnøkkelmateriale på en sikker måte |
EncryptIncrementalObjectBody | Krypterer strenger og strømmer i ett endret indirekte objektlegeme under den arvede sikkerhetskonteksten |
| Type | Description |
|---|---|
TPdfEncryptionRevision | Enumerasjon som velger AESV3-CBC-revisjon erR5 eller erR6, eller ISO/TS 32003 AESV4-GCM-revisjon erR7 |
TPdfEncryptOptions | Record som bærer passord, tillatelsesflagg, metadatapolicy, sikkerhetshandler-revisjon og valgfri PDF MAC-integritetsbeskyttelse |
TPdfEncryptionKeys | Record som holder filnøkkelen, sikkerhetshandler-oppføringene og valgfri 32-byte /KDFSalt |
TPdfIncrementalEncryptionContext | Autentisert arvet sikkerhetstilstand brukt til å legge til krypterte indirekte objekter uten å erstatte den eksisterende /Encrypt-ordboken |
TPdfMacValidationStatus | pmvsValid, pmvsNotPresent, pmvsInvalid eller pmvsUnsupported |
TPdfMacValidationResult | Frittstående PDF MAC-validering Status og diagnostisk MessageText |
DecryptAesGcmDocumentBytes følger klassiske /Prev-revisjonskjeder sendt ut av den krypterte inkrementelle skriveren og løser den nyeste aktive objektgenerasjonen; native PDFium AESV4-lasting og ekstern xref-strøm AESV4-inndata er ikke tilgjengelig i denne utgivelsenPermissions bruker bitoppsettet fra ISO 32000-1 Table 22 (/P-flagg)