IOpcDigitalSignature
COM公式ドキュメント
パッケージのデジタル署名を表します。
解説(Remarks)
署名を生成して IOpcDigitalSignature インターフェイスポインターを作成するには、IOpcDigitalSignatureManager::Sign メソッドを呼び出します。
生成済みの署名に IOpcDigitalSignature インターフェイスポインターを使用してアクセスするには、IOpcDigitalSignatureEnumerator::GetCurrent メソッドを呼び出します。
署名が生成されると、これらの情報は署名の XML マークアップ (署名マークアップ) にシリアル化されます。生成された署名マークアップは署名パートに格納されます。
スレッドセーフティ
パッケージングオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
メソッド 15
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
署名マークアップの Signature 要素におけるプレフィックスと名前空間のマッピングを取得します。
| prefixes | LPWSTR** | out | XML プレフィックス文字列のバッファーへのポインター。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出して、バッファー内の各文字列のメモリを解放し、その後バッファー自体のメモリを解放してください。 |
| namespaces | LPWSTR** | out | XML 名前空間文字列のバッファーへのポインター。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出して、バッファー内の各文字列のメモリを解放し、その後バッファー自体のメモリを解放してください。 |
| count | DWORD* | out | prefixes バッファーおよび namespaces バッファーのサイズ。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| prefixes パラメーターが NULL です。 | |
| namespaces パラメーターが NULL です。 | |
| 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);
}
署名マークアップの Signature 要素から Id 属性の値を取得します。
| signatureId | LPWSTR* | out | 署名マークアップの Signature 要素が持つ Id 属性値へのポインター。 Signature 要素に Id 属性値がない場合、signatureId は空の文字列になります。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| signatureId パラメーターが NULL です。 |
解説(Remarks)
このメソッドは、signatureId で返される文字列が使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。
Signature 要素の Id 属性は省略可能です。このメソッドが呼び出されない場合、Signature 要素は Id 属性を持ちません。
署名が生成される前に署名 Id を設定するには、IOpcSigningOptions::SetSignatureId メソッドを呼び出します。
署名が生成される前に Id にアクセスするには、IOpcSigningOptions::GetSignatureId メソッドを呼び出します。
署名マークアップを格納しているパートのパート名を取得します。
| signaturePartName | IOpcPartUri** | out | 署名マークアップを格納する署名パートのパート名を表す IOpcPartUri インターフェイスポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| signaturePartName パラメーターが NULL です。 |
解説(Remarks)
署名が生成される前にこの署名パートのパート名を設定するには、IOpcSigningOptions::SetSignaturePartName メソッドを呼び出します。署名が生成される前に署名パート名にアクセスするには、IOpcSigningOptions::GetSignaturePartName を呼び出します。
署名マークアップを格納する署名パートは、その署名に固有のものです。
スレッドセーフティ
パッケージングオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
署名マークアップの SignatureValue 要素の値を計算するために使用された署名メソッドを取得します。
| signatureMethod | LPWSTR* | out | 署名メソッドへのポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| signatureMethod パラメーターが NULL です。 |
解説(Remarks)
このメソッドは、signatureMethod で返される文字列が使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。
署名が生成される前に署名メソッドを設定するには、IOpcSigningOptions::SetSignatureMethod メソッドを呼び出します。
署名が生成される前に署名メソッドにアクセスするには、IOpcSigningOptions::GetSignatureMethod を呼び出します。署名が生成された後に署名メソッドにアクセスするには、IOpcDigitalSignature::GetSignatureMethod メソッドを呼び出します。いずれのメソッドも、IOpcSigningOptions::SetSignatureMethod によって設定された値を取得します。
署名が検証される際には、署名メソッドを使用してその値が再計算され、再計算された値が署名マークアップ内の SignatureValue 要素の値と比較されます。
スレッドセーフティ
パッケージングオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
シリアル化された署名の SignedInfo 要素に適用された正規化 (canonicalization) メソッドを取得します。
| canonicalizationMethod | OPC_CANONICALIZATION_METHOD* | out | 署名が生成されたときに署名マークアップの SignedInfo 要素に適用された正規化メソッドを指定する OPC_CANONICALIZATION_METHOD 値。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| canonicalizationMethod パラメーターが NULL です。 |
解説(Remarks)
API を使用して署名を生成する場合、コメントを削除する C14N 正規化メソッドが SignedInfo 要素に適用されます。このメソッドは OPC_CANONICALIZATION_C14N 列挙値に対応します。
スレッドセーフティ
パッケージングオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
署名マークアップの SignatureValue 要素に含まれる値をデコードして取得します。
| signatureValue | BYTE** | out | 署名マークアップの SignatureValue 要素の値をデコードしたものを格納するバッファーへのポインター。 |
| count | DWORD* | out | signatureHashValue バッファーのサイズ。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| signatureValue および count パラメーターの少なくとも 1 つが NULL です。 |
解説(Remarks)
このメソッドは、signatureValue で返されるバッファーが使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。
SignatureValue 要素には、署名マークアップの SignedInfo 要素に署名メソッドを適用して計算された、base-64 エンコード済みの値が格納されます。署名メソッドを取得するには、GetSignatureMethod メソッドを呼び出します。
API を使用して署名を生成する場合は、IOpcSigningOptions::SetSignatureMethod メソッドを呼び出して署名メソッドを設定します。
スレッドセーフティ
パッケージングオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
署名済みのパートへの参照を表す IOpcSignaturePartReference インターフェイスポインターの列挙子を取得します。
| partReferenceEnumerator | IOpcSignaturePartReferenceEnumerator** | out | 署名済みのパートへの参照を表す IOpcSignaturePartReference インターフェイスポインターの列挙子へのポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| partReferenceEnumerator パラメーターが NULL です。 |
署名済みのリレーションシップへの参照を表す IOpcSignatureRelationshipReference インターフェイスポインターの列挙子を取得します。
| relationshipReferenceEnumerator | IOpcSignatureRelationshipReferenceEnumerator** | out | 署名済みのリレーションシップへの参照を表す IOpcSignatureRelationshipReference インターフェイスポインターの列挙子へのポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| relationshipReferenceEnumerator パラメーターが NULL です。 |
署名が生成された時刻を示す文字列を取得します。
| signingTime | LPWSTR* | out | 署名が生成された時刻を示す文字列へのポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| signingTime パラメーターが NULL です。 |
解説(Remarks)
このメソッドは、signingTime で返される文字列が使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。
signingTime 文字列の書式を取得するには、GetTimeFormat メソッドを呼び出します。
スレッドセーフティ
パッケージングオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
GetSigningTime メソッドが返す文字列の書式を取得します。
| timeFormat | OPC_SIGNATURE_TIME_FORMAT* | out | GetSigningTime が返す文字列の書式を示す OPC_SIGNATURE_TIME_FORMAT 値。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| timeFormat パラメーターが NULL です。 |
解説(Remarks)
現在のパッケージ署名が生成された時刻を示す文字列にアクセスするには、GetSigningTime メソッドを呼び出します。
署名が生成される前に署名時刻文字列の書式を設定するには、IOpcSigningOptions::SetTimeFormat メソッドを呼び出します。署名が生成される前にその書式にアクセスするには、IOpcSigningOptions::GetTimeFormat メソッドを呼び出します。
スレッドセーフティ
パッケージングオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
署名済みのパッケージ固有の Object 要素への参照を表す IOpcSignatureReference インターフェイスポインターを取得します。
| packageObjectReference | IOpcSignatureReference** | out | 署名済みのパッケージ固有の Object 要素への参照を表す IOpcSignatureReference インターフェイスポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 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 を参照してください。
署名で使用されている証明書の列挙子を取得します。
| certificateEnumerator | IOpcCertificateEnumerator** | out | 署名で使用されている CERT_CONTEXT 構造体へのポインターの列挙子へのポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| certificateEnumerator パラメーターが NULL です。 |
署名済みのアプリケーション固有の XML 要素への参照を表す IOpcSignatureReference インターフェイスポインターの列挙子を取得します。
| customReferenceEnumerator | IOpcSignatureReferenceEnumerator** | out | IOpcSignatureReference インターフェイスポインターの列挙子へのポインター。IOpcSignatureReference インターフェイスポインターは、署名済みのアプリケーション固有の XML 要素への参照を表します。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| customReferenceEnumerator パラメーターが NULL です。 |
解説(Remarks)
署名済みの XML 要素に IOpcSignatureCustomObject インターフェイスポインターを使用してアクセスするには、IOpcSignatureCustomObjectEnumerator::GetCurrent メソッドを呼び出します。署名済みの XML 要素のマークアップにアクセスするには、IOpcSignatureCustomObject::GetXml メソッドを呼び出します。
スレッドセーフティ
パッケージングオブジェクトはスレッドセーフではありません。
詳細については、Getting Started with the Packaging API を参照してください。
署名マークアップ内のアプリケーション固有の Object 要素を表す IOpcSignatureCustomObject インターフェイスポインターの列挙子を取得します。
| customObjectEnumerator | IOpcSignatureCustomObjectEnumerator** | out | IOpcSignatureCustomObject インターフェイスポインターの列挙子へのポインター。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| customObjectEnumerator パラメーターが NULL です。 |
署名マークアップを取得します。
| signatureXml | BYTE** | out | 署名マークアップを格納するバッファーへのポインター。 |
| count | DWORD* | out | signatureXml バッファーのサイズ。 |
戻り値
このメソッドは HRESULT を返します。返される値には、次の表に示すものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| digestValue および count パラメーターの少なくとも 1 つが NULL です。 |
解説(Remarks)
このメソッドは、signatureXml で返されるバッファーが使用するメモリを割り当てます。メソッドが成功した場合は、CoTaskMemFree 関数を呼び出してメモリを解放してください。
スレッドセーフティ
パッケージングオブジェクトはスレッドセーフではありません。
詳細については、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_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 指定が可能。#define global IID_IOpcDigitalSignature "{52AB21DD-1CD0-4949-BC80-0C1232D00CB4}" #usecom global IOpcDigitalSignature IID_IOpcDigitalSignature "{}" #comfunc global IOpcDigitalSignature_GetNamespaces 3 sptr,sptr,sptr #comfunc global IOpcDigitalSignature_GetSignatureId 4 sptr #comfunc global IOpcDigitalSignature_GetSignaturePartName 5 sptr #comfunc global IOpcDigitalSignature_GetSignatureMethod 6 sptr #comfunc global IOpcDigitalSignature_GetCanonicalizationMethod 7 sptr #comfunc global IOpcDigitalSignature_GetSignatureValue 8 sptr,sptr #comfunc global IOpcDigitalSignature_GetSignaturePartReferenceEnumerator 9 sptr #comfunc global IOpcDigitalSignature_GetSignatureRelationshipReferenceEnumerator 10 sptr #comfunc global IOpcDigitalSignature_GetSigningTime 11 sptr #comfunc global IOpcDigitalSignature_GetTimeFormat 12 sptr #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 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。