Función CryptSignAndEncodeCertificate (wincrypt.h)

La función CryptSignAndEncodeCertificate codifica y firma un certificado, una lista de revocación de certificados (CRL), una lista de confianza de certificados (CTL) o una solicitud de certificado.

Esta función realiza las siguientes operaciones:

  • Llama a CryptEncodeObject mediante lpszStructType para codificar la información "para firmar".
  • Llama a CryptSignCertificate para firmar esta información codificada.
  • Llama de nuevo a CryptEncodeObject , con lpszStructType establecido en X509_CERT, para codificar aún más la información firmada y codificada resultante.

Sintaxis

BOOL CryptSignAndEncodeCertificate(
  [in]      BCRYPT_KEY_HANDLE           hBCryptKey,
  [in]      DWORD                       dwKeySpec,
  [in]      DWORD                       dwCertEncodingType,
  [in]      LPCSTR                      lpszStructType,
  [in]      const void                  *pvStructInfo,
  [in]      PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
  [in]      const void                  *pvHashAuxInfo,
  [out]     BYTE                        *pbEncoded,
  [in, out] DWORD                       *pcbEncoded
);

Parámetros

[in] hBCryptKey

Identificador del proveedor de servicios criptográficos (CSP) para realizar la firma. Este identificador es un identificador HCRYPTPROV que se ha creado mediante la función CryptAcquireContext o un identificador de NCRYPT_KEY_HANDLE creado mediante la función NCryptOpenKey . Las nuevas aplicaciones siempre deben pasar un identificador de NCRYPT_KEY_HANDLE de un CSP de CNG.

[in] dwKeySpec

Identifica la clave privada que se va a usar desde el contenedor del proveedor. Debe ser uno de los siguientes valores. Este parámetro se omite si se pasa una clave CNG en el parámetro hCryptProvOrNCryptKey .

Valor Significado
AT_KEYEXCHANGE
Use la clave de intercambio de claves.
AT_SIGNATURE
Use la clave de firma digital.

[in] dwCertEncodingType

Especifica el tipo de codificación usado. Puede ser el siguiente valor.

Valor Significado
X509_ASN_ENCODING
Especifica la codificación de certificados X.509 .

[in] lpszStructType

Puntero a una cadena ANSI terminada en null que contiene el tipo de datos que se van a codificar y firmar. Las siguientes constantes lpszStructType predefinidas se usan con operaciones de codificación.

Valor Significado
X509_CERT_CRL_TO_BE_SIGNED
pvStructInfo es la dirección de una estructura CRL_INFO .
X509_CERT_REQUEST_TO_BE_SIGNED
pvStructInfo es la dirección de una estructura de CERT_REQUEST_INFO .
X509_CERT_TO_BE_SIGNED
pvStructInfo es la dirección de una estructura de CERT_INFO .
X509_KEYGEN_REQUEST_TO_BE_SIGNED
pvStructInfo es la dirección de una estructura CERT_KEYGEN_REQUEST_INFO .

[in] pvStructInfo

Dirección de una estructura que contiene los datos que se van a firmar y codificar. El formato de esta estructura viene determinado por el parámetro lpszStructType .

[in] pSignatureAlgorithm

Puntero a una estructura de CRYPT_ALGORITHM_IDENTIFIER que contiene el identificador de objeto (OID) del algoritmo de firma y los parámetros adicionales necesarios. Esta función usa los siguientes identificadores de identificadores de algoritmo:

  • szOID_RSA_MD5RSA
  • szOID_RSA_SHA1RSA
  • szOID_X957_SHA1DSA
Si el algoritmo de firma es un algoritmo hash , la firma solo contiene los octetos hash sin cifrar. 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

Reservado. Debe ser NULL.

[out] pbEncoded

Puntero a un búfer para recibir la salida firmada y codificada.

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 Recuperar datos de longitud desconocida.

[in, out] pcbEncoded

Puntero a un DWORD que contiene el tamaño, en bytes, del búfer al que apunta el parámetro pbEncoded . Cuando la función devuelve, 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 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 podrían propagarse a esta función.
 
Entre los posibles códigos de error se incluyen, entre otros, los siguientes.
Código devuelto Descripción
ERROR_MORE_DATA
Si el búfer especificado por el parámetro pbEncoded 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 pcbEncoded.
ERROR_FILE_NOT_FOUND
Tipo de codificación de certificado no válido. Actualmente solo se admite X509_ASN_ENCODING.
NTE_BAD_ALGID
El OID del algoritmo de firma no se asigna a un algoritmo hash conocido o admitido.
CRYPT_E_BAD_ENCODE
Error al codificar o descodificar. La causa más probable de este error es la inicialización incorrecta de los campos de la estructura a la que apunta pvStructInfo.
 

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/descodificación de ASN.1.

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

CryptSignCertificate

Funciones de Administración de datos