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 を返します |
VerifyWinDetachedCms | 2 つの分離コンテンツセグメントに対する CMS 署名属性と署名を検証し、現在のキャッシュのみのシステムトラストを別々に報告します |
VerifyWinDetachedCmsEx | 明示的なオンライン取得、失効、タイムアウト、チェックポイントのオプション付きで分離 CMS コンテンツを検証します |
VerifyWinAttachedCmsEx | 添付 CMS 値を検証し、指定されたオプションで署名者証明書を評価します |
ResolveWinSigner | Windows 証明書ストアと CNG 秘密鍵を使って、サムプリントを署名者、証明書 DER、チェーンへ解決します |
TestBuildWinCmsTrust | PDFIUMPAS_CRYPTO_TESTS の下でのみコンパイルされるテスト条件付きフックです。CNG のチェーン ポリシー関数ポインターを呼び出し側提供のスタブに差し替え、署名ステータスを有効に設定した状態でトラスト構築を実行し、その後ポインターを復元します。暗号のユニット テストが、実際の証明書チェーンなしで BuildWinCmsTrust を試験できます |
| 型 | メンバーと目的 |
|---|---|
TWinCmsVerifyStatus | wcvsUnavailable、wcvsValid、wcvsInvalid、wcvsUnsupported、wcvsIndeterminate |
TWinCmsVerifyStage | wcvstCryptographicSignature、wcvstChainBuild、wcvstOnlineRetrieval、wcvstRevocationCheck |
TWinCmsVerifyCheckpoint | 各 TWinCmsVerifyStage を受け取るオブジェクトメソッド型コールバックです |
TWinCmsVerifyOptions | OnlineRetrieval、CheckRevocation、CollectChainCertificates、UrlRetrievalTimeoutMs、OnCheckpoint、および静的な Default ファクトリです |
TWinCmsVerifyResult | TPdfCmsVerifyResult のエイリアスです。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 のチェーン エンジンが裏付けとなるエビデンスを取得できます
PadesCryptoAvailable = False を報告しますTWinCmsVerifyOptions.Default はキャッシュのみの検証を維持します。アプリケーションがネットワークアクセスとそのレイテンシを許容する場合にのみ、オンライン取得と失効確認を有効にしてくださいRevocationReason: TPdfCmsRevocationReason と RevocationError: Cardinal が含まれます。失効が無効だったり失効パスに到達しなかった場合は pcrrNone と 0 のままになり、チェックが成功したときも同じ値が入るため、判定には RevocationStatus を使ってくださいNativeRevocationError と NativeTimeStampRevocationError を通じて、署名とそのタイムスタンプ トークンの reason と生の Windows 診断を別々に保持します