Win32 API 日本語リファレンス
ホームStorage.Packaging.Opc › IOpcDigitalSignatureManager

IOpcDigitalSignatureManager

COM
IIDd5e62a0b-696d-462f-94df-72e33cef2659継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Packaging API のオブジェクトで表されるパッケージに対して、Packaging Digital Signature Interfaces へのアクセスを提供します。

解説(Remarks)

署名を生成するために Sign メソッドを呼び出す前に、IOpcSigningOptions::SetDefaultDigestMethod メソッドと IOpcSigningOptions::SetSignatureMethod メソッドを呼び出す必要があります。

IOpcDigitalSignatureManager インターフェイスポインターを作成するには、IOpcFactory::CreateDigitalSignatureManager メソッドを呼び出します。

重要 Sign メソッドの実行中にパッケージが変更されると、メソッドが失敗するか、一貫性のないデジタル署名が生成されることがあります。パッケージの破損を避けるため、Sign を呼び出す前に API を使用してパッケージを保存してください。パッケージの保存方法については、Saving a Package を参照してください。
Validate メソッドは、指定されたデジタル署名(署名対象のエンティティおよび署名マークアップ)が署名の生成後に改変されていないことを確認しますが、署名者の身元は検証しません。
重要 署名者の身元は呼び出し元が検証する必要があります。

スレッドセーフティ

Packaging のオブジェクトはスレッドセーフではありません。

IOpcSigningOptions 詳細については、Getting Started with the Packaging API を参照してください。

メソッド 8

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetSignatureOriginPartName(IOpcPartUri** signatureOriginPartName)

Digital Signature Origin パートのパート名を表す IOpcPartUri インターフェイスポインターを取得します。

signatureOriginPartNameIOpcPartUri**outIOpcPartUri インターフェイスポインター。Digital Signature Origin パートが存在しない場合は NULL

戻り値

このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
signatureOriginPartName パラメーターが NULL です。

解説(Remarks)

API を使用して署名を生成する場合は、SetSignatureOriginPartName メソッドを呼び出して Digital Signature Origin パートのパート名を設定します。

スレッドセーフティ

Packaging のオブジェクトはスレッドセーフではありません。

詳細については、Getting Started with the Packaging API を参照してください。

vtbl 4 HRESULT SetSignatureOriginPartName(IOpcPartUri* signatureOriginPartName)

Digital Signature Origin パートのパート名を、指定した IOpcPartUri インターフェイスポインターが表す名前に設定します。

signatureOriginPartNameIOpcPartUri*inDigital Signature Origin パートに設定するパート名を表す IOpcPartUri インターフェイスポインターへのポインター。

戻り値

このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。

戻り値/値 説明
S_OK
メソッドは成功しました。
OPC_E_DS_SIGNATURE_ORIGIN_EXISTS
0x80510054
Digital Signature Origin パートが既にパッケージ内に存在するため、名前を変更できません。
OPC_E_DUPLICATE_PART
0x8051000B
指定されたパート名を持つパートが、現在のパッケージ内に既に存在します。

解説(Remarks)

Digital Signature Origin パートが既に存在する場合、または signatureOriginPartName パラメーターのパート名が他のパートで使用されている場合、このメソッドは失敗します。

スレッドセーフティ

Packaging のオブジェクトはスレッドセーフではありません。

詳細については、Getting Started with the Packaging API を参照してください。

vtbl 5 HRESULT GetSignatureEnumerator(IOpcDigitalSignatureEnumerator** signatureEnumerator)

パッケージのデジタル署名を表す IOpcDigitalSignature インターフェイスポインターの列挙子を取得します。

signatureEnumeratorIOpcDigitalSignatureEnumerator**outパッケージのデジタル署名を表す IOpcDigitalSignature インターフェイスポインターの列挙子へのポインター。

戻り値

このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
signatureEnumerator パラメーターが NULL です。
vtbl 6 HRESULT RemoveSignature(IOpcPartUri* signaturePartName)

署名マークアップを格納している、指定された署名パートをパッケージから削除します。

signaturePartNameIOpcPartUri*in削除する署名パートのパート名を表す IOpcPartUri インターフェイスポインター。

戻り値

このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。

戻り値/値 説明
S_OK
メソッドは成功しました。
E_POINTER
signaturePartName パラメーターが NULL です。
OPC_E_NO_SUCH_PART
0x80510018
指定されたパートは存在しません。

解説(Remarks)

指定された署名パートが存在しない場合、このメソッドは失敗します。

パートがパッケージから削除された場合、そのパートはパッケージの保存時に保存されません。

削除されたパートが 1 つ以上のリレーションシップのソースである場合、それらのリレーションシップはパッケージの保存時に保存されません。

スレッドセーフティ

Packaging のオブジェクトはスレッドセーフではありません。

詳細については、Getting Started with the Packaging API を参照してください。

vtbl 7 HRESULT CreateSigningOptions(IOpcSigningOptions** signingOptions)

IOpcSigningOptions インターフェイスポインターを作成します。

signingOptionsIOpcSigningOptions**outIOpcSigningOptions インターフェイスポインターへのポインター。

戻り値

このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
signingOptions パラメーターが NULL です。

解説(Remarks)

このメソッドは、生成するデジタル署名のプロパティを設定するために必要な IOpcSigningOptions インターフェイスポインターを作成します。

署名を生成するには、CreateSigningOptions メソッドで取得した IOpcSigningOptions インターフェイスポインターを signingOptions パラメーターに設定して、IOpcDigitalSignatureManager::Sign メソッドを呼び出します。

スレッドセーフティ

Packaging のオブジェクトはスレッドセーフではありません。

詳細については、Getting Started with the Packaging API を参照してください。

vtbl 8 HRESULT Validate(IOpcDigitalSignature* signature, CERT_CONTEXT* certificate, OPC_SIGNATURE_VALIDATION_RESULT* validationResult)

指定された証明書を使用して、指定されたパッケージのデジタル署名を検証します。

signatureIOpcDigitalSignature*in検証するデジタル署名を表す IOpcDigitalSignature インターフェイスポインター。
certificateCERT_CONTEXT*inデジタル署名の検証に使用する証明書を含む CERT_CONTEXT 構造体へのポインター。
validationResultOPC_SIGNATURE_VALIDATION_RESULT*out検証結果を示す値。

戻り値

このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
signaturecertificatevalidationResult パラメーターのうち少なくとも 1 つが NULL です。

解説(Remarks)

このメソッドは X.509 公開キー基盤の証明書に対するセキュリティチェックを行いません。失効、有効期限、証明書チェーンなど、必要なすべてのチェックは呼び出し元が行う必要があります。

このメソッドは、指定されたデジタル署名(署名対象のエンティティおよび署名マークアップ)が署名の生成後に改変されていないことを確認しますが、署名者の身元は検証しません。

重要 署名者の身元は呼び出し元が検証する必要があります。
パッケージのデジタル署名にエラーがある場合、そのエラーの一部はこのメソッドが呼び出されるまで表面化しないことがあります。

スレッドセーフティ

Packaging のオブジェクトはスレッドセーフではありません。

詳細については、Getting Started with the Packaging API を参照してください。

vtbl 9 HRESULT Sign(CERT_CONTEXT* certificate, IOpcSigningOptions* signingOptions, IOpcDigitalSignature** digitalSignature)

指定された証明書と IOpcSigningOptions インターフェイスポインターを使用してデジタル署名を生成し、パッケージに署名します。

certificateCERT_CONTEXT*in証明書を含む CERT_CONTEXT 構造体へのポインター。
signingOptionsIOpcSigningOptions*inデジタル署名の生成に使用する IOpcSigningOptions インターフェイスポインター。
digitalSignatureIOpcDigitalSignature**out生成されたデジタル署名を表す、新しい IOpcDigitalSignature インターフェイスポインター。

戻り値

このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。

戻り値/値 説明
S_OK
メソッドは成功しました。
E_POINTER
certificatesigningOptionsdigitalSignature パラメーターのうち少なくとも 1 つが NULL です。
OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET
0x80510047
既定のダイジェストメソッドが設定されていません。設定するには IOpcSigningOptions::SetDefaultDigestMethod を呼び出してください。
OPC_E_DS_DIGEST_VALUE_ERROR
0x8051001A
署名対象として参照されたパッケージのコンポーネント、または署名マークアップ内の要素のダイジェスト値を取得できません。
OPC_E_DS_INVALID_OPC_SIGNATURE_TIME_FORMAT
0x80510024
デジタル署名の時刻形式が、有効な OPC_SIGNATURE_TIME_FORMAT 列挙値ではありません。
OPC_E_DS_INVALID_RELATIONSHIPS_SIGNING_OPTION
0x80510023
指定されたリレーションシップの署名オプションが、有効な OPC_RELATIONSHIPS_SIGNING_OPTION 列挙値ではありません。
OPC_E_DS_SIGNATURE_CORRUPT
0x80510019
パッケージ内のデジタル署名が正しく構成されていません。署名値を取得できません。
OPC_E_DS_SIGNATURE_METHOD_NOT_SET
0x80510046
署名メソッドが設定されていません。署名メソッドを設定するには IOpcSigningOptions::SetSignatureMethod を呼び出してください。
OPC_E_NO_SUCH_PART
0x80510018
指定されたパートは存在しません。
Cryptography error
Cryptography API から返された HRESULT エラーコードです。
Windows Web Services error
Windows Web Services API から返された HRESULT エラーコードです。

解説(Remarks)

このメソッドは Packaging のオブジェクトを使用してパッケージに変更を加えます。変更内容は、パッケージ自体が保存されるまで保存されません。

署名を生成するためにこのメソッドを呼び出す前に、IOpcSigningOptions::SetDefaultDigestMethod メソッドと IOpcSigningOptions::SetSignatureMethod メソッドを呼び出してください。

このメソッドで必要となる IOpcSigningOptions インターフェイスポインターを作成するには、CreateSigningOptions メソッドを呼び出します。

重要 このメソッドの実行中にパッケージが変更されると、Sign が失敗するか、一貫性のないデジタル署名が生成されることがあります。パッケージの破損を避けるため、Sign を呼び出す前に API を使用してパッケージを保存してください。パッケージの保存方法については、Saving a Package を参照してください。
このメソッドは、次のパートおよびリレーションシップを作成することがあります。

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

vtbl 10 HRESULT ReplaceSignatureXml(IOpcPartUri* signaturePartName, BYTE* newSignatureXml, DWORD count, IOpcDigitalSignature** digitalSignature)

指定された署名パートに格納されている既存の署名マークアップを置き換えます。

signaturePartNameIOpcPartUri*in既存の署名マークアップを格納している署名パートのパート名を表す IOpcPartUri インターフェイスポインター。
newSignatureXmlBYTE*in既存のマークアップを置き換える署名マークアップを格納したバッファー。
countDWORDinnewSignatureXml バッファーのサイズ。
digitalSignatureIOpcDigitalSignature**outnewSignatureXml で渡された署名マークアップから得られるデジタル署名を表す、新しい IOpcDigitalSignature インターフェイスへのポインター。

戻り値

このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます(ただしこれらに限定されません)。

戻り値/値 説明
S_OK
メソッドは成功しました。
E_POINTER
signaturePartNamenewSignatureXmldigitalSignature パラメーターのうち少なくとも 1 つが NULL です。
OPC_E_DS_DUPLICATE_PACKAGE_OBJECT_REFERENCES
0x8051002D
newSignatureXml バッファーに、パッケージの Object 要素を参照する Reference 要素が複数含まれています。この Reference は 1 つだけ許可されます。
OPC_E_DS_DUPLICATE_SIGNATURE_PROPERTY_ELEMENT
0x80510028
newSignatureXml バッファーに、同じ Id 属性を持つ SignatureProperty 要素が複数含まれています。
OPC_E_DS_EXTERNAL_SIGNATURE_REFERENCE
0x8051002F
newSignatureXml バッファー内の Reference 要素が、パッケージ外部のオブジェクトを参照しています。Reference 要素は、内部のパートまたは Object 要素を指す必要があります。
OPC_E_DS_INVALID_CANONICALIZATION_METHOD
0x80510022
サポートされていない正規化メソッドが要求されたか、newSignatureXml バッファー内で使用されています。
OPC_E_DS_INVALID_RELATIONSHIP_TRANSFORM_XML
0x80510021
newSignatureXml バッファー内で、リレーションシップ変換の使用を示す Transform 要素とその変換の選択条件が、OPC で規定されたスキーマに準拠していません。
OPC_E_DS_INVALID_SIGNATURE_COUNT
0x8051002B
newSignatureXml バッファーに、ちょうど 1 つのデジタル署名の署名マークアップが含まれていません。
OPC_E_DS_INVALID_SIGNATURE_XML
0x8051002A
newSignatureXml バッファーのサイズが 0 です。このバッファーのサイズは 0 より大きい必要があります。
OPC_E_DS_MISSING_CANONICALIZATION_TRANSFORM
0x80510032
newSignatureXml バッファー内で、リレーションシップ変換の後に正規化メソッドが続いていません。リレーションシップ変換の後には正規化メソッドが続く必要があります。
OPC_E_DS_MISSING_PACKAGE_OBJECT_REFERENCE
0x8051002E
newSignatureXml バッファー内で、パッケージ固有の Object 要素への Reference が見つかりませんでした。
OPC_E_DS_MISSING_SIGNATURE_ALGORITHM
0x8051002C
newSignatureXml バッファー内の署名マークアップで、署名メソッドのアルゴリズムが指定されていません。
OPC_E_DS_MISSING_SIGNATURE_PROPERTIES_ELEMENT
0x80510026
newSignatureXml バッファー内で、SignatureProperties 要素が見つかりませんでした。
OPC_E_DS_MISSING_SIGNATURE_PROPERTY_ELEMENT
0x80510027
newSignatureXml バッファー内で、SignatureProperties 要素の子要素である SignatureProperty 要素が見つかりませんでした。
OPC_E_DS_MISSING_SIGNATURE_TIME_PROPERTY
0x80510029
newSignatureXml バッファー内で、Id 属性値が "idSignatureTime" である SignatureProperty 要素が存在しないか、正しく構成されていません。
OPC_E_DS_MULTIPLE_RELATIONSHIP_TRANSFORMS
0x80510031
newSignatureXml バッファー内で、1 つの Reference 要素に対して複数のリレーションシップ変換が指定されています。リレーションシップ変換は 1 つだけ許可されます。
OPC_E_DS_REFERENCE_MISSING_CONTENT_TYPE
0x80510030
newSignatureXml バッファー内の Reference 要素の URI 属性値に、参照先パートのコンテンツタイプが含まれていません。
OPC_E_DS_SIGNATURE_PROPERTY_MISSING_TARGET
0x80510045
newSignatureXml バッファー内の SignatureProperty 要素に、必須の Target 属性がありません。
OPC_E_DS_SIGNATURE_REFERENCE_MISSING_URI
0x80510043
newSignatureXml バッファー内の Reference 要素には URI 属性が必要ですが、その属性がありません。
OPC_E_DS_UNSIGNED_PACKAGE
0x80510055
パッケージが署名されていないため、署名マークアップを置き換えることはできません。
OPC_E_NO_SUCH_PART
0x80510018
指定されたパートは存在しません。

解説(Remarks)

このメソッドは、newSignatureXml パラメーターで渡された新しい署名マークアップから得られるデジタル署名を検証しません。

指定された署名パート内の既存の署名マークアップを置き換える新しい署名マークアップが、デジタル署名を無効にしないことを、呼び出し元が確認する必要があります。

このメソッドは既存の署名マークアップを変更します。指定された署名パートをソースとする証明書およびリレーションシップは保持されます。

スレッドセーフティ

Packaging のオブジェクトはスレッドセーフではありません。

詳細については、Getting Started with the Packaging API を参照してください。

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