次の方法で共有


CryptSignCertificate 関数 (wincrypt.h)

CryptSignCertificate 関数は、エンコードされた署名済みコンテンツの "署名対象" 情報に署名します。

構文

BOOL CryptSignCertificate(
  [in]      BCRYPT_KEY_HANDLE           hBCryptKey,
  [in]      DWORD                       dwKeySpec,
  [in]      DWORD                       dwCertEncodingType,
  [in]      const BYTE                  *pbEncodedToBeSigned,
  [in]      DWORD                       cbEncodedToBeSigned,
  [in]      PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
  [in]      const void                  *pvHashAuxInfo,
  [out]     BYTE                        *pbSignature,
  [in, out] DWORD                       *pcbSignature
);

パラメーター

[in] hBCryptKey

署名を行う CSP のハンドル。 このハンドルは、CryptAcquireContext 関数を使用して作成された HCRYPTPROV ハンドル、または NCryptOpenKey 関数を使用して作成されたNCRYPT_KEY_HANDLE ハンドルである必要があります。 新しいアプリケーションでは、常に CNG CSP の NCRYPT_KEY_HANDLE ハンドルを渡す必要があります。

[in] dwKeySpec

プロバイダーのコンテナーから使用する秘密キーを識別します。 AT_KEYEXCHANGEまたはAT_SIGNATUREできます。 hCryptProvOrNCryptKey パラメーターでNCRYPT_KEY_HANDLEが使用されている場合、このパラメーターは無視されます。

[in] dwCertEncodingType

使用するエンコードの種類を指定します。 次の例に示すように、証明書と メッセージエンコードの両方の種類 をビットごとの OR 操作と組み合わせて指定することは、常に許容されます。

X509_ASN_ENCODING |PKCS_7_ASN_ENCODING

現在定義されているエンコードの種類は次のとおりです。

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pbEncodedToBeSigned

署名するエンコードされたコンテンツへのポインター。

[in] cbEncodedToBeSigned

エンコードされたコンテンツのサイズ (バイト単位) pbEncodedToBeSigned

[in] pSignatureAlgorithm

pszObjId メンバーが次のいずれかに設定されたCRYPT_ALGORITHM_IDENTIFIER構造体へのポインター。

  • szOID_RSA_MD5RSA
  • szOID_RSA_SHA1RSA
  • szOID_X957_SHA1DSA
  • szOID_RSA_SSA_PSS
  • szOID_ECDSA_SPECIFIED
署名アルゴリズムがハッシュ アルゴリズムの場合、署名には暗号化されていないハッシュ オクテットのみが含まれます。 秘密キーはハッシュの暗号化には使用されません。 dwKeySpec は使用されず、適切な既定の CSP をハッシュに使用できる場合は 、hCryptProvOrNCryptKeyNULL にすることができます。

[in] pvHashAuxInfo

現在は使用しません。 NULL にする必要があります。

[out] pbSignature

コンテンツの署名付き ハッシュ を受け取るバッファーへのポインター。

このパラメーターは、メモリ割り当てのためにこの情報のサイズを設定するために NULL にすることができます 。 詳細については、「 不明な長さのデータの取得」を参照してください。

[in, out] pcbSignature

pbSignature パラメーターによって指されるバッファーのサイズ (バイト単位) を含む DWORD へのポインター。 関数が戻ると、 DWORD には、格納されているバイト数、またはバッファーに格納されるバイト数が含まれます。

メモ バッファーで返されるデータを処理する場合、アプリケーションは返されるデータの実際のサイズを使用する必要があります。 実際のサイズは、入力時に指定されたバッファーのサイズよりも少し小さくすることができます。 (入力では、バッファー サイズは通常、可能な最大の出力データがバッファーに収まるように十分な大きさで指定されます)。出力時に、このパラメーターが指す変数が更新され、バッファーにコピーされたデータの実際のサイズが反映されます。
 

戻り値

関数が成功した場合、戻り値は 0 以外 (TRUE) になります

関数が失敗した場合、戻り値は 0 (FALSE) になります。 拡張エラー情報については、 GetLastError を呼び出します。

メモ 呼び出された関数 CryptCreateHashCryptSignHashCryptHashData からのエラーがこの関数に反映される可能性があります。
 
この関数には、次のエラー コードがあります。
リターン コード 説明
ERROR_MORE_DATA
pbSignature パラメーターで指定されたバッファーが、返されるデータを保持するのに十分な大きさでない場合、関数はERROR_MORE_DATA コードを設定し、必要なバッファー サイズをバイト単位で pcbSignature が指す変数に格納します。
NTE_BAD_ALGID
署名アルゴリズムの オブジェクト識別子 (OID) は、既知またはサポートされているハッシュ アルゴリズムにマップされません。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー wincrypt.h
Library Crypt32.lib
[DLL] Crypt32.dll

こちらもご覧ください

CryptSignAndEncodeCertificate

データ管理関数