Función CryptMsgVerifyCountersignatureEncodedEx (wincrypt.h)

La función CryptMsgVerifyCountersignatureEncodedEx comprueba que el parámetro pbSignerInfoCounterSignature contiene el hash cifrado del campo encryptedDigest de la estructura de parámetros pbSignerInfo . El firmante puede ser una estructura de CERT_PUBLIC_KEY_INFO , un contexto de certificado o un contexto de cadena.

Sintaxis

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

Este parámetro no se usa y debe establecerse en NULL.

Windows Server 2003 y Windows XP: NULL o el identificador del proveedor criptográfico que se va a usar para aplicar un algoritmo hash al campo encryptedDigest de pbSignerInfo. El tipo de datos de este parámetro es HCRYPTPROV.

A menos que haya un motivo seguro para pasar un proveedor criptográfico específico en hCryptProv, pase NULL para hacer que se use el proveedor RSA o DSS predeterminado.

[in] dwEncodingType

Tipo de codificación utilizado. Actualmente, solo se usan X509_ASN_ENCODING y PKCS_7_ASN_ENCODING; sin embargo, en el futuro se pueden agregar tipos de codificación adicionales. Para cualquier tipo de codificación actual, use:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING.

[in] pbSignerInfo

Puntero al BLOB codificado que contiene el firmante del contenido de un mensaje que se va a contrasignar.

[in] cbSignerInfo

Recuento, en bytes, del BLOB codificado para el firmante del contenido.

[in] pbSignerInfoCountersignature

Puntero al BLOB codificado que contiene la información del contrafirmador.

[in] cbSignerInfoCountersignature

Recuento, en bytes, del BLOB codificado para el contrasignador del mensaje.

[in] dwSignerType

Estructura que contiene la información del firmante. En la tabla siguiente se muestran los valores predefinidos y las estructuras indicadas.

Valor Significado
CMSG_VERIFY_SIGNER_PUBKEY
pvSigner es un puntero a una estructura CERT_PUBLIC_KEY_INFO .
CMSG_VERIFY_SIGNER_CERT
pvSigner es un puntero a una estructura CERT_CONTEXT .
CMSG_VERIFY_SIGNER_CHAIN
pvSigner es un puntero a una estructura CERT_CHAIN_CONTEXT .

[in] pvSigner

Puntero a una estructura de CERT_PUBLIC_KEY_INFO , un contexto de certificado o un contexto de cadena según el valor de dwSignerType.

dwFlags

Marcas que modifican el comportamiento de la función. Puede ser cero o el valor siguiente.

Valor Significado
CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG
0x00000001
Realiza una comprobación de firma segura después de la comprobación correcta de la firma. Establezca el parámetro pvExtra para que apunte a una estructura de CERT_STRONG_SIGN_PARA que contiene los parámetros necesarios para comprobar la intensidad de la firma.

Windows 8 y Windows Server 2012: comienza la compatibilidad con esta marca.

pvExtra

Si establece el parámetro dwFlags en CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG, establezca este parámetro (pvExtra) para que apunte a una estructura de CERT_STRONG_SIGN_PARA que contiene los parámetros usados para comprobar la intensidad de la firma.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es distinto de cero (TRUE).

Si se produce un error en la función, el valor devuelto es cero (FALSE). Para obtener información de error extendida, llame a GetLastError.

Normalmente, la función GetLastError devuelve los siguientes códigos de error.

Código devuelto Descripción
CRYPT_E_AUTH_ATTR_MISSING
El mensaje no contiene un atributo autenticado esperado.
CRYPT_E_HASH_VALUE
El valor hash no es correcto.
CRYPT_E_UNEXPECTED_ENCODING
El mensaje no está codificado según lo previsto.
CRYPT_E_UNKNOWN_ALGO
El algoritmo criptográfico es desconocido.
E_INVALIDARG
Uno o varios argumentos no son válidos.
E_OUTOFMEMORY
Se quedó sin memoria.
 

Es posible que se devuelvan errores propagados de las funciones siguientes.

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

La comprobación del contador se realiza mediante la estructura PKCS #7 SIGNERINFO . La firma debe contener el hash cifrado del campo encryptedDigest de pbSignerInfo.

El emisor y el número de serie del contador deben coincidir con la información del contrafirmador de pbSignerInfoCountersignature. Los únicos campos a los que se hace referencia desde pciCountersigner son SerialNumber, Issuer y SubjectPublicKeyInfo. SubjectPublicKeyInfo se usa para tener acceso a la clave pública que, a continuación, se usa para cifrar el hash del pciCountersigner , por lo que se compara con el hash de pbSignerInfo.

Ejemplos

Para obtener un ejemplo que usa esta función, vea Ejemplo de programa C: codificación y descodificación de un mensaje contrasignado.

Requisitos

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

Consulte también

CryptMsgCountersign

CryptMsgCountersignEncoded

Funciones de mensaje de bajo nivel

Funciones de mensaje simplificadas