IX509PrivateKey
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
暗号化、署名、およびキー合意に使用できる非対称秘密キーを表します。
メソッド 58
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
既存の秘密キーを開きます。
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
成功した場合、このメソッドは Opened プロパティを設定します。Export メソッドまたは ExportPublicKey メソッドを呼び出す前に、Open メソッドまたは Create メソッドのいずれかを呼び出す必要があります。
Open メソッドまたは Create メソッドを呼び出した後は、次のプロパティを設定できません。これらを指定したい場合は、いずれかのメソッドを呼び出す前に行う必要があります。
- Algorithm
- ContainerName
- ContainerNamePrefix
- CspInformations
- CspStatus
- Description
- Existing
- ExportPolicy
- FriendlyName
- KeyProtection
- KeySpec
- KeyUsage
- LegacyCsp
- Length
- MachineContext
- ProviderName
- ProviderType
- Pin
- ReaderName
- Silent
- UIContextMessage
次のプロパティは、キーが開いているかどうかに関係なく設定できます。
非対称秘密キーを作成します。
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。有効な値には次の表の値が含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻りコード/値 | 説明 |
|---|---|
|
CSP ハンドルが NULL ではありません。 |
|
キーが既に存在します。 |
解説(Remarks)
CspStatus、ProviderName、または ProviderType プロパティを設定しない場合、このメソッドはキーの作成時に既定のプロバイダー、キーサイズ、および KeySpec 値を使用します。たとえば、新規にオペレーティングシステムをインストールした環境では、Microsoft Enhanced Cryptographic Provider v1.0 が既定のプロバイダーです。
ContainerName プロパティを設定しない場合、このメソッドは名前を自動的に生成します。生成される名前には GUID が含まれ、ContainerNamePrefix プロパティが設定されていない場合は接頭辞 "lp-" が付きます。プロバイダーがスマートカードプロバイダーの場合、生成される名前はプロバイダーが指定する MaxKeyContainerNameLength 値を超えません。生成された名前が最初にこの値を超える場合は、40 文字に切り詰められます。
Create メソッドまたは Open メソッドを呼び出した後は、次のプロパティを設定できません。これらを指定したい場合は、いずれかのメソッドを呼び出す前に行う必要があります。
暗号化サービスプロバイダー (CSP) のハンドル、または Cryptography API: Next Generation (CNG) キーストレージプロバイダー (KSP) のハンドルを解放します。
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
このメソッドは、ストレージからキーを削除したり、IX509PrivateKey インスタンスを削除したりしません。詳細については、Delete メソッドを参照してください。
暗号化サービスプロバイダー (CSP) のハンドル、または Cryptography API: Next Generation (CNG) キーストレージプロバイダー (KSP) のハンドルを解放し、ディスクまたはスマートカードからキーを削除します。
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。有効な値には次の表の値が含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻りコード/値 | 説明 |
|---|---|
| CSP が見つかりませんでした。 |
解説(Remarks)
プロバイダーのハンドルを閉じるだけの場合は、Close メソッドを呼び出してください。Delete メソッドは IX509PrivateKey インスタンスを削除しません。
秘密キーが存在し、クライアントが使用できることを検証しますが、キーを開くことはしません。
| VerifyType | X509PrivateKeyVerify | in | メソッドの実行オプションを指定する X509PrivateKeyVerify 列挙値です。次のいずれかの値を指定できます。 |
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。有効な値には次の表の値が含まれますが、これらに限定されません。また、このメソッドは CryptoAPI の CryptGetUserKey 関数および CryptAcquireContext 関数を呼び出すため、そのドキュメントで示されているエラーを返す場合があります。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻りコード | 説明 |
|---|---|
| CSP または KSP に関連するプロパティが見つかりませんでした。 |
解説(Remarks)
VerifySilent または VerifySmartCardSilent の値が設定されていて、暗号化プロバイダーがユーザーインターフェイスが必要であると指定している場合、キーは開かれませんが、メソッドは S_OK を返します。
既存の秘密キーを、暗号化プロバイダー内のキーコンテナーにインポートします。
| strExportType | LPWSTR | in | キーが CNG KSP (キーストレージプロバイダー) を使用して作成された場合、Import メソッドはこの引数を NCryptSetProperty 関数の pszProperty パラメーターに渡します。つまり、指定した値は、インポートされたキーに設定するプロパティの名前として使用されます。 キーが CryptoAPI CSP (暗号化サービスプロバイダー) を使用して作成された場合、この引数は秘密キーをどのようにインポートするかを指定します。次の値を指定できます。
| ||||
| strEncodedKey | LPWSTR | in | インポートするキーを格納する BSTR 変数です。 | ||||
| Encoding | EncodingType | in | strEncodedKey パラメーターに格納された文字列に適用する Unicode エンコードの種類を指定する EncodingType 列挙値です。既定値は XCN_CRYPT_STRING_BASE64 です。 |
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。有効な値には次の表の値が含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻りコード | 説明 |
|---|---|
|
キーコンテナーが既に開いています。既に Open または Create を呼び出している場合、このエラーが返されることがあります。 |
|
キーが CryptoAPI CSP によって作成されており、strExportType パラメーターに BCRYPT_PRIVATE_KEY_BLOB 以外の値を指定しました。 |
解説(Remarks)
Import 関数は、strExportType パラメーターに BCRYPT_PRIVATE_KEY_BLOB 以外の値を指定し、かつ次のいずれのプロパティも設定していない場合、CNG KSP キーをインポートしようとしていると自動的に見なします。
秘密キーをバイト配列にコピーします。
| strExportType | LPWSTR | in | 秘密キーをどのようにエクスポートするかを指定する BSTR 値です。 キーが CNG KSP (キーストレージプロバイダー) を使用して作成された場合は、NCryptExportKey 関数の pszBlobType パラメーターで許可されている値のいずれかを指定できます。 キーが CryptoAPI CSP (暗号化サービスプロバイダー) を使用して作成された場合は、Wincrypt.h に含まれる Bcrypt.h ヘッダーファイルの次のいずれかの値を指定できます。
| ||||||
| Encoding | EncodingType | in | pstrEncodedKey パラメーターに格納された文字列に適用する Unicode エンコードの種類を指定する EncodingType 列挙値です。既定値は XCN_CRYPT_STRING_BASE64 です。 | ||||||
| pstrEncodedKey | LPWSTR* | out | 秘密キーを格納する BSTR 変数へのポインターです。 |
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。有効な値には次の表の値が含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻りコード | 説明 |
|---|---|
|
キーが CryptoAPI CSP によって作成されており、strExportType パラメーターに BCRYPT_PRIVATE_KEY_BLOB または BCRYPT_PUBLIC_KEY_BLOB 以外の値を指定しました。 |
非対称キーペアの公開キー部分をエクスポートします。
| ppPublicKey | IX509PublicKey** | out | キーを表す IX509PublicKey インターフェイスへのポインターを受け取る変数のアドレスです。 |
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
キーコンテナーの名前を指定または取得します。(Get)
| pValue | LPWSTR* | out | 鍵コンテナー名を受け取る文字列ポインタである。 |
解説(Remarks)
名前を指定しない場合は、Create メソッドが呼び出されたときに名前が作成されます。
キーコンテナーの名前を指定または取得します。(Put)
| Value | LPWSTR | in | 設定する鍵コンテナー名を指定する。 |
解説(Remarks)
名前を指定しない場合は、Create メソッドが呼び出されたときに名前が作成されます。
キーコンテナーの名前に追加する接頭辞を指定または取得します。(Get)
| pValue | LPWSTR* | out | 鍵コンテナー名のプレフィックスを受け取る文字列ポインタである。 |
解説(Remarks)
接頭辞には、キーコンテナー名の最大長と、コンテナー名として有効な文字の範囲内で、任意の文字列を指定できます。たとえば、ContainerName プロパティを呼び出してキーコンテナー名を指定しない場合、Create メソッドが呼び出されたときに名前が自動的に作成され、コンテナー名の接頭辞は文字列 "lp" になります。別の例として、テストハーネスを作成していて、生成元のプログラムごとにキーコンテナーを区別したい場合は、実行可能ファイルの名前を接頭辞として使用できます。
キーコンテナーの名前に追加する接頭辞を指定または取得します。(Put)
| Value | LPWSTR | in | 設定する鍵コンテナー名のプレフィックスを指定する。 |
解説(Remarks)
接頭辞には、キーコンテナー名の最大長と、コンテナー名として有効な文字の範囲内で、任意の文字列を指定できます。たとえば、ContainerName プロパティを呼び出してキーコンテナー名を指定しない場合、Create メソッドが呼び出されたときに名前が自動的に作成され、コンテナー名の接頭辞は文字列 "lp" になります。別の例として、テストハーネスを作成していて、生成元のプログラムごとにキーコンテナーを区別したい場合は、実行可能ファイルの名前を接頭辞として使用できます。
スマートカードリーダーの名前を指定または取得します。(Get)
| pValue | LPWSTR* | out | スマートカードリーダーの名前を受け取る文字列ポインタである。 |
解説(Remarks)
キーを開く前にこのプロパティを設定すると、リーダー名がキーコンテナーの名前に連結されます。形式は \.\Reader_Name\Container_Name です。リーダー名をキーコンテナー名の前に付加することで、以降の暗号化プロバイダーへの呼び出しで名前を一意に識別できるようになります。スマートカードを使用する場合、秘密キーは通常、スマートカードのキーコンテナーに格納されます。
スマートカードリーダーの名前を指定または取得します。(Put)
| Value | LPWSTR | in | 設定するスマートカードリーダーの名前を指定する。 |
解説(Remarks)
キーを開く前にこのプロパティを設定すると、リーダー名がキーコンテナーの名前に連結されます。形式は \.\Reader_Name\Container_Name です。リーダー名をキーコンテナー名の前に付加することで、以降の暗号化プロバイダーへの呼び出しで名前を一意に識別できるようになります。スマートカードを使用する場合、秘密キーは通常、スマートカードのキーコンテナーに格納されます。
秘密キーに関連付けられた公開キーアルゴリズムをサポートする、利用可能な暗号化プロバイダーに関する情報を格納した ICspInformation オブジェクトのコレクションを指定または取得します。(Get)
| ppValue | ICspInformations** | out | 利用可能な CSP 情報のコレクションを受け取るインターフェイスポインタへのポインタである。 |
解説(Remarks)
登録 (エンロール) プロセスでは、ICspInformations コレクションにクライアントコンピューターにインストールされているすべてのプロバイダーが含まれていることが前提となります。そのため、このプロパティにインストール済みプロバイダーの一部だけを設定しようとしないでください。空のコレクションを作成し、AddAvailableCsps を呼び出して設定することをお勧めします。複数のコレクションを作成するコストを避けるため、このコレクションは一度だけ構築し、すべての最上位の要求オブジェクト (IX509PrivateKey オブジェクトを直接使用している場合は秘密キー) に設定してください。ICspInformations コレクションは大きなものです。
秘密キーに関連付けられた公開キーアルゴリズムをサポートする、利用可能な暗号化プロバイダーに関する情報を格納した ICspInformation オブジェクトのコレクションを指定または取得します。(Put)
| pValue | ICspInformations* | inoptional | 設定する CSP 情報のコレクションを表す ICspInformations へのポインタである。 |
解説(Remarks)
登録 (エンロール) プロセスでは、ICspInformations コレクションにクライアントコンピューターにインストールされているすべてのプロバイダーが含まれていることが前提となります。そのため、このプロパティにインストール済みプロバイダーの一部だけを設定しようとしないでください。空のコレクションを作成し、AddAvailableCsps を呼び出して設定することをお勧めします。複数のコレクションを作成するコストを避けるため、このコレクションは一度だけ構築し、すべての最上位の要求オブジェクト (IX509PrivateKey オブジェクトを直接使用している場合は秘密キー) に設定してください。ICspInformations コレクションは大きなものです。
秘密キーに関連付けられた暗号化プロバイダーとアルゴリズムのペアに関する情報を格納した ICspStatus オブジェクトを指定または取得します。(Get)
| ppValue | ICspStatus** | out | 現在の CSP 状態を表す ICspStatus オブジェクトを受け取るインターフェイスポインタへのポインタである。 |
解説(Remarks)
CspStatus プロパティを呼び出すと、Algorithm プロパティと ProviderName プロパティが自動的に設定されます。CspStatus プロパティは通常、登録 (エンロール) プロセス中に設定されます。つまり、要求テンプレートが複数のプロバイダー/アルゴリズムのペアを指定している場合、登録コードは CspStatus プロパティを最初に有効な ICspStatus オブジェクトに設定して秘密キーの作成を試みます。キーを作成できない場合、登録コードはこのプロパティを次に有効な ICspStatus オブジェクトに設定して再試行します。
秘密キーに関連付けられた暗号化プロバイダーとアルゴリズムのペアに関する情報を格納した ICspStatus オブジェクトを指定または取得します。(Put)
| pValue | ICspStatus* | inoptional | 設定する CSP 状態を表す ICspStatus へのポインタである。 |
解説(Remarks)
CspStatus プロパティを呼び出すと、Algorithm プロパティと ProviderName プロパティが自動的に設定されます。CspStatus プロパティは通常、登録 (エンロール) プロセス中に設定されます。つまり、要求テンプレートが複数のプロバイダー/アルゴリズムのペアを指定している場合、登録コードは CspStatus プロパティを最初に有効な ICspStatus オブジェクトに設定して秘密キーの作成を試みます。キーを作成できない場合、登録コードはこのプロパティを次に有効な ICspStatus オブジェクトに設定して再試行します。
暗号化プロバイダーの名前を指定または取得します。(Get)
| pValue | LPWSTR* | out | 使用するプロバイダー名を受け取る文字列ポインタである。 |
解説(Remarks)
このプロパティを設定すると、指定した ProviderName 値と整合するように次のプロパティが自動的に設定されます。
これらのプロパティは次のように設定されます。- 利用可能な場合は、プロバイダー構成データを使用して適切な ProviderType 値が決定されます。
- 指定したプロバイダーが CNG KSP の場合:
- LegacyCsp プロパティが VARIANT_FALSE に設定されます。
- KeySpec プロパティが XCN_AT_NONE に設定されます。
- 指定したプロバイダーが CNG KSP でない場合:
- LegacyCsp プロパティが VARIANT_TRUE に設定されます。
- KeySpec プロパティが XCN_AT_SIGNATURE に設定されます。
暗号化プロバイダーの名前を指定または取得します。(Put)
| Value | LPWSTR | in | 設定するプロバイダー名を指定する。 |
解説(Remarks)
このプロパティを設定すると、指定した ProviderName 値と整合するように次のプロパティが自動的に設定されます。
これらのプロパティは次のように設定されます。- 利用可能な場合は、プロバイダー構成データを使用して適切な ProviderType 値が決定されます。
- 指定したプロバイダーが CNG KSP の場合:
- LegacyCsp プロパティが VARIANT_FALSE に設定されます。
- KeySpec プロパティが XCN_AT_NONE に設定されます。
- 指定したプロバイダーが CNG KSP でない場合:
- LegacyCsp プロパティが VARIANT_TRUE に設定されます。
- KeySpec プロパティが XCN_AT_SIGNATURE に設定されます。
秘密キーに関連付けられた暗号化プロバイダーの種類を指定または取得します。(Get)
| pValue | X509ProviderType* | out | プロバイダーの種類を受け取る X509ProviderType へのポインタである。 |
解説(Remarks)
このプロパティを使用すると、指定したプロバイダーの種類に対して既定のプロバイダーの使用を強制できます。たとえば、PROV_RSA_SCHANNEL プロバイダーを使用するには、このプロパティを XCN_PROV_RSA_SCHANNEL X509ProviderType 列挙値に設定し、ProviderName プロパティには値を指定しません。
このプロパティを設定すると、指定した ProviderType 値と整合するように次のプロパティが自動的に設定されます。
これらのプロパティは次のように設定されます。- ProviderType が XCN_PROV_NONE に設定されている場合:
- LegacyCsp プロパティが VARIANT_FALSE に設定されます。
- KeySpec プロパティが XCN_AT_NONE に設定されます。
- ProviderType が XCN_PROV_NONE に設定されていない場合:
- LegacyCsp プロパティが VARIANT_TRUE に設定されます。
- 現在の値が XCN_AT_NONE の場合、KeySpec プロパティが XCN_AT_SIGNATURE に設定されます。
秘密キーに関連付けられた暗号化プロバイダーの種類を指定または取得します。(Put)
| Value | X509ProviderType | in | 設定するプロバイダーの種類を表す X509ProviderType である。 |
解説(Remarks)
このプロパティを使用すると、指定したプロバイダーの種類に対して既定のプロバイダーの使用を強制できます。たとえば、PROV_RSA_SCHANNEL プロバイダーを使用するには、このプロパティを XCN_PROV_RSA_SCHANNEL X509ProviderType 列挙値に設定し、ProviderName プロパティには値を指定しません。
このプロパティを設定すると、指定した ProviderType 値と整合するように次のプロパティが自動的に設定されます。
これらのプロパティは次のように設定されます。- ProviderType が XCN_PROV_NONE に設定されている場合:
- LegacyCsp プロパティが VARIANT_FALSE に設定されます。
- KeySpec プロパティが XCN_AT_NONE に設定されます。
- ProviderType が XCN_PROV_NONE に設定されていない場合:
- LegacyCsp プロパティが VARIANT_TRUE に設定されます。
- 現在の値が XCN_AT_NONE の場合、KeySpec プロパティが XCN_AT_SIGNATURE に設定されます。
プロバイダーが CryptoAPI (レガシー) 暗号化サービスプロバイダー (CSP) であるかどうかを示すブール値を指定または取得します。(Get)
| pValue | VARIANT_BOOL* | out | レガシー CSP (CAPI) を使用するかどうかを受け取る VARIANT_BOOL へのポインタである。 |
解説(Remarks)
このプロパティを設定すると、指定した LegacyCsp 値と整合するように次のプロパティが自動的に設定されます。
これらのプロパティは次のように設定されます。- LegacyCsp プロパティが VARIANT_FALSE に設定されている場合:
- ProviderType が XCN_PROV_NONE に設定されます。
- KeySpec プロパティが XCN_AT_NONE に設定されます。
- LegacyCsp プロパティが VARIANT_TRUE に設定されている場合:
- 現在の値が XCN_PROV_NONE の場合、ProviderType が XCN_PROV_RSA_FULL に設定されます。
- 現在のプロパティが XCN_AT_NONE の場合、KeySpec プロパティが XCN_AT_SIGNATURE に設定されます。
プロバイダーが CryptoAPI (レガシー) 暗号化サービスプロバイダー (CSP) であるかどうかを示すブール値を指定または取得します。(Put)
| Value | VARIANT_BOOL | in | レガシー CSP (CAPI) を使用するかどうかを指定する VARIANT_BOOL である。 |
解説(Remarks)
このプロパティを設定すると、指定した LegacyCsp 値と整合するように次のプロパティが自動的に設定されます。
これらのプロパティは次のように設定されます。- LegacyCsp プロパティが VARIANT_FALSE に設定されている場合:
- ProviderType が XCN_PROV_NONE に設定されます。
- KeySpec プロパティが XCN_AT_NONE に設定されます。
- LegacyCsp プロパティが VARIANT_TRUE に設定されている場合:
- 現在の値が XCN_PROV_NONE の場合、ProviderType が XCN_PROV_RSA_FULL に設定されます。
- 現在のプロパティが XCN_AT_NONE の場合、KeySpec プロパティが XCN_AT_SIGNATURE に設定されます。
公開キーアルゴリズムのオブジェクト識別子 (OID) を指定または取得します。(Get)
| ppValue | IObjectId** | out | 鍵アルゴリズムの OID を表す IObjectId オブジェクトを受け取るインターフェイスポインタへのポインタである。 |
解説(Remarks)
このプロパティは、CspStatus プロパティが呼び出されたときに自動的に設定されます。
公開キーアルゴリズムのオブジェクト識別子 (OID) を指定または取得します。(Put)
| pValue | IObjectId* | inoptional | 設定する鍵アルゴリズムの OID を表す IObjectId へのポインタである。 |
解説(Remarks)
このプロパティは、CspStatus プロパティが呼び出されたときに自動的に設定されます。
秘密キーを署名、暗号化、またはその両方のいずれに使用できるかを示す値を指定または取得します。(Get)
| pValue | X509KeySpec* | out | 鍵指定 (KeySpec) を受け取る X509KeySpec へのポインタである。 |
解説(Remarks)
XCN_AT_SIGNATURE の値を指定すると、KeySpec プロパティは KeyUsage プロパティを XCN_NCRYPT_ALLOW_SIGNING_FLAG に自動的に設定します。XCN_AT_KEYEXCHANGE を指定すると、KeyUsage プロパティは XCN_NCRYPT_ALLOW_DECRYPT_FLAG | XCN_NCRYPT_ALLOW_KEY_AGREEMENT_FLAG に設定されます。KeySpec プロパティは、CryptoAPI を使用して作成された [レガシー] プロバイダーにのみ適用されます。
秘密キーを署名、暗号化、またはその両方のいずれに使用できるかを示す値を指定または取得します。(Put)
| Value | X509KeySpec | in | 設定する鍵指定 (KeySpec) を表す X509KeySpec である。 |
解説(Remarks)
XCN_AT_SIGNATURE の値を指定すると、KeySpec プロパティは KeyUsage プロパティを XCN_NCRYPT_ALLOW_SIGNING_FLAG に自動的に設定します。XCN_AT_KEYEXCHANGE を指定すると、KeyUsage プロパティは XCN_NCRYPT_ALLOW_DECRYPT_FLAG | XCN_NCRYPT_ALLOW_KEY_AGREEMENT_FLAG に設定されます。KeySpec プロパティは、CryptoAPI を使用して作成された [レガシー] プロバイダーにのみ適用されます。
秘密キーの長さをビット単位で指定または取得します。(Get)
| pValue | INT* | out | 鍵長 (ビット数) を受け取る INT へのポインタである。 |
秘密キーの長さをビット単位で指定または取得します。(Put)
| Value | INT | in | 設定する鍵長 (ビット数) を指定する。 |
秘密キーのエクスポート制約を指定または取得します。(Get)
| pValue | X509PrivateKeyExportFlags* | out | 鍵のエクスポートポリシーを受け取る X509PrivateKeyExportFlags へのポインタである。 |
秘密キーのエクスポート制約を指定または取得します。(Put)
| Value | X509PrivateKeyExportFlags | in | 設定する鍵のエクスポートポリシーを表す X509PrivateKeyExportFlags である。 |
秘密キーを使用できる特定の目的を示す値を指定または取得します。(Get)
| pValue | X509PrivateKeyUsageFlags* | out | 鍵の用途を受け取る X509PrivateKeyUsageFlags へのポインタである。 |
解説(Remarks)
レガシー CSP の KeySpec プロパティを XCN_NCRYPT_ALLOW_SIGNING_FLAG に設定すると、KeyUsage プロパティは XCN_NCRYPT_ALLOW_SIGNING_FLAG に設定されます。XCN_AT_KEYEXCHANGE を指定すると、KeyUsage プロパティは自動的に XCN_NCRYPT_ALLOW_DECRYPT_FLAG | XCN_NCRYPT_ALLOW_KEY_AGREEMENT_FLAG に設定されます。
秘密キーを使用できる特定の目的を示す値を指定または取得します。(Put)
| Value | X509PrivateKeyUsageFlags | in | 設定する鍵の用途を表す X509PrivateKeyUsageFlags である。 |
解説(Remarks)
レガシー CSP の KeySpec プロパティを XCN_NCRYPT_ALLOW_SIGNING_FLAG に設定すると、KeyUsage プロパティは XCN_NCRYPT_ALLOW_SIGNING_FLAG に設定されます。XCN_AT_KEYEXCHANGE を指定すると、KeyUsage プロパティは自動的に XCN_NCRYPT_ALLOW_DECRYPT_FLAG | XCN_NCRYPT_ALLOW_KEY_AGREEMENT_FLAG に設定されます。
秘密キーが使用前にどのように保護されるかを示す値を指定または取得します。(Get)
| pValue | X509PrivateKeyProtection* | out | 鍵の保護レベルを受け取る X509PrivateKeyProtection へのポインタである。 |
秘密キーが使用前にどのように保護されるかを示す値を指定または取得します。(Put)
| Value | X509PrivateKeyProtection | in | 設定する鍵の保護レベルを表す X509PrivateKeyProtection である。 |
ローカル証明書ストアのコンテキストを示すブール値を指定または取得します。(Get)
| pValue | VARIANT_BOOL* | out | マシンコンテキストを使用するかどうかを受け取る VARIANT_BOOL へのポインタである。 |
ローカル証明書ストアのコンテキストを示すブール値を指定または取得します。(Put)
| Value | VARIANT_BOOL | in | マシンコンテキストを使用するかどうかを指定する VARIANT_BOOL である。 |
秘密キーのセキュリティ記述子を指定または取得します。(Get)
| pValue | LPWSTR* | out | 鍵に設定されているセキュリティ記述子 (SDDL 形式) を受け取る文字列ポインタである。 |
解説(Remarks)
セキュリティ記述子を使用するには、Microsoft Authorization API に含まれる ConvertStringSecurityDescriptorToSecurityDescriptor 関数を呼び出し、GetDefaultSecurityDescriptor メソッドが返す文字列を指定する必要があります。
セキュリティ記述子は、コンピューターおよびユーザーの秘密キーへのアクセスを次のように定義するために使用されます。
- 既定では、ローカル管理者と LocalSystem アカウントで実行されているサービスのみが、コンピューターアカウントに関連付けられた秘密キーにアクセスできます。
- CSP がユーザーの秘密キーをユーザープロファイル内の暗号化されたファイルに格納する場合、CSP はセキュリティ記述子を使用してそのファイルへのアクセス許可を設定します。
キーが開かれていないときに記述子を指定した場合、プロパティ値はキーが開かれたときに設定されます。
秘密キーのセキュリティ記述子を指定または取得します。(Put)
| Value | LPWSTR | in | 設定するセキュリティ記述子 (SDDL 形式) を指定する。 |
解説(Remarks)
セキュリティ記述子を使用するには、Microsoft Authorization API に含まれる ConvertStringSecurityDescriptorToSecurityDescriptor 関数を呼び出し、GetDefaultSecurityDescriptor メソッドが返す文字列を指定する必要があります。
セキュリティ記述子は、コンピューターおよびユーザーの秘密キーへのアクセスを次のように定義するために使用されます。
- 既定では、ローカル管理者と LocalSystem アカウントで実行されているサービスのみが、コンピューターアカウントに関連付けられた秘密キーにアクセスできます。
- CSP がユーザーの秘密キーをユーザープロファイル内の暗号化されたファイルに格納する場合、CSP はセキュリティ記述子を使用してそのファイルへのアクセス許可を設定します。
キーが開かれていないときに記述子を指定した場合、プロパティ値はキーが開かれたときに設定されます。
秘密キーに関連付けられた証明書を格納するバイト配列を指定または取得します。(Get)
| Encoding | EncodingType | in | 出力データのエンコード形式を指定する EncodingType である。 |
| pValue | LPWSTR* | out | 鍵に関連付けられた証明書 (エンコード済み) を受け取る文字列ポインタである。 |
解説(Remarks)
キーが開かれていないときに証明書を指定した場合、証明書はキーが開かれたときに設定されます。詳細については、Open メソッドを参照してください。
Certificate プロパティは、IX509PrivateKey オブジェクトに関連付けられた公開キーと、証明書に含まれる公開キーを比較します。2 つのキーは一致している必要があります。
秘密キーに関連付けられた証明書を格納するバイト配列を指定または取得します。(Put)
| Encoding | EncodingType | in | 入力データのエンコード形式を指定する EncodingType である。 |
| Value | LPWSTR | in | 鍵に関連付ける証明書 (エンコード済み) を指定する。 |
解説(Remarks)
キーが開かれていないときに証明書を指定した場合、証明書はキーが開かれたときに設定されます。詳細については、Open メソッドを参照してください。
Certificate プロパティは、IX509PrivateKey オブジェクトに関連付けられた公開キーと、証明書に含まれる公開キーを比較します。2 つのキーは一致している必要があります。
キーコンテナーの一意の名前を取得します。
| pValue | LPWSTR* | out | 鍵の一意な (内部的な) コンテナー名を受け取る文字列ポインタである。 |
解説(Remarks)
このプロパティは、ContainerName プロパティ値では十分な識別ができるほど一意でないと考えられる場合に、キーへのアクセス時に使用できる代替名を取得します。通常、この名前はキーコンテナーによって作成されます。たとえば、Cryptography API: Next Generation (CNG) キーストレージプロバイダー (KSP) は、キーを格納する暗号化ファイルの名前を返します。
秘密キーが開いているかどうかを示すブール値を取得します。
| pValue | VARIANT_BOOL* | out | 鍵が開かれているかどうかを受け取る VARIANT_BOOL へのポインタである。 |
解説(Remarks)
秘密キーが既定のキーコンテナーを表すかどうかを示すブール値を取得します。
| pValue | VARIANT_BOOL* | out | 既定のコンテナーを使用するかどうかを受け取る VARIANT_BOOL へのポインタである。 |
解説(Remarks)
キーコンテナーは名前によって識別されます。名前はクライアントが指定することも、CSP または KSP がサポートする既定値にすることもできます。たとえば、一部の CSP は現在のユーザーのログオン名を既定のコンテナー名として使用します。
秘密キーが作成済みまたはインポート済みかどうかを示すブール値を指定または取得します。(Get)
| pValue | VARIANT_BOOL* | out | 既存の鍵を使用するかどうかを受け取る VARIANT_BOOL へのポインタである。 |
解説(Remarks)
秘密キーが作成済みまたはインポート済みかどうかを示すブール値を指定または取得します。(Put)
| Value | VARIANT_BOOL | in | 既存の鍵を使用するかどうかを指定する VARIANT_BOOL である。 |
解説(Remarks)
秘密キーへのアクセス時に証明書登録コントロール (Certificate Enrollment Control) がダイアログボックスを表示することを許可するかどうかを示すブール値を指定または取得します。(Get)
| pValue | VARIANT_BOOL* | out | UI を表示せずに処理する (サイレントモード) かどうかを受け取る VARIANT_BOOL へのポインタである。 |
解説(Remarks)
ユーザーインターフェイスが許可されていないものの、秘密キーへのアクセスに必要な場合、ユーザーインターフェイスを必要とする操作は失敗します。
秘密キーへのアクセス時に証明書登録コントロール (Certificate Enrollment Control) がダイアログボックスを表示することを許可するかどうかを示すブール値を指定または取得します。(Put)
| Value | VARIANT_BOOL | in | UI を表示せずに処理する (サイレントモード) かどうかを指定する VARIANT_BOOL である。 |
解説(Remarks)
ユーザーインターフェイスが許可されていないものの、秘密キーへのアクセスに必要な場合、ユーザーインターフェイスを必要とする操作は失敗します。
キー情報の表示に使用するウィンドウの ID を指定または取得します。(Get)
| pValue | INT* | out | UI 表示時の親ウィンドウハンドル (値) を受け取る INT へのポインタである。 |
キー情報の表示に使用するウィンドウの ID を指定または取得します。(Put)
| Value | INT | in | UI 表示時の親ウィンドウハンドル (値) を指定する。 |
秘密キーに関連付けられたユーザーインターフェイステキストを含む文字列を指定または取得します。(Get)
| pValue | LPWSTR* | out | UI に表示するコンテキストメッセージを受け取る文字列ポインタである。 |
秘密キーに関連付けられたユーザーインターフェイステキストを含む文字列を指定または取得します。(Put)
| Value | LPWSTR | in | UI に表示するコンテキストメッセージを指定する。 |
スマートカード上の秘密キーコンテナーにアクセスする前にユーザーを認証するために使用される個人識別番号 (PIN) を指定します。
| Value | LPWSTR | in | スマートカードなどの鍵にアクセスするための PIN を指定する。 |
秘密キーの表示名を指定または取得します。(Get)
| pValue | LPWSTR* | out | 鍵の表示名 (フレンドリ名) を受け取る文字列ポインタである。 |
解説(Remarks)
このプロパティには任意のテキストを指定でき、秘密キーを識別するためにユーザーインターフェイスに表示されることを目的としています。
秘密キーの表示名を指定または取得します。(Put)
| Value | LPWSTR | in | 設定する鍵の表示名 (フレンドリ名) を指定する。 |
解説(Remarks)
このプロパティには任意のテキストを指定でき、秘密キーを識別するためにユーザーインターフェイスに表示されることを目的としています。
秘密キーの説明を含む文字列を指定または取得します。(Get)
| pValue | LPWSTR* | out | 鍵の説明を受け取る文字列ポインタである。 |
解説(Remarks)
このプロパティには任意のテキストを指定でき、秘密キーの性質と用途を識別するためにユーザーインターフェイスに表示されることを目的としています。
秘密キーの説明を含む文字列を指定または取得します。(Put)
| Value | LPWSTR | in | 設定する鍵の説明を指定する。 |
解説(Remarks)
このプロパティには任意のテキストを指定でき、秘密キーの性質と用途を識別するためにユーザーインターフェイスに表示されることを目的としています。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IX509PrivateKey "{728AB30C-217D-11DA-B2A4-000E7BBB2B09}" #usecom global IX509PrivateKey IID_IX509PrivateKey "{}" #comfunc global IX509PrivateKey_Open 7 #comfunc global IX509PrivateKey_Create 8 #comfunc global IX509PrivateKey_Close 9 #comfunc global IX509PrivateKey_Delete 10 #comfunc global IX509PrivateKey_Verify 11 int #comfunc global IX509PrivateKey_Import 12 wstr,wstr,int #comfunc global IX509PrivateKey_Export 13 wstr,int,var #comfunc global IX509PrivateKey_ExportPublicKey 14 sptr #comfunc global IX509PrivateKey_get_ContainerName 15 var #comfunc global IX509PrivateKey_put_ContainerName 16 wstr #comfunc global IX509PrivateKey_get_ContainerNamePrefix 17 var #comfunc global IX509PrivateKey_put_ContainerNamePrefix 18 wstr #comfunc global IX509PrivateKey_get_ReaderName 19 var #comfunc global IX509PrivateKey_put_ReaderName 20 wstr #comfunc global IX509PrivateKey_get_CspInformations 21 sptr #comfunc global IX509PrivateKey_put_CspInformations 22 sptr #comfunc global IX509PrivateKey_get_CspStatus 23 sptr #comfunc global IX509PrivateKey_put_CspStatus 24 sptr #comfunc global IX509PrivateKey_get_ProviderName 25 var #comfunc global IX509PrivateKey_put_ProviderName 26 wstr #comfunc global IX509PrivateKey_get_ProviderType 27 var #comfunc global IX509PrivateKey_put_ProviderType 28 int #comfunc global IX509PrivateKey_get_LegacyCsp 29 var #comfunc global IX509PrivateKey_put_LegacyCsp 30 int #comfunc global IX509PrivateKey_get_Algorithm 31 sptr #comfunc global IX509PrivateKey_put_Algorithm 32 sptr #comfunc global IX509PrivateKey_get_KeySpec 33 var #comfunc global IX509PrivateKey_put_KeySpec 34 int #comfunc global IX509PrivateKey_get_Length 35 var #comfunc global IX509PrivateKey_put_Length 36 int #comfunc global IX509PrivateKey_get_ExportPolicy 37 var #comfunc global IX509PrivateKey_put_ExportPolicy 38 int #comfunc global IX509PrivateKey_get_KeyUsage 39 var #comfunc global IX509PrivateKey_put_KeyUsage 40 int #comfunc global IX509PrivateKey_get_KeyProtection 41 var #comfunc global IX509PrivateKey_put_KeyProtection 42 int #comfunc global IX509PrivateKey_get_MachineContext 43 var #comfunc global IX509PrivateKey_put_MachineContext 44 int #comfunc global IX509PrivateKey_get_SecurityDescriptor 45 var #comfunc global IX509PrivateKey_put_SecurityDescriptor 46 wstr #comfunc global IX509PrivateKey_get_Certificate 47 int,var #comfunc global IX509PrivateKey_put_Certificate 48 int,wstr #comfunc global IX509PrivateKey_get_UniqueContainerName 49 var #comfunc global IX509PrivateKey_get_Opened 50 var #comfunc global IX509PrivateKey_get_DefaultContainer 51 var #comfunc global IX509PrivateKey_get_Existing 52 var #comfunc global IX509PrivateKey_put_Existing 53 int #comfunc global IX509PrivateKey_get_Silent 54 var #comfunc global IX509PrivateKey_put_Silent 55 int #comfunc global IX509PrivateKey_get_ParentWindow 56 var #comfunc global IX509PrivateKey_put_ParentWindow 57 int #comfunc global IX509PrivateKey_get_UIContextMessage 58 var #comfunc global IX509PrivateKey_put_UIContextMessage 59 wstr #comfunc global IX509PrivateKey_put_Pin 60 wstr #comfunc global IX509PrivateKey_get_FriendlyName 61 var #comfunc global IX509PrivateKey_put_FriendlyName 62 wstr #comfunc global IX509PrivateKey_get_Description 63 var #comfunc global IX509PrivateKey_put_Description 64 wstr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IX509PrivateKey "{728AB30C-217D-11DA-B2A4-000E7BBB2B09}" #usecom global IX509PrivateKey IID_IX509PrivateKey "{}" #comfunc global IX509PrivateKey_Open 7 #comfunc global IX509PrivateKey_Create 8 #comfunc global IX509PrivateKey_Close 9 #comfunc global IX509PrivateKey_Delete 10 #comfunc global IX509PrivateKey_Verify 11 int #comfunc global IX509PrivateKey_Import 12 wstr,wstr,int #comfunc global IX509PrivateKey_Export 13 wstr,int,sptr #comfunc global IX509PrivateKey_ExportPublicKey 14 sptr #comfunc global IX509PrivateKey_get_ContainerName 15 sptr #comfunc global IX509PrivateKey_put_ContainerName 16 wstr #comfunc global IX509PrivateKey_get_ContainerNamePrefix 17 sptr #comfunc global IX509PrivateKey_put_ContainerNamePrefix 18 wstr #comfunc global IX509PrivateKey_get_ReaderName 19 sptr #comfunc global IX509PrivateKey_put_ReaderName 20 wstr #comfunc global IX509PrivateKey_get_CspInformations 21 sptr #comfunc global IX509PrivateKey_put_CspInformations 22 sptr #comfunc global IX509PrivateKey_get_CspStatus 23 sptr #comfunc global IX509PrivateKey_put_CspStatus 24 sptr #comfunc global IX509PrivateKey_get_ProviderName 25 sptr #comfunc global IX509PrivateKey_put_ProviderName 26 wstr #comfunc global IX509PrivateKey_get_ProviderType 27 sptr #comfunc global IX509PrivateKey_put_ProviderType 28 int #comfunc global IX509PrivateKey_get_LegacyCsp 29 sptr #comfunc global IX509PrivateKey_put_LegacyCsp 30 int #comfunc global IX509PrivateKey_get_Algorithm 31 sptr #comfunc global IX509PrivateKey_put_Algorithm 32 sptr #comfunc global IX509PrivateKey_get_KeySpec 33 sptr #comfunc global IX509PrivateKey_put_KeySpec 34 int #comfunc global IX509PrivateKey_get_Length 35 sptr #comfunc global IX509PrivateKey_put_Length 36 int #comfunc global IX509PrivateKey_get_ExportPolicy 37 sptr #comfunc global IX509PrivateKey_put_ExportPolicy 38 int #comfunc global IX509PrivateKey_get_KeyUsage 39 sptr #comfunc global IX509PrivateKey_put_KeyUsage 40 int #comfunc global IX509PrivateKey_get_KeyProtection 41 sptr #comfunc global IX509PrivateKey_put_KeyProtection 42 int #comfunc global IX509PrivateKey_get_MachineContext 43 sptr #comfunc global IX509PrivateKey_put_MachineContext 44 int #comfunc global IX509PrivateKey_get_SecurityDescriptor 45 sptr #comfunc global IX509PrivateKey_put_SecurityDescriptor 46 wstr #comfunc global IX509PrivateKey_get_Certificate 47 int,sptr #comfunc global IX509PrivateKey_put_Certificate 48 int,wstr #comfunc global IX509PrivateKey_get_UniqueContainerName 49 sptr #comfunc global IX509PrivateKey_get_Opened 50 sptr #comfunc global IX509PrivateKey_get_DefaultContainer 51 sptr #comfunc global IX509PrivateKey_get_Existing 52 sptr #comfunc global IX509PrivateKey_put_Existing 53 int #comfunc global IX509PrivateKey_get_Silent 54 sptr #comfunc global IX509PrivateKey_put_Silent 55 int #comfunc global IX509PrivateKey_get_ParentWindow 56 sptr #comfunc global IX509PrivateKey_put_ParentWindow 57 int #comfunc global IX509PrivateKey_get_UIContextMessage 58 sptr #comfunc global IX509PrivateKey_put_UIContextMessage 59 wstr #comfunc global IX509PrivateKey_put_Pin 60 wstr #comfunc global IX509PrivateKey_get_FriendlyName 61 sptr #comfunc global IX509PrivateKey_put_FriendlyName 62 wstr #comfunc global IX509PrivateKey_get_Description 63 sptr #comfunc global IX509PrivateKey_put_Description 64 wstr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。