IX509SignatureInformation
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
証明書要求への署名に使用される情報を表します。
メソッド 13
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
GetSignatureAlgorithm メソッドで使用されるハッシュアルゴリズムのオブジェクト識別子 (OID) を指定および取得します。(Get)
| ppValue | IObjectId** | out | 署名に使用するハッシュ アルゴリズムを表す IObjectId へのポインタを受け取る出力先である。 |
解説(Remarks)
このプロパティは、GetSignatureAlgorithm メソッドを呼び出す前に設定する必要があります。null 署名の証明書要求に対する署名アルゴリズムを取得する場合を除き、PublicKeyAlgorithm プロパティも設定する必要があります。NullSigned、AlternateSignatureAlgorithm、Parameters の各プロパティを設定することもできます。
HashAlgorithm プロパティは、指定した OID がハッシュアルゴリズムを表しているかどうかを検証します。OID が有効な場合、このプロパティは署名プロパティキャッシュもクリアします。
GetSignatureAlgorithm メソッドで使用されるハッシュアルゴリズムのオブジェクト識別子 (OID) を指定および取得します。(Put)
| pValue | IObjectId* | inoptional | 署名に使用するハッシュ アルゴリズムを表す IObjectId へのポインタである。 |
解説(Remarks)
このプロパティは、GetSignatureAlgorithm メソッドを呼び出す前に設定する必要があります。null 署名の証明書要求に対する署名アルゴリズムを取得する場合を除き、PublicKeyAlgorithm プロパティも設定する必要があります。NullSigned、AlternateSignatureAlgorithm、Parameters の各プロパティを設定することもできます。
HashAlgorithm プロパティは、指定した OID がハッシュアルゴリズムを表しているかどうかを検証します。OID が有効な場合、このプロパティは署名プロパティキャッシュもクリアします。
GetSignatureAlgorithm メソッドで使用される公開キーアルゴリズムのオブジェクト識別子 (OID) を指定および取得します。(Get)
| ppValue | IObjectId** | out | 署名に使用する公開キー アルゴリズムを表す IObjectId へのポインタを受け取る出力先である。 |
解説(Remarks)
null 署名の証明書要求に対する署名アルゴリズムを取得する場合を除き、このプロパティは GetSignatureAlgorithm メソッドを呼び出す前に設定する必要があります。HashAlgorithm プロパティも設定する必要があります。AlternateSignatureAlgorithm および NullSigned プロパティを設定することもできます。
PublicKeyAlgorithm プロパティは、指定した OID が公開キーアルゴリズムを表しているかどうかを検証します。OID が有効な場合、このプロパティは署名プロパティキャッシュもクリアします。
GetSignatureAlgorithm メソッドで使用される公開キーアルゴリズムのオブジェクト識別子 (OID) を指定および取得します。(Put)
| pValue | IObjectId* | inoptional | 署名に使用する公開キー アルゴリズムを表す IObjectId へのポインタである。 |
解説(Remarks)
null 署名の証明書要求に対する署名アルゴリズムを取得する場合を除き、このプロパティは GetSignatureAlgorithm メソッドを呼び出す前に設定する必要があります。HashAlgorithm プロパティも設定する必要があります。AlternateSignatureAlgorithm および NullSigned プロパティを設定することもできます。
PublicKeyAlgorithm プロパティは、指定した OID が公開キーアルゴリズムを表しているかどうかを検証します。OID が有効な場合、このプロパティは署名プロパティキャッシュもクリアします。
署名アルゴリズムに関連付けられたパラメーターを含むバイト配列を取得します。(Get)
| Encoding | EncodingType | in | 出力する pValue の希望するエンコード形式を指定する EncodingType 値である。 |
| pValue | LPWSTR* | out | 署名アルゴリズムのパラメータを指定エンコード形式で受け取る出力先である。 |
解説(Remarks)
AlgorithmIdentifier ASN.1 オブジェクトは、X.509 バージョン 3 証明書のさまざまなフィールドで使用され、アルゴリズムの オブジェクト識別子 (OID) と省略可能なパラメーターを含みます。
AlgorithmIdentifier ::= SEQUENCE
{
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
パラメーターの形式と内容はアルゴリズムによって異なります。Certificate Enrollment Control は、必要に応じてパラメーター情報を生成します。さまざまなアルゴリズムに対して生成されるパラメーター値については、以下のセクションで説明します。
PKCS #1 バージョン 1.5 署名アルゴリズム:
次の OID には NULL パラメーター値を指定する必要があります。
- XCN_OID_RSA_MD2RSA (1.2.840.113549.1.1.2)
- XCN_OID_RSA_MD5RSA (1.2.840.113549.1.1.4)
- XCN_OID_RSA_SHA1RSA (1.2.840.113549.1.1.5)
- XCN_OID_RSA_SHA256RSA (1.2.840.113549.1.1.11)
- XCN_OID_RSA_SHA384RSA (1.2.840.113549.1.1.12)
- XCN_OID_RSA_SHA512RSA (1.2.840.113549.1.1.13)
ASN.1 の NULL 値は 2 バイトで表されます。タグ番号は 0x05 で、タグに関連付けられた値 (パラメーター長を表す) は 0x00 です。これは次の証明書の例に示されています。
...
Public Key Algorithm:
Algorithm ObjectId: 1.2.840.113549.1.1.1 RSA (RSA_SIGN)
Algorithm Parameters:
05 00
...
RSASSA-PSS 署名:
RSASSA-PSS (RSA Signature Scheme with Appendix - Probabilistic Signature Scheme)、XCN_OID_RSA_SSA_PSS (1.2.840.113549.1.1.10) は、次のパラメーター情報を生成します。付録付き署名方式 (signature scheme with appendix) は、署名生成と署名検証の操作で構成されます。署名の検証には、その署名が生成された元の証明書要求が必要です。詳細については、RSA laboratories の PKCS #1 v2.1 暗号化標準を参照してください。
RSASSA-PSS-params ::= SEQUENCE
{
hashAlgorithm [0] HashAlgorithm DEFAULT sha1,
maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT mgf1SHA1,
saltLength [2] INTEGER DEFAULT 20,
trailerField [3] TrailerField DEFAULT trailerFieldBC
}
ECDSA-SHA1 署名アルゴリズム: XCN_OID_ECDSA_SHA1 (1.2.840.10045.4.1) を使用して署名を作成する場合、パラメーターにはハッシュアルゴリズムの OID が含まれます。次の OID がサポートされています:
- XCN_OID_ECDSA_SHA256 (1.2.840.10045.4.3.2)
- XCN_OID_ECDSA_SHA384 (1.2.840.10045.4.3.3)
- XCN_OID_ECDSA_SHA512 (1.2.840.10045.4.3.4)
署名アルゴリズムに関連付けられたパラメーターを含むバイト配列を取得します。(Put)
| Encoding | EncodingType | in | Value のエンコード形式を指定する EncodingType 値である。 |
| Value | LPWSTR | in | 署名アルゴリズムのパラメータをエンコードした文字列である。 |
解説(Remarks)
AlgorithmIdentifier ASN.1 オブジェクトは、X.509 バージョン 3 証明書のさまざまなフィールドで使用され、アルゴリズムの オブジェクト識別子 (OID) と省略可能なパラメーターを含みます。
AlgorithmIdentifier ::= SEQUENCE
{
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
パラメーターの形式と内容はアルゴリズムによって異なります。Certificate Enrollment Control は、必要に応じてパラメーター情報を生成します。さまざまなアルゴリズムに対して生成されるパラメーター値については、以下のセクションで説明します。
PKCS #1 バージョン 1.5 署名アルゴリズム:
次の OID には NULL パラメーター値を指定する必要があります。
- XCN_OID_RSA_MD2RSA (1.2.840.113549.1.1.2)
- XCN_OID_RSA_MD5RSA (1.2.840.113549.1.1.4)
- XCN_OID_RSA_SHA1RSA (1.2.840.113549.1.1.5)
- XCN_OID_RSA_SHA256RSA (1.2.840.113549.1.1.11)
- XCN_OID_RSA_SHA384RSA (1.2.840.113549.1.1.12)
- XCN_OID_RSA_SHA512RSA (1.2.840.113549.1.1.13)
ASN.1 の NULL 値は 2 バイトで表されます。タグ番号は 0x05 で、タグに関連付けられた値 (パラメーター長を表す) は 0x00 です。これは次の証明書の例に示されています。
...
Public Key Algorithm:
Algorithm ObjectId: 1.2.840.113549.1.1.1 RSA (RSA_SIGN)
Algorithm Parameters:
05 00
...
RSASSA-PSS 署名:
RSASSA-PSS (RSA Signature Scheme with Appendix - Probabilistic Signature Scheme)、XCN_OID_RSA_SSA_PSS (1.2.840.113549.1.1.10) は、次のパラメーター情報を生成します。付録付き署名方式 (signature scheme with appendix) は、署名生成と署名検証の操作で構成されます。署名の検証には、その署名が生成された元の証明書要求が必要です。詳細については、RSA laboratories の PKCS #1 v2.1 暗号化標準を参照してください。
RSASSA-PSS-params ::= SEQUENCE
{
hashAlgorithm [0] HashAlgorithm DEFAULT sha1,
maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT mgf1SHA1,
saltLength [2] INTEGER DEFAULT 20,
trailerField [3] TrailerField DEFAULT trailerFieldBC
}
ECDSA-SHA1 署名アルゴリズム: XCN_OID_ECDSA_SHA1 (1.2.840.10045.4.1) を使用して署名を作成する場合、パラメーターにはハッシュアルゴリズムの OID が含まれます。次の OID がサポートされています:
- XCN_OID_ECDSA_SHA256 (1.2.840.10045.4.3.2)
- XCN_OID_ECDSA_SHA384 (1.2.840.10045.4.3.3)
- XCN_OID_ECDSA_SHA512 (1.2.840.10045.4.3.4)
GetSignatureAlgorithm メソッドが PKCS の個別アルゴリズムまたは結合アルゴリズムのオブジェクト識別子 (OID) のいずれを取得すべきかを指定するブール値を指定および取得します。(Get)
| pValue | VARIANT_BOOL* | out | 代替署名アルゴリズム (PKCS#1 v2.1 形式) を使用するか否かを示す真偽値を受け取る出力先である。 |
解説(Remarks)
PKCS #7 および CMC の証明書要求は、常に個別の署名アルゴリズム OID と、それとは別のハッシュアルゴリズム OID を使用します。結合アルゴリズム OID を使用するのは PKCS #10 の証明書要求のみです。AlternateSignatureAlgorithm プロパティを設定すると、PKCS #10 要求に対して GetSignatureAlgorithm メソッドから個別の署名アルゴリズム OID を取得できます。このプロパティを設定すると、ハッシュアルゴリズム OID は Parameters プロパティから取得でき、AlternateSignatureAlgorithmSet プロパティも設定されます。個別 OID と結合 OID の例については、IX509SignatureInformation を参照してください。
GetSignatureAlgorithm メソッドが PKCS の個別アルゴリズムまたは結合アルゴリズムのオブジェクト識別子 (OID) のいずれを取得すべきかを指定するブール値を指定および取得します。(Put)
| Value | VARIANT_BOOL | in | 代替署名アルゴリズム (PKCS#1 v2.1 形式) を使用するか否かを指定する。VARIANT_TRUE で使用する。 |
解説(Remarks)
PKCS #7 および CMC の証明書要求は、常に個別の署名アルゴリズム OID と、それとは別のハッシュアルゴリズム OID を使用します。結合アルゴリズム OID を使用するのは PKCS #10 の証明書要求のみです。AlternateSignatureAlgorithm プロパティを設定すると、PKCS #10 要求に対して GetSignatureAlgorithm メソッドから個別の署名アルゴリズム OID を取得できます。このプロパティを設定すると、ハッシュアルゴリズム OID は Parameters プロパティから取得でき、AlternateSignatureAlgorithmSet プロパティも設定されます。個別 OID と結合 OID の例については、IX509SignatureInformation を参照してください。
AlternateSignatureAlgorithm プロパティが呼び出し元によって明示的に設定されたかどうかを指定するブール値を取得します。
| pValue | VARIANT_BOOL* | out | 代替署名アルゴリズムの設定が明示的に指定済みであるか否かを示す真偽値を受け取る出力先である。 |
解説(Remarks)
AlternateSignatureAlgorithmSet プロパティは、CMC 証明書要求オブジェクトによって使用されます。AlternateSignatureAlgorithm プロパティが署名者証明書に明示的に設定され、かつ同じプロパティが IX509CertificateRequestCmc オブジェクトに設定されている場合、CMC 要求は署名者証明書上のプロパティ値を上書きしません。
証明書要求が null 署名かどうかを示すブール値を指定および取得します。(Get)
| pValue | VARIANT_BOOL* | out | 署名なし (NULL 署名) として扱うか否かを示す真偽値を受け取る出力先である。 |
解説(Remarks)
null 署名の証明書要求は、実際には署名されていません。つまり、要求は SHA-1 などのダイジェストアルゴリズムでダイジェスト化できますが、RSA などの公開キーアルゴリズムでは暗号化されません。このプロパティは、GetSignatureAlgorithm メソッドを呼び出す前に設定する必要があります。
証明書要求が null 署名かどうかを示すブール値を指定および取得します。(Put)
| Value | VARIANT_BOOL | in | 署名なし (NULL 署名) として扱うか否かを指定する。VARIANT_TRUE で署名なしにする。 |
解説(Remarks)
null 署名の証明書要求は、実際には署名されていません。つまり、要求は SHA-1 などのダイジェストアルゴリズムでダイジェスト化できますが、RSA などの公開キーアルゴリズムでは暗号化されません。このプロパティは、GetSignatureAlgorithm メソッドを呼び出す前に設定する必要があります。
署名アルゴリズムのオブジェクト識別子 (OID) を取得します。
| Pkcs7Signature | VARIANT_BOOL | in | アルゴリズムが PKCS #7 または CMC の証明書要求への署名に使用されるかどうかを指定する VARIANT_BOOL 変数。 |
| SignatureKey | VARIANT_BOOL | in | アルゴリズム OID が複数の目的に関連付けられている場合に、署名のみに使用されるアルゴリズムを優先するかどうかを指定する VARIANT_BOOL 変数。たとえば、XCN_OID_RSA_RSA (1.2.840.113549.1.1.1) は署名とキー交換の両方に使用できます。 |
| ppValue | IObjectId** | out | アルゴリズム OID を表す IObjectId インターフェースへのポインターを受け取る変数のアドレス。 |
戻り値
関数が成功した場合、S_OK を返します。
関数が失敗した場合、エラーを示す HRESULT 値を返します。可能な値には次の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| リターンコード/値 | 説明 |
|---|---|
| ハッシュアルゴリズム OID または NullSigned プロパティが指定されていませんが、署名アルゴリズム OID が見つかりません。 | |
| 結合署名アルゴリズムが見つかりませんでした。 |
解説(Remarks)
このメソッドは、入力パラメーターと一致するキャッシュされた署名アルゴリズムを検索します。見つからない場合、このメソッドは入力パラメーターに加えて、次のリストに示すようにさまざまな IX509SignatureInformation プロパティに割り当てられた値を使用します。
-
Pkcs7Signature = true, NullSigned = true
このケースは null 署名の PKCS #7 証明書要求を表します。このメソッドは XCN_OID_PKIX_NO_SIGNATURE (1.3.6.1.5.5.7.6.2) OID を返します。
-
Pkcs7Signature = true, NullSigned = false
このケースでは、null 署名ではない PKCS #7 要求に対する個別の署名アルゴリズム OID を取得します。個別署名では、HashAlgorithm および PublicKeyAlgorithm プロパティを設定する必要があります。公開キーアルゴリズムが XCN_OID_X957_DSA で、ハッシュアルゴリズムが XCN_OID_OIWSEC_sha1 ではないという特殊なケースでは、取得される署名アルゴリズム OID は XCN_OID_X957_SHA1DSA (1.2.840.10040.4.3) になります。
-
Pkcs7Signature = false, NullSigned = false, AlternateSignatureAlgorithm = true
このケースでは、PKCS #10 要求に対する個別の署名アルゴリズム OID を取得し、ハッシュアルゴリズム OID を Parameters プロパティにエンコードします。HashAlgorithm および PublicKeyAlgorithm プロパティを設定する必要があります。
-
Pkcs7Signature = false, NullSigned = false, AlternateSignatureAlgorithm = false
このケースでは、PKCS #7 要求に対する個別の署名アルゴリズム OID を取得します。HashAlgorithm および PublicKeyAlgorithm プロパティを設定する必要があります。
署名前に証明書要求のダイジェストを作成するために使用される既定のハッシュアルゴリズムを指定します。
戻り値
関数が成功した場合、S_OK を返します。
関数が失敗した場合、エラーを示す HRESULT 値を返します。可能な値には次の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
| リターンコード/値 | 説明 |
|---|---|
| ハッシュアルゴリズム OID が見つかりませんでした。 |
解説(Remarks)
ハッシュアルゴリズムが既に設定されている場合、このメソッドは何も行いません。ハッシュアルゴリズムが指定されていない場合、このメソッドはそれを XCN_OID_OIWSEC_sha1 に設定し、署名アルゴリズムキャッシュをクリアします。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IX509SignatureInformation "{728AB33C-217D-11DA-B2A4-000E7BBB2B09}" #usecom global IX509SignatureInformation IID_IX509SignatureInformation "{}" #comfunc global IX509SignatureInformation_get_HashAlgorithm 7 sptr #comfunc global IX509SignatureInformation_put_HashAlgorithm 8 sptr #comfunc global IX509SignatureInformation_get_PublicKeyAlgorithm 9 sptr #comfunc global IX509SignatureInformation_put_PublicKeyAlgorithm 10 sptr #comfunc global IX509SignatureInformation_get_Parameters 11 int,var #comfunc global IX509SignatureInformation_put_Parameters 12 int,wstr #comfunc global IX509SignatureInformation_get_AlternateSignatureAlgorithm 13 var #comfunc global IX509SignatureInformation_put_AlternateSignatureAlgorithm 14 int #comfunc global IX509SignatureInformation_get_AlternateSignatureAlgorithmSet 15 var #comfunc global IX509SignatureInformation_get_NullSigned 16 var #comfunc global IX509SignatureInformation_put_NullSigned 17 int #comfunc global IX509SignatureInformation_GetSignatureAlgorithm 18 int,int,sptr #comfunc global IX509SignatureInformation_SetDefaultValues 19 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IX509SignatureInformation "{728AB33C-217D-11DA-B2A4-000E7BBB2B09}" #usecom global IX509SignatureInformation IID_IX509SignatureInformation "{}" #comfunc global IX509SignatureInformation_get_HashAlgorithm 7 sptr #comfunc global IX509SignatureInformation_put_HashAlgorithm 8 sptr #comfunc global IX509SignatureInformation_get_PublicKeyAlgorithm 9 sptr #comfunc global IX509SignatureInformation_put_PublicKeyAlgorithm 10 sptr #comfunc global IX509SignatureInformation_get_Parameters 11 int,sptr #comfunc global IX509SignatureInformation_put_Parameters 12 int,wstr #comfunc global IX509SignatureInformation_get_AlternateSignatureAlgorithm 13 sptr #comfunc global IX509SignatureInformation_put_AlternateSignatureAlgorithm 14 int #comfunc global IX509SignatureInformation_get_AlternateSignatureAlgorithmSet 15 sptr #comfunc global IX509SignatureInformation_get_NullSigned 16 sptr #comfunc global IX509SignatureInformation_put_NullSigned 17 int #comfunc global IX509SignatureInformation_GetSignatureAlgorithm 18 int,int,sptr #comfunc global IX509SignatureInformation_SetDefaultValues 19 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。