認証署名とフィールドロック
HotPDF は認証署名と署名付きフィールドロックに付随する PDF 権限構造を作成し、ロードされた文書内で同じ構造を検査できます
プロデューサー API
procedure AddCertificationSignatureField(
const FieldName: AnsiString;
Rectangle: TRect;
Permission: THPDFDocMDPPermission;
ContentsBytes: Integer = 8192;
const SubFilter: AnsiString = 'adbe.pkcs7.detached';
const Reason: AnsiString = '';
const Location: AnsiString = '';
const ContactName: AnsiString = '';
Flags: THPDFFormFieldFlags = []);
procedure ConfigureCertificationSignature(
const FieldName: AnsiString;
Permission: THPDFDocMDPPermission);
procedure AttachSignatureFieldLock(
const FieldName: AnsiString;
Action: THPDFFieldLockAction;
const Fields: array of AnsiString);
AddCertificationSignatureField は署名付きプレースホルダ作成と認証設定を組み合わせます
ConfigureCertificationSignature は既存の作成済み署名プレースホルダ用で、そのフィールドが署名辞書を持つ最初のフィールドであることを要求します
文書は1つの認証署名しか持てないため、2番目の設定要求はオブジェクトグラフが変更される前に拒否されます
これらの API は自動的に PDF 1.5 出力をネゴシエートします
DocMDP 権限レベル
| 値 | 認証権限 |
|---|---|
dmpNoChanges | 認証後の変更は許可されません |
dmpFormFillAndSign | フォーム入力、テンプレートインスタンス化、署名が許可されます |
dmpFormFillSignAndAnnotate | 上記の変更に加え注釈の作成、削除、変更が許可されます |
dmpNone は DocMDP 変換のない検査結果用に予約され、プロデューサーメソッドによって拒否されます
フィールドロックスコープ
| 値 | Fields 引数 | 署名後の効果 |
|---|---|---|
flaAll | 空でなければなりません | すべてのフォームフィールドをロックします |
flaInclude | 1つ以上の一意のフィールド名 | リストされたフィールドのみをロックします |
flaExclude | 1つ以上の一意のフィールド名 | リストされたフィールドを除くすべてのフィールドをロックします |
AttachSignatureFieldLock は空の名前、重複した名前、無効なアクション値、互換性のない Fields 形状、未署名のターゲットフィールド、またはすでにロックや FieldMDP ポリシーを持つフィールドを拒否します
出力される構造
- 認証署名は直接 DocMDP 署名参照辞書と直接変換パラメータを含む直接
/Reference配列を持ちます - Catalog
/Perms /DocMDPエントリは同じ間接署名辞書を指します - フィールド
/Lockエントリは間接/Type /SigFieldLock辞書を指します - ロックスコープは直接 FieldMDP 署名参照にコピーされ、その
/Dataエントリは間接 Catalog ルートを指します - 署名辞書は
/V 1によって変換参照をクリティカルとしてマークします
Delphi の例
var
LockedFields: THPDFAnsiStringArray;
begin
HotPDF.CurrentPage.AddTextField(
'InternalCode', '', Rect(40, 80, 220, 108));
HotPDF.CurrentPage.AddCertificationSignatureField(
'CertSig', Rect(40, 140, 260, 190),
dmpFormFillAndSign, 8192,
'adbe.pkcs7.detached', 'Document approval');
SetLength(LockedFields, 1);
LockedFields[0] := 'InternalCode';
HotPDF.CurrentPage.AttachSignatureFieldLock(
'CertSig', flaInclude, LockedFields);
end;
ロード済み検査
function GetLoadedSignaturePermissions(
SigIndex: Integer;
out Info: THPDFSignaturePermissionInfo): Boolean;
リーダーは、変換セット一式・参照数・DocMDP 権限・SigFieldLock と FieldMDP のスコープ・UR 使用権・Catalog の UR / UR3 ソース・Identity オブジェクトスコープ・未知のメソッド・構造的な有効性・診断用問題文字列を報告します
必須の直接 / 間接シェイプ・Catalog の /Perms ターゲット・変換バージョン・重複参照・UR と UR3 の制限・省略可能な DocMDP /P 2 デフォルトを検証します
SigFieldLock と FieldMDP の両方が存在する場合、両者のアクションとフィールドリストは一致しなければなりません
Identity スコープの走査はサイクルセーフで、64 レベル・100000 間接オブジェクトに制限されます。検査が JavaScript・アクション・署名コンテンツを実行することはありません
検証境界
| メソッド | 報告されるポリシー |
|---|---|
DocMDP | 認証 (certification) 権限と、一致する Catalog の /Perms /DocMDP ターゲット |
UR | ドキュメント・注釈・フォーム・署名・埋め込みファイルの各使用権に加えて、旧式の /UR またはバイトレンジ /UR3 のソース |
FieldMDP | All / Include / Exclude のいずれかのフィールドロックスコープと、コピーされた SigFieldLock の一致 |
Identity | 必須の間接 /Data ルートから到達できる、サイクルセーフな推移的オブジェクト番号 |
未知のメソッド名は UnknownTransformMethods に保持され、権限構造を無効にします。クリティカルな変換が見逃されないようにするためです
パフォーマンス
GetLoadedSignaturePermissions はポリシー構造のみを報告します
VerifyLoadedSignature は引き続き、暗号の完全性を別途報告します
AnalyzeLoadedSignatureRevisions は、バイトレンジの DocMDP・FieldMDP・UR3・Identity ポリシーに対してリビジョンごとの意味変更分析を実行します。非推奨の非バイトレンジ UR オブジェクトダイジェスト署名も、構造検査の対象として引き続き利用できます
SaveIncrementalUpdateAuthenticated は検査を強制に変えます。ポリシーを署名済みスナップショットから読み取り、制御している署名を認証し、その後のすべてのリビジョンを検証し、すべてのポリシーが成功した後でだけ原子的な置き換えによって公開します
パフォーマンス
プロデューサー側の検証は、作成した AcroForm フィールドと小さな署名参照配列だけを走査します。読み込み済みドキュメントの検査は、選択された署名・そのロック・その参照・Catalog の権限エントリだけを読み取ります
ページコンテンツ・画像ストリーム・フォントプログラム・無関係な間接オブジェクトはデコードされません