CryptSignAndEncodeCertificate 関数 (wincrypt.h)

CryptSignAndEncodeCertificate 関数は、証明書、証明書失効リスト (CRL)、証明書信頼リスト (CTL)、または証明書要求をエンコードして署名します。

この関数は、次の操作を実行します。

  • lpszStructType を使用して CryptEncodeObject を呼び出して、"署名する" 情報をエンコードします。
  • CryptSignCertificate を呼び出して、このエンコードされた情報に署名します。
  • lpszStructType を X509_CERT に設定して CryptEncodeObject をもう一度呼び出して、結果として得られる符号付きエンコードされた情報をさらにエンコードします。

構文

BOOL CryptSignAndEncodeCertificate(
  [in]      BCRYPT_KEY_HANDLE           hBCryptKey,
  [in]      DWORD                       dwKeySpec,
  [in]      DWORD                       dwCertEncodingType,
  [in]      LPCSTR                      lpszStructType,
  [in]      const void                  *pvStructInfo,
  [in]      PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
  [in]      const void                  *pvHashAuxInfo,
  [out]     BYTE                        *pbEncoded,
  [in, out] DWORD                       *pcbEncoded
);

パラメーター

[in] hBCryptKey

署名を行うための 暗号化サービス プロバイダー (CSP) のハンドル。 このハンドルは、CryptAcquireContext 関数を使用して作成された HCRYPTPROV ハンドル、または NCryptOpenKey 関数を使用して作成されたNCRYPT_KEY_HANDLE ハンドルです。 新しいアプリケーションでは、常に CNG CSP の NCRYPT_KEY_HANDLE ハンドルを渡す必要があります。

[in] dwKeySpec

プロバイダーのコンテナーから使用する 秘密キー を識別します。 これは、次のいずれかの値である必要があります。 cNG キーが hCryptProvOrNCryptKey パラメーターで渡される場合、このパラメーターは無視されます。

意味
AT_KEYEXCHANGE
キー交換キーを使用します。
AT_SIGNATURE
デジタル署名キーを使用します。

[in] dwCertEncodingType

使用するエンコードの種類を指定します。 次の値を指定できます。

意味
X509_ASN_ENCODING
X.509 証明書のエンコードを指定します。

[in] lpszStructType

エンコードおよび署名するデータの種類を含む、null で終わる ANSI 文字列へのポインター。 エンコード操作では、次の定義済みの lpszStructType 定数が使用されます。

意味
X509_CERT_CRL_TO_BE_SIGNED
pvStructInfo は、 CRL_INFO 構造体のアドレスです。
X509_CERT_REQUEST_TO_BE_SIGNED
pvStructInfo は、 CERT_REQUEST_INFO 構造体のアドレスです。
X509_CERT_TO_BE_SIGNED
pvStructInfo は、 CERT_INFO 構造体のアドレスです。
X509_KEYGEN_REQUEST_TO_BE_SIGNED
pvStructInfo は、 CERT_KEYGEN_REQUEST_INFO 構造体のアドレスです。

[in] pvStructInfo

署名およびエンコードされるデータを含む構造体のアドレス。 この構造体の形式は、 lpszStructType パラメーターによって決まります。

[in] pSignatureAlgorithm

署名アルゴリズムのオブジェクト識別子 (OID) と必要な追加パラメーターを含むCRYPT_ALGORITHM_IDENTIFIER構造体へのポインター。 この関数では、次のアルゴリズム OID を使用します。

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

[in] pvHashAuxInfo

予約済み。 NULL にする必要があります。

[out] pbEncoded

署名されたエンコードされた出力を受け取るバッファーへのポインター。

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

[in, out] pcbEncoded

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

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

戻り値

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

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

メモ 呼び出された関数 CryptCreateHashCryptSignHashCryptHashData のエラーがこの関数に反映される可能性があります。
 
考えられるエラー コードは次のとおりですが、これらに限定されません。
リターン コード 説明
ERROR_MORE_DATA
pbEncoded パラメーターで指定されたバッファーが、返されたデータを保持するのに十分な大きさでない場合、関数はERROR_MORE_DATA コードを設定し、必要なバッファー サイズをバイト単位で pcbEncoded が指す変数に格納します。
ERROR_FILE_NOT_FOUND
証明書のエンコードの種類が無効です。 現在、X509_ASN_ENCODINGのみがサポートされています。
NTE_BAD_ALGID
署名アルゴリズムの OID は、既知またはサポートされているハッシュ アルゴリズムにマップされません。
CRYPT_E_BAD_ENCODE
エンコードまたはデコード中にエラーが発生しました。 このエラーの最も可能性の高い原因は、 pvStructInfo が指す構造体内のフィールドの不適切な初期化です。
 

関数が失敗した場合、GetLastError は抽象構文表記 1 (ASN.1) エンコード/デコード エラーを返す可能性があります。 これらのエラーの詳細については、「 ASN.1 エンコード/デコードの戻り値」を参照してください。

要件

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

こちらもご覧ください

CryptSignCertificate

データ管理関数