Função BCryptCreateMultiHash (bcrypt.h)

A função BCryptCreateMultiHash cria um estado de vários hash que permite a computação paralela de várias operações de hash. Esse estado de vários hash é usado pela função BCryptProcessMultiOperations . O estado de vários hash pode ser considerado como uma matriz de objetos hash, cada um deles equivalente a um criado por BCryptCreateHash.

Os cálculos paralelos podem aumentar consideravelmente a taxa de transferência geral, em detrimento do aumento da latência para cálculos individuais.

No momento, os cálculos de hash paralelo são implementados apenas para SHA-256, SHA-384 e SHA-512. Outros algoritmos de hash podem ser usados com a API de computação paralela, mas são executados na taxa de transferência das operações de hash sequencial. O conjunto de algoritmos de hash que podem se beneficiar de cálculos paralelos pode mudar em atualizações futuras.

Sintaxe

NTSTATUS BCryptCreateMultiHash(
  BCRYPT_ALG_HANDLE  hAlgorithm,
  BCRYPT_HASH_HANDLE *phHash,
  ULONG              nHashes,
  PUCHAR             pbHashObject,
  ULONG              cbHashObject,
  PUCHAR             pbSecret,
  ULONG              cbSecret,
  ULONG              dwFlags
);

Parâmetros

hAlgorithm

BCRYPT_ALG_HANDLE[in, out]

O identificador de algoritmo usado para todos os estados de hash na matriz de vários hash. O identificador de algoritmo deve ter sido aberto com o BCYRPT_MULTI_FLAG passado para a função BCryptOpenAlgorithmProvider . Como alternativa, o chamador pode usar os pseudo-identificadores.

phHash

BCRYPT_HASH_HANDLE* [out]

Um ponteiro para um valor BCRYPT_HASH_HANDLE que recebe um identificador que representa o estado de vários hash. Esse identificador é usado em operações subsequentes, como BCryptProcessMultiOperations. Quando terminar de usar esse identificador, solte-o passando-o para a função BCryptDestroyHash .

nHashes

ULONG[in]

O número de elementos na matriz. O estado de vários hash que essa função cria é capaz de executar cálculos paralelos em nHashes diferentes estados de hash.

pbHashObject

PUCHAR[out]

Um ponteiro para um buffer que recebe o estado de vários hash.

O tamanho pode ser calculado com base nos membros cbPerObject e cbPerElement da estrutura BCRYPT_MULTI_OBJECT_LENGTH_STRUCT . O valor é o seguinte: cbPerObject + (number of hash states) * cbPerElement.

Se pbHashObject for NULL e cbHashObject tiver um valor zero (0), o buffer de objeto será alocado automaticamente.

cbHashObject

ULONG[in]

O tamanho do buffer pbHashObject ou zero (0) se pbHashObject for NULL.

pbSecret

PUCHAR[in]

Um ponteiro para um buffer que contém a chave a ser usada para o hash ou MAC. O parâmetro cbSecret contém o tamanho desse buffer. Essa chave só se aplica a algoritmos de hash abertos pela função BCryptOpenAlgorithmProvider usando o sinalizador BCRYPT_ALG_HANDLE_HMAC . Caso contrário, defina esse parâmetro como NULL.

A mesma chave é usada para todos os elementos da matriz.

cbSecret

ULONG[in]

O tamanho, em bytes, do buffer pbSecret . Se nenhuma chave for usada, defina esse parâmetro como zero (0).

dwFlags

ULONG[in]

Sinalizadores que modificam o comportamento da função. Isso pode ser zero ou os valores abaixo. Objetos de vários hash são sempre reutilizáveis e sempre se comportam como se o BCRYPT_HASH_REUSABLE_FLAG fosse passado. Esse sinalizador tem suporte aqui para consistência.

Valor Significado
BCRYPT_HASH_REUSABLE_FLAG Cria um objeto de hash reutilizável. O objeto pode ser usado para uma nova operação de hash imediatamente após chamar BCryptFinishHash. Para obter mais informações, consulte Criando um hash com CNG.

Retornar valor

Retorna um código status que indica o êxito ou a falha da função. Se o método for bem-sucedido, ele retornará STATUS_SUCCESS. Para outros valores NTSTATUS , consulte Valores NTSTATUS.

Comentários

Internamente, as computações de hash paralelas são feitas usando instruções SIMD (vários dados de instrução única) com até 8 cálculos paralelos por vez, dependendo do algoritmo de hash e dos recursos de CPU disponíveis. Para maximizar o desempenho, recomendamos que o chamador forneça pelo menos oito computações que podem ser processadas em paralelo.

Para cálculos de comprimento desigual, fornecer mais cálculos em paralelo permite que a implementação agende melhor os cálculos entre os registros de CPU. Isso pode fornecer um benefício de taxa de transferência. Para obter a taxa de transferência ideal, recomendamos que o chamador forneça entre oito e 100 computações. Selecione um valor mais baixo nesse intervalo somente se todos os cálculos de hash tiverem o mesmo comprimento.

Não há suporte para vários hashs para HMAC-MD2, HMAC-MD4 e GMAC.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8.1 Update [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Atualização do Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho bcrypt.h
Biblioteca Bcrypt.lib
DLL Bcrypt.dll

Confira também

BCRYPT_MULTI_OBJECT_LENGTH

BCryptCreateHash

BCryptDestroyHash

BCryptFinishHash

BCryptHashData

BCryptOpenAlgorithmProvider

BCryptProcessMultiOperations

Criando um hash com CNG