TPDFlibPFXFile

Security and Signatures

説明

TPDFlibPFXFile は、分離型 PKCS#7 署名の生成に使う署名アイデンティティを保持します

アイデンティティの源は、PFX ファイル、表示名で解決した Windows システム証明書ストアのエントリ、外部で複製された PCCERT_CONTEXT、Ed25519 キーペア、CNG キー、外部ダイジェストコールバックのいずれかです

アイデンティティをバインドすると、SignData が CMS 署名バイトを生成し、推定ヘルパーが署名書き込み前に /Contents の予約サイズを算出します

SigningWorkbench デモは、署名パイプラインにアイデンティティを渡す前に、このクラスで PFX を開きます

構文

Delphi

TPDFlibPFXFile = Class
  Public
    Destructor Destroy; Override;
    Function Open(Const FileName: WideString; Const Password: AnsiString; UseMachineKeyset: Boolean): TPDFlibSignerResult;
    Function OpenFromStore(Const StoreName, CertName: WideString; UseMachineStore: Boolean): TPDFlibSignerResult;
    Function EnumerateStore(Const StoreName: WideString; UseMachineStore: Boolean;
      Var Infos: Array Of TPDFlibCertificateInfo): Integer;
    Function OpenFromContext(CertContext: Pointer): TPDFlibSignerResult;
    Function OpenEd25519(Const CertificateDER, PrivateKeyDER: AnsiString): TPDFlibSignerResult;
    Function OpenEd25519FromFile(Const CertificateFile, PrivateKeyFile: WideString): TPDFlibSignerResult;
    Function OpenCNGKey(Const CertificateDER: AnsiString;
      Const ProviderName, KeyName: WideString; UseMachineKey, AllowUI: Boolean): TPDFlibSignerResult;
    Function OpenCNGKeyHandle(Const CertificateDER: AnsiString; KeyHandle: TPLIntPtr; AllowUI: Boolean): TPDFlibSignerResult;
    Function OpenExternalDigestSigner(Const CertificateDER: AnsiString;
      Signer: TPDFlibExternalDigestSignEvent; Sender: TObject;
      SignProcessID, SignatureAlgorithm, SignatureReserveBytes: Integer): TPDFlibSignerResult;
    Function GetCertificateDER: AnsiString;
    Procedure SetPrivateKeyUI(AllowUI: Boolean);
    Procedure SetRSAPSSPadding(Enable: Boolean);
    Function CertificateKeyUsage: Integer;
    Function EstimateSignatureSize(Const Data, SubFilter: AnsiString;
      DigestAlgorithm: TPDFlibDigestAlgorithm;
      Const CommitmentTypeDER, SignaturePolicyDER, RevocationInfoDER: AnsiString): Integer;
    Function EstimateCertificateChainSize: Integer;
    Function SignData(Const Data, SubFilter: AnsiString; DigestAlgorithm: TPDFlibDigestAlgorithm;
      Const CommitmentTypeDER, SignaturePolicyDER, RevocationInfoDER: AnsiString): AnsiString;
  End;

メソッド

Openパスワード付きで PFX または PKCS#12 ファイルを読み込みます。UseMachineKeyset でマシンキーセットを選択します
OpenFromStoreSubject の簡易表示名で Windows システムストアの証明書を探してコンテキストをバインドします。使える秘密鍵を持つ最初の証明書が選ばれます
EnumerateStore呼び出し側が用意した配列に、ストア内証明書ごとに 1 つの TPDFlibCertificateInfo を埋め、実際に埋めた数を返します
OpenFromContext外部で取得した PCCERT_CONTEXT をバインドします。所有権は呼び出し側にあり、署名が完了するまでコンテキストを有効に保つ必要があります
OpenEd25519, OpenEd25519FromFileEd25519 の証明書とシードをメモリまたはファイルからバインドします
OpenCNGKey, OpenCNGKeyHandleプロバイダーとキー名、または既存のキーハンドルで CNG キーをバインドします
OpenExternalDigestSignerローカル秘密鍵の代わりに TPDFlibExternalDigestSignEvent コールバック経由で署名します
GetCertificateDERバインドされた証明書の DER 形式
SetPrivateKeyUICryptoAPI 秘密鍵のプロンプトを許可または抑制します
SetRSAPSSPaddingRSA 分離署名に RSASSA-PSS パディングを選択します。旧式の CryptoAPI キーは PKCS#1 v1.5 のままです
CertificateKeyUsageX.509 のキー使用ビットを 2 バイトに詰めたもの。コンテキスト未バインド時は -1
EstimateSignatureSize, EstimateCertificateChainSizeCMS 出力と証明書チェーンの上限値
SignData選択したサブフィルターとダイジェストアルゴリズムで、データの分離型 CMS 署名を生成します

備考

すべての open 系メソッドは TPDFlibSignerResult を返すため、アイデンティティのバインド失敗を正確に報告できます

ファサードからも SetSignProcessPFXFromFile、SetSignProcessCertFromStore、SetSignProcessEd25519Identity、SetSignProcessCNGKey で同じアイデンティティに到達できます

関連項目

TPDFlibSignerResult, TPDFlibCertificateInfo, TPDFlibSigner, TPDFlibSignDoc, NewSignProcessFromFile