Função CryptMsgVerifyCountersignatureEncodedEx (wincrypt.h)

A função CryptMsgVerifyCountersignatureEncodedEx verifica se o parâmetro pbSignerInfoCounterSignature contém o hash criptografado do campo encryptedDigest da estrutura de parâmetros pbSignerInfo . O signatário pode ser uma estrutura CERT_PUBLIC_KEY_INFO , um contexto de certificado ou um contexto de cadeia.

Sintaxe

BOOL CryptMsgVerifyCountersignatureEncodedEx(
  [in, optional] HCRYPTPROV_LEGACY hCryptProv,
  [in]           DWORD             dwEncodingType,
  [in]           PBYTE             pbSignerInfo,
  [in]           DWORD             cbSignerInfo,
  [in]           PBYTE             pbSignerInfoCountersignature,
  [in]           DWORD             cbSignerInfoCountersignature,
  [in]           DWORD             dwSignerType,
  [in]           void              *pvSigner,
                 DWORD             dwFlags,
                 void              *pvExtra
);

Parâmetros

[in, optional] hCryptProv

Esse parâmetro não é usado e deve ser definido como NULL.

Windows Server 2003 e Windows XP: NULL ou o identificador do provedor criptográfico a ser usado para hash do campo encryptedDigest de pbSignerInfo. O tipo de dados desse parâmetro é HCRYPTPROV.

A menos que haja um motivo forte para passar um provedor criptográfico específico no hCryptProv, passe NULL para fazer com que o provedor RSA ou DSS padrão seja usado.

[in] dwEncodingType

O tipo de codificação usado. Atualmente, apenas X509_ASN_ENCODING e PKCS_7_ASN_ENCODING estão sendo usados; no entanto, tipos de codificação adicionais podem ser adicionados no futuro. Para qualquer tipo de codificação atual, use:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING.

[in] pbSignerInfo

Um ponteiro para o BLOB codificado que contém o signatário do conteúdo de uma mensagem a ser contratribuída.

[in] cbSignerInfo

A contagem, em bytes, do BLOB codificado para o signatário do conteúdo.

[in] pbSignerInfoCountersignature

Um ponteiro para o BLOB codificado que contém as informações do contra-atribuídor.

[in] cbSignerInfoCountersignature

A contagem, em bytes, do BLOB codificado para o contra-atribuídor da mensagem.

[in] dwSignerType

A estrutura que contém as informações do signatário. A tabela a seguir mostra os valores predefinidos e as estruturas indicadas.

Valor Significado
CMSG_VERIFY_SIGNER_PUBKEY
pvSigner é um ponteiro para uma estrutura de CERT_PUBLIC_KEY_INFO .
CMSG_VERIFY_SIGNER_CERT
pvSigner é um ponteiro para uma estrutura CERT_CONTEXT .
CMSG_VERIFY_SIGNER_CHAIN
pvSigner é um ponteiro para uma estrutura de CERT_CHAIN_CONTEXT .

[in] pvSigner

Um ponteiro para uma estrutura CERT_PUBLIC_KEY_INFO , um contexto de certificado ou um contexto de cadeia, dependendo do valor de dwSignerType.

dwFlags

Sinalizadores que modificam o comportamento da função. Isso pode ser zero ou o valor a seguir.

Valor Significado
CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG
0x00000001
Executa uma assinatura forte marcar após a verificação bem-sucedida da assinatura. Defina o parâmetro pvExtra para apontar para uma estrutura CERT_STRONG_SIGN_PARA que contém os parâmetros necessários para marcar a força da assinatura..

Windows 8 e Windows Server 2012: o suporte para esse sinalizador começa.

pvExtra

Se você definir o parâmetro dwFlags como CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG, defina esse parâmetro (pvExtra) para apontar para uma estrutura CERT_STRONG_SIGN_PARA que contém os parâmetros usados para marcar a força da assinatura.

Retornar valor

Se a função for bem-sucedida, o valor retornado será diferente de zero (TRUE).

Se a função falhar, o valor retornado será zero (FALSE). Para obter informações de erro estendidas, chame GetLastError.

Os códigos de erro a seguir são mais comumente retornados pela função GetLastError .

Código de retorno Descrição
CRYPT_E_AUTH_ATTR_MISSING
A mensagem não contém um atributo autenticado esperado.
CRYPT_E_HASH_VALUE
O valor de hash não está correto.
CRYPT_E_UNEXPECTED_ENCODING
A mensagem não é codificada conforme o esperado.
CRYPT_E_UNKNOWN_ALGO
O algoritmo criptográfico é desconhecido.
E_INVALIDARG
Um ou mais argumentos não são válidos.
E_OUTOFMEMORY
Ficou sem memória.
 

Erros propagados das funções a seguir podem ser retornados.

Se a função falhar, GetLastError poderá retornar um erro de codificação/decodificação de ASN.1 (Abstract Syntax Notation One ). Para obter informações sobre esses erros, consulte Codificação/Decodificação de Valores Retornados do ASN.1.

Comentários

A verificação do contra-sinal é feita usando a estrutura PKCS #7 SIGNERINFO . A assinatura deve conter o hash criptografado do campo encryptedDigest de pbSignerInfo.

O emissor e o número de série do contra-atribuídor devem corresponder às informações do contra-atribuídor de pbSignerInfoCountersignature. Os únicos campos referenciados de pciCountersigner são SerialNumber, Issuer e SubjectPublicKeyInfo. O SubjectPublicKeyInfo é usado para acessar a chave pública usada para criptografar o hash do pciCountersigner para compará-lo com o hash do pbSignerInfo.

Exemplos

Para obter um exemplo que usa essa função, consulte Exemplo de Programa C: Codificação e Decodificação de uma Mensagem ContraInsignada.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [aplicativos da área de trabalho | aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho wincrypt.h
Biblioteca Crypt32.lib
DLL Crypt32.dll

Confira também

CryptMsgCountersign

CryptMsgCountersignEncoded

Funções de mensagem de baixo nível

Funções de mensagem simplificadas