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 toteuttaa ISO 32000-2:n kohdan 7.6 määrittämän PDF:n AES-256-suojauskäsittelijän ja ISO/TS 32003:n määrittämän AESV4-GCM-laajennuksen. EncryptDocumentBytes muuntaa selkokielisen PDF-tavutaulukon salatuksi dokumentiksi valitulla revisiolla
DeriveEncryptionKeys suorittaa salasanapohjaisen avainten johtamisen, joka tuottaa 32-tavuisen tiedostosalausavaimen sekä /O-, /U-, /OE-, /UE- ja /Perms-sanakirjamerkinnät. BuildEncryptDictionary serialisoi kyseiset merkinnät /Encrypt-sanakirjatekstiksi. EncryptStreamPayload soveltaa AES-256-CBC-salausta yhteen objektivirtaan tiedostoavainta käyttäen
Mukautettua tallennusputkea rakentava edistynyt käyttäjä voi kutsua kolmea primitiiviä suoraan; sovelluskoodi käyttää yleensä TPdf.SaveAsEncrypted- tai TPdf.SaveAsEncryptedToStream-kutsuja, jotka kutsuvat EncryptDocumentBytes-toimintoa sisäisesti
Kun EnableIntegrityProtection on tosi, kirjoittaja tuottaa PDF 2.0 ISO/TS 32004 -erillisen autentikointikoodin, johon kuuluvat täsmälleen EOF:n kattava /ByteRange, /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap ja HMAC-SHA256
PDFium ei tällä hetkellä näytä AESV4-jäsentämistä julkisen ABI:n kautta. Kutsu ensin DecryptAesGcmDocumentBytes-funktiota ja välitä palautetut tavut TPdf.LoadDocument-kutsulle; funktio ei palauta osittaista selkotekstiä salasana-, käyttöoikeus-, PDF MAC-, merkkijonotagi- tai virtatagi-epäonnistumisen jälkeen
ReadIncrementalEncryptionContext autentikoi nykyisen salatun revisioketjun ja palauttaa perityn suojaustilan. EncryptIncrementalObjectBody salaa merkkijonot ja virtahyötykuorman yhdessä muuttuneessa epäsuorassa objektissa säilyttäen metatietopoikkeukset ja päivittäen suorat /Length-arvot; ClearIncrementalEncryptionContext tyhjentää palautetun avainaineiston
| Function | Description |
|---|---|
DeriveEncryptionKeys | Suorittaa salasanapohjaisen avainten johtamisen ja palauttaa tiedostoavaimen sekä viisi sanakirjamerkintää |
BuildEncryptDictionary | Serialisoi avaimet ja asetukset /Encrypt-sanakirjatekstiksi |
EncryptStreamPayload | Salaa yhden objektivirran AES-256-CBC:llä tiedostoavainta käyttäen |
EncryptDocumentBytes | Kertakäyttöapuri, joka johtaa avaimet, kirjoittaa virrat uudelleen ja sisällyttää /Encrypt-sanakirjan koko PDF-tavutaulukkoon |
DecryptAesGcmDocumentBytes | Autentikoi ja purkaa AESV4-GCM-tuotoksen selkotekstitavuiksi, jotka PDFium voi ladata |
ValidateEncryptedDocumentMac | Validoi erillisen PDF MAC -koodin alkuperäisiä salattuja tavuja vastaan käyttäjä- tai omistajasalasanalla |
ReadIncrementalEncryptionContext | Autentikoi salatun revisioketjun ja palauttaa perityn tiedostoavaimen, revision, metadatapolitiikan, /Encrypt-viittauksen ja PDF MAC -tilan |
ClearIncrementalEncryptionContext | Tyhjentää palautetun inkrementaalisen salausavainaineiston turvallisesti |
EncryptIncrementalObjectBody | Salaa merkkijonot ja virrat yhdessä muuttuneessa epäsuoran objektin rungossa perityn suojauskontekstin alla |
| Type | Description |
|---|---|
TPdfEncryptionRevision | Luettelo, joka valitsee AESV3-CBC-revision erR5 tai erR6 tai ISO/TS 32003 AESV4-GCM-revision erR7 |
TPdfEncryptOptions | Tietue, joka kantaa salasanoja, käyttöoikeuslippuja, metadatapolitiikkaa, suojauskäsittelijän revisiota ja valinnaista PDF MAC -eheyssuojausta |
TPdfEncryptionKeys | Tietue, joka sisältää tiedostoavaimen, suojauskäsittelijän merkinnät ja valinnaisen 32-tavuisen /KDFSalt:in |
TPdfIncrementalEncryptionContext | Autentikoitu peritty suojaustila, jota käytetään salattujen epäsuorien objektien liittämiseen korvaamatta olemassa olevaa /Encrypt-sanakirjaa |
TPdfMacValidationStatus | pmvsValid, pmvsNotPresent, pmvsInvalid tai pmvsUnsupported |
TPdfMacValidationResult | Erillisen PDF MAC -validoinnin Status ja diagnostinen MessageText |
DecryptAesGcmDocumentBytes seuraa salatun inkrementaalisen kirjoittajan tuottamia klassisia /Prev-revisioketjuja ja ratkaisee uusimman aktiivisen objektigeneroinnin; natiivi PDFiumin AESV4-lataus ja ulkoinen xref-stream AESV4 -syöte eivät ole käytettävissä tässä julkaisussaPermissions käyttää ISO 32000-1:n taulukon 22 bittiasettelua (/P-liput)