Compartir a través de


Método IOpcDigitalSignatureManager::Sign (msopc.h)

Firma el paquete mediante la generación de una firma mediante el certificado especificado y el puntero de interfaz IOpcSigningOptions . La firma resultante se representa mediante un puntero de interfaz IOpcDigitalSignature .

Sintaxis

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

Parámetros

[in] certificate

Puntero a una estructura de CERT_CONTEXT que contiene el certificado.

[in] signingOptions

Puntero de interfaz IOpcSigningOptions que se usa para generar la firma.

[out, retval] digitalSignature

Nuevo puntero de interfaz IOpcDigitalSignature que representa la firma.

Valor devuelto

El método devuelve un valor HRESULT. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros.

Código o valor devuelto Descripción
S_OK
El método se ha llevado a cabo de forma correcta.
E_POINTER
Al menos uno de los parámetros certificate, signingOptions y digitalSignature es NULL.
OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET
0x80510047
No se ha establecido el método de resumen predeterminado; para establecerlo, llame a IOpcSigningOptions::SetDefaultDigestMethod.
OPC_E_DS_DIGEST_VALUE_ERROR
0x8051001A
No se puede obtener el valor de resumen de un componente de paquete o un elemento en el marcado de firma al que se hace referencia para la firma.
OPC_E_DS_INVALID_OPC_SIGNATURE_TIME_FORMAT
0x80510024
El formato de hora de la firma no es un valor de enumeración OPC_SIGNATURE_TIME_FORMAT válido.
OPC_E_DS_INVALID_RELATIONSHIPS_SIGNING_OPTION
0x80510023
Una opción de firma de relación indicada no es un valor de enumeración OPC_RELATIONSHIPS_SIGNING_OPTION válido.
OPC_E_DS_SIGNATURE_CORRUPT
0x80510019
Una firma del paquete no tiene el formato correcto. No se puede obtener el valor de firma.
OPC_E_DS_SIGNATURE_METHOD_NOT_SET
0x80510046
No se ha establecido el método de firma. Llame a IOpcSigningOptions::SetSignatureMethod para establecer el método de firma.
OPC_E_NO_SUCH_PART
0x80510018
La parte especificada no existe.
Error de criptografía
Código de error HRESULT de una API de criptografía .
Error de servicios web de Windows
Código de error HRESULT de una API de servicios web de Windows .

Comentarios

Este método usa objetos Packaging para realizar cambios en un paquete. Los cambios resultantes no se guardan hasta que se guarda el propio paquete.

Antes de llamar a este método para generar una firma, llame a los métodos IOpcSigningOptions::SetDefaultDigestMethod e IOpcSigningOptions::SetSignatureMethod .

Para crear un puntero de interfaz IOpcSigningOptions , que requiere este método, llame al método CreateSigningOptions .

Importante Si el paquete se modifica mientras se ejecuta este método, se puede producir un error en Sign o generar una firma incoherente. Para evitar daños en el paquete, use las API para guardar el paquete antes de llamar a Sign. Para obtener información sobre cómo guardar un paquete, vea Guardar un paquete.
 
Este método puede crear las siguientes partes y relaciones:
  • La parte Origen de la firma digital
  • Relación de paquete del tipo de relación de origen de firma digital
  • Una parte de firma que contiene el marcado de firma
  • Una o varias partes que contienen un certificado
  • Una relación que tiene como destino un elemento de firma y que tiene la parte Origen de firma digital como origen
  • Una o varias relaciones que tienen como destino un elemento de firma que contiene un certificado y que tiene otra parte de firma como origen

Si se produce un error en Sign, cualquiera de las partes y relaciones anteriores se puede representar, en el paquete, mediante objetos Packaging. Si el método devuelve el OPC_E_DS_SIGNATURE_METHOD_NOT_SET o OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET código de error, el paquete no se ha modificado.

Si Sign se ejecuta correctamente, los valores de resumen se calculan para las entidades firmadas y la firma generada se serializa como marcado de firma. Entre las posibles entidades firmadas se incluyen el elemento Signature , las referencias, los elementos, las relaciones y los elementos Object específicos del paquete y específicos de la aplicación.

Es posible que los errores que se introducen en una firma de paquete cuando el autor de la llamada use la interfaz IOpcSigningOptions para establecer información de firma no se exponga hasta que se llame a Sign .

Seguridad para subprocesos

Los objetos de empaquetado no son seguros para subprocesos.

Para más información, consulte la Introducción con la API de empaquetado.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 7 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 R2 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado msopc.h

Consulte también

Interfaces de empaquetado principal

Certificados digitales

Información general sobre firmas digitales

Introducción con la API de empaquetado

IOpcDigitalSignatureManager

Temas de introducción

Guía de programación de api de empaquetado

Referencia de API de empaquetado

Ejemplos de API de empaquetado

Empaquetado de interfaces de firma digital

Interfaces de empaquetado

Referencia

Guardar un paquete