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.
[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 |
---|---|
|
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. |
|
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. |
|
No es un mensaje criptográfico firmado. |
|
El mensaje no tiene ningún firmante ni un firmante para el dwSignerIndex especificado. |
|
El mensaje se ha hashizado y firmado mediante un algoritmo desconocido o no admitido. |
|
No se ha comprobado la firma del mensaje. |
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 |