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 パラメーターで渡される場合、このパラメーターは無視されます。
値 | 意味 |
---|---|
|
キー交換キーを使用します。 |
|
デジタル署名キーを使用します。 |
[in] dwCertEncodingType
使用するエンコードの種類を指定します。 次の値を指定できます。
値 | 意味 |
---|---|
|
X.509 証明書のエンコードを指定します。 |
[in] lpszStructType
エンコードおよび署名するデータの種類を含む、null で終わる ANSI 文字列へのポインター。 エンコード操作では、次の定義済みの lpszStructType 定数が使用されます。
値 | 意味 |
---|---|
|
pvStructInfo は、 CRL_INFO 構造体のアドレスです。 |
|
pvStructInfo は、 CERT_REQUEST_INFO 構造体のアドレスです。 |
|
pvStructInfo は、 CERT_INFO 構造体のアドレスです。 |
|
pvStructInfo は、 CERT_KEYGEN_REQUEST_INFO 構造体のアドレスです。 |
[in] pvStructInfo
署名およびエンコードされるデータを含む構造体のアドレス。 この構造体の形式は、 lpszStructType パラメーターによって決まります。
[in] pSignatureAlgorithm
署名アルゴリズムのオブジェクト識別子 (OID) と必要な追加パラメーターを含むCRYPT_ALGORITHM_IDENTIFIER構造体へのポインター。 この関数では、次のアルゴリズム OID を使用します。
- szOID_RSA_MD5RSA
- szOID_RSA_SHA1RSA
- szOID_X957_SHA1DSA
[in] pvHashAuxInfo
予約済み。 NULL にする必要があります。
[out] pbEncoded
署名されたエンコードされた出力を受け取るバッファーへのポインター。
このパラメーターは、メモリ割り当て目的でこの情報のサイズを設定するために NULL にすることができます 。 詳細については、「不明な 長さのデータの取得」を参照してください。
[in, out] pcbEncoded
pbEncoded パラメーターが指すバッファーのサイズ (バイト単位) を含む DWORD へのポインター。 関数が戻ると、 DWORD には、格納されているバイト数、またはバッファーに格納されるバイト数が含まれます。
戻り値
関数が成功した場合、戻り値は 0 以外 (TRUE) になります。
関数が失敗した場合、戻り値は 0 (FALSE) になります。 拡張エラー情報については、 GetLastError を呼び出します。
リターン コード | 説明 |
---|---|
|
pbEncoded パラメーターで指定されたバッファーが、返されたデータを保持するのに十分な大きさでない場合、関数はERROR_MORE_DATA コードを設定し、必要なバッファー サイズをバイト単位で pcbEncoded が指す変数に格納します。 |
|
証明書のエンコードの種類が無効です。 現在、X509_ASN_ENCODINGのみがサポートされています。 |
|
署名アルゴリズムの OID は、既知またはサポートされているハッシュ アルゴリズムにマップされません。 |
|
エンコードまたはデコード中にエラーが発生しました。 このエラーの最も可能性の高い原因は、 pvStructInfo が指す構造体内のフィールドの不適切な初期化です。 |
関数が失敗した場合、GetLastError は抽象構文表記 1 (ASN.1) エンコード/デコード エラーを返す可能性があります。 これらのエラーの詳細については、「 ASN.1 エンコード/デコードの戻り値」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | wincrypt.h |
Library | Crypt32.lib |
[DLL] | Crypt32.dll |