43std::string
hmac(
const void* data,
size_t numDataBytes,
const void* key,
size_t numKeyBytes)
46 unsigned char usedKey[HashMethod::BlockSize] = {0};
49 if (numKeyBytes <= HashMethod::BlockSize)
52 memcpy(usedKey, key, numKeyBytes);
58 keyHasher.add(key, numKeyBytes);
59 keyHasher.getHash(usedKey);
63 for (
size_t i = 0; i < HashMethod::BlockSize; i++)
67 unsigned char inside[HashMethod::HashBytes];
68 HashMethod insideHasher;
69 insideHasher.add(usedKey, HashMethod::BlockSize);
70 insideHasher.add(data, numDataBytes);
71 insideHasher.getHash(inside);
74 for (
size_t i = 0; i < HashMethod::BlockSize; i++)
75 usedKey[i] ^= 0x5C ^ 0x36;
78 HashMethod finalHasher;
79 finalHasher.add(usedKey, HashMethod::BlockSize);
80 finalHasher.add(inside, HashMethod::HashBytes);
82 return finalHasher.getHash();
std::string hmac(const void *data, size_t numDataBytes, const void *key, size_t numKeyBytes)
compute HMAC hash of data and key using MD5, SHA1 or SHA256