ネイティブ Linux ABI タイムスタンプトランスポート
ネイティブ Linux の署名ジョブは、拡張された操作レコードを通じて実際の RFC 3161 タイムスタンプトランスポートに対応します。元の ABI バージョン、操作プレフィックス、エクスポート関数、通常の操作レコードサイズは変更されません
typedef hpdf_status (HPDF_CDECL *hpdf_timestamp_transport_v1)(
void *user_data, const void *request, size_t request_length,
const hpdf_io_v1 *response_io);
typedef struct hpdf_signing_operation_v1 {
hpdf_operation_v1 operation;
void *timestamp_user_data;
hpdf_timestamp_transport_v1 timestamp_transport;
} hpdf_signing_operation_v1;
レコードと JSON の設定
元の操作フィールドを初期化し、operation.struct_size に sizeof(hpdf_signing_operation_v1) を設定します。schemaVersion 1 の署名ジョブと timestamp: true を付けて、&record.operation を hpdf_document_execute_json_v1 に渡します
拡張部分はネイティブ Linux x86-64 で 72 バイトです。元の hpdf_operation_v1 は 56 バイトのままで、hpdf_abi_operation_v1_size も引き続きその元のサイズを報告します
timestampTrustedCAFile が TSA のトラストルートを供給します。省略可能な timestampTrustedCRLFile と requireTimestampRevocation で、明示的な失効検証が有効になります
コールバックは、署名インプリントと生成されたノンスを含む実際の DER タイムスタンプリクエストを受け取ります。供給された書き込みコールバックで実際の DER レスポンスバイトを返し、ABI ステータスを返してください
所有権とキャンセル
トランスポートは呼び出しスレッド上で同期実行されます。リクエストバイト、レスポンスコールバックテーブル、レスポンスユーザーデータは、トランスポートが返るまでの間だけ借用されます
トランスポート作業の間は response_io->is_cancelled をポーリングし、レスポンス書き込みの失敗を尊重し、ネットワークやサブプロセスのデッドラインはアプリケーションコールバック内で強制してください
maxTimestampResponseBytes のデフォルトは 4194304 バイトと操作作業予算の 8 分の 1 の小さい方です。設定する上限は正の値でなければならず、その作業予算の割合を超えられません
アプリケーションコールバックが後で成功を返しても、ライブラリーは失敗またはキャンセルされたレスポンス書き込みを保持します。タイムスタンプの失敗では、未署名の読み込み済みコンテキストが保持され、署名付き出力は公開されません
検証と結果
ネイティブ実装は、signatureTimeStampToken 属性を追加して署名を公開する前に、レスポンスステータス、署名インプリント、ノンス、TSA 証明書の用途、証明書チェーン、要求された失効ポリシーを検証します
署名結果には timestampCount、timestampValid、timestampTrustEvaluated が含まれます。signatures.verify は requireTimestamp と、同じ明示的な TSA トラスト/失効オプションを受け付けます
受け入れテスト
両方のネイティブ Linux コンパイラーが、319 件の実際の ctypes アサーション、39 件の実際の C タイムスタンプクライアントアサーション、33 件の既存 C ABI アサーション、296 件の独立出力チェックに合格します
独立した OpenSSL 検証が、CMS 署名と埋め込みタイムスタンプトークンを認証し、変更された署名インプリントと失効した TSA 証明書を拒否し、タイムスタンプ付きの平文および AES-256 R5/R6 ドキュメントを検証します