PDFium Delphi Component Docs

FPdfTsaFpc ユニット

ユニット: FPdfTsaFpc
RFC 3161 リクエストをタイムスタンプ機関の URL に送り、レスポンスのバイト列を返す Free Pascal の libcurl タイムスタンプトランスポートバックエンドです

構文

const
  TsaMaxResponseBytes = 4 * 1024 * 1024;
  TsaRequestTimeoutSeconds = 30;
  TsaConnectTimeoutSeconds = 30;

function TsaHttpAvailable: Boolean;
function TsaHttpBackendName: string;
function PostTimeStampQuery(const TsaUrl: string; const ReqDer: TBytes;
  out RespDer: TBytes): Boolean;

説明

FPdfTsaFpc は、FPdfTsa が利用する非 Windows 向けタイムスタンプトランスポートで、FPdfTsaWin と対になる存在です。エンコード済みの TimeStampReq を HTTP または HTTPS でタイムスタンプ機関の URL に POST し、TimeStampResp のバイト列を受け取ります。DER の構築と解析は FPdfTsa の側にあります

トランスポートは libcurl で、リンクではなく実行時にバインドされます。そのためライブラリはビルド時の依存ではなく、存在しないことは読み込みの失敗ではなく報告されます。libcurl を経由することで、TLS スタックもこのユニットの外に保たれます。libcurl が自身のバックエンドを選び、サーバーのチェーンをプラットフォームの信頼ストアに対して検証します

TsaHttpAvailable は libcurl が見つかり必要なエントリポイントが解決されたかを報告し、TsaHttpBackendName は解決されたバックエンドの名前を返します。PostTimeStampQuery は HTTP のやり取りを行い、トランスポートの失敗時には例外ではなく False を返します。呼び出し側が自分のコンテキストとリトライ方針を追加できます

interface セクション全体は FPC の下でのみコンパイルされます。Delphi の下ではこのユニットは空です。Delphi は Windows をターゲットとし、そこでは FPdfTsaWin がバックエンドだからです。それでもこのユニットは Windows を含むすべての FPC ターゲットでコンパイルできます。Windows では FPdfTsa は WinHttp バックエンドを優先し、このユニットを呼ぶものはありません

libcurl のハンドル型、エントリポイントのバインディング、オプション定数は implementation セクションにあります。interface が公開するのは、可用性チェック、バックエンド名、送信ヘルパー、3 つのトランスポート上限だけです

関数

関数説明
TsaHttpAvailablelibcurl が見つかり、必要なすべてのエントリポイントが実行時に解決されていれば True を返します
TsaHttpBackendName解決されたバックエンドの名前を返します。トランスポートが使えるなら libcurl、そうでなければ空文字列です
PostTimeStampQueryReqDer を TsaUrl に POST し、生の TimeStampResp ボディを RespDer に格納します。トランスポートの失敗時には False を返します

定数

定数値説明
TsaMaxResponseBytes4 * 1024 * 1024受け付ける TimeStampResp ボディの上限です。それより大きいレスポンスは、バッファを無制限に育てる代わりに転送を中断します。FPdfTsaWin の同じ定数と同期が保たれています
TsaRequestTimeoutSeconds30リクエスト全体の予算 (秒) です。WinHttp のタイムアウトと一致しており、死んだ TSA がどちらのプラットフォームでも署名スレッドをハングさせられません
TsaConnectTimeoutSeconds30接続の予算 (秒) です。リクエスト予算の前に適用されます

備考

関連項目

FPdfTsa, FPdfTsaWin, FPdfCms, TPdf.SignPades