Función CryptSignCertificate (wincrypt.h)

La función CryptSignCertificate firma la información "para firmar" en el contenido firmado codificado.

Sintaxis

BOOL CryptSignCertificate(
  [in]      BCRYPT_KEY_HANDLE           hBCryptKey,
  [in]      DWORD                       dwKeySpec,
  [in]      DWORD                       dwCertEncodingType,
  [in]      const BYTE                  *pbEncodedToBeSigned,
  [in]      DWORD                       cbEncodedToBeSigned,
  [in]      PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
  [in]      const void                  *pvHashAuxInfo,
  [out]     BYTE                        *pbSignature,
  [in, out] DWORD                       *pcbSignature
);

Parámetros

[in] hBCryptKey

Identificador del CSP que realiza la firma. Este identificador debe ser un identificador HCRYPTPROV que se ha creado mediante la función CryptAcquireContext o un identificador de NCRYPT_KEY_HANDLE que se ha creado mediante la función NCryptOpenKey . Las nuevas aplicaciones siempre deben pasar el identificador NCRYPT_KEY_HANDLE de un CSP de CNG.

[in] dwKeySpec

Identifica la clave privada que se va a usar desde el contenedor del proveedor. Puede ser AT_KEYEXCHANGE o AT_SIGNATURE. Este parámetro se omite si se usa un NCRYPT_KEY_HANDLE en el parámetro hCryptProvOrNCryptKey .

[in] dwCertEncodingType

Especifica el tipo de codificación utilizado. Siempre es aceptable especificar los tipos de codificación de certificados y mensajes mediante su combinación con una operación OR bit a bit, como se muestra en el ejemplo siguiente:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

Los tipos de codificación definidos actualmente son:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pbEncodedToBeSigned

Puntero al contenido codificado que se va a firmar.

[in] cbEncodedToBeSigned

Tamaño, en bytes, del contenido codificado, pbEncodedToBeSigned.

[in] pSignatureAlgorithm

Puntero a una estructura CRYPT_ALGORITHM_IDENTIFIER con un miembro pszObjId establecido en uno de los siguientes:

  • szOID_RSA_MD5RSA
  • szOID_RSA_SHA1RSA
  • szOID_X957_SHA1DSA
  • szOID_RSA_SSA_PSS
  • szOID_ECDSA_SPECIFIED
Si el algoritmo de firma es un algoritmo hash, la firma solo contiene los octetos hash no cifrados. No se usa una clave privada para cifrar el hash. dwKeySpec no se usa y hCryptProvOrNCryptKey puede ser NULL si se puede usar un CSP predeterminado adecuado para el hash.

[in] pvHashAuxInfo

No se usa actualmente. Debe ser NULL.

[out] pbSignature

Puntero a un búfer para recibir el hash firmado del contenido.

Este parámetro puede ser NULL para establecer el tamaño de esta información con fines de asignación de memoria. Para obtener más información, vea Recuperación de datos de longitud desconocida.

[in, out] pcbSignature

Puntero a un DWORD que contiene el tamaño, en bytes, del búfer al que apunta el parámetro pbSignature . Cuando se devuelve la función, DWORD contiene el número de bytes almacenados o que se almacenarán en el búfer.

Nota Al procesar los datos devueltos en el búfer, 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.
 

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.

Nota Los errores de las funciones llamadas CryptCreateHash, CryptSignHash y CryptHashData pueden propagarse a esta función.
 
Esta función tiene los siguientes códigos de error.
Código devuelto Descripción
ERROR_MORE_DATA
Si el búfer especificado por el parámetro pbSignature no es lo suficientemente grande como para contener los datos devueltos, la función establece el código de ERROR_MORE_DATA y almacena el tamaño de búfer necesario, en bytes, en la variable a la que apunta pcbSignature.
NTE_BAD_ALGID
El identificador de objeto (OID) del algoritmo de firma no se asigna a un algoritmo hash conocido o compatible.

Requisitos

Requisito Value
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

CryptSignAndEncodeCertificate

funciones de Administración de datos