Compartilhar via


Função BCryptSignHash (bcrypt.h)

A função BCryptSignHash cria uma assinatura de um valor de hash.

Sintaxe

NTSTATUS BCryptSignHash(
  [in]           BCRYPT_KEY_HANDLE hKey,
  [in, optional] VOID              *pPaddingInfo,
  [in]           PUCHAR            pbInput,
  [in]           ULONG             cbInput,
  [out]          PUCHAR            pbOutput,
  [in]           ULONG             cbOutput,
  [out]          ULONG             *pcbResult,
  [in]           ULONG             dwFlags
);

Parâmetros

[in] hKey

O identificador da chave a ser usada para assinar o hash.

[in, optional] pPaddingInfo

Um ponteiro para uma estrutura que contém informações de preenchimento. O tipo real de estrutura a que esse parâmetro aponta depende do valor do parâmetro dwFlags . Esse parâmetro é usado apenas com chaves assimétricas e deve ser NULL de outra forma.

pPaddingInfo deve ser NULL para LMS e XMSS, pois nenhuma informação adicional é necessária para gerar uma assinatura diferente da chave e da entrada.

[in] pbInput

Um ponteiro para um buffer que contém o valor de hash a ser assinado. O parâmetro cbInput contém o tamanho desse buffer.

[in] cbInput

O número de bytes no buffer pbInput a ser assinado.

[out] pbOutput

O endereço de um buffer para receber a assinatura produzida por essa função. O parâmetro cbOutput contém o tamanho desse buffer.

Se esse parâmetro for NULL, essa função calculará o tamanho necessário para a assinatura e retornará o tamanho no local apontado pelo parâmetro pcbResult .

[in] cbOutput

O tamanho, em bytes, do buffer pbOutput . Esse parâmetro será ignorado se o parâmetro pbOutput for NULL.

[out] pcbResult

Um ponteiro para uma variável ULONG que recebe o número de bytes copiados para o buffer pbOutput .

Se pbOutput for NULL, isso receberá o tamanho, em bytes, necessário para a assinatura.

[in] dwFlags

Um conjunto de sinalizadores que modificam o comportamento dessa função. O conjunto permitido de sinalizadores depende do tipo de chave especificado pelo parâmetro hKey .

dwFlags deve ser zero para LMS e XMSS, pois nenhuma informação adicional é necessária para gerar uma assinatura diferente da chave e da entrada.

Esse valor pode ser um dos seguintes:

Valor Significado
BCRYPT_PAD_PKCS1 Use o esquema de preenchimento PKCS1. O parâmetro pPaddingInfo é um ponteiro para uma estrutura BCRYPT_PKCS1_PADDING_INFO .
BCRYPT_PAD_PQDSA Use o esquema de preenchimento PQ para ML-DSA ou SLH-DSA. O parâmetro pPaddingInfo é um ponteiro para uma estrutura BCRYPT_PQDSA_PADDING_INFO .

Nota: Isso deve ser definido se estiver usando uma variante de ML-DSA pré-hash.
BCRYPT_PAD_PSS Use o esquema de preenchimento PSS (Probabilistic Signature Scheme). O parâmetro pPaddingInfo é um ponteiro para uma estrutura BCRYPT_PSS_PADDING_INFO .

Valor de retorno

Retorna um código de status que indica o êxito ou a falha da função.

Os códigos de retorno possíveis incluem, mas não se limitam a:

Código de retorno Descrição
STATUS_SUCCESS A função foi bem-sucedida.
STATUS_INVALID_HANDLE O identificador de chave especificado pelo parâmetro hKey não é válido.
STATUS_NOT_SUPPORTED O provedor de algoritmo usado para criar o identificador de chave especificado pelo parâmetro hKey não é um algoritmo de assinatura.
STATUS_NO_MEMORY Ocorreu uma falha de alocação de memória.
STATUS_BUFFER_TOO_SMALL O tamanho da memória especificado pelo parâmetro cbOutput não é grande o suficiente para manter a assinatura.

Observações

Essa função criptografará o valor de hash com a chave especificada para criar a assinatura.

Para verificar posteriormente se a assinatura é válida, chame a função BCryptVerifySignature com uma chave idêntica e um hash idêntico dos dados originais.

Dependendo de quais modos de processador um provedor dá suporte, o BCryptSignHash pode ser chamado no modo de usuário ou no modo kernel. Os chamadores do modo kernel podem ser executados em PASSIVE_LEVELIRQL ou DISPATCH_LEVEL IRQL. Se o nível IRQL atual for DISPATCH_LEVEL, o identificador fornecido no parâmetro hKey deverá ser derivado de um identificador de algoritmo retornado por um provedor aberto com o sinalizador BCRYPT_PROV_DISPATCH e quaisquer ponteiros passados para a função BCryptSignHash deverão se referir à memória não paga (ou bloqueada).

Para chamar essa função no modo kernel, use Cng.lib, que faz parte do DDK (Driver Development Kit). Windows Server 2008 e Windows Vista: Para chamar essa função no modo kernel, use Ksecdd.lib.

Requisitos

Requisito Valor
Cliente mínimo suportado Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo compatível Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
cabeçalho bcrypt.h
Biblioteca Bcrypt.lib
de DLL Bcrypt.dll

Consulte também

BCryptVerifySignature