Função CryptSignCertificate (wincrypt.h)

A função CryptSignCertificate assina as informações "a serem assinadas" no conteúdo assinado codificado.

Sintaxe

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 do CSP que faz a assinatura. Esse identificador deve ser 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 o identificador NCRYPT_KEY_HANDLE de um CSP CNG.

[in] dwKeySpec

Identifica a chave privada a ser usada do contêiner do provedor. Pode ser AT_KEYEXCHANGE ou AT_SIGNATURE. Esse parâmetro será ignorado se um NCRYPT_KEY_HANDLE for usado no parâmetro hCryptProvOrNCryptKey .

[in] dwCertEncodingType

Especifica o tipo de codificação usado. É sempre aceitável especificar os tipos de codificação de certificado e mensagem combinando-os com uma operação OR bit a bit, conforme mostrado no exemplo a seguir:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

Os tipos de codificação definidos no momento são:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pbEncodedToBeSigned

Um ponteiro para o conteúdo codificado a ser assinado.

[in] cbEncodedToBeSigned

O tamanho, em bytes, do conteúdo codificado, pbEncodedToBeSigned.

[in] pSignatureAlgorithm

Um ponteiro para uma estrutura CRYPT_ALGORITHM_IDENTIFIER com um membro pszObjId definido como um dos seguintes:

  • szOID_RSA_MD5RSA
  • szOID_RSA_SHA1RSA
  • szOID_X957_SHA1DSA
  • szOID_RSA_SSA_PSS
  • szOID_ECDSA_SPECIFIED
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

Não usado no momento. Deve ser NULL.

[out] pbSignature

Um ponteiro para um buffer para receber o hash assinado do conteúdo.

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] pcbSignature

Um ponteiro para um DWORD que contém o tamanho, em bytes, do buffer apontado pelo parâmetro pbSignature . 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 devem 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.
 
Essa função tem os seguintes códigos de erro.
Código de retorno Descrição
ERROR_MORE_DATA
Se o buffer especificado pelo parâmetro pbSignature 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 pcbSignature.
NTE_BAD_ALGID
O OID ( identificador de objeto ) do algoritmo de assinatura não é mapeado para um algoritmo de hash conhecido ou com suporte.

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

CryptSignAndEncodeCertificate

Funções Gerenciamento de Dados