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

IX509SignatureInformation

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

公式ドキュメント

証明書要求への署名に使用される情報を表します。

メソッド 13

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

vtbl 7 HRESULT get_HashAlgorithm(IObjectId** ppValue)

GetSignatureAlgorithm メソッドで使用されるハッシュアルゴリズムのオブジェクト識別子 (OID) を指定および取得します。(Get)

ppValueIObjectId**out署名に使用するハッシュ アルゴリズムを表す IObjectId へのポインタを受け取る出力先である。

解説(Remarks)

このプロパティは、GetSignatureAlgorithm メソッドを呼び出す前に設定する必要があります。null 署名の証明書要求に対する署名アルゴリズムを取得する場合を除き、PublicKeyAlgorithm プロパティも設定する必要があります。NullSignedAlternateSignatureAlgorithmParameters の各プロパティを設定することもできます。

HashAlgorithm プロパティは、指定した OID がハッシュアルゴリズムを表しているかどうかを検証します。OID が有効な場合、このプロパティは署名プロパティキャッシュもクリアします。

vtbl 8 HRESULT put_HashAlgorithm(IObjectId* pValue)

GetSignatureAlgorithm メソッドで使用されるハッシュアルゴリズムのオブジェクト識別子 (OID) を指定および取得します。(Put)

pValueIObjectId*inoptional署名に使用するハッシュ アルゴリズムを表す IObjectId へのポインタである。

解説(Remarks)

このプロパティは、GetSignatureAlgorithm メソッドを呼び出す前に設定する必要があります。null 署名の証明書要求に対する署名アルゴリズムを取得する場合を除き、PublicKeyAlgorithm プロパティも設定する必要があります。NullSignedAlternateSignatureAlgorithmParameters の各プロパティを設定することもできます。

HashAlgorithm プロパティは、指定した OID がハッシュアルゴリズムを表しているかどうかを検証します。OID が有効な場合、このプロパティは署名プロパティキャッシュもクリアします。

vtbl 9 HRESULT get_PublicKeyAlgorithm(IObjectId** ppValue)

GetSignatureAlgorithm メソッドで使用される公開キーアルゴリズムのオブジェクト識別子 (OID) を指定および取得します。(Get)

ppValueIObjectId**out署名に使用する公開キー アルゴリズムを表す IObjectId へのポインタを受け取る出力先である。

解説(Remarks)

null 署名の証明書要求に対する署名アルゴリズムを取得する場合を除き、このプロパティは GetSignatureAlgorithm メソッドを呼び出す前に設定する必要があります。HashAlgorithm プロパティも設定する必要があります。AlternateSignatureAlgorithm および NullSigned プロパティを設定することもできます。

PublicKeyAlgorithm プロパティは、指定した OID が公開キーアルゴリズムを表しているかどうかを検証します。OID が有効な場合、このプロパティは署名プロパティキャッシュもクリアします。

vtbl 10 HRESULT put_PublicKeyAlgorithm(IObjectId* pValue)

GetSignatureAlgorithm メソッドで使用される公開キーアルゴリズムのオブジェクト識別子 (OID) を指定および取得します。(Put)

pValueIObjectId*inoptional署名に使用する公開キー アルゴリズムを表す IObjectId へのポインタである。

解説(Remarks)

null 署名の証明書要求に対する署名アルゴリズムを取得する場合を除き、このプロパティは GetSignatureAlgorithm メソッドを呼び出す前に設定する必要があります。HashAlgorithm プロパティも設定する必要があります。AlternateSignatureAlgorithm および NullSigned プロパティを設定することもできます。

PublicKeyAlgorithm プロパティは、指定した OID が公開キーアルゴリズムを表しているかどうかを検証します。OID が有効な場合、このプロパティは署名プロパティキャッシュもクリアします。

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

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

EncodingEncodingTypein出力する pValue の希望するエンコード形式を指定する EncodingType 値である。
pValueLPWSTR*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 パラメーター値を指定する必要があります。

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 がサポートされています:

vtbl 12 HRESULT put_Parameters(EncodingType Encoding, LPWSTR Value)

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

EncodingEncodingTypeinValue のエンコード形式を指定する EncodingType 値である。
ValueLPWSTRin署名アルゴリズムのパラメータをエンコードした文字列である。

解説(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 パラメーター値を指定する必要があります。

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 がサポートされています:

vtbl 13 HRESULT get_AlternateSignatureAlgorithm(VARIANT_BOOL* pValue)

GetSignatureAlgorithm メソッドが PKCS の個別アルゴリズムまたは結合アルゴリズムのオブジェクト識別子 (OID) のいずれを取得すべきかを指定するブール値を指定および取得します。(Get)

pValueVARIANT_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 を参照してください。

vtbl 14 HRESULT put_AlternateSignatureAlgorithm(VARIANT_BOOL Value)

GetSignatureAlgorithm メソッドが PKCS の個別アルゴリズムまたは結合アルゴリズムのオブジェクト識別子 (OID) のいずれを取得すべきかを指定するブール値を指定および取得します。(Put)

ValueVARIANT_BOOLin代替署名アルゴリズム (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 を参照してください。

vtbl 15 HRESULT get_AlternateSignatureAlgorithmSet(VARIANT_BOOL* pValue)

AlternateSignatureAlgorithm プロパティが呼び出し元によって明示的に設定されたかどうかを指定するブール値を取得します。

pValueVARIANT_BOOL*out代替署名アルゴリズムの設定が明示的に指定済みであるか否かを示す真偽値を受け取る出力先である。

解説(Remarks)

AlternateSignatureAlgorithmSet プロパティは、CMC 証明書要求オブジェクトによって使用されます。AlternateSignatureAlgorithm プロパティが署名者証明書に明示的に設定され、かつ同じプロパティが IX509CertificateRequestCmc オブジェクトに設定されている場合、CMC 要求は署名者証明書上のプロパティ値を上書きしません。

vtbl 16 HRESULT get_NullSigned(VARIANT_BOOL* pValue)

証明書要求が null 署名かどうかを示すブール値を指定および取得します。(Get)

pValueVARIANT_BOOL*out署名なし (NULL 署名) として扱うか否かを示す真偽値を受け取る出力先である。

解説(Remarks)

null 署名の証明書要求は、実際には署名されていません。つまり、要求は SHA-1 などのダイジェストアルゴリズムでダイジェスト化できますが、RSA などの公開キーアルゴリズムでは暗号化されません。このプロパティは、GetSignatureAlgorithm メソッドを呼び出す前に設定する必要があります。

vtbl 17 HRESULT put_NullSigned(VARIANT_BOOL Value)

証明書要求が null 署名かどうかを示すブール値を指定および取得します。(Put)

ValueVARIANT_BOOLin署名なし (NULL 署名) として扱うか否かを指定する。VARIANT_TRUE で署名なしにする。

解説(Remarks)

null 署名の証明書要求は、実際には署名されていません。つまり、要求は SHA-1 などのダイジェストアルゴリズムでダイジェスト化できますが、RSA などの公開キーアルゴリズムでは暗号化されません。このプロパティは、GetSignatureAlgorithm メソッドを呼び出す前に設定する必要があります。

vtbl 18 HRESULT GetSignatureAlgorithm(VARIANT_BOOL Pkcs7Signature, VARIANT_BOOL SignatureKey, IObjectId** ppValue)

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

Pkcs7SignatureVARIANT_BOOLinアルゴリズムが PKCS #7 または CMC の証明書要求への署名に使用されるかどうかを指定する VARIANT_BOOL 変数。
SignatureKeyVARIANT_BOOLinアルゴリズム OID が複数の目的に関連付けられている場合に、署名のみに使用されるアルゴリズムを優先するかどうかを指定する VARIANT_BOOL 変数。たとえば、XCN_OID_RSA_RSA (1.2.840.113549.1.1.1) は署名とキー交換の両方に使用できます。
ppValueIObjectId**outアルゴリズム OID を表す IObjectId インターフェースへのポインターを受け取る変数のアドレス。

戻り値

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

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

リターンコード/値 説明
CERTSRV_E_PROPERTY_EMPTY
ハッシュアルゴリズム OID または NullSigned プロパティが指定されていませんが、署名アルゴリズム OID が見つかりません。
CRYPT_E_UNKNOWN_ALGO
結合署名アルゴリズムが見つかりませんでした。

解説(Remarks)

このメソッドは、入力パラメーターと一致するキャッシュされた署名アルゴリズムを検索します。見つからない場合、このメソッドは入力パラメーターに加えて、次のリストに示すようにさまざまな IX509SignatureInformation プロパティに割り当てられた値を使用します。

vtbl 19 HRESULT SetDefaultValues()

署名前に証明書要求のダイジェストを作成するために使用される既定のハッシュアルゴリズムを指定します。

戻り値

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

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

リターンコード/値 説明
CERTSRV_E_PROPERTY_EMPTY
ハッシュアルゴリズム OID が見つかりませんでした。

解説(Remarks)

ハッシュアルゴリズムが既に設定されている場合、このメソッドは何も行いません。ハッシュアルゴリズムが指定されていない場合、このメソッドはそれを XCN_OID_OIWSEC_sha1 に設定し、署名アルゴリズムキャッシュをクリアします。

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