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 |
---|---|
|
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 |
---|---|
|
pvSubject é um ponteiro para uma estrutura CRYPT_DATA_BLOB . |
|
pvSubject é um ponteiro para uma estrutura CCERT_CONTEXT . |
|
pvSubject é um ponteiro para uma estrutura CCRL_CONTEXT . |
|
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 |
---|---|
|
pvIssuer é um ponteiro para uma estrutura CERT_PUBLIC_KEY_INFO . |
|
pvIssuer é um ponteiro para uma estrutura CCERT_CONTEXT . |
|
pvIssuer é um ponteiro para uma estrutura CCERT_CHAIN_CONTEXT . |
|
pvIssuer deve ser NULL. |
[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 |
---|---|
|
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. |
|
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:
Nota Esse sinalizador só será aplicável se CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL for especificado no parâmetro dwSubjectType .
|
|
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 .
|
[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.
Código de retorno | Descrição |
---|---|
|
Tipo de codificação de certificado inválido. Atualmente, há suporte apenas para X509_ASN_ENCODING . |
|
O OID ( identificador de objeto ) do algoritmo de assinatura não é mapeado para um algoritmo de hash conhecido ou com suporte. |
|
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 |