Função CryptSignAndEncodeCertificate (wincrypt.h)

A função CryptSignAndEncodeCertificate codifica e assina um certificado, uma CRL ( lista de certificados revogados ), uma CTL ( lista de certificados confiáveis ) ou uma solicitação de certificado.

Essa função executa as seguintes operações:

  • Chama CryptEncodeObject usando lpszStructType para codificar as informações "a serem assinadas".
  • Chama CryptSignCertificate para assinar essas informações codificadas.
  • Chama CryptEncodeObject novamente, com lpszStructType definido como X509_CERT, para codificar ainda mais as informações assinadas e codificadas resultantes.

Sintaxe

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

Um identificador do CSP ( provedor de serviços criptográficos ) para fazer a assinatura. Esse identificador é um identificador HCRYPTPROV que foi criado usando a função CryptAcquireContext ou um identificador NCRYPT_KEY_HANDLE que foi criado usando a função NCryptOpenKey . Os novos aplicativos sempre devem passar um identificador NCRYPT_KEY_HANDLE de um CNG CSP.

[in] dwKeySpec

Identifica a chave privada a ser usada do contêiner do provedor. Esse deve ser um dos valores a seguir. Esse parâmetro será ignorado se uma chave CNG for passada no parâmetro hCryptProvOrNCryptKey .

Valor Significado
AT_KEYEXCHANGE
Use a chave de troca de chaves.
AT_SIGNATURE
Use a chave de assinatura digital.

[in] dwCertEncodingType

Especifica o tipo de codificação usado. Esse pode ser o valor a seguir.

Valor Significado
X509_ASN_ENCODING
Especifica a codificação de certificado X.509 .

[in] lpszStructType

Um ponteiro para uma cadeia de caracteres ANSI terminada em nulo que contém o tipo de dados a serem codificados e assinados. As seguintes constantes lpszStructType predefinidas são usadas com operações de codificação.

Valor Significado
X509_CERT_CRL_TO_BE_SIGNED
pvStructInfo é o endereço de uma estrutura CRL_INFO .
X509_CERT_REQUEST_TO_BE_SIGNED
pvStructInfo é o endereço de uma estrutura CERT_REQUEST_INFO .
X509_CERT_TO_BE_SIGNED
pvStructInfo é o endereço de uma estrutura CERT_INFO .
X509_KEYGEN_REQUEST_TO_BE_SIGNED
pvStructInfo é o endereço de uma estrutura CERT_KEYGEN_REQUEST_INFO .

[in] pvStructInfo

O endereço de uma estrutura que contém os dados a serem assinados e codificados. O formato dessa estrutura é determinado pelo parâmetro lpszStructType .

[in] pSignatureAlgorithm

Um ponteiro para uma estrutura CRYPT_ALGORITHM_IDENTIFIER que contém o OID ( identificador de objeto ) do algoritmo de assinatura e quaisquer parâmetros adicionais necessários. Essa função usa os seguintes OIDs de algoritmo:

  • szOID_RSA_MD5RSA
  • szOID_RSA_SHA1RSA
  • szOID_X957_SHA1DSA
Se o algoritmo de assinatura for um algoritmo de hash , a assinatura conterá apenas os octetos de hash não criptografados. Uma chave privada não é usada para criptografar o hash. dwKeySpec não é usado e hCryptProvOrNCryptKey pode ser NULL se um CSP padrão apropriado puder ser usado para hash.

[in] pvHashAuxInfo

Reservado. Deve ser NULL.

[out] pbEncoded

Um ponteiro para um buffer para receber a saída assinada e codificada.

Esse parâmetro pode ser NULL para definir o tamanho dessas informações para fins de alocação de memória. Para obter mais informações, consulte Recuperando dados de comprimento desconhecido.

[in, out] pcbEncoded

Um ponteiro para um DWORD que contém o tamanho, em bytes, do buffer apontado pelo parâmetro pbEncoded . Quando a função retorna, o DWORD contém o número de bytes armazenados ou a serem armazenados no buffer.

Nota Ao processar os dados retornados no buffer, os aplicativos precisam usar o tamanho real dos dados retornados. O tamanho real pode ser ligeiramente menor do que o tamanho do buffer especificado na entrada. (Na entrada, os tamanhos de buffer geralmente são especificados grandes o suficiente para garantir que os maiores dados de saída possíveis caibam no buffer.) Na saída, a variável apontada por esse parâmetro é atualizada para refletir o tamanho real dos dados copiados para o buffer.
 

Retornar valor

Se a função for bem-sucedida, o valor retornado será diferente de zero (TRUE).

Se a função falhar, o valor retornado será zero (FALSE). Para obter informações de erro estendidas, chame GetLastError.

Nota Erros das funções chamadas CryptCreateHash, CryptSignHash e CryptHashData podem ser propagados para essa função.
 
Os códigos de erro possíveis incluem, mas não se limitam a, o seguinte.
Código de retorno Descrição
ERROR_MORE_DATA
Se o buffer especificado pelo parâmetro pbEncoded não for grande o suficiente para manter os dados retornados, a função definirá o código ERROR_MORE_DATA e armazenará o tamanho do buffer necessário, em bytes, na variável apontada por pcbEncoded.
ERROR_FILE_NOT_FOUND
Tipo de codificação de certificado inválido. Atualmente, há suporte apenas para X509_ASN_ENCODING.
NTE_BAD_ALGID
O OID do algoritmo de assinatura não é mapeado para um algoritmo de hash conhecido ou com suporte.
CRYPT_E_BAD_ENCODE
Erro ao codificar ou decodificar. A causa mais provável desse erro é a inicialização inadequada dos campos na estrutura apontada por pvStructInfo.
 

Se a função falhar, GetLastError poderá retornar um erro de codificação/decodificação ASN.1 ( Abstract Syntax Notation One ). Para obter informações sobre esses erros, consulte Valores retornados de codificação/decodificação asn.1.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho wincrypt.h
Biblioteca Crypt32.lib
DLL Crypt32.dll

Confira também

CryptSignCertificate

Funções Gerenciamento de Dados