Método IOpcDigitalSignatureManager::Sign (msopc.h)
Assina o pacote gerando uma assinatura usando o certificado especificado e o ponteiro da interface IOpcSigningOptions . A assinatura resultante é representada por um ponteiro de interface IOpcDigitalSignature .
Sintaxe
HRESULT Sign(
[in] const CERT_CONTEXT *certificate,
[in] IOpcSigningOptions *signingOptions,
[out, retval] IOpcDigitalSignature **digitalSignature
);
Parâmetros
[in] certificate
Um ponteiro para uma estrutura CERT_CONTEXT que contém o certificado.
[in] signingOptions
Um ponteiro de interface IOpcSigningOptions usado para gerar a assinatura.
[out, retval] digitalSignature
Um novo ponteiro de interface IOpcDigitalSignature que representa a assinatura.
Retornar valor
O método retorna um HRESULT. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir.
Valor/código retornado | Descrição |
---|---|
|
O método foi bem-sucedido. |
|
Pelo menos um dos parâmetros de certificado, signingOptions e digitalSignature é NULL. |
|
O método de resumo padrão não foi definido; para defini-lo, chame IOpcSigningOptions::SetDefaultDigestMethod. |
|
Não é possível obter o valor de resumo de um componente de pacote ou um elemento na marcação de assinatura que foi referenciada para assinatura. |
|
O formato de tempo da assinatura não é um valor de enumeração de OPC_SIGNATURE_TIME_FORMAT válido. |
|
Uma opção de assinatura de relação indicada não é um valor de enumeração de OPC_RELATIONSHIPS_SIGNING_OPTION válido. |
|
Uma assinatura no pacote não é formada corretamente. Não é possível obter o valor da assinatura. |
|
O método de assinatura não foi definido. Chame IOpcSigningOptions::SetSignatureMethod para definir o método de assinatura. |
|
A parte especificada não existe. |
|
Um código de erro HRESULT de uma API de Criptografia . |
|
Um código de erro HRESULT de uma API dos Serviços Web do Windows . |
Comentários
Esse método usa objetos Packaging para fazer alterações em um pacote. As alterações resultantes não são salvas até que o pacote em si seja salvo.
Antes que esse método seja chamado para gerar uma assinatura, chame os métodos IOpcSigningOptions::SetDefaultDigestMethod e IOpcSigningOptions::SetSignatureMethod .
Para criar um ponteiro de interface IOpcSigningOptions , que é exigido por esse método, chame o método CreateSigningOptions .
- A parte Origem da Assinatura Digital
- A relação de pacote do tipo de relação de origem da assinatura digital
- Uma parte de assinatura que contém marcação de assinatura
- Uma ou mais partes que contém um certificado
- Uma relação que tem como destino uma parte de assinatura e que tem a parte Origem da Assinatura Digital como sua origem
- Uma ou mais relações direcionadas a uma parte de assinatura que contém um certificado e que tem outra parte de assinatura como sua origem
Se Sign falhar, qualquer uma das partes e relações acima poderá ser representada, no pacote, por objetos Packaging. Se o método retornar o código de erro OPC_E_DS_SIGNATURE_METHOD_NOT_SET ou OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET , o pacote não foi alterado.
Se Sign for bem-sucedido, os valores de resumo serão calculados para entidades assinadas e a assinatura gerada será serializada como marcação de assinatura. As possíveis entidades assinadas incluem o elemento Signature , as referências, as partes, as relações e os elementos Object específicos do pacote e do aplicativo.
Erros introduzidos em uma assinatura de pacote quando o chamador estiver usando a interface IOpcSigningOptions para definir informações de assinatura podem não ser expostos até que Sign seja chamado.
Acesso thread-safe
Os objetos de empacotamento não são thread-safe.
Para obter mais informações, consulte o Introdução com a API de Empacotamento.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 7 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2008 R2 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | msopc.h |
Confira também
Principais interfaces de empacotamento
Visão geral de assinaturas digitais
Introdução com a API de Empacotamento
Visões gerais
Guia de Programação da API de Empacotamento
Referência da API de Empacotamento
Exemplos de API de empacotamento
Empacotando interfaces de assinatura digital
Referência