Compartir a través de


Función CryptVerifyMessageSignature (wincrypt.h)

La función CryptVerifyMessageSignature comprueba la firma de un mensaje firmado.

Esta función no se debe usar para comprobar la firma de un mensaje desasociado. Debe usar la función CryptVerifyDetachedMessageSignature para comprobar la firma de un mensaje desasociado.

Sintaxis

BOOL CryptVerifyMessageSignature(
  [in]            PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
  [in]            DWORD                      dwSignerIndex,
  [in]            const BYTE                 *pbSignedBlob,
  [in]            DWORD                      cbSignedBlob,
  [out]           BYTE                       *pbDecoded,
  [in, out]       DWORD                      *pcbDecoded,
  [out, optional] PCCERT_CONTEXT             *ppSignerCert
);

Parámetros

[in] pVerifyPara

Puntero a una estructura de CRYPT_VERIFY_MESSAGE_PARA que contiene parámetros de comprobación.

[in] dwSignerIndex

Índice de la firma deseada. Puede haber más de una firma. Se puede llamar repetidamente a CryptVerifyMessageSignature, incrementando dwSignerIndex cada vez. Establezca este parámetro en cero para el primer firmante, o si solo hay un firmante. Si la función devuelve FALSE y GetLastError devuelve CRYPT_E_NO_SIGNER, la llamada anterior procesó el último firmante del mensaje.

[in] pbSignedBlob

Puntero a un búfer que contiene el mensaje firmado.

[in] cbSignedBlob

Tamaño, en bytes, del búfer de mensajes firmado.

[out] pbDecoded

Puntero a un búfer para recibir el mensaje descodificado.

Este parámetro puede ser NULL si el mensaje descodificado no es necesario para el procesamiento adicional o para establecer el tamaño del mensaje con fines de asignación de memoria. Para obtener más información, vea Recuperación de datos de longitud desconocida.

[in, out] pcbDecoded

Puntero a un valor DWORD que especifica el tamaño, en bytes, del búfer pbDecoded . Cuando la función devuelve, esta DWORD contiene el tamaño, en bytes, del mensaje descodificado. El mensaje descodificado no se devolverá si este parámetro es NULL.

Nota Al procesar los datos devueltos, las aplicaciones deben usar el tamaño real de los datos devueltos. El tamaño real puede ser ligeramente menor que el tamaño del búfer especificado en la entrada. (En la entrada, los tamaños del búfer suelen especificarse lo suficientemente grandes como para asegurarse de que los datos de salida más grandes posibles caben en el búfer). En la salida, la variable a la que apunta este parámetro se actualiza para reflejar el tamaño real de los datos copiados en el búfer.
 

[out, optional] ppSignerCert

Dirección de un puntero de estructura CERT_CONTEXT que recibe el certificado del firmante. Cuando haya terminado de usar esta estructura, libere este puntero a la función CertFreeCertificateContext . Este parámetro puede ser NULL si no se necesita el certificado del firmante.

Valor devuelto

Si la función se ejecuta correctamente, la función devuelve un valor distinto de cero. Esto no significa necesariamente que la firma se haya comprobado. En el caso de un mensaje desasociado, la variable a la que apunta pcbDecoded contendrá cero. En este caso, esta función devolverá un valor distinto de cero, pero la firma no se comprueba. Para comprobar la firma de un mensaje desasociado, use la función CryptVerifyDetachedMessageSignature .

Si se produce un error en la función, devuelve cero. Para obtener información de error extendida, llame a GetLastError.

En la tabla siguiente se muestran los códigos de error devueltos normalmente por la función GetLastError .

Código devuelto Descripción
ERROR_MORE_DATA
Si el búfer especificado por el parámetro pbDecoded no es lo suficientemente grande como para contener los datos devueltos, la función establece el código ERROR_MORE_DATA y almacena el tamaño de búfer necesario, en bytes, en la variable a la que apunta pcbDecoded.
E_INVALIDARG
Tipos de codificación de mensajes y certificados no válidos. Actualmente solo se admiten PKCS_7_ASN_ENCODING y X509_ASN_ENCODING_TYPE. CbSize no válido en *pVerifyPara.
CRYPT_E_UNEXPECTED_MSG_TYPE
No es un mensaje criptográfico firmado.
CRYPT_E_NO_SIGNER
El mensaje no tiene ningún firmante ni un firmante para el dwSignerIndex especificado.
NTE_BAD_ALGID
El mensaje se ha hashizado y firmado mediante un algoritmo desconocido o no admitido.
NTE_BAD_SIGNATURE
No se ha comprobado la firma del mensaje.
 
Nota Los errores de las funciones llamadas CryptCreateHash, CryptHashData, CryptVerifySignature y CryptImportKey se pueden propagar a esta función.

Si se produce un error en la función, GetLastError puede devolver un error de codificación y descodificación de sintaxis abstracta uno (ASN.1). Para obtener información sobre estos errores, vea Valores devueltos de codificación y descodificación de ASN.1.

 

Comentarios

Para un firmante y un mensaje comprobados, ppSignerCert se actualiza con el CERT_CONTEXT del firmante. Debe liberarse llamando a CertFreeCertificateContext. De lo contrario, ppSignerCert se establece en NULL.

Para un mensaje que contiene solo certificados y CRL, pcbDecoded se establece en NULL.

Ejemplos

Para obtener un ejemplo que usa esta función, vea Ejemplo de programa C: Firma de un mensaje y Comprobación de una firma de mensaje.

Requisitos

   
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado wincrypt.h
Library Crypt32.lib
Archivo DLL Crypt32.dll

Consulte también

CryptSignMessage

CryptVerifyDetachedMessageSignature

Funciones de mensaje simplificadas