PDFium Delphi Component Docs

FPdfEncrypt jednotka

Jednotka: FPdfEncrypt
Derivuje šifrovací klíče AES-256 a vydává řetězce, proudy a šifrovací slovníky ISO 32000-2 AESV3-CBC nebo ISO/TS 32003 AESV4-GCM

Syntaxe

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;

Popis

FPdfEncrypt implementuje bezpečnostní obslužný objekt PDF AES-256 definovaný v sekci 7.6 ISO 32000-2 a rozšíření AESV4-GCM definované ISO/TS 32003. EncryptDocumentBytes promění nešifrované pole bajtů PDF v zašifrovaný dokument pomocí vybrané revize

DeriveEncryptionKeys provádí derivaci klíčů založenou na hesle, která produkuje 32bajtový klíč šifrování souboru plus položky slovníku /O, /U, /OE, /UE a /Perms. BuildEncryptDictionary serializuje tyto položky do textu slovníku /Encrypt. EncryptStreamPayload aplikuje šifrování AES-256-CBC na jeden proud objektu pomocí klíče souboru

Pokročilý uživatel budující vlastní pipeline ukládání může volat tři primitiva přímo; aplikační kód normálně používá TPdf.SaveAsEncrypted nebo TPdf.SaveAsEncryptedToStream, které interně volají EncryptDocumentBytes

Když je EnableIntegrityProtection true, zapisovač vydá samostatný autentizační kód PDF 2.0 podle ISO/TS 32004 s /ByteRange pokrývajícím přesně EOF, /KDFSalt, CMS AuthenticatedData, HKDF-SHA256, AES-256 Key Wrap a HMAC-SHA256

PDFium aktuálně nevystavuje parsování AESV4 přes své public ABI. Zavolejte nejdřív DecryptAesGcmDocumentBytes a vraťené bajty předejte do TPdf.LoadDocument; funkce po selhání hesla, oprávnění, PDF MAC, tagu řetězce nebo tagu proudu nevrací žádný částečný prostý text

ReadIncrementalEncryptionContext autentizuje aktuální zašifrovaný řetězec revizí a obnoví zděděný bezpečnostní stav. EncryptIncrementalObjectBody zašifruje řetězce a payload proudu v jednom změněném nepřímém objektu, přičemž zachová výjimky metadat a aktualizuje přímé hodnoty /Length; ClearIncrementalEncryptionContext vymaže obnovený materiál klíčů

Funkce

FunctionDescription
DeriveEncryptionKeysProvede derivaci klíčů založenou na hesle a vrátí klíč souboru a pět položek slovníku
BuildEncryptDictionarySerializuje klíče a volby do textu slovníku /Encrypt
EncryptStreamPayloadZašifruje jeden proud objektu pomocí AES-256-CBC s klíčem souboru
EncryptDocumentBytesJednorázový pomocník, který derivuje klíče, přepíše proudy a vloží slovník /Encrypt do celého pole bajtů PDF
DecryptAesGcmDocumentBytesAutentizuje a dešifruje výstup AESV4-GCM do bajtů prostého textu, které dokáže PDFium načíst
ValidateEncryptedDocumentMacZvaliduje samostatný PDF MAC proti původním zašifrovaným bajtům pomocí uživatelského nebo vlastnického hesla
ReadIncrementalEncryptionContextAutentizuje zašifrovaný řetězec revizí a obnoví zděděný klíč souboru, revizi, politiku metadat, odkaz /Encrypt a stav PDF MAC
ClearIncrementalEncryptionContextBezpečně vymaže obnovený materiál inkrementálních šifrovacích klíčů
EncryptIncrementalObjectBodyZašifruje řetězce a proudy v jednom změněném těle nepřímého objektu pod zděděným bezpečnostním kontextem

Typy

TypeDescription
TPdfEncryptionRevisionVýčet vybírající revizi AESV3-CBC erR5 nebo erR6, nebo revizi AESV4-GCM podle ISO/TS 32003 erR7
TPdfEncryptOptionsZáznam nesoucí hesla, příznaky oprávnění, politiku metadat, revizi bezpečnostního obslužného objektu a volitelnou ochranu integrity PDF MAC
TPdfEncryptionKeysZáznam držící klíč souboru, položky bezpečnostního obslužného objektu a volitelný 32bajtový /KDFSalt
TPdfIncrementalEncryptionContextAutentizovaný zděděný bezpečnostní stav používaný k připojování šifrovaných nepřímých objektů bez nahrazení stávajícího slovníku /Encrypt
TPdfMacValidationStatuspmvsValid, pmvsNotPresent, pmvsInvalid nebo pmvsUnsupported
TPdfMacValidationResultValidační Status samostatného PDF MAC a diagnostický MessageText

Poznámky

Viz také

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