IOpcDigitalSignatureManager::Sign メソッド (msopc.h)

指定した証明書と IOpcSigningOptions インターフェイス ポインターを使用して署名を生成して、パッケージに署名します。 結果のシグネチャは、 IOpcDigitalSignature インターフェイス ポインターによって表されます。

構文

HRESULT Sign(
  [in]          const CERT_CONTEXT   *certificate,
  [in]          IOpcSigningOptions   *signingOptions,
  [out, retval] IOpcDigitalSignature **digitalSignature
);

パラメーター

[in] certificate

証明書を含む CERT_CONTEXT 構造体へのポインター。

[in] signingOptions

署名の生成に使用される IOpcSigningOptions インターフェイス ポインター。

[out, retval] digitalSignature

署名を表す新しい IOpcDigitalSignature インターフェイス ポインター。

戻り値

このメソッドは HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。

リターン コード/値 説明
S_OK
メソッドが成功しました。
E_POINTER
証明書signingOptionsdigitalSignature パラメーターの少なくとも 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 API からの HRESULT エラー コード。
Windows Web Services エラー
Windows Web Services API からの HRESULT エラー コード。

注釈

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

このメソッドを呼び出してシグネチャを生成する前に、 IOpcSigningOptions::SetDefaultDigestMethod メソッドと IOpcSigningOptions::SetSignatureMethod メソッドを 呼び出します。

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

大事な このメソッドの実行中にパッケージが変更された場合、 署名 が失敗したり、一貫性のない署名が生成されたりする可能性があります。 パッケージの破損を回避するには、Sign を呼び出す前に API を使用してパッケージを保存 します。 パッケージを保存する方法の詳細については、「パッケージの 保存」を参照してください。
 
このメソッドは、次のパーツとリレーションシップを作成できます。
  • デジタル署名の配信元パーツ
  • デジタル署名の元のリレーションシップの種類のパッケージリレーションシップ
  • 署名マークアップを含む 1 つの署名パーツ
  • 証明書を含む 1 つ以上の部分
  • 署名パーツを対象とし、デジタル署名の配信元パーツをソースとして持つ 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 API を使用したはじめにに関するページを参照してください。

要件

要件
サポートされている最小のクライアント Windows 7 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 R2 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー msopc.h

こちらもご覧ください

コア パッケージ インターフェイス

デジタル証明書

デジタル署名の概要

Packaging API を使用したはじめに

IOpcDigitalSignatureManager

概要

パッケージ化 API プログラミング ガイド

パッケージ化 API リファレンス

API サンプルのパッケージ化

デジタル署名インターフェイスのパッケージ化

インターフェイスのパッケージ化

リファレンス

パッケージの保存