コード例 #1
0
ファイル: crypto.cpp プロジェクト: mrmoss/blasteroids
bool msl::hmac_sha512(std::string key,const std::string& plain,std::string& hash)
{
	if(key.size()>SHA512_BLOCK_SIZE)
	{
		if(!msl::hash_sha512(key,key))
			return false;
	}

	std::string o_key_pad(SHA512_BLOCK_SIZE,0x5c);
	std::string i_key_pad(SHA512_BLOCK_SIZE,0x36);

	for(size_t ii=0;ii<key.size();++ii)
	{
		o_key_pad[ii]^=key[ii];
		i_key_pad[ii]^=key[ii];
	}

	std::string hash_temp="";

	if(!msl::hash_sha512(i_key_pad+plain,hash_temp)||!msl::hash_sha512(o_key_pad+hash_temp,hash_temp))
		return false;

	hash=hash_temp;
	return true;
}
コード例 #2
0
ファイル: auth.cpp プロジェクト: robotmoose/robotmoose
//Computes HMACSHA256 on given plain text and key, outputs a string of bytes.
std::string hmac_sha256(std::string key,const std::string& plain)
{
	if(key.size()>SHA256_BLOCK_SIZE)
		key=hash_sha256(key);

	std::string o_key_pad(SHA256_BLOCK_SIZE,0x5c);
	std::string i_key_pad(SHA256_BLOCK_SIZE,0x36);

	for(size_t ii=0;ii<key.size();++ii)
	{
		o_key_pad[ii]^=key[ii];
		i_key_pad[ii]^=key[ii];
	}

	std::string hash=hash_sha256(i_key_pad+plain);
	return hash_sha256(o_key_pad+hash);
}