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。 可能的值包括(但并不限于)下表中的项。
返回代码/值 | 说明 |
---|---|
|
方法成功。 |
|
至少一个 证书、 signingOptions 和 digitalSignature 参数为 NULL。 |
|
尚未设置默认摘要方法;若要设置它,请调用 IOpcSigningOptions::SetDefaultDigestMethod。 |
|
无法获取用于签名的引用的包组件或签名标记中的元素的摘要值。 |
|
签名的时间格式不是有效的 OPC_SIGNATURE_TIME_FORMAT 枚举值。 |
|
指示的关系签名选项不是有效的 OPC_RELATIONSHIPS_SIGNING_OPTION 枚举值。 |
|
包中的签名格式不正确。 无法获取签名值。 |
|
尚未设置签名方法。 调用 IOpcSigningOptions::SetSignatureMethod 来设置签名方法。 |
|
指定的部件不存在。 |
|
来自加密 API 的HRESULT 错误代码。 |
|
来自 Windows Web 服务 API 的 HRESULT 错误代码。 |
注解
此方法使用 Packaging 对象对包进行更改。 在保存包本身之前,不会保存生成的更改。
在调用此方法以生成签名之前,请调用 IOpcSigningOptions::SetDefaultDigestMethod 和 IOpcSigningOptions::SetSignatureMethod 方法。
若要创建 此方法所需的 IOpcSigningOptions 接口指针,请调用 CreateSigningOptions 方法。
- 数字签名源部件
- 数字签名源关系类型的包关系
- 一个包含签名标记的签名部件
- 包含证书的一个或多个部件
- 一个以签名部件为目标且以数字签名源部件为源的关系
- 一个或多个关系,该关系面向包含证书且具有另一个签名部件作为其源的签名部件
如果 Sign 失败,上述任何部分和关系都可以在包中由 Packaging 对象表示。 如果方法返回 OPC_E_DS_SIGNATURE_METHOD_NOT_SET 或 OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET 错误代码,则未更改包。
如果 Sign 成功,则会计算已签名实体的摘要值,并将生成的签名序列化为签名标记。 可能的签名实体包括 Signature 元素、引用、部件、关系以及特定于包和特定于应用程序的 Object 元素。
调用方使用 IOpcSigningOptions 接口设置签名信息时引入包签名的错误在调用 Sign 之前可能不会公开。
线程安全性
打包对象不是线程安全的。
有关详细信息,请参阅打包 API 的入门。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 R2 [仅限桌面应用] |
目标平台 | Windows |
标头 | msopc.h |
另请参阅
概述
引用