1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-10-15 11:26:40 +03:00

Introduce HMAC functions operating on vectors

This commit is contained in:
Ivan Grokhotkov
2017-05-08 22:01:27 +08:00
committed by Ivan Grokhotkov
parent abec528002
commit 48d0f114bb
3 changed files with 43 additions and 3 deletions

View File

@@ -203,6 +203,16 @@ void hmac_sha1(const uint8_t *msg, int length, const uint8_t *key,
void hmac_sha256(const uint8_t *msg, int length, const uint8_t *key,
int key_len, uint8_t *digest);
/**************************************************************************
* HMAC functions operating on vectors
**************************************************************************/
void hmac_md5_v(const uint8_t **msg, int* length, int count, const uint8_t *key,
int key_len, uint8_t *digest);
void hmac_sha1_v(const uint8_t **msg, int* length, int count, const uint8_t *key,
int key_len, uint8_t *digest);
void hmac_sha256_v(const uint8_t **msg, int* length, int count, const uint8_t *key,
int key_len, uint8_t *digest);
/**************************************************************************
* RSA declarations
**************************************************************************/

View File

@@ -44,6 +44,12 @@
*/
void hmac_md5(const uint8_t *msg, int length, const uint8_t *key,
int key_len, uint8_t *digest)
{
hmac_md5_v(&msg, &length, 1, key, key_len, digest);
}
void hmac_md5_v(const uint8_t **msg, int* length, int count, const uint8_t *key,
int key_len, uint8_t *digest)
{
MD5_CTX context;
uint8_t k_ipad[64];
@@ -63,7 +69,10 @@ void hmac_md5(const uint8_t *msg, int length, const uint8_t *key,
MD5_Init(&context);
MD5_Update(&context, k_ipad, 64);
MD5_Update(&context, msg, length);
for (i = 0; i < count; ++i)
{
MD5_Update(&context, msg[i], length[i]);
}
MD5_Final(digest, &context);
MD5_Init(&context);
MD5_Update(&context, k_opad, 64);
@@ -77,6 +86,12 @@ void hmac_md5(const uint8_t *msg, int length, const uint8_t *key,
*/
void hmac_sha1(const uint8_t *msg, int length, const uint8_t *key,
int key_len, uint8_t *digest)
{
hmac_sha1_v(&msg, &length, 1, key, key_len, digest);
}
void hmac_sha1_v(const uint8_t **msg, int *length, int count, const uint8_t *key,
int key_len, uint8_t *digest)
{
SHA1_CTX context;
uint8_t k_ipad[64];
@@ -96,7 +111,10 @@ void hmac_sha1(const uint8_t *msg, int length, const uint8_t *key,
SHA1_Init(&context);
SHA1_Update(&context, k_ipad, 64);
SHA1_Update(&context, msg, length);
for (i = 0; i < count; ++i)
{
SHA1_Update(&context, msg[i], length[i]);
}
SHA1_Final(digest, &context);
SHA1_Init(&context);
SHA1_Update(&context, k_opad, 64);
@@ -110,6 +128,12 @@ void hmac_sha1(const uint8_t *msg, int length, const uint8_t *key,
*/
void hmac_sha256(const uint8_t *msg, int length, const uint8_t *key,
int key_len, uint8_t *digest)
{
hmac_sha256_v(&msg, &length, 1, key, key_len, digest);
}
void hmac_sha256_v(const uint8_t **msg, int *length, int count, const uint8_t *key,
int key_len, uint8_t *digest)
{
SHA256_CTX context;
uint8_t k_ipad[64];
@@ -129,7 +153,10 @@ void hmac_sha256(const uint8_t *msg, int length, const uint8_t *key,
SHA256_Init(&context);
SHA256_Update(&context, k_ipad, 64);
SHA256_Update(&context, msg, length);
for (i = 0; i < count; ++i)
{
SHA256_Update(&context, msg[i], length[i]);
}
SHA256_Final(digest, &context);
SHA256_Init(&context);
SHA256_Update(&context, k_opad, 64);

View File

@@ -195,6 +195,9 @@ extern const char * const unsupported_str;
typedef void (*crypt_func)(void *, const uint8_t *, uint8_t *, int);
typedef void (*hmac_func)(const uint8_t *msg, int length, const uint8_t *key,
int key_len, uint8_t *digest);
typedef void (*hmac_func_v)(const uint8_t **msg, int *length, int count, const uint8_t *key,
int key_len, uint8_t *digest);
int get_file(const char *filename, uint8_t **buf);