IOpcDigitalSignatureManager
COM公式ドキュメント
Packaging API のオブジェクトで表されるパッケージに対して、Packaging Digital Signature Interfaces へのアクセスを提供します。
解説(Remarks)
署名を生成するために Sign メソッドを呼び出す前に、IOpcSigningOptions::SetDefaultDigestMethod メソッドと IOpcSigningOptions::SetSignatureMethod メソッドを呼び出す必要があります。
IOpcDigitalSignatureManager インターフェイスポインターを作成するには、IOpcFactory::CreateDigitalSignatureManager メソッドを呼び出します。
スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
IOpcSigningOptions 詳細については、Getting Started with the Packaging API を参照してください。
メソッド 8
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Digital Signature Origin パートのパート名を表す IOpcPartUri インターフェイスポインターを取得します。
| signatureOriginPartName | IOpcPartUri** | out | IOpcPartUri インターフェイスポインター。Digital Signature Origin パートが存在しない場合は NULL。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| signatureOriginPartName パラメーターが NULL です。 |
解説(Remarks)
API を使用して署名を生成する場合は、SetSignatureOriginPartName メソッドを呼び出して Digital Signature Origin パートのパート名を設定します。
スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
Digital Signature Origin パートのパート名を、指定した IOpcPartUri インターフェイスポインターが表す名前に設定します。
| signatureOriginPartName | IOpcPartUri* | in | Digital Signature Origin パートに設定するパート名を表す IOpcPartUri インターフェイスポインターへのポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。
| 戻り値/値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
Digital Signature Origin パートが既にパッケージ内に存在するため、名前を変更できません。 |
|
指定されたパート名を持つパートが、現在のパッケージ内に既に存在します。 |
解説(Remarks)
Digital Signature Origin パートが既に存在する場合、または signatureOriginPartName パラメーターのパート名が他のパートで使用されている場合、このメソッドは失敗します。
スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
パッケージのデジタル署名を表す IOpcDigitalSignature インターフェイスポインターの列挙子を取得します。
| signatureEnumerator | IOpcDigitalSignatureEnumerator** | out | パッケージのデジタル署名を表す IOpcDigitalSignature インターフェイスポインターの列挙子へのポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| signatureEnumerator パラメーターが NULL です。 |
署名マークアップを格納している、指定された署名パートをパッケージから削除します。
| signaturePartName | IOpcPartUri* | in | 削除する署名パートのパート名を表す IOpcPartUri インターフェイスポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。
| 戻り値/値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| signaturePartName パラメーターが NULL です。 | |
|
指定されたパートは存在しません。 |
解説(Remarks)
指定された署名パートが存在しない場合、このメソッドは失敗します。
パートがパッケージから削除された場合、そのパートはパッケージの保存時に保存されません。
削除されたパートが 1 つ以上のリレーションシップのソースである場合、それらのリレーションシップはパッケージの保存時に保存されません。
スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
IOpcSigningOptions インターフェイスポインターを作成します。
| signingOptions | IOpcSigningOptions** | out | IOpcSigningOptions インターフェイスポインターへのポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| signingOptions パラメーターが NULL です。 |
解説(Remarks)
このメソッドは、生成するデジタル署名のプロパティを設定するために必要な IOpcSigningOptions インターフェイスポインターを作成します。
署名を生成するには、CreateSigningOptions メソッドで取得した IOpcSigningOptions インターフェイスポインターを signingOptions パラメーターに設定して、IOpcDigitalSignatureManager::Sign メソッドを呼び出します。
スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
指定された証明書を使用して、指定されたパッケージのデジタル署名を検証します。
| signature | IOpcDigitalSignature* | in | 検証するデジタル署名を表す IOpcDigitalSignature インターフェイスポインター。 |
| certificate | CERT_CONTEXT* | in | デジタル署名の検証に使用する証明書を含む CERT_CONTEXT 構造体へのポインター。 |
| validationResult | OPC_SIGNATURE_VALIDATION_RESULT* | out | 検証結果を示す値。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| signature、certificate、validationResult パラメーターのうち少なくとも 1 つが NULL です。 |
解説(Remarks)
このメソッドは X.509 公開キー基盤の証明書に対するセキュリティチェックを行いません。失効、有効期限、証明書チェーンなど、必要なすべてのチェックは呼び出し元が行う必要があります。
このメソッドは、指定されたデジタル署名(署名対象のエンティティおよび署名マークアップ)が署名の生成後に改変されていないことを確認しますが、署名者の身元は検証しません。
スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
指定された証明書と IOpcSigningOptions インターフェイスポインターを使用してデジタル署名を生成し、パッケージに署名します。
| certificate | CERT_CONTEXT* | in | 証明書を含む CERT_CONTEXT 構造体へのポインター。 |
| signingOptions | IOpcSigningOptions* | in | デジタル署名の生成に使用する IOpcSigningOptions インターフェイスポインター。 |
| digitalSignature | IOpcDigitalSignature** | out | 生成されたデジタル署名を表す、新しい IOpcDigitalSignature インターフェイスポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。
| 戻り値/値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| certificate、signingOptions、digitalSignature パラメーターのうち少なくとも 1 つが NULL です。 | |
|
既定のダイジェストメソッドが設定されていません。設定するには IOpcSigningOptions::SetDefaultDigestMethod を呼び出してください。 |
|
署名対象として参照されたパッケージのコンポーネント、または署名マークアップ内の要素のダイジェスト値を取得できません。 |
|
デジタル署名の時刻形式が、有効な OPC_SIGNATURE_TIME_FORMAT 列挙値ではありません。 |
| 指定されたリレーションシップの署名オプションが、有効な OPC_RELATIONSHIPS_SIGNING_OPTION 列挙値ではありません。 | |
|
パッケージ内のデジタル署名が正しく構成されていません。署名値を取得できません。 |
|
署名メソッドが設定されていません。署名メソッドを設定するには IOpcSigningOptions::SetSignatureMethod を呼び出してください。 |
|
指定されたパートは存在しません。 |
|
Cryptography API から返された HRESULT エラーコードです。 |
|
Windows Web Services API から返された HRESULT エラーコードです。 |
解説(Remarks)
このメソッドは Packaging のオブジェクトを使用してパッケージに変更を加えます。変更内容は、パッケージ自体が保存されるまで保存されません。
署名を生成するためにこのメソッドを呼び出す前に、IOpcSigningOptions::SetDefaultDigestMethod メソッドと IOpcSigningOptions::SetSignatureMethod メソッドを呼び出してください。
このメソッドで必要となる IOpcSigningOptions インターフェイスポインターを作成するには、CreateSigningOptions メソッドを呼び出します。
- Digital Signature Origin パート
- digital signature origin リレーションシップタイプのパッケージリレーションシップ
- 署名マークアップを格納する 1 つの署名パート
- 証明書を格納する 1 つ以上のパート
- 署名パートを対象とし、Digital Signature Origin パートをソースとする 1 つのリレーションシップ
- 証明書を格納する署名パートを対象とし、別の署名パートをソースとする 1 つ以上のリレーションシップ
Sign が失敗した場合でも、上記のパートやリレーションシップが Packaging のオブジェクトとしてパッケージ内に表現されていることがあります。メソッドが OPC_E_DS_SIGNATURE_METHOD_NOT_SET または OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET エラーコードを返した場合、パッケージは変更されていません。
Sign が成功すると、署名対象のエンティティに対してダイジェスト値が計算され、生成されたデジタル署名が署名マークアップとしてシリアル化されます。署名対象のエンティティには、Signature 要素、参照、パート、リレーションシップ、およびパッケージ固有/アプリケーション固有の Object 要素が含まれます。
呼び出し元が IOpcSigningOptions インターフェイスを使用して署名情報を設定する際にパッケージのデジタル署名に混入したエラーは、Sign が呼び出されるまで表面化しないことがあります。
スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
指定された署名パートに格納されている既存の署名マークアップを置き換えます。
| signaturePartName | IOpcPartUri* | in | 既存の署名マークアップを格納している署名パートのパート名を表す IOpcPartUri インターフェイスポインター。 |
| newSignatureXml | BYTE* | in | 既存のマークアップを置き換える署名マークアップを格納したバッファー。 |
| count | DWORD | in | newSignatureXml バッファーのサイズ。 |
| digitalSignature | IOpcDigitalSignature** | out | newSignatureXml で渡された署名マークアップから得られるデジタル署名を表す、新しい IOpcDigitalSignature インターフェイスへのポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。
| 戻り値/値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| signaturePartName、newSignatureXml、digitalSignature パラメーターのうち少なくとも 1 つが NULL です。 | |
|
newSignatureXml バッファーに、パッケージの Object 要素を参照する Reference 要素が複数含まれています。この Reference は 1 つだけ許可されます。 |
| newSignatureXml バッファーに、同じ Id 属性を持つ SignatureProperty 要素が複数含まれています。 | |
|
newSignatureXml バッファー内の Reference 要素が、パッケージ外部のオブジェクトを参照しています。Reference 要素は、内部のパートまたは Object 要素を指す必要があります。 |
|
サポートされていない正規化メソッドが要求されたか、newSignatureXml バッファー内で使用されています。 |
|
newSignatureXml バッファー内で、リレーションシップ変換の使用を示す Transform 要素とその変換の選択条件が、OPC で規定されたスキーマに準拠していません。 |
|
newSignatureXml バッファーに、ちょうど 1 つのデジタル署名の署名マークアップが含まれていません。 |
|
newSignatureXml バッファーのサイズが 0 です。このバッファーのサイズは 0 より大きい必要があります。 |
|
newSignatureXml バッファー内で、リレーションシップ変換の後に正規化メソッドが続いていません。リレーションシップ変換の後には正規化メソッドが続く必要があります。 |
|
newSignatureXml バッファー内で、パッケージ固有の Object 要素への Reference が見つかりませんでした。 |
|
newSignatureXml バッファー内の署名マークアップで、署名メソッドのアルゴリズムが指定されていません。 |
| newSignatureXml バッファー内で、SignatureProperties 要素が見つかりませんでした。 | |
|
newSignatureXml バッファー内で、SignatureProperties 要素の子要素である SignatureProperty 要素が見つかりませんでした。 |
|
newSignatureXml バッファー内で、Id 属性値が "idSignatureTime" である SignatureProperty 要素が存在しないか、正しく構成されていません。 |
|
newSignatureXml バッファー内で、1 つの Reference 要素に対して複数のリレーションシップ変換が指定されています。リレーションシップ変換は 1 つだけ許可されます。 |
|
newSignatureXml バッファー内の Reference 要素の URI 属性値に、参照先パートのコンテンツタイプが含まれていません。 |
|
newSignatureXml バッファー内の SignatureProperty 要素に、必須の Target 属性がありません。 |
|
newSignatureXml バッファー内の Reference 要素には URI 属性が必要ですが、その属性がありません。 |
|
パッケージが署名されていないため、署名マークアップを置き換えることはできません。 |
|
指定されたパートは存在しません。 |
解説(Remarks)
このメソッドは、newSignatureXml パラメーターで渡された新しい署名マークアップから得られるデジタル署名を検証しません。
指定された署名パート内の既存の署名マークアップを置き換える新しい署名マークアップが、デジタル署名を無効にしないことを、呼び出し元が確認する必要があります。
このメソッドは既存の署名マークアップを変更します。指定された署名パートをソースとする証明書およびリレーションシップは保持されます。
スレッドセーフティ
Packaging のオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IOpcDigitalSignatureManager "{D5E62A0B-696D-462F-94DF-72E33CEF2659}" #usecom global IOpcDigitalSignatureManager IID_IOpcDigitalSignatureManager "{}" #comfunc global IOpcDigitalSignatureManager_GetSignatureOriginPartName 3 sptr #comfunc global IOpcDigitalSignatureManager_SetSignatureOriginPartName 4 sptr #comfunc global IOpcDigitalSignatureManager_GetSignatureEnumerator 5 sptr #comfunc global IOpcDigitalSignatureManager_RemoveSignature 6 sptr #comfunc global IOpcDigitalSignatureManager_CreateSigningOptions 7 sptr #comfunc global IOpcDigitalSignatureManager_Validate 8 sptr,var,var #comfunc global IOpcDigitalSignatureManager_Sign 9 var,sptr,sptr #comfunc global IOpcDigitalSignatureManager_ReplaceSignatureXml 10 sptr,var,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IOpcDigitalSignatureManager "{D5E62A0B-696D-462F-94DF-72E33CEF2659}" #usecom global IOpcDigitalSignatureManager IID_IOpcDigitalSignatureManager "{}" #comfunc global IOpcDigitalSignatureManager_GetSignatureOriginPartName 3 sptr #comfunc global IOpcDigitalSignatureManager_SetSignatureOriginPartName 4 sptr #comfunc global IOpcDigitalSignatureManager_GetSignatureEnumerator 5 sptr #comfunc global IOpcDigitalSignatureManager_RemoveSignature 6 sptr #comfunc global IOpcDigitalSignatureManager_CreateSigningOptions 7 sptr #comfunc global IOpcDigitalSignatureManager_Validate 8 sptr,sptr,sptr #comfunc global IOpcDigitalSignatureManager_Sign 9 sptr,sptr,sptr #comfunc global IOpcDigitalSignatureManager_ReplaceSignatureXml 10 sptr,sptr,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。