Função CryptVerifyCertificateSignatureEx (wincrypt.h)

A função CryptVerifyCertificateSignatureEx verifica a assinatura de um certificado de entidade, lista de revogação de certificado, solicitação de certificado ou solicitação keygen usando a chave pública do emissor. A função não requer acesso a uma chave privada.

Sintaxe

BOOL CryptVerifyCertificateSignatureEx(
  [in]                HCRYPTPROV_LEGACY hCryptProv,
  [in]                DWORD             dwCertEncodingType,
  [in]                DWORD             dwSubjectType,
  [in]                void              *pvSubject,
  [in]                DWORD             dwIssuerType,
  [in]                void              *pvIssuer,
  [in]                DWORD             dwFlags,
  [in, out, optional] void              *pvExtra
);

Parâmetros

[in] hCryptProv

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

Windows Server 2003 e Windows XP: Um identificador para o provedor de serviços criptográficos usado para verificar a assinatura. O tipo de dados desse parâmetro é HCRYPTPROV.

NULL é passado, a menos que haja um motivo forte para passar um provedor criptográfico específico. A passagem de NULL faz com que o provedor RSA ou DSS padrão seja adquirido.

[in] dwCertEncodingType

O tipo de codificação de certificado que foi usado para criptografar o assunto. O identificador de tipo de codificação de mensagem , contido no WORD alto desse valor, é ignorado por essa função.

Esse parâmetro pode ser o seguinte tipo de codificação de certificado definido no momento.

Valor Significado
X509_ASN_ENCODING
1 (0x1)
Especifica a codificação de certificado X.509.

[in] dwSubjectType

O tipo de assunto. Esse parâmetro pode ser um dos seguintes tipos de assunto.

Valor Significado
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB
1 (0x1)
pvSubject é um ponteiro para uma estrutura CRYPT_DATA_BLOB .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT
2 (0x2)
pvSubject é um ponteiro para uma estrutura CCERT_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL
3 (0x3)
pvSubject é um ponteiro para uma estrutura CCRL_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE
4 (0x4)
pvSubject é um ponteiro para uma estrutura OCSP_BASIC_SIGNED_RESPONSE_INFO .

Windows Server 2003 e Windows XP: Não há suporte para esse tipo de assunto.

[in] pvSubject

Um ponteiro para uma estrutura do tipo indicada por dwSubjectType que contém a assinatura a ser verificada.

[in] dwIssuerType

O tipo de emissor. Esse parâmetro pode ser um dos seguintes tipos de emissor.

Valor Significado
CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY
1 (0x1)
pvIssuer é um ponteiro para uma estrutura CERT_PUBLIC_KEY_INFO .
CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT
2 (0x2)
pvIssuer é um ponteiro para uma estrutura CCERT_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN
3 (0x3)
pvIssuer é um ponteiro para uma estrutura CCERT_CHAIN_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL
4 (0x4)
pvIssuer deve ser NULL.
 
Nota Se dwIssuerType for CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL e o algoritmo de assinatura for um algoritmo de hash, espera-se que a assinatura contenha apenas octetos de hash não criptografados. Somente CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL pode ser especificado neste caso de assinatura não criptografado. Se qualquer outro dwIssuerType for especificado, a verificação falhará e GetLastError retornará E_INVALIDARG.
 

[in] pvIssuer

Um ponteiro para uma estrutura do tipo indicada pelo valor de dwIssuerType. A estrutura contém acesso à chave pública necessária para verificar a assinatura.

[in] dwFlags

Sinalizadores que modificam o comportamento da função. Isso pode ser zero ou um OR bit a bit dos valores a seguir.

Valor Significado
CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG
0x00000001
Se você definir esse sinalizador e CryptVerifyCertificateSignatureEx detectar um algoritmo MD2 ou MD4, a função retornará FALSE e definirá GetLastError como NTE_BAD_ALGID. A assinatura ainda é verificada, mas essa combinação de erros permite que o chamador, agora sabendo que um algoritmo MD2 ou MD4 foi usado, decida se deseja confiar ou rejeitar a assinatura.

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

CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG
0x00000002
Define propriedades de assinatura fortes, após a verificação bem-sucedida, no assunto apontado pelo parâmetro pvSubject .

A propriedade a seguir é definida no contexto do certificado:

  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
As seguintes propriedades são definidas no contexto crl:
  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
  • CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID
Nota Esse sinalizador só será aplicável se CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL for especificado no parâmetro dwSubjectType .
 
Windows 8 e Windows Server 2012: O suporte para esse sinalizador começa.
CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG
0x00000004
Retorna um ponteiro para uma estrutura CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO no parâmetro pvExtra . A estrutura contém o comprimento, em bits, da chave pública e os nomes dos algoritmos de assinatura e hash usados.

Você deve chamar CryptMemFree para liberar a estrutura. Se a memória não puder ser alocada para a estrutura CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO , essa função retornará com êxito, mas definirá o parâmetro pvExtra como NULL.

Nota Esse sinalizador só será aplicável se CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE for especificado no parâmetro dwSubjectType .
 
Windows 8 e Windows Server 2012: O suporte para esse sinalizador começa.

[in, out, optional] pvExtra

Ponteiro para uma estrutura CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO se o parâmetro dwFlags estiver definido como CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG.

Você deve chamar CryptMemFree para liberar a estrutura.

Valor retornado

Retornará diferente de zero se tiver êxito ou zero caso contrário.

Para obter informações de erro estendidas, chame GetLastError.

Nota Erros das funções chamadas CryptCreateHash, CryptImportKey, CryptVerifySignature e CryptHashData podem ser propagados para essa função.
 
Em caso de falha, essa função fará com que os seguintes códigos de erro sejam retornados de GetLastError.
Código de retorno Descrição
ERROR_FILE_NOT_FOUND
Tipo de codificação de certificado inválido. Atualmente, há suporte apenas para X509_ASN_ENCODING .
NTE_BAD_ALGID
O OID ( identificador de objeto ) do algoritmo de assinatura não é mapeado para um algoritmo de hash conhecido ou com suporte.
NTE_BAD_SIGNATURE
A assinatura não era válida.
 

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

Comentários

O buffer de assunto pode conter um BLOB codificado ou um contexto para um certificado ou CRL. No caso de um contexto de certificado, se os parâmetros de chave pública do certificado estiverem ausentes e se esses parâmetros puderem ser herdados do emissor do certificado, por exemplo, do parâmetro de chave pública DSS, a propriedade CERT_PUBKEY_ALG_PARA_PROP_ID do contexto será atualizada com os parâmetros de algoritmo de chave pública do emissor para uma assinatura válida.

Requisitos

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

Confira também

CryptVerifyCertificateSignature