IX509PublicKey
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
公開/秘密キーのペアにおける公開キーを表します。
メソッド 7
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
公開キーアルゴリズムのオブジェクト識別子 (OID) と、公開キーおよび関連するパラメーター (存在する場合) を含むバイト配列から、オブジェクトを初期化します。
| pObjectId | IObjectId* | inoptional | アルゴリズム OID を表す IObjectId インターフェイスへのポインター。 |
| strEncodedKey | LPWSTR | in | 公開キーを含む BSTR 変数。 |
| strEncodedParameters | LPWSTR | in | 公開キーに関連付けられたパラメーターを含む BSTR 変数。詳細については、EncodedParameters プロパティを参照してください。 |
| Encoding | EncodingType | in | strEncodedKey パラメーターおよび strEncodedParameters パラメーターで指定された引数に適用される Unicode エンコードの種類を指定する EncodingType 列挙値。既定値は XCN_CRYPT_STRING_BASE64 です。 |
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻り値/値 | 説明 |
|---|---|
|
オブジェクトは既に初期化されています。 |
解説(Remarks)
Initialize メソッドは、次のプロパティ値を初期化します。
公開キーを含むバイト配列から、オブジェクトを初期化します。
| strEncodedPublicKeyInfo | LPWSTR | in | キーを含む BSTR 変数。 |
| Encoding | EncodingType | in | strEncodedPublicKeyInfo パラメーターに含まれるキーに適用される Unicode エンコードの種類を指定する EncodingType 列挙値。既定値は XCN_CRYPT_STRING_BASE64 です。 |
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻り値/値 | 説明 |
|---|---|
|
オブジェクトは既に初期化されています。 |
解説(Remarks)
InitializeFromEncodedPublicKeyInfo メソッドは、既存の公開キーから次のプロパティ値を初期化します。
公開キーアルゴリズムのオブジェクト識別子 (OID) を取得します。
| ppValue | IObjectId** | out | 公開鍵アルゴリズムの OID を表す IObjectId オブジェクトを受け取るインターフェイスポインタへのポインタである。 |
解説(Remarks)
このプロパティを呼び出す前に、InitializeFromEncodedPublicKeyInfo メソッドまたは Initialize メソッドを呼び出して公開キーオブジェクトを初期化してください。
公開キーの長さを取得します。
| pValue | INT* | out | 公開鍵の鍵長 (ビット数) を受け取る INT へのポインタである。 |
解説(Remarks)
このプロパティを呼び出す前に、InitializeFromEncodedPublicKeyInfo メソッドまたは Initialize メソッドを呼び出して公開キーオブジェクトを初期化してください。
公開キーを含むバイト配列を取得します。
| Encoding | EncodingType | in | 出力データのエンコード形式を指定する EncodingType である。 |
| pValue | LPWSTR* | out | エンコード済みの公開鍵データを受け取る文字列ポインタである。 |
解説(Remarks)
このプロパティを呼び出す前に、InitializeFromEncodedPublicKeyInfo メソッドまたは Initialize メソッドを呼び出して公開キーオブジェクトを初期化してください。
公開キーアルゴリズムに関連付けられたパラメーターを含むバイト配列を取得します。
| Encoding | EncodingType | in | 出力データのエンコード形式を指定する EncodingType である。 |
| pValue | LPWSTR* | out | エンコード済みのアルゴリズムパラメーターを受け取る文字列ポインタである。 |
解説(Remarks)
このプロパティを呼び出す前に、InitializeFromEncodedPublicKeyInfo メソッドまたは Initialize メソッドを呼び出して公開キーオブジェクトを初期化してください。
X.509 バージョン 3 証明書内の SubjectPublicKeyInfo オブジェクトから参照される AlgorithmIdentifier Abstract Syntax Notation One (ASN.1) オブジェクトには、アルゴリズムのオブジェクト識別子 (OID) とオプションのパラメーターが含まれます。
SubjectPublicKeyInfo ::= SEQUENCE
{
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING
}
AlgorithmIdentifier ::= SEQUENCE
{
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
パラメーターの形式と内容はアルゴリズムによって異なります。Certificate Enrollment Control は、必要に応じてさまざまなアルゴリズムのパラメーター値を生成します。詳細については、次のセクションを参照してください。
- RSA 公開キーアルゴリズム
- RSA-OAEP を使用したキー転送
- ECDH を使用したキー合意
- AES を使用したコンテンツ暗号化
RSA 公開キーアルゴリズム
RSA は、多くの場合、秘密キーを暗号化し、アーカイブのために証明機関 (CA) に送信するために使用されます。XCN_OID_RSA_RSA (1.2.840.113549.1.1.1) アルゴリズム OID には、NULL パラメーター値が必要です。ASN.1 の NULL 値は 2 バイトで表されます。タグ番号は 0x05 で、タグに関連付けられた値は 0x00 です。これは、次の証明書の例に示されています。
...
Public Key Algorithm:
Algorithm ObjectId: 1.2.840.113549.1.1.1 RSA (RSA_KEYX)
Algorithm Parameters:
05 00
...
RSA-OAEP を使用したキー転送
RSA-OAEP アルゴリズム XCN_OID_RSAES_OAEP (1.2.840.113549.1.1.7) も、キー転送に対応しています。parameters フィールドの構文は次のとおりです。
RSAES-OAEP-params ::= SEQUENCE
{
hashFunc [0] AlgorithmIdentifier DEFAULT sha1OID,
maskGenFunc [1] AlgorithmIdentifier DEFAULT mgf1SHA1OID,
pSourceFunc [2] AlgorithmIdentifier DEFAULT pSpecifiedEmptyOID
}
ECDH を使用したキー合意
シングルパスの楕円曲線 Diffie-Hellman アルゴリズム XCN_OID_DH_SINGLE_PASS_STDDH_SHA1_KDF (1.3.133.16.840.63.0.2) は、キー合意に対応しています。キー合意では、2 段階の暗号化を使用します。KEK は、一方の当事者の秘密キーともう一方の当事者の公開キーから計算される共有シークレット番号から計算されます。parameters フィールドには、CEK のラップまたは暗号化に使用される KEK アルゴリズムの OID が含まれます。次のラップアルゴリズムに対応しています。- XCN_OID_RSA_SMIMEalgCMS3DESwrap (1.2.840.113549.1.9.16.3.)
- XCN_OID_RSA_SMIMEalgCMSRC2wrap (1.2.840.113549.1.9.16.3.7)
- XCN_OID_NIST_AES128_WRAP (2.16.840.1.101.3.4.1.5)
- XCN_OID_NIST_AES192_WRAP (2.16.840.1.101.3.4.1.25)
- XCN_OID_NIST_AES256_WRAP (2.16.840.1.101.3.4.1.45)
AES を使用したコンテンツ暗号化
Advanced Encryption Standard (AES) は、コンテンツの暗号化に使用されます。次のアルゴリズムに対応しています。- XCN_OID_NIST_AES128_CBC (2.16.840.1.101.3.4.1.2)
- XCN_OID_NIST_AES192_CBC (2.16.840.1.101.3.4.1.22)
- XCN_OID_NIST_AES256_CBC (2.16.840.1.101.3.4.1.42)
AES-IV ::= OCTET STRING (SIZE(16))
公開キーの 160 ビット SHA-1 ハッシュから識別子を作成します。
| Algorithm | KeyIdentifierHashAlgorithm | in | キー識別子の作成に使用するハッシュアルゴリズムを指定する KeyIdentifierHashAlgorithm 列挙値。 この値が SKIHashDefault または SKIHashSha1 の場合、識別子は、キーを含むバイト配列のみをハッシュし、Distinguished Encoding Rules (DER) のタグ、長さ、未使用ビットの各フィールドを除外して作成されます。 この値が SKIHashCapiSha1 の場合、識別子は、タグ、長さ、未使用ビット数、および公開キーを含む DER エンコードされたバイト配列をハッシュして作成されます。 |
| Encoding | EncodingType | in | pValue パラメーターに含まれるハッシュに適用される Unicode エンコードの種類を指定する EncodingType 列挙値。既定値は XCN_CRYPT_STRING_BASE64 です。 |
| pValue | LPWSTR* | out | キー識別子を含む BSTR 変数へのポインター。 |
戻り値
関数が成功した場合、関数は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。可能な値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| 戻り値/値 | 説明 |
|---|---|
| アルゴリズムのオブジェクト識別子または公開キーのパラメーターが見つかりませんでした。 |
解説(Remarks)
ComputeKeyIdentifier を呼び出す前に、InitializeFromEncodedPublicKeyInfo メソッドまたは Initialize メソッドを呼び出して公開キーオブジェクトを初期化する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IX509PublicKey "{728AB30B-217D-11DA-B2A4-000E7BBB2B09}" #usecom global IX509PublicKey IID_IX509PublicKey "{}" #comfunc global IX509PublicKey_Initialize 7 sptr,wstr,wstr,int #comfunc global IX509PublicKey_InitializeFromEncodedPublicKeyInfo 8 wstr,int #comfunc global IX509PublicKey_get_Algorithm 9 sptr #comfunc global IX509PublicKey_get_Length 10 var #comfunc global IX509PublicKey_get_EncodedKey 11 int,var #comfunc global IX509PublicKey_get_EncodedParameters 12 int,var #comfunc global IX509PublicKey_ComputeKeyIdentifier 13 int,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IX509PublicKey "{728AB30B-217D-11DA-B2A4-000E7BBB2B09}" #usecom global IX509PublicKey IID_IX509PublicKey "{}" #comfunc global IX509PublicKey_Initialize 7 sptr,wstr,wstr,int #comfunc global IX509PublicKey_InitializeFromEncodedPublicKeyInfo 8 wstr,int #comfunc global IX509PublicKey_get_Algorithm 9 sptr #comfunc global IX509PublicKey_get_Length 10 sptr #comfunc global IX509PublicKey_get_EncodedKey 11 int,sptr #comfunc global IX509PublicKey_get_EncodedParameters 12 int,sptr #comfunc global IX509PublicKey_ComputeKeyIdentifier 13 int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。