認証署名とフィールドロック

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空でなければなりませんすべてのフォームフィールドをロックします
flaInclude1つ以上の一意のフィールド名リストされたフィールドのみをロックします
flaExclude1つ以上の一意のフィールド名リストされたフィールドを除くすべてのフィールドをロックします

AttachSignatureFieldLock は空の名前、重複した名前、無効なアクション値、互換性のない Fields 形状、未署名のターゲットフィールド、またはすでにロックや FieldMDP ポリシーを持つフィールドを拒否します

出力される構造

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 のソース
FieldMDPAll / Include / Exclude のいずれかのフィールドロックスコープと、コピーされた SigFieldLock の一致
Identity必須の間接 /Data ルートから到達できる、サイクルセーフな推移的オブジェクト番号

未知のメソッド名は UnknownTransformMethods に保持され、権限構造を無効にします。クリティカルな変換が見逃されないようにするためです

パフォーマンス

GetLoadedSignaturePermissions はポリシー構造のみを報告します

VerifyLoadedSignature は引き続き、暗号の完全性を別途報告します

AnalyzeLoadedSignatureRevisions は、バイトレンジの DocMDP・FieldMDP・UR3・Identity ポリシーに対してリビジョンごとの意味変更分析を実行します。非推奨の非バイトレンジ UR オブジェクトダイジェスト署名も、構造検査の対象として引き続き利用できます

SaveIncrementalUpdateAuthenticated は検査を強制に変えます。ポリシーを署名済みスナップショットから読み取り、制御している署名を認証し、その後のすべてのリビジョンを検証し、すべてのポリシーが成功した後でだけ原子的な置き換えによって公開します

パフォーマンス

プロデューサー側の検証は、作成した AcroForm フィールドと小さな署名参照配列だけを走査します。読み込み済みドキュメントの検査は、選択された署名・そのロック・その参照・Catalog の権限エントリだけを読み取ります

ページコンテンツ・画像ストリーム・フォントプログラム・無関係な間接オブジェクトはデコードされません

関連 API