ICspAlgorithm
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
暗号化プロバイダーによって実装されるアルゴリズムを表します。
メソッド 10
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
アルゴリズムのオブジェクト識別子 (OID) を取得します。このメソッドは Web に対応しています。
| Length | INT | in | 対称暗号化アルゴリズムに必要なキーサイズを指定する LONG 変数です。このパラメーターは、Cryptography API: Next Generation (CNG) のキーストレージプロバイダー (KSP) から特定の AES アルゴリズムを取得するために使用します。KSP は AES という名前のアルゴリズムを 1 つだけ列挙している場合でも、次の一覧にあるすべての AES バリアントをサポートしていることがあります。
Length パラメーターに 0 を、AlgFlags パラメーターに AlgorithmFlagsNone (0x00000000) を指定すると、既定のアルゴリズムに関連付けられた OID が取得されます。Microsoft Software KSP と Microsoft Smart Card KSP では、既定の AES アルゴリズムは szOID_NIST_AES128_CBC (2.16.840.1.101.3.4.1.2) です。 Note このパラメーターは、対称暗号化アルゴリズム以外のアルゴリズムでは 0 にする必要があります。
|
| AlgFlags | AlgorithmFlags | in | キーラッピングアルゴリズムを検索するかどうかを指定する AlgorithmFlags 列挙値です。次のいずれかの値を指定できます。
AlgorithmFlagsWrap を指定すると、このメソッドは表示名が "wrap" で終わるアルゴリズムを検索します。これには次の OID が含まれます。
Length パラメーターに 0 を、AlgFlags パラメーターに AlgorithmFlagsNone (0x00000000) を指定すると、既定のアルゴリズムに関連付けられた OID が取得されます。Microsoft Software KSP と Microsoft Smart Card KSP では、既定の AES アルゴリズムは szOID_NIST_AES128_CBC (2.16.840.1.101.3.4.1.2) です。 Note このパラメーターは、対称暗号化アルゴリズム以外のアルゴリズムでは 0 にする必要があります。
|
| ppValue | IObjectId** | out | アルゴリズム OID を表す IObjectId インターフェイスへのポインターを受け取る変数のアドレスです。 |
戻り値
関数が成功した場合、S_OK を返します。
関数が失敗した場合、エラーを示す HRESULT 値を返します。使用される可能性のある値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| リターンコード/値 | 説明 |
|---|---|
| アルゴリズム OID が見つかりませんでした。 | |
| CSP 情報が初期化されていません。詳細については、ICspInformation インターフェイスを参照してください。 |
解説(Remarks)
GetAlgorithmOid を呼び出す前に、ICspInformation インターフェイスの InitializeFromName メソッドまたは InitializeFromType メソッドを呼び出す必要があります。
キーの既定の長さを取得します。
| pValue | INT* | out | このアルゴリズムの既定の鍵長 (ビット数) を受け取る INT へのポインタである。 |
解説(Remarks)
このプロパティを使用すると、キーの既定のサイズをビット単位で取得できます。DefaultLength、IncrementLength、MaxLength、MinLength の各プロパティは、アルゴリズムとプロバイダーによって異なる場合があります。次の表に、複数のキーサイズを設定できるアルゴリズムをいくつか示します。この一覧はすべてを網羅したものではありません。
| アルゴリズム OID | 暗号化プロバイダー | キーの長さ (ビット) |
|---|---|---|
| XCN_OID_RSA_RSA(1.2.840.113549.1.1.1) |
Microsoft Smart Card Key Storage Provider
Microsoft Base Smart Card Crypto Provider |
最小: 1,024
最大: 4,096 既定: 1,024 増分: 512 |
| XCN_OID_RSA_RSA(1.2.840.113549.1.1.1) |
Microsoft Software Key Storage Provider
Microsoft Base Cryptographic Provider v1.0 Microsoft Enhanced Cryptographic Provider v1.0 Microsoft Enhanced RSA and AES Cryptographic Provider Microsoft RSA Schannel Cryptographic Provider Microsoft Strong Cryptographic Provider |
最小: 384
最大: 16,384 既定: 1,024 増分: 8 |
| XCN_OID_X957_DSA(1.2.840.10040.4.1) |
Microsoft Software Key Storage Provider
Microsoft Base DSS and Diffie-Hellman Cryptographic Provider Microsoft Base DSS Cryptographic Provider Microsoft DH Schannel Cryptographic Provider Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider |
最小: 512
最大: 1,024 既定: 1,024 増分: 64 |
| XCN_OID_ANSI_X942_DH(1.2.840.10046.2.1) | Diffie-Hellman キー交換アルゴリズム。 |
最小: 512
最大: 1,024 既定: 1,024 増分: 64 |
| XCN_OID_ANSI_X942_DH(1.2.840.10046.2.1) |
Microsoft DH Schannel Cryptographic Provider
Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider |
最小: 512
最大: 4,096 既定: 1,024 増分: 64 |
| XCN_OID_RSA_RC2CBC(1.2.840.113549.3.2) |
Microsoft Software Key Storage Provider
Microsoft Smart Card Key Storage Provider Microsoft Base Smart Card Crypto Provider Microsoft DH Schannel Cryptographic Provider Microsoft Enhanced Cryptographic Provider v1.0 Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider Microsoft Enhanced RSA and AES Cryptographic Provider Microsoft RSA Schannel Cryptographic Provider Microsoft Strong Cryptographic Provider |
最小: 40
最大: 128 既定: 128 増分: 8 |
複数のキーサイズをサポートするアルゴリズムについて、有効なキー長の増分を判断するために使用できる値をビット単位で取得します。
| pValue | INT* | out | 鍵長を変化させる際の増分 (ビット数) を受け取る INT へのポインタである。 |
解説(Remarks)
このプロパティの値を使用すると、生成するキーの有効なキーサイズを判断できます。たとえば、DSA 署名キーの最小キー長が 512 ビット、最大長が 1,024 ビット、増分が 64 ビットの場合、有効なキーサイズは 512、576、640 のように 64 ビット刻みで 1,024 まで続きます。
DefaultLength、IncrementLength、MaxLength、MinLength の各プロパティは、アルゴリズムとプロバイダーによって異なる場合があります。次の表に、複数のキーサイズを設定できるアルゴリズムをいくつか示します。この一覧はすべてを網羅したものではありません。
| アルゴリズム OID | 暗号化プロバイダー | キーの長さ (ビット) |
|---|---|---|
| XCN_OID_RSA_RSA(1.2.840.113549.1.1.1) |
Microsoft Smart Card Key Storage Provider
Microsoft Base Smart Card Crypto Provider |
最小: 1,024
最大: 4,096 既定: 1,024 増分: 512 |
| XCN_OID_RSA_RSA(1.2.840.113549.1.1.1) |
Microsoft Software Key Storage Provider
Microsoft Base Cryptographic Provider v1.0 Microsoft Enhanced Cryptographic Provider v1.0 Microsoft Enhanced RSA and AES Cryptographic Provider Microsoft RSA Schannel Cryptographic Provider Microsoft Strong Cryptographic Provider |
最小: 384
最大: 16,384 既定: 1,024 増分: 8 |
| XCN_OID_X957_DSA(1.2.840.10040.4.1) |
Microsoft Software Key Storage Provider
Microsoft Base DSS and Diffie-Hellman Cryptographic Provider Microsoft Base DSS Cryptographic Provider Microsoft DH Schannel Cryptographic Provider Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider |
最小: 512
最大: 1,024 既定: 1,024 増分: 64 |
| XCN_OID_ANSI_X942_DH(1.2.840.10046.2.1) | Diffie-Hellman キー交換アルゴリズム。 |
最小: 512
最大: 1,024 既定: 1,024 増分: 64 |
| XCN_OID_ANSI_X942_DH(1.2.840.10046.2.1) |
Microsoft DH Schannel Cryptographic Provider
Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider |
最小: 512
最大: 4,096 既定: 1,024 増分: 64 |
| XCN_OID_RSA_RC2CBC(1.2.840.113549.3.2) |
Microsoft Software Key Storage Provider
Microsoft Smart Card Key Storage Provider Microsoft Base Smart Card Crypto Provider Microsoft DH Schannel Cryptographic Provider Microsoft Enhanced Cryptographic Provider v1.0 Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider Microsoft Enhanced RSA and AES Cryptographic Provider Microsoft RSA Schannel Cryptographic Provider Microsoft Strong Cryptographic Provider |
最小: 40
最大: 128 既定: 128 増分: 8 |
アルゴリズムの完全な名前を取得します。
| pValue | LPWSTR* | out | アルゴリズムの正式名称 (長い名前) を受け取る文字列ポインタである。 |
解説(Remarks)
Name プロパティは短いアルゴリズム名を取得します。より説明的な名前を取得するには、LongName プロパティを呼び出します。これらの名前はローカライズされません。次の表に例を示します。
| アルゴリズム OID | Name (KSP および CSP) | LongName (KSP) | LongName (CSP) |
|---|---|---|---|
| XCN_OID_OIWSEC_desCBC(1.3.14.3.2.7) | DES | DES | Data Encryption Standard (DES) |
| XCN_OID_OIWSEC_sha1(1.3.14.3.2.26) | SHA-1 | SHA-1 | Secure Hash Algorithm (SHA-1) |
| XCN_OID_RSA_MD2(1.2.840.113549.2.2) | MD2 | MD2 | Message Digest 2 (MD2) |
| XCN_OID_RSA_RC2CBC(1.2.840.113549.3.2) | RC2 | RC2 | RSA Data Security's RC2 |
| XCN_OID_ANSI_X942_DH(1.2.840.10046.2.1) | DH_KEYX | DH_KEYX | Diffie-Hellman Key Exchange Algorithm |
アルゴリズムオブジェクトが有効かどうかを指定するブール値を取得します。
| pValue | VARIANT_BOOL* | out | このアルゴリズムが有効かどうかを受け取る VARIANT_BOOL へのポインタである。 |
解説(Remarks)
指定した暗号化プロバイダーがサポートしていないアルゴリズムをテンプレートが参照している場合、登録 (エンロール) プロセスはプレースホルダーの ICspAlgorithm オブジェクトを作成し、Valid プロパティを false に設定し、Name プロパティを設定します。それ以外のプロパティ値は定義されません。
このプロパティを呼び出す前に、ICspInformation インターフェイスの InitializeFromName メソッドまたは InitializeFromType メソッドを呼び出す必要があります。
Abstract Syntax Notation One (ASN.1) は、X.680 から X.683 までの標準で定義されています。証明書登録 (エンロール) API は、オブジェクト識別子 (OID) を Distinguished Encoding Rules (DER) でエンコードし、その結果をデコードして OID が変更されていないことを確認するとともに、次の条件がすべて満たされていることを確認することで、OID を検証します。
- OID の最初の数値は 0、1、2 のいずれかである。
- それ以外のすべての文字は数字 (0~9) またはピリオド (.) である。
- OID の先頭または末尾にピリオドがない。
- 連続する 2 文字がどちらもピリオドであることはない。
- OID には少なくとも 1 つのピリオドが含まれている必要がある。
- 最初の数値が 0 または 1 の場合、2 番目の数値は 0 以上 39 以下でなければならない。
- 最初の数値が 2 の場合、2 番目の数値は任意の値でよい。
キーに許可される最大の長さを取得します。
| pValue | INT* | out | サポートされる最大鍵長 (ビット数) を受け取る INT へのポインタである。 |
解説(Remarks)
DefaultLength、IncrementLength、MaxLength、MinLength の各プロパティは、アルゴリズムとプロバイダーによって異なる場合があります。次の表に、最大・最小・既定のキーサイズの例をいくつか示します。
| アルゴリズム OID | 暗号化プロバイダー | キーの長さ (ビット) |
|---|---|---|
|
XCN_OID_OIWSEC_desCBC
(1.3.14.3.2.7) |
Microsoft Base DSS and Diffie-Hellman Cryptographic Provider
Microsoft Enhanced Cryptographic Provider v1.0 Microsoft DH Schannel Cryptographic Provider Microsoft Enhanced RSA and AES Cryptographic Provider |
最小: 56
最大: 56 既定: 56 |
|
XCN_OID_RSA_DES_EDE3_CBC
(1.2.840.113549.3.7) |
Microsoft Base DSS and Diffie-Hellman Cryptographic Provider
Microsoft Enhanced Cryptographic Provider v1.0 Microsoft DH Schannel Cryptographic Provider Microsoft Enhanced RSA and AES Cryptographic Provider Microsoft Exchange Cryptographic Provider v1.0 |
最小: 168
最大: 168 既定: 168 |
|
XCN_OID_RSA_RSA
(1.2.840.113549.1.1.1) |
Microsoft Enhanced Cryptographic Provider v1.0
Microsoft Enhanced RSA and AES Cryptographic Provider Microsoft RSA Schannel Cryptographic Provider Microsoft Strong Cryptographic Provider |
最小: 384
最大: 16,384 既定: 1,024 増分: 8 |
|
XCN_OID_X957_DSA
(1.2.840.10040.4.1) |
Microsoft Base DSS and Diffie-Hellman Cryptographic Provider
Microsoft Base DSS Cryptographic Provider Microsoft DH Schannel Cryptographic Provider Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider |
最小: 512
最大: 1,024 既定: 1,024 増分: 64 |
キーに許可される最小の長さを取得します。
| pValue | INT* | out | サポートされる最小鍵長 (ビット数) を受け取る INT へのポインタである。 |
解説(Remarks)
DefaultLength、IncrementLength、MaxLength、MinLength の各プロパティは、アルゴリズムとプロバイダーによって異なる場合があります。次の表に、最大・最小・既定のキーサイズの例をいくつか示します。
| アルゴリズム OID | 暗号化プロバイダー | キーの長さ (ビット) |
|---|---|---|
| XCN_OID_OIWSEC_desCBC(1.3.14.3.2.7) |
Microsoft Base DSS and Diffie-Hellman Cryptographic Provider
Microsoft Enhanced Cryptographic Provider v1.0 Microsoft DH Schannel Cryptographic Provider Microsoft Enhanced RSA and AES Cryptographic Provider |
最小: 56
最大: 56 既定: 56 |
| XCN_OID_RSA_DES_EDE3_CBC(1.2.840.113549.3.7) |
Microsoft Base DSS and Diffie-Hellman Cryptographic Provider
Microsoft Enhanced Cryptographic Provider v1.0 Microsoft DH Schannel Cryptographic Provider Microsoft Enhanced RSA and AES Cryptographic Provider Microsoft Exchange Cryptographic Provider v1.0 |
最小: 168
最大: 168 既定: 168 |
| XCN_OID_RSA_RSA(1.2.840.113549.1.1.1) |
Microsoft Enhanced Cryptographic Provider v1.0
Microsoft Enhanced RSA and AES Cryptographic Provider Microsoft RSA Schannel Cryptographic Provider Microsoft Strong Cryptographic Provider |
最小: 384
最大: 16,384 既定: 1,024 増分: 8 |
| XCN_OID_X957_DSA(1.2.840.10040.4.1) |
Microsoft Base DSS and Diffie-Hellman Cryptographic Provider
Microsoft Base DSS Cryptographic Provider Microsoft DH Schannel Cryptographic Provider Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider |
最小: 512
最大: 1,024 既定: 1,024 増分: 64 |
アルゴリズムの省略名を取得します。
| pValue | LPWSTR* | out | アルゴリズムの名前を受け取る文字列ポインタである。 |
解説(Remarks)
Name プロパティは短縮されたアルゴリズム名を取得します。より説明的な名前を取得するには、LongName プロパティを呼び出します。これらの名前はローカライズされません。次の表に例を示します。
| アルゴリズム OID | Name (KSP および CSP) | LongName (KSP) | LongName (CSP) |
|---|---|---|---|
| XCN_OID_OIWSEC_desCBC(1.3.14.3.2.7) | DES | DES | Data Encryption Standard (DES) |
| XCN_OID_OIWSEC_sha1(1.3.14.3.2.26) | SHA-1 | SHA-1 | Secure Hash Algorithm (SHA-1) |
| XCN_OID_RSA_MD2(1.2.840.113549.2.2) | MD2 | MD2 | Message Digest 2 (MD2) |
| XCN_OID_RSA_RC2CBC(1.2.840.113549.3.2) | RC2 | RC2 | RSA Data Security's RC2 |
| XCN_OID_ANSI_X942_DH(1.2.840.10046.2.1) | DH_KEYX | DH_KEYX | Diffie-Hellman Key Exchange Algorithm |
アルゴリズムの種類を取得します。
| pValue | AlgorithmType* | out | アルゴリズムの種類を受け取る AlgorithmType へのポインタである。 |
解説(Remarks)
Type プロパティと Operations プロパティの主な違いは、後者が複数のビットを設定できるビットフィールドを含んでいる点です。多くのアルゴリズムは複数の目的に使用できるため、Operations プロパティの方が有用であることが多くあります。Type の値は、Operations の値のビットのうち 1 つにのみ対応します。たとえば、Operations プロパティが XCN_NCRYPT_SIGNATURE_OPERATION | XCN_NCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION を返す場合、Type プロパティは XCN_BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE を返すことがあります。
アルゴリズムが実行できる操作を取得します。
| pValue | AlgorithmOperationFlags* | out | このアルゴリズムがサポートする操作を表す AlgorithmOperationFlags へのポインタである。 |
解説(Remarks)
Type プロパティと Operations プロパティの主な違いは、後者が複数のビットを設定できるビットフィールドを含んでいる点です。多くのアルゴリズムは複数の目的に使用できるため、Operations プロパティの方が有用であることが多くあります。Type の値は、Operations の値のビットのうち 1 つにのみ対応します。たとえば、Operations プロパティが XCN_NCRYPT_SIGNATURE_OPERATION | XCN_NCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION を返す場合、Type プロパティは XCN_BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE を返すことがあります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICspAlgorithm "{728AB305-217D-11DA-B2A4-000E7BBB2B09}" #usecom global ICspAlgorithm IID_ICspAlgorithm "{}" #comfunc global ICspAlgorithm_GetAlgorithmOid 7 int,int,sptr #comfunc global ICspAlgorithm_get_DefaultLength 8 var #comfunc global ICspAlgorithm_get_IncrementLength 9 var #comfunc global ICspAlgorithm_get_LongName 10 var #comfunc global ICspAlgorithm_get_Valid 11 var #comfunc global ICspAlgorithm_get_MaxLength 12 var #comfunc global ICspAlgorithm_get_MinLength 13 var #comfunc global ICspAlgorithm_get_Name 14 var #comfunc global ICspAlgorithm_get_Type 15 var #comfunc global ICspAlgorithm_get_Operations 16 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_ICspAlgorithm "{728AB305-217D-11DA-B2A4-000E7BBB2B09}" #usecom global ICspAlgorithm IID_ICspAlgorithm "{}" #comfunc global ICspAlgorithm_GetAlgorithmOid 7 int,int,sptr #comfunc global ICspAlgorithm_get_DefaultLength 8 sptr #comfunc global ICspAlgorithm_get_IncrementLength 9 sptr #comfunc global ICspAlgorithm_get_LongName 10 sptr #comfunc global ICspAlgorithm_get_Valid 11 sptr #comfunc global ICspAlgorithm_get_MaxLength 12 sptr #comfunc global ICspAlgorithm_get_MinLength 13 sptr #comfunc global ICspAlgorithm_get_Name 14 sptr #comfunc global ICspAlgorithm_get_Type 15 sptr #comfunc global ICspAlgorithm_get_Operations 16 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。