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 は、ISO 32000-2 の 7.6 節で定義される PDF AES-256 セキュリティハンドラと、ISO/TS 32003 で定義される AESV4-GCM 拡張を実装します。EncryptDocumentBytes は平文の PDF バイト配列を選択されたリビジョンで暗号化されたドキュメントへ変換します
DeriveEncryptionKeys はパスワードベースの鍵導出を実行し、32 バイトのファイル暗号化キーと /O、/U、/OE、/UE、/Perms の各辞書エントリを生成します。BuildEncryptDictionary はこれらのエントリを /Encrypt 辞書テキストへシリアライズします。EncryptStreamPayload はファイルキーを使って 1 つのオブジェクトストリームに AES-256-CBC 暗号化を適用します
カスタム保存パイプラインを構築するパワーユーザーは 3 つのプリミティブを直接呼び出せます。アプリケーションコードは通常、内部で EncryptDocumentBytes を呼び出す TPdf.SaveAsEncrypted または TPdf.SaveAsEncryptedToStream を使用します
EnableIntegrityProtection が true の場合、ライターは正確に EOF をカバーする /ByteRange、/KDFSalt、CMS AuthenticatedData、HKDF-SHA256、AES-256 Key Wrap、HMAC-SHA256 を備えた PDF 2.0 の ISO/TS 32004 スタンドアロン認証コードを生成します
PDFium は現在、public ABI を通じて AESV4 の解析を公開していません。最初に DecryptAesGcmDocumentBytes を呼び出し、返されたバイトを TPdf.LoadDocument に渡してください。この関数は、パスワード、アクセス許可、PDF MAC、文字列タグ、ストリームタグのいずれかの失敗後に部分的な平文を返しません
ReadIncrementalEncryptionContext は現在の暗号化リビジョンチェーンを認証し、引き継がれたセキュリティ状態を復元します。EncryptIncrementalObjectBody はメタデータ除外を保持し、直接の /Length 値を更新しながら、変更された 1 つの間接オブジェクト内の文字列とストリームペイロードを暗号化します。ClearIncrementalEncryptionContext は復元された鍵素材をクリアします
| 関数 | 説明 |
|---|---|
DeriveEncryptionKeys | パスワードベースの鍵導出を実行し、ファイルキーと 5 つの辞書エントリを返します |
BuildEncryptDictionary | キーとオプションを /Encrypt 辞書テキストへシリアライズします |
EncryptStreamPayload | ファイルキーを使って 1 つのオブジェクトストリームを AES-256-CBC で暗号化します |
EncryptDocumentBytes | 鍵導出、ストリーム書き換え、PDF 全体のバイト配列への /Encrypt 辞書注入を 1 回で行うヘルパーです |
DecryptAesGcmDocumentBytes | AESV4-GCM 出力を認証して復号し、PDFium が読み込める平文バイトを生成します |
ValidateEncryptedDocumentMac | スタンドアロンの PDF MAC を、ユーザーまたはオーナーのパスワードで元の暗号化バイトに対して検証します |
ReadIncrementalEncryptionContext | 暗号化されたリビジョンチェーンを認証し、引き継がれたファイルキー、リビジョン、メタデータポリシー、/Encrypt 参照、PDF MAC 状態を復元します |
ClearIncrementalEncryptionContext | 復元されたインクリメンタル暗号化の鍵素材を安全にクリアします |
EncryptIncrementalObjectBody | 引き継いだセキュリティコンテキストの下で、変更された 1 つの間接オブジェクト本体の中の文字列とストリームを暗号化します |
| 型 | 説明 |
|---|---|
TPdfEncryptionRevision | AESV3-CBC リビジョン erR5 または erR6、あるいは ISO/TS 32003 AESV4-GCM リビジョン erR7 を選択する列挙型です |
TPdfEncryptOptions | パスワード、アクセス許可フラグ、メタデータポリシー、セキュリティハンドラリビジョン、オプションの PDF MAC 完全性保護を運ぶレコードです |
TPdfEncryptionKeys | ファイルキー、セキュリティハンドラエントリ、オプションの 32 バイト /KDFSalt を保持するレコードです |
TPdfIncrementalEncryptionContext | 既存の /Encrypt 辞書を置き換えずに暗号化された間接オブジェクトを追記するために使われる、認証済みの引き継ぎセキュリティ状態です |
TPdfMacValidationStatus | pmvsValid、pmvsNotPresent、pmvsInvalid、pmvsUnsupported |
TPdfMacValidationResult | スタンドアロン PDF MAC 検証の Status と診断 MessageText です |
DecryptAesGcmDocumentBytes は、暗号化インクリメンタルライターが生成する古典的な /Prev リビジョンチェーンに従い、最新のアクティブオブジェクト世代を解決します。ネイティブ PDFium による AESV4 の読み込みと外部 xref ストリームの AESV4 入力は、このリリースでは利用できませんPermissions は ISO 32000-1 Table 22 のビット配置 (/P フラグ) を使用します