Criando um HMAC
Para calcular um HMAC
- Obtenha um ponteiro para o CSP ( Provedor de Serviços Criptográficos da Microsoft) chamando CryptAcquireContext.
- Crie um identificador para um objeto hashHMAC chamando CryptCreateHash. Passe CALG_HMAC no parâmetro Argel . Passe o identificador de uma chave simétrica no parâmetro hKey . Essa chave simétrica é a chave usada para calcular o HMAC.
- Especifique o tipo de hash a ser usado chamando CryptSetHashParam com o parâmetro dwParam definido como o valor HP_HMAC_INFO. O parâmetro pbData deve apontar para uma estrutura de HMAC_INFO inicializada.
- Chame CryptHashData para começar a calcular o HMAC dos dados. A primeira chamada para CryptHashData faz com que o valor da chave seja combinado usando o operador XOR com a cadeia de caracteres interna e os dados. O resultado da operação XOR é hash e, em seguida, os dados de destino para o HMAC (apontados pelo parâmetro pbData passado na chamada para CryptHashData) são hashed. Se necessário, chamadas subsequentes para CryptHashData podem ser feitas para concluir o hash dos dados de destino.
- Chame CryptGetHashParam com o parâmetro dwParam definido como HP_HASHVAL. Essa chamada faz com que o hash interno seja concluído e a cadeia de caracteres externa seja combinada usando XOR com a chave . O resultado da operação XOR é hash e, em seguida, o resultado do hash interno (concluído na etapa anterior) é hash. O hash externo é então concluído e retornado no parâmetro pbData e no comprimento no parâmetro dwDataLen .
Observação
Não use a mesma chave simétrica (sessão) para criptografia de mensagem e geração de MAC ( Código de Autenticação de Mensagem ). Usar a mesma chave para ambos aumenta consideravelmente o risco de mensagens serem decodificadas por invasores.