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

IX509PublicKey

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

公式ドキュメント

公開/秘密キーのペアにおける公開キーを表します。

メソッド 7

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

vtbl 7 HRESULT Initialize(IObjectId* pObjectId, LPWSTR strEncodedKey, LPWSTR strEncodedParameters, EncodingType Encoding)

公開キーアルゴリズムのオブジェクト識別子 (OID) と、公開キーおよび関連するパラメーター (存在する場合) を含むバイト配列から、オブジェクトを初期化します。

pObjectIdIObjectId*inoptionalアルゴリズム OID を表す IObjectId インターフェイスへのポインター。
strEncodedKeyLPWSTRin公開キーを含む BSTR 変数。
strEncodedParametersLPWSTRin公開キーに関連付けられたパラメーターを含む BSTR 変数。詳細については、EncodedParameters プロパティを参照してください。
EncodingEncodingTypeinstrEncodedKey パラメーターおよび strEncodedParameters パラメーターで指定された引数に適用される Unicode エンコードの種類を指定する EncodingType 列挙値。既定値は XCN_CRYPT_STRING_BASE64 です。

戻り値

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

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

戻り値/値 説明
HRESULT_FROM_WIN32(ERROR_ALREADY_INITIALIZED)
オブジェクトは既に初期化されています。

解説(Remarks)

Initialize メソッドは、次のプロパティ値を初期化します。

vtbl 8 HRESULT InitializeFromEncodedPublicKeyInfo(LPWSTR strEncodedPublicKeyInfo, EncodingType Encoding)

公開キーを含むバイト配列から、オブジェクトを初期化します。

strEncodedPublicKeyInfoLPWSTRinキーを含む BSTR 変数。
EncodingEncodingTypeinstrEncodedPublicKeyInfo パラメーターに含まれるキーに適用される Unicode エンコードの種類を指定する EncodingType 列挙値。既定値は XCN_CRYPT_STRING_BASE64 です。

戻り値

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

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

戻り値/値 説明
HRESULT_FROM_WIN32(ERROR_ALREADY_INITIALIZED)
オブジェクトは既に初期化されています。

解説(Remarks)

InitializeFromEncodedPublicKeyInfo メソッドは、既存の公開キーから次のプロパティ値を初期化します。

vtbl 9 HRESULT get_Algorithm(IObjectId** ppValue)

公開キーアルゴリズムのオブジェクト識別子 (OID) を取得します。

ppValueIObjectId**out公開鍵アルゴリズムの OID を表す IObjectId オブジェクトを受け取るインターフェイスポインタへのポインタである。

解説(Remarks)

このプロパティを呼び出す前に、InitializeFromEncodedPublicKeyInfo メソッドまたは Initialize メソッドを呼び出して公開キーオブジェクトを初期化してください。

vtbl 10 HRESULT get_Length(INT* pValue)

公開キーの長さを取得します。

pValueINT*out公開鍵の鍵長 (ビット数) を受け取る INT へのポインタである。

解説(Remarks)

このプロパティを呼び出す前に、InitializeFromEncodedPublicKeyInfo メソッドまたは Initialize メソッドを呼び出して公開キーオブジェクトを初期化してください。

vtbl 11 HRESULT get_EncodedKey(EncodingType Encoding, LPWSTR* pValue)

公開キーを含むバイト配列を取得します。

EncodingEncodingTypein出力データのエンコード形式を指定する EncodingType である。
pValueLPWSTR*outエンコード済みの公開鍵データを受け取る文字列ポインタである。

解説(Remarks)

このプロパティを呼び出す前に、InitializeFromEncodedPublicKeyInfo メソッドまたは Initialize メソッドを呼び出して公開キーオブジェクトを初期化してください。

vtbl 12 HRESULT get_EncodedParameters(EncodingType Encoding, LPWSTR* pValue)

公開キーアルゴリズムに関連付けられたパラメーターを含むバイト配列を取得します。

EncodingEncodingTypein出力データのエンコード形式を指定する EncodingType である。
pValueLPWSTR*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 は、多くの場合、秘密キーを暗号化し、アーカイブのために証明機関 (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 が含まれます。次のラップアルゴリズムに対応しています。

AES を使用したコンテンツ暗号化

Advanced Encryption Standard (AES) は、コンテンツの暗号化に使用されます。次のアルゴリズムに対応しています。parameters フィールドには、ランダムな初期化ベクトル AES-IV が含まれます。

AES-IV ::= OCTET STRING (SIZE(16))
vtbl 13 HRESULT ComputeKeyIdentifier(KeyIdentifierHashAlgorithm Algorithm, EncodingType Encoding, LPWSTR* pValue)

公開キーの 160 ビット SHA-1 ハッシュから識別子を作成します。

AlgorithmKeyIdentifierHashAlgorithmin

キー識別子の作成に使用するハッシュアルゴリズムを指定する KeyIdentifierHashAlgorithm 列挙値。

この値が SKIHashDefault または SKIHashSha1 の場合、識別子は、キーを含むバイト配列のみをハッシュし、Distinguished Encoding Rules (DER) のタグ、長さ、未使用ビットの各フィールドを除外して作成されます。

この値が SKIHashCapiSha1 の場合、識別子は、タグ、長さ、未使用ビット数、および公開キーを含む DER エンコードされたバイト配列をハッシュして作成されます。

EncodingEncodingTypeinpValue パラメーターに含まれるハッシュに適用される Unicode エンコードの種類を指定する EncodingType 列挙値。既定値は XCN_CRYPT_STRING_BASE64 です。
pValueLPWSTR*outキー識別子を含む BSTR 変数へのポインター。

戻り値

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

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

戻り値/値 説明
CERTSRV_E_PROPERTY_EMPTY
アルゴリズムのオブジェクト識別子または公開キーのパラメーターが見つかりませんでした。

解説(Remarks)

ComputeKeyIdentifier を呼び出す前に、InitializeFromEncodedPublicKeyInfo メソッドまたは Initialize メソッドを呼び出して公開キーオブジェクトを初期化する必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 不要)。