PDFium Delphi Component Docs

FPdfCryptoWin ユニット

ユニット: FPdfCryptoWin
PAdES 署名、分離 CMS 検証、キャッシュのみのシステム証明書トラスト評価のための Windows 暗号化 API バックエンドです

構文

function WinCryptoAvailable: Boolean;
function WinCmsVerificationAvailable: Boolean;
function VerifyWinDetachedCms(const CmsDer: TBytes; Segment1: Pointer; Segment1Length: Cardinal; Segment2: Pointer; Segment2Length: Cardinal): TWinCmsVerifyResult;
function VerifyWinDetachedCmsEx(const CmsDer: TBytes; Segment1: Pointer; Segment1Length: Cardinal; Segment2: Pointer; Segment2Length: Cardinal; const Options: TWinCmsVerifyOptions): TWinCmsVerifyResult;
function VerifyWinAttachedCmsEx(const CmsDer: TBytes; const Options: TWinCmsVerifyOptions): TWinCmsVerifyResult;
function ResolveWinSigner(const Options: TPadesSignerOptions): TPadesResolvedSigner;
function TestBuildWinCmsTrust(SignerCert: Pointer;
  const Options: TWinCmsVerifyOptions; GetChain, VerifyPolicy,
  FreeChain: Pointer): TWinCmsVerifyResult; // PDFIUMPAS_CRYPTO_TESTS only

説明

FPdfCryptoWin は FPdfCrypto が利用する Windows 固有の暗号バックエンドです。CryptoAPI を通じて現在のユーザーとローカルマシンの証明書ストアを開き、要求されたサムプリントに一致する証明書を特定し、対応する NCRYPT 秘密鍵ハンドルを取得して、ICmsSigner が CNG 経由で署名する TPadesResolvedSigner を返します

WinCryptoAvailable は Crypt32 / ncrypt バインディングが解決できるかどうかの軽量チェックを行い、呼び出しコードが起動時にこのマシンで PAdES 署名が可能かどうかを判断できます

VerifyWinDetachedCms は、呼び出し側所有の 2 つのバイトセグメントに対して分離 CMS 値を検証し、署名者証明書を返し、ネットワーク取得を行わないキャッシュのみの Windows 基本ポリシーでチェーンを評価します

拡張検証関数は TWinCmsVerifyOptions を受け付けるため、オンラインの証明書取得を有効化し、失効確認を要求し、取得タイムアウトを設定し、検証のチェックポイントを観察できます

署名の有効性と証明書トラストは独立した結果であるため、信頼されていない証明書や自己署名証明書による正しい署名が、改ざんされたコンテンツと区別されたままになります

関数

関数説明
WinCryptoAvailable実行時に Windows の Crypt と ncrypt バインディングが解決できる場合に True を返します
WinCmsVerificationAvailable分離 CMS 検証と証明書チェーンポリシー API が利用可能な場合に True を返します
VerifyWinDetachedCms2 つの分離コンテンツセグメントに対する CMS 署名属性と署名を検証し、現在のキャッシュのみのシステムトラストを別々に報告します
VerifyWinDetachedCmsEx明示的なオンライン取得、失効、タイムアウト、チェックポイントのオプション付きで分離 CMS コンテンツを検証します
VerifyWinAttachedCmsEx添付 CMS 値を検証し、指定されたオプションで署名者証明書を評価します
ResolveWinSignerWindows 証明書ストアと CNG 秘密鍵を使って、サムプリントを署名者、証明書 DER、チェーンへ解決します
TestBuildWinCmsTrustPDFIUMPAS_CRYPTO_TESTS の下でのみコンパイルされるテスト条件付きフックです。CNG のチェーン ポリシー関数ポインターを呼び出し側提供のスタブに差し替え、署名ステータスを有効に設定した状態でトラスト構築を実行し、その後ポインターを復元します。暗号のユニット テストが、実際の証明書チェーンなしで BuildWinCmsTrust を試験できます

検証型

型メンバーと目的
TWinCmsVerifyStatuswcvsUnavailable、wcvsValid、wcvsInvalid、wcvsUnsupported、wcvsIndeterminate
TWinCmsVerifyStagewcvstCryptographicSignature、wcvstChainBuild、wcvstOnlineRetrieval、wcvstRevocationCheck
TWinCmsVerifyCheckpoint各 TWinCmsVerifyStage を受け取るオブジェクトメソッド型コールバックです
TWinCmsVerifyOptionsOnlineRetrieval、CheckRevocation、CollectChainCertificates、UrlRetrievalTimeoutMs、OnCheckpoint、および静的な Default ファクトリです
TWinCmsVerifyResultTPdfCmsVerifyResult のエイリアスです。SignatureStatus、TrustStatus、RevocationStatus、SignatureError、TrustError、SignerCertificate、ChainCertificates、RevocationReason、RevocationError を含みます

失効結果

CheckRevocation を有効にすると、バックエンドは失効専用のチェーンを別途構築し、RevocationStatus、RevocationReason、RevocationError を設定します。失効の失敗が、署名の結果や独立して評価された TrustStatus と TrustError を上書きすることはありません

整形されたネイティブ チェーンでは、失効が確定すると pcrrCertificateRevoked を伴う wcvsInvalid になります。失効が確定しなかった場合、信頼できないチェーンは pcrrChainUntrusted を伴う wcvsIndeterminate に、ネイティブ構造の不完全さや他の未解決の失効チェックは pcrrUnknown を伴う wcvsIndeterminate のままになります

有効な結果を得るには、信頼できるチェーン、チェーン エラーが無いこと、失効チェックを要する証明書が 1 つ以上あること、そしてそのすべての証明書でネイティブの失効結果が成功していることが必要です。この網羅要件から除外されるのは、明示的に自己署名または信頼された CA アンカーとマークされた終端証明書だけです。ルートのみのチェーンや証明書ごとのエビデンス欠落は、判定不能のままになります

RevocationError は CERT_REVOCATION_INFO.dwRevocationResult から取り出した生の DWORD を、失効チェーン呼び出しが失敗した場合はその時点の GetLastError の値を保持します。0 はネイティブの診断情報がないことを意味し、チェーン ステータスが失効を確定させても対応するプロバイダー コードがない場合もこれに含まれます。集約された CERT_TRUST_STATUS.dwErrorStatus のビットは分類に使うだけで、でっち上げたネイティブ エラーとしてこのフィールドにコピーされることはありません

生の値は Windows のプロバイダーや API の文脈の中で解釈してください。HRESULT である保証はありません。offline・期限切れ・unknown の失効エビデンスから、CRL の期限切れ、不正な CRL、CRL 署名の不具合を特定することはできないため、このバックエンドはそうした詳細な reason を推測しません

OnlineRetrieval = False の場合、チェーン構築も失効チェックもキャッシュされた取得だけを使います。オンライン取得を有効にすると、設定された取得タイムアウト内で Windows のチェーン エンジンが裏付けとなるエビデンスを取得できます

備考

関連項目

FPdfCrypto, FPdfCms