IOpcSignatureReference
COM公式ドキュメント
署名済み、または署名対象となる XML マークアップへの参照を表します。
解説(Remarks)
IOpcSignatureReference インターフェイスポインターを作成するには、IOpcSignatureReferenceSet::Create メソッドを呼び出します。IOpcSignatureReferenceSet::Create は、パッケージ固有の Object 要素への参照は作成しません。その参照は、署名の生成時に自動的に作成されます。
IOpcSignatureReference インターフェイスポインターを取得するには、IOpcSignatureReferenceEnumerator::GetCurrent メソッドを呼び出します。IOpcSignatureReferenceEnumerator::GetCurrent では、パッケージ固有の Object 要素への参照は取得できません。その参照を取得するには、IOpcDigitalSignature::GetPackageObjectReference メソッドを呼び出してください。
このインターフェイスは、参照自体および参照先の XML 要素に関する情報を取得するメソッドを提供します。参照先の要素には、パッケージ固有の Object 要素、アプリケーション固有の Object 要素、またはアプリケーション固有の Object の子要素を指定できます。
署名が生成されると、この参照情報は署名の XML マークアップ (署名マークアップ) にシリアル化されます。署名マークアップでは、この情報は Reference 要素として表現され、その URI 属性の値は "#" に参照先要素の Id 属性値を続けたものになります。たとえば、参照先要素の Id 属性が "Application" の場合、Reference 要素の URI 属性は次のマークアップのように "#Application" に設定されます。
次の署名マークアップは、署名されたアプリケーション固有の Object 要素へのシリアル化された参照を示しています。
<Signature Id="SignatureId" xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
[...]
<Reference URI="#idPackageObject" ...>
[...]
</Reference>
<!-- この参照は、署名の生成時にアプリケーション固有の
Object 要素が署名されたことを示します。-->
<Reference URI="#Application" ...>
[...]
</Reference>
</SignedInfo>
[...]
<Object Id="idPackageObject" ...>
[...]
</Object>
<!-- このアプリケーション固有の <Object> 要素は、署名の生成時に
署名されました。 -->
<Object Id="Application">
[...]
</Object>
</Signature>
次の署名マークアップは、署名されたアプリケーション固有の Object 要素の子要素へのシリアル化された参照を示しています。
<Signature Id="SignatureId" xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
[...]
<Reference URI="#idPackageObject" ...>
[...]
</Reference>
<!-- この参照は、署名の生成時にアプリケーション固有の Object 要素内の
MyElement が署名されたことを示します。 -->
<Reference URI="#MyElementId" ...>
[...]
</Reference>
</SignedInfo>
[...]
<Object Id="idPackageObject" ...>
[...]
</Object>
<Object Id="Application">
[...]
<!-- この要素は署名されます。 -->
<MyElement Id="MyElementId">
[...]
</MyElement>
[...]
</Object>
</Signature>
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
参照の識別子を取得します。
| referenceId | LPWSTR* | out | 参照の識別子。 識別子が設定されていない場合、referenceId は空文字列 "" になります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| referenceId パラメーターが NULL です。 |
解説(Remarks)
このメソッドは、referenceId で返される文字列が使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。
参照に識別子を指定するかどうかは任意です。指定した場合、識別子は署名マークアップ内の Reference 要素の省略可能な Id 属性としてシリアル化されます。
スレッドセーフティ
パッケージングオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
参照先の XML 要素の URI を取得します。
| referenceUri | IUri** | out | 参照先要素の URI へのポインター。 この URI は文字列で表され、"#" に参照先要素の Id 属性値を続けたものになります: "#<elementIdValue>"。 例については、「解説」セクションを参照してください。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| referenceUri パラメーターが NULL です。 |
解説(Remarks)
参照先要素の URI は、署名マークアップ内の Reference 要素の URI 属性としてシリアル化されます。
次の表は、文字列として表現した referenceUri パラメーター値の 2 つの例を示しています。
| 文字列としての referenceUri の値 | 参照先要素 | 要素の説明 |
|---|---|---|
| "#idMyCustomObject" | "<Object Id="idMyCustomObject">...</Object>" | アプリケーション固有の Object 要素。 |
| "#idMyElement" | "<Object><MyElement Id="idMyElement">...</MyElement>...</Object>" | アプリケーション固有の Object の子要素。 |
スレッドセーフティ
パッケージングオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
参照先の XML 要素の型を示す文字列を取得します。
| type | LPWSTR* | out | 参照先の XML 要素の型を示す文字列。 型が設定されていない場合、type パラメーターは空文字列 "" になります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| type パラメーターが NULL です。 |
解説(Remarks)
このメソッドは、type で返される文字列が使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。
参照先の XML 要素に型を指定するかどうかは任意です。指定した場合、参照先要素の型は、署名マークアップ内の Reference 要素の省略可能な Type 属性の値としてシリアル化されます。
呼び出し元は、参照先要素の型を使用して、その要素が Object、SignatureProperty、Manifest のいずれの要素であるかを示すことができます。この識別情報は、呼び出し元が参照を処理する際に役立ちます。
スレッドセーフティ
パッケージングオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
参照先の XML 要素が署名される際に、その要素に対して使用する正規化 (canonicalization) メソッドを取得します。
| transformMethod | OPC_CANONICALIZATION_METHOD* | out | 参照先の XML 要素が署名される際に、その要素に対して使用する正規化 (canonicalization) メソッド。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| transformMethod パラメーターが NULL です。 |
参照先の XML 要素が署名される際に、その要素に対して使用するダイジェストメソッドを取得します。
| digestMethod | LPWSTR* | out | 参照先の XML 要素に対して使用するダイジェストメソッド。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| digestMethod パラメーターが NULL です。 |
解説(Remarks)
このメソッドは、digestMethod で返される文字列が使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。
スレッドセーフティ
パッケージングオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
参照先の XML 要素が署名される際に、その要素に対して計算されるダイジェスト値を取得します。
| digestValue | BYTE** | out | 参照先の XML 要素が署名される際に、指定されたダイジェストメソッドを使用して計算されたダイジェスト値を格納するバッファーへのポインター。 |
| count | DWORD* | out | digestValue バッファーのサイズ。 参照先の XML 要素がまだ署名されていない場合、count は 0 になります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれます (これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| digestValue および count パラメーターの少なくとも 1 つが NULL です。 |
解説(Remarks)
このメソッドは、digestValue で返されるバッファーが使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IOpcSignatureReference "{1B47005E-3011-4EDC-BE6F-0F65E5AB0342}" #usecom global IOpcSignatureReference IID_IOpcSignatureReference "{}" #comfunc global IOpcSignatureReference_GetId 3 var #comfunc global IOpcSignatureReference_GetUri 4 sptr #comfunc global IOpcSignatureReference_GetType 5 var #comfunc global IOpcSignatureReference_GetTransformMethod 6 var #comfunc global IOpcSignatureReference_GetDigestMethod 7 var #comfunc global IOpcSignatureReference_GetDigestValue 8 var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IOpcSignatureReference "{1B47005E-3011-4EDC-BE6F-0F65E5AB0342}" #usecom global IOpcSignatureReference IID_IOpcSignatureReference "{}" #comfunc global IOpcSignatureReference_GetId 3 sptr #comfunc global IOpcSignatureReference_GetUri 4 sptr #comfunc global IOpcSignatureReference_GetType 5 sptr #comfunc global IOpcSignatureReference_GetTransformMethod 6 sptr #comfunc global IOpcSignatureReference_GetDigestMethod 7 sptr #comfunc global IOpcSignatureReference_GetDigestValue 8 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。