Win32 API 日本語リファレンス
ホームSecurity.Cryptography.Certificates › ICspAlgorithm

ICspAlgorithm

COMIDispatch (デュアル)
IDispatch を実装(デュアルインターフェース)。HSP では comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。
IID728ab305-217d-11da-b2a4-000e7bbb2b09継承元IDispatch呼び出し名前(IDispatch) または vtbl自前メソッド開始 vtbl7

公式ドキュメント

暗号化プロバイダーによって実装されるアルゴリズムを表します。

メソッド 10

vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。

vtbl 7 HRESULT GetAlgorithmOid(INT Length, AlgorithmFlags AlgFlags, IObjectId** ppValue)

アルゴリズムのオブジェクト識別子 (OID) を取得します。このメソッドは Web に対応しています。

LengthINTin

対称暗号化アルゴリズムに必要なキーサイズを指定する LONG 変数です。このパラメーターは、Cryptography API: Next Generation (CNG) のキーストレージプロバイダー (KSP) から特定の AES アルゴリズムを取得するために使用します。KSP は AES という名前のアルゴリズムを 1 つだけ列挙している場合でも、次の一覧にあるすべての AES バリアントをサポートしていることがあります。

  • szOID_NIST_AES128_CBC (2.16.840.1.101.3.4.1.2)
  • szOID_NIST_AES192_CBC (2.16.840.1.101.3.4.1.22)
  • szOID_NIST_AES256_CBC (2.16.840.1.101.3.4.1.42)
  • szOID_NIST_AES128_WRAP (2.16.840.1.101.3.4.1.5)
  • szOID_NIST_AES192_WRAP (2.16.840.1.101.3.4.1.25)
  • szOID_NIST_AES256_WRAP (2.16.840.1.101.3.4.1.45)

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 にする必要があります。

AlgFlagsAlgorithmFlagsin

キーラッピングアルゴリズムを検索するかどうかを指定する AlgorithmFlags 列挙値です。次のいずれかの値を指定できます。

  • AlgorithmFlagsNone
  • AlgorithmFlagsWrap

AlgorithmFlagsWrap を指定すると、このメソッドは表示名が "wrap" で終わるアルゴリズムを検索します。これには次の OID が含まれます。

  • szOID_NIST_AES128_WRAP (2.16.840.1.101.3.4.1.5)
  • szOID_NIST_AES192_WRAP (2.16.840.1.101.3.4.1.25)
  • szOID_NIST_AES256_WRAP (2.16.840.1.101.3.4.1.45)
  • XCN_OID_RSA_SMIMEalgCMS3DESwrap (1.2.840.113549.1.9.16.3.6)
  • XCN_OID_RSA_SMIMEalgCMSRC2wrap (1.2.840.113549.1.9.16.3.7)

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 にする必要があります。

ppValueIObjectId**outアルゴリズム OID を表す IObjectId インターフェイスへのポインターを受け取る変数のアドレスです。

戻り値

関数が成功した場合、S_OK を返します。

関数が失敗した場合、エラーを示す HRESULT 値を返します。使用される可能性のある値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。

リターンコード/値 説明
CERTSRV_E_PROPERTY_EMPTY
アルゴリズム OID が見つかりませんでした。
OLE_E_BLANK
CSP 情報が初期化されていません。詳細については、ICspInformation インターフェイスを参照してください。

解説(Remarks)

GetAlgorithmOid を呼び出す前に、ICspInformation インターフェイスの InitializeFromName メソッドまたは InitializeFromType メソッドを呼び出す必要があります。

vtbl 8 HRESULT get_DefaultLength(INT* pValue)

キーの既定の長さを取得します。

pValueINT*outこのアルゴリズムの既定の鍵長 (ビット数) を受け取る INT へのポインタである。

解説(Remarks)

このプロパティを使用すると、キーの既定のサイズをビット単位で取得できます。DefaultLengthIncrementLengthMaxLengthMinLength の各プロパティは、アルゴリズムとプロバイダーによって異なる場合があります。次の表に、複数のキーサイズを設定できるアルゴリズムをいくつか示します。この一覧はすべてを網羅したものではありません。

アルゴリズム 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

vtbl 9 HRESULT get_IncrementLength(INT* pValue)

複数のキーサイズをサポートするアルゴリズムについて、有効なキー長の増分を判断するために使用できる値をビット単位で取得します。

pValueINT*out鍵長を変化させる際の増分 (ビット数) を受け取る INT へのポインタである。

解説(Remarks)

このプロパティの値を使用すると、生成するキーの有効なキーサイズを判断できます。たとえば、DSA 署名キーの最小キー長が 512 ビット、最大長が 1,024 ビット、増分が 64 ビットの場合、有効なキーサイズは 512、576、640 のように 64 ビット刻みで 1,024 まで続きます。

DefaultLengthIncrementLengthMaxLengthMinLength の各プロパティは、アルゴリズムとプロバイダーによって異なる場合があります。次の表に、複数のキーサイズを設定できるアルゴリズムをいくつか示します。この一覧はすべてを網羅したものではありません。

アルゴリズム 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

vtbl 10 HRESULT get_LongName(LPWSTR* pValue)

アルゴリズムの完全な名前を取得します。

pValueLPWSTR*outアルゴリズムの正式名称 (長い名前) を受け取る文字列ポインタである。

解説(Remarks)

Name プロパティは短いアルゴリズム名を取得します。より説明的な名前を取得するには、LongName プロパティを呼び出します。これらの名前はローカライズされません。次の表に例を示します。

Note Cryptography API: Next Generation (CNG) のキーストレージプロバイダー (KSP) は、long name の概念をサポートしていません。LongName プロパティと Name プロパティは、省略名を返します。
アルゴリズム 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
vtbl 11 HRESULT get_Valid(VARIANT_BOOL* pValue)

アルゴリズムオブジェクトが有効かどうかを指定するブール値を取得します。

pValueVARIANT_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 を検証します。

vtbl 12 HRESULT get_MaxLength(INT* pValue)

キーに許可される最大の長さを取得します。

pValueINT*outサポートされる最大鍵長 (ビット数) を受け取る INT へのポインタである。

解説(Remarks)

DefaultLengthIncrementLengthMaxLengthMinLength の各プロパティは、アルゴリズムとプロバイダーによって異なる場合があります。次の表に、最大・最小・既定のキーサイズの例をいくつか示します。

アルゴリズム 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

vtbl 13 HRESULT get_MinLength(INT* pValue)

キーに許可される最小の長さを取得します。

pValueINT*outサポートされる最小鍵長 (ビット数) を受け取る INT へのポインタである。

解説(Remarks)

DefaultLengthIncrementLengthMaxLengthMinLength の各プロパティは、アルゴリズムとプロバイダーによって異なる場合があります。次の表に、最大・最小・既定のキーサイズの例をいくつか示します。

アルゴリズム 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

vtbl 14 HRESULT get_Name(LPWSTR* pValue)

アルゴリズムの省略名を取得します。

pValueLPWSTR*outアルゴリズムの名前を受け取る文字列ポインタである。

解説(Remarks)

Name プロパティは短縮されたアルゴリズム名を取得します。より説明的な名前を取得するには、LongName プロパティを呼び出します。これらの名前はローカライズされません。次の表に例を示します。

Note Cryptography API: Next Generation (CNG) のキーストレージプロバイダー (KSP) は、long name の概念をサポートしていません。LongName プロパティと Name プロパティは、省略名を返します。
アルゴリズム 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
vtbl 15 HRESULT get_Type(AlgorithmType* pValue)

アルゴリズムの種類を取得します。

pValueAlgorithmType*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 を返すことがあります。

vtbl 16 HRESULT get_Operations(AlgorithmOperationFlags* pValue)

アルゴリズムが実行できる操作を取得します。

pValueAlgorithmOperationFlags*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 の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 不要)。