TPDFlibCSCClient

セキュリティと署名

説明

Cloud Signature Consortium の資格情報、認証、およびダイジェスト署名エンドポイント向け同期クライアントを提供します

クライアントは credentials/info から署名証明書と対応アルゴリズム OID を取得し、credentials/authorize から署名アクティベーションデータを取得して、事前計算済みの 1 つ以上のダイジェストを signatures/signHash に送信します

SignDigest は TPDFlibExternalDigestSignEvent を実装し、TPDFlib.OnExternalDigestSign に直接割り当てられます。PDF ByteRange の作成、CMS 認証属性、プレースホルダーのサイズ設定および返された署名の検証をライブラリ内に保持します

ユニット

PDFlibCSC

構築

Constructor TPDFlibCSCClient.Create;
Destructor TPDFlibCSCClient.Destroy;

資格情報の検出

Function TPDFlibCSCClient.RefreshCredentialInfo: Boolean;
Function TPDFlibCSCClient.SupportsAlgorithm(DigestAlgorithm, SignatureAlgorithm: Integer): Boolean;
Function TPDFlibCSCClient.GetCertificateChainDER(Index: Integer): AnsiString;
Function TPDFlibCSCClient.GetSupportedAlgorithmOID(Index: Integer): AnsiString;
Procedure TPDFlibCSCClient.ClearCredentialInfo;

直接認可またはバッチ署名を呼び出す前に RefreshCredentialInfo が成功する必要があります

署名証明書は SigningCertificateDER、追加証明書は CertificateChainCount および GetCertificateChainDER、リモートバッチの上限は MaxBatchSize を通じて公開される

認可

Function TPDFlibCSCClient.Authorize(NumSignatures: Integer; Const Digests: TPDFlibCSCByteArray; Const PIN, OTP, Description, ClientData: WideString; Out SAD: AnsiString): Boolean;
Function TPDFlibCSCClient.PrefetchAuthorization(NumSignatures: Integer; Const Digests: TPDFlibCSCByteArray; Const PIN, OTP, Description, ClientData: WideString): Boolean;
Function TPDFlibCSCClient.SetPrefetchedSAD(Const SAD: AnsiString; ExpiresInSeconds: Integer; Const PinnedDigests: TPDFlibCSCByteArray): Boolean;
Procedure TPDFlibCSCClient.ClearSAD;
Procedure TPDFlibCSCClient.ClearAuthorizationSecrets;

HashPinningRequired=True の資格情報では、ダイジェスト配列は必須で、正確に NumSignatures 個の値を含む必要があります

事前取得した SAD は有効期限とハッシュバインディングを確認され、正確に 1 回だけ消費されます

署名

Function TPDFlibCSCClient.SignHashes(Const Digests: TPDFlibCSCByteArray; DigestAlgorithm, SignatureAlgorithm: Integer; Const SAD: AnsiString; Out Signatures: TPDFlibCSCByteArray): Boolean;
Function TPDFlibCSCClient.SignAuthorizedHashes(Const Digests: TPDFlibCSCByteArray; DigestAlgorithm, SignatureAlgorithm: Integer; Out Signatures: TPDFlibCSCByteArray): Boolean;
Function TPDFlibCSCClient.SignDigest(Sender: TObject; SignProcessID: Integer; Const Digest: AnsiString; DigestAlgorithm, SignatureAlgorithm: Integer; Var Signature: AnsiString): Boolean;

一括処理内のすべてのダイジェストは同じアルゴリズムを使用し、DigestAlgorithm が示す正確な長さである必要があります

SignatureAlgorithm は PDF_EXTERNAL_SIGNATURE_RSA_PKCS1 および PDF_EXTERNAL_SIGNATURE_ECDSA_DER をサポートする CSC ECDSA 署名は DER エンコードされるため、P1363 出力は推測されない

パラメータ

ServiceURL/csc/<version> より前の基本サービス URL
APIVersionエンドポイントのバージョンセグメント。既定値は v1
CredentialIDベンダー定義の資格情報識別子
OAuthTokenすべての既定トランスポート要求に追加される書き込み専用ベアラートークン
TimeoutMS要求タイムアウトです。デフォルトは 300000 ミリ秒
MaxResponseBytes受け入れる最大応答サイズ、既定値は 8 MiB
ClientData署名要求とともに送信される任意のベンダー定義値
AuthorizationPIN自動コールバック認証で使用する書き込み専用 PIN
AuthorizationOTPコールバック認証後に消去される、書き込み専用のワンタイムパスワード
AuthorizationDescription自動コールバック認可で使用する省略可能な説明
OnTransportmTLS、プロキシ、ベンダー固有、または決定的テスト統合用の任意のトランスポートコールバック

ステータスプロパティ

CredentialLoaded、SigningCertificateDER、CertificateChainCount、SupportedAlgorithmCount、MaxBatchSize、HashPinningRequired、LastAuthorizationExpiresAt、LastHTTPStatus、および LastError は、OAuth、PIN、OTP、または SAD の秘密情報を返さずに現在の状態を公開します

例

var
  CSC: TPDFlibCSCClient;
  ProcessID: Integer;
begin
  CSC:= TPDFlibCSCClient.Create;
  try
    CSC.ServiceURL:= 'https://sign.example.com';
    CSC.CredentialID:= 'account/signing-key';
    CSC.OAuthToken:= AccessToken;
    CSC.AuthorizationPIN:= UserPIN;
    CSC.AuthorizationOTP:= CurrentOTP;
    if not CSC.RefreshCredentialInfo then
      raise Exception.Create(String(CSC.LastError));

    PDF.OnExternalDigestSign:= CSC.SignDigest;
    ProcessID:= PDF.NewSignProcessFromFile(InputFile, '');
    PDF.SetSignProcessField(ProcessID, 'Approval');
    PDF.SetSignProcessDigestAlgorithm(ProcessID, 2);
    PDF.SetSignProcessExternalDigestSigner(ProcessID,
      CSC.SigningCertificateDER, PDF_EXTERNAL_SIGNATURE_RSA_PKCS1, 512);
    PDF.EndSignProcessToFile(ProcessID, OutputFile);
  finally
    CSC.Free;
  end;
end;

失敗時の動作

構成、トランスポート、JSON、Base64、X.509、アルゴリズム、バッチ、有効化または応答数の検証に失敗した場合、メソッドは False を返して LastError を設定します

外部ダイジェスト署名パスは、PDF を受け入れる前に返された各生署名を SigningCertificateDER に対して独立して検証します

関連項目

OnExternalDigestSign、SetSignProcessExternalDigestSigner、SetSignProcessDigestAlgorithm