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

IOpcDigitalSignature

COM
IID52ab21dd-1cd0-4949-bc80-0c1232d00cb4継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

パッケージのデジタル署名を表します。

解説(Remarks)

署名を生成して IOpcDigitalSignature インターフェイスポインターを作成するには、IOpcDigitalSignatureManager::Sign メソッドを呼び出します。

生成済みの署名に IOpcDigitalSignature インターフェイスポインターを使用してアクセスするには、IOpcDigitalSignatureEnumerator::GetCurrent メソッドを呼び出します。

署名が生成されると、これらの情報は署名の XML マークアップ (署名マークアップ) にシリアル化されます。生成された署名マークアップは署名パートに格納されます。

スレッドセーフティ

パッケージングオブジェクトはスレッドセーフではありません。

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

メソッド 15

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

vtbl 3 HRESULT GetNamespaces(LPWSTR** prefixes, LPWSTR** namespaces, DWORD* count)

署名マークアップの Signature 要素におけるプレフィックスと名前空間のマッピングを取得します。

prefixesLPWSTR**outXML プレフィックス文字列のバッファーへのポインター。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出して、バッファー内の各文字列のメモリを解放し、その後バッファー自体のメモリを解放してください。
namespacesLPWSTR**outXML 名前空間文字列のバッファーへのポインター。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出して、バッファー内の各文字列のメモリを解放し、その後バッファー自体のメモリを解放してください。
countDWORD*outprefixes バッファーおよび namespaces バッファーのサイズ。

戻り値

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

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

解説(Remarks)

prefixes バッファーと namespaces バッファーは、インデックスによって相互に対応付けられます。

このメソッドは、prefixes および namespaces で返されるバッファーと、各バッファーに含まれる文字列が使用するメモリを割り当てます。

次のコードは、CoTaskMemFree を使用してバッファーおよびそれに含まれる文字列のメモリを解放する方法を示しています。

// Prepare to call GetNamespaces
LPWSTR* prefixes = NULL;
LPWSTR* namespaces = NULL;
UINT32 count = 0;

// Call to GetNamespaces succeeds
if ( SUCCEEDED( signature->GetNamespaces(&prefixes, &namespaces, &count) ) )
{
    // Process strings in prefixes and namespaces as needed for the application

    // Free memory for each string
    for (UINT32 i = 0; i < count; i++)
    {
        CoTaskMemFree(prefixes[i]);
        CoTaskMemFree(namespaces[i]);
    }
    // Free memory for the buffers
    CoTaskMemFree(prefixes);
    CoTaskMemFree(namespaces);
}
vtbl 4 HRESULT GetSignatureId(LPWSTR* signatureId)

署名マークアップの Signature 要素から Id 属性の値を取得します。

signatureIdLPWSTR*out

署名マークアップの Signature 要素が持つ Id 属性値へのポインター。

Signature 要素に Id 属性値がない場合、signatureId は空の文字列になります。

戻り値

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

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

解説(Remarks)

このメソッドは、signatureId で返される文字列が使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。

Signature 要素の Id 属性は省略可能です。このメソッドが呼び出されない場合、Signature 要素は Id 属性を持ちません。

署名が生成される前に署名 Id を設定するには、IOpcSigningOptions::SetSignatureId メソッドを呼び出します。

署名が生成される前に Id にアクセスするには、IOpcSigningOptions::GetSignatureId メソッドを呼び出します。

vtbl 5 HRESULT GetSignaturePartName(IOpcPartUri** signaturePartName)

署名マークアップを格納しているパートのパート名を取得します。

signaturePartNameIOpcPartUri**out署名マークアップを格納する署名パートのパート名を表す IOpcPartUri インターフェイスポインター。

戻り値

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

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

解説(Remarks)

署名が生成される前にこの署名パートのパート名を設定するには、IOpcSigningOptions::SetSignaturePartName メソッドを呼び出します。署名が生成される前に署名パート名にアクセスするには、IOpcSigningOptions::GetSignaturePartName を呼び出します。

署名マークアップを格納する署名パートは、その署名に固有のものです。

スレッドセーフティ

パッケージングオブジェクトはスレッドセーフではありません。

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

vtbl 6 HRESULT GetSignatureMethod(LPWSTR* signatureMethod)

署名マークアップの SignatureValue 要素の値を計算するために使用された署名メソッドを取得します。

signatureMethodLPWSTR*out署名メソッドへのポインター。

戻り値

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

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

解説(Remarks)

このメソッドは、signatureMethod で返される文字列が使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。

署名が生成される前に署名メソッドを設定するには、IOpcSigningOptions::SetSignatureMethod メソッドを呼び出します。

署名が生成される前に署名メソッドにアクセスするには、IOpcSigningOptions::GetSignatureMethod を呼び出します。署名が生成された後に署名メソッドにアクセスするには、IOpcDigitalSignature::GetSignatureMethod メソッドを呼び出します。いずれのメソッドも、IOpcSigningOptions::SetSignatureMethod によって設定された値を取得します。

重要 IOpcDigitalSignatureManager::Sign メソッドを呼び出して署名を生成する前に、有効な署名メソッドを設定しておく必要があります。
署名が生成されると、それは署名マークアップとしてシリアル化されます。署名メソッドは、署名マークアップ内の SignatureValue 要素の値を計算するために使用されます。

署名が検証される際には、署名メソッドを使用してその値が再計算され、再計算された値が署名マークアップ内の SignatureValue 要素の値と比較されます。

スレッドセーフティ

パッケージングオブジェクトはスレッドセーフではありません。

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

vtbl 7 HRESULT GetCanonicalizationMethod(OPC_CANONICALIZATION_METHOD* canonicalizationMethod)

シリアル化された署名の SignedInfo 要素に適用された正規化 (canonicalization) メソッドを取得します。

canonicalizationMethodOPC_CANONICALIZATION_METHOD*out署名が生成されたときに署名マークアップの SignedInfo 要素に適用された正規化メソッドを指定する OPC_CANONICALIZATION_METHOD 値。

戻り値

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

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

解説(Remarks)

API を使用して署名を生成する場合、コメントを削除する C14N 正規化メソッドが SignedInfo 要素に適用されます。このメソッドは OPC_CANONICALIZATION_C14N 列挙値に対応します。

スレッドセーフティ

パッケージングオブジェクトはスレッドセーフではありません。

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

vtbl 8 HRESULT GetSignatureValue(BYTE** signatureValue, DWORD* count)

署名マークアップの SignatureValue 要素に含まれる値をデコードして取得します。

signatureValueBYTE**out署名マークアップの SignatureValue 要素の値をデコードしたものを格納するバッファーへのポインター。
countDWORD*outsignatureHashValue バッファーのサイズ。

戻り値

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

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

解説(Remarks)

このメソッドは、signatureValue で返されるバッファーが使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。

SignatureValue 要素には、署名マークアップの SignedInfo 要素に署名メソッドを適用して計算された、base-64 エンコード済みの値が格納されます。署名メソッドを取得するには、GetSignatureMethod メソッドを呼び出します。

API を使用して署名を生成する場合は、IOpcSigningOptions::SetSignatureMethod メソッドを呼び出して署名メソッドを設定します。

スレッドセーフティ

パッケージングオブジェクトはスレッドセーフではありません。

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

vtbl 9 HRESULT GetSignaturePartReferenceEnumerator(IOpcSignaturePartReferenceEnumerator** partReferenceEnumerator)

署名済みのパートへの参照を表す IOpcSignaturePartReference インターフェイスポインターの列挙子を取得します。

partReferenceEnumeratorIOpcSignaturePartReferenceEnumerator**out署名済みのパートへの参照を表す IOpcSignaturePartReference インターフェイスポインターの列挙子へのポインター。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
partReferenceEnumerator パラメーターが NULL です。
vtbl 10 HRESULT GetSignatureRelationshipReferenceEnumerator(IOpcSignatureRelationshipReferenceEnumerator** relationshipReferenceEnumerator)

署名済みのリレーションシップへの参照を表す IOpcSignatureRelationshipReference インターフェイスポインターの列挙子を取得します。

relationshipReferenceEnumeratorIOpcSignatureRelationshipReferenceEnumerator**out署名済みのリレーションシップへの参照を表す IOpcSignatureRelationshipReference インターフェイスポインターの列挙子へのポインター。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
relationshipReferenceEnumerator パラメーターが NULL です。
vtbl 11 HRESULT GetSigningTime(LPWSTR* signingTime)

署名が生成された時刻を示す文字列を取得します。

signingTimeLPWSTR*out署名が生成された時刻を示す文字列へのポインター。

戻り値

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

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

解説(Remarks)

このメソッドは、signingTime で返される文字列が使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。

signingTime 文字列の書式を取得するには、GetTimeFormat メソッドを呼び出します。

注意 これは信頼されたタイムスタンプではありません。

スレッドセーフティ

パッケージングオブジェクトはスレッドセーフではありません。

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

vtbl 12 HRESULT GetTimeFormat(OPC_SIGNATURE_TIME_FORMAT* timeFormat)

GetSigningTime メソッドが返す文字列の書式を取得します。

timeFormatOPC_SIGNATURE_TIME_FORMAT*outGetSigningTime が返す文字列の書式を示す OPC_SIGNATURE_TIME_FORMAT 値。

戻り値

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

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

解説(Remarks)

現在のパッケージ署名が生成された時刻を示す文字列にアクセスするには、GetSigningTime メソッドを呼び出します。

署名が生成される前に署名時刻文字列の書式を設定するには、IOpcSigningOptions::SetTimeFormat メソッドを呼び出します。署名が生成される前にその書式にアクセスするには、IOpcSigningOptions::GetTimeFormat メソッドを呼び出します。

スレッドセーフティ

パッケージングオブジェクトはスレッドセーフではありません。

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

vtbl 13 HRESULT GetPackageObjectReference(IOpcSignatureReference** packageObjectReference)

署名済みのパッケージ固有の Object 要素への参照を表す IOpcSignatureReference インターフェイスポインターを取得します。

packageObjectReferenceIOpcSignatureReference**out署名済みのパッケージ固有の Object 要素への参照を表す IOpcSignatureReference インターフェイスポインター。

戻り値

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

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

解説(Remarks)

packageObjectReference パラメーターで受け取る IOpcSignatureReference インターフェイスポインターは、URI 属性値が "#idPackageObject" に設定された Reference 要素を表します。この要素の URI 属性値は、パッケージ固有の Object 要素の Id 属性値の先頭にシャープ記号 ("#") を付けたものです。

署名が生成されて署名マークアップとしてシリアル化されると、この参照と参照先のパッケージ固有の Object 要素が署名されます。次のマークアップは、生成される署名マークアップ内のパッケージ固有の Reference 要素とパッケージ固有の Object 要素を示しています。

<!-- Signature markup. -->
<Signature>
    <SignedInfo>
        [...]
        <!-- A reference to the package-specific <Object> that
        is, or will be, signed. -->
        <Reference URI="#idPackageObject">
             [...]
        </Reference>
    </SignedInfo>
    [...]
    <!-- The package-specific <Object> element. -->
    <Object Id="idPackageObject">
        <!-- This element contains the <Reference> elements that
        refer to parts and relationships in the package that are
        or will be signed. -->
        <Manifest>
            [...] 
        </Manifest>
    </Object>
</Signature>

スレッドセーフティ

パッケージングオブジェクトはスレッドセーフではありません。

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

vtbl 14 HRESULT GetCertificateEnumerator(IOpcCertificateEnumerator** certificateEnumerator)

署名で使用されている証明書の列挙子を取得します。

certificateEnumeratorIOpcCertificateEnumerator**out署名で使用されている CERT_CONTEXT 構造体へのポインターの列挙子へのポインター。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
certificateEnumerator パラメーターが NULL です。
vtbl 15 HRESULT GetCustomReferenceEnumerator(IOpcSignatureReferenceEnumerator** customReferenceEnumerator)

署名済みのアプリケーション固有の XML 要素への参照を表す IOpcSignatureReference インターフェイスポインターの列挙子を取得します。

customReferenceEnumeratorIOpcSignatureReferenceEnumerator**outIOpcSignatureReference インターフェイスポインターの列挙子へのポインター。IOpcSignatureReference インターフェイスポインターは、署名済みのアプリケーション固有の XML 要素への参照を表します。

戻り値

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

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

解説(Remarks)

署名済みの XML 要素に IOpcSignatureCustomObject インターフェイスポインターを使用してアクセスするには、IOpcSignatureCustomObjectEnumerator::GetCurrent メソッドを呼び出します。署名済みの XML 要素のマークアップにアクセスするには、IOpcSignatureCustomObject::GetXml メソッドを呼び出します。

スレッドセーフティ

パッケージングオブジェクトはスレッドセーフではありません。

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

vtbl 16 HRESULT GetCustomObjectEnumerator(IOpcSignatureCustomObjectEnumerator** customObjectEnumerator)

署名マークアップ内のアプリケーション固有の Object 要素を表す IOpcSignatureCustomObject インターフェイスポインターの列挙子を取得します。

customObjectEnumeratorIOpcSignatureCustomObjectEnumerator**outIOpcSignatureCustomObject インターフェイスポインターの列挙子へのポインター。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
customObjectEnumerator パラメーターが NULL です。
vtbl 17 HRESULT GetSignatureXml(BYTE** signatureXml, DWORD* count)

署名マークアップを取得します。

signatureXmlBYTE**out署名マークアップを格納するバッファーへのポインター。
countDWORD*outsignatureXml バッファーのサイズ。

戻り値

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

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

解説(Remarks)

このメソッドは、signatureXml で返されるバッファーが使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。

スレッドセーフティ

パッケージングオブジェクトはスレッドセーフではありません。

詳細については、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_IOpcDigitalSignature "{52AB21DD-1CD0-4949-BC80-0C1232D00CB4}"
#usecom global IOpcDigitalSignature IID_IOpcDigitalSignature "{}"
#comfunc global IOpcDigitalSignature_GetNamespaces                                3 var,var,var
#comfunc global IOpcDigitalSignature_GetSignatureId                               4 var
#comfunc global IOpcDigitalSignature_GetSignaturePartName                         5 sptr
#comfunc global IOpcDigitalSignature_GetSignatureMethod                           6 var
#comfunc global IOpcDigitalSignature_GetCanonicalizationMethod                    7 var
#comfunc global IOpcDigitalSignature_GetSignatureValue                            8 var,var
#comfunc global IOpcDigitalSignature_GetSignaturePartReferenceEnumerator          9 sptr
#comfunc global IOpcDigitalSignature_GetSignatureRelationshipReferenceEnumerator  10 sptr
#comfunc global IOpcDigitalSignature_GetSigningTime                               11 var
#comfunc global IOpcDigitalSignature_GetTimeFormat                                12 var
#comfunc global IOpcDigitalSignature_GetPackageObjectReference                    13 sptr
#comfunc global IOpcDigitalSignature_GetCertificateEnumerator                     14 sptr
#comfunc global IOpcDigitalSignature_GetCustomReferenceEnumerator                 15 sptr
#comfunc global IOpcDigitalSignature_GetCustomObjectEnumerator                    16 sptr
#comfunc global IOpcDigitalSignature_GetSignatureXml                              17 var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。