Skip to content

Commit 48d0f11

Browse files
committed
Introduce HMAC functions operating on vectors
1 parent abec528 commit 48d0f11

File tree

3 files changed

+43
-3
lines changed

3 files changed

+43
-3
lines changed

crypto/crypto.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,16 @@ void hmac_sha1(const uint8_t *msg, int length, const uint8_t *key,
203203
void hmac_sha256(const uint8_t *msg, int length, const uint8_t *key,
204204
int key_len, uint8_t *digest);
205205

206+
/**************************************************************************
207+
* HMAC functions operating on vectors
208+
**************************************************************************/
209+
void hmac_md5_v(const uint8_t **msg, int* length, int count, const uint8_t *key,
210+
int key_len, uint8_t *digest);
211+
void hmac_sha1_v(const uint8_t **msg, int* length, int count, const uint8_t *key,
212+
int key_len, uint8_t *digest);
213+
void hmac_sha256_v(const uint8_t **msg, int* length, int count, const uint8_t *key,
214+
int key_len, uint8_t *digest);
215+
206216
/**************************************************************************
207217
* RSA declarations
208218
**************************************************************************/

crypto/hmac.c

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@
4444
*/
4545
void hmac_md5(const uint8_t *msg, int length, const uint8_t *key,
4646
int key_len, uint8_t *digest)
47+
{
48+
hmac_md5_v(&msg, &length, 1, key, key_len, digest);
49+
}
50+
51+
void hmac_md5_v(const uint8_t **msg, int* length, int count, const uint8_t *key,
52+
int key_len, uint8_t *digest)
4753
{
4854
MD5_CTX context;
4955
uint8_t k_ipad[64];
@@ -63,7 +69,10 @@ void hmac_md5(const uint8_t *msg, int length, const uint8_t *key,
6369

6470
MD5_Init(&context);
6571
MD5_Update(&context, k_ipad, 64);
66-
MD5_Update(&context, msg, length);
72+
for (i = 0; i < count; ++i)
73+
{
74+
MD5_Update(&context, msg[i], length[i]);
75+
}
6776
MD5_Final(digest, &context);
6877
MD5_Init(&context);
6978
MD5_Update(&context, k_opad, 64);
@@ -77,6 +86,12 @@ void hmac_md5(const uint8_t *msg, int length, const uint8_t *key,
7786
*/
7887
void hmac_sha1(const uint8_t *msg, int length, const uint8_t *key,
7988
int key_len, uint8_t *digest)
89+
{
90+
hmac_sha1_v(&msg, &length, 1, key, key_len, digest);
91+
}
92+
93+
void hmac_sha1_v(const uint8_t **msg, int *length, int count, const uint8_t *key,
94+
int key_len, uint8_t *digest)
8095
{
8196
SHA1_CTX context;
8297
uint8_t k_ipad[64];
@@ -96,7 +111,10 @@ void hmac_sha1(const uint8_t *msg, int length, const uint8_t *key,
96111

97112
SHA1_Init(&context);
98113
SHA1_Update(&context, k_ipad, 64);
99-
SHA1_Update(&context, msg, length);
114+
for (i = 0; i < count; ++i)
115+
{
116+
SHA1_Update(&context, msg[i], length[i]);
117+
}
100118
SHA1_Final(digest, &context);
101119
SHA1_Init(&context);
102120
SHA1_Update(&context, k_opad, 64);
@@ -110,6 +128,12 @@ void hmac_sha1(const uint8_t *msg, int length, const uint8_t *key,
110128
*/
111129
void hmac_sha256(const uint8_t *msg, int length, const uint8_t *key,
112130
int key_len, uint8_t *digest)
131+
{
132+
hmac_sha256_v(&msg, &length, 1, key, key_len, digest);
133+
}
134+
135+
void hmac_sha256_v(const uint8_t **msg, int *length, int count, const uint8_t *key,
136+
int key_len, uint8_t *digest)
113137
{
114138
SHA256_CTX context;
115139
uint8_t k_ipad[64];
@@ -129,7 +153,10 @@ void hmac_sha256(const uint8_t *msg, int length, const uint8_t *key,
129153

130154
SHA256_Init(&context);
131155
SHA256_Update(&context, k_ipad, 64);
132-
SHA256_Update(&context, msg, length);
156+
for (i = 0; i < count; ++i)
157+
{
158+
SHA256_Update(&context, msg[i], length[i]);
159+
}
133160
SHA256_Final(digest, &context);
134161
SHA256_Init(&context);
135162
SHA256_Update(&context, k_opad, 64);

ssl/crypto_misc.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,9 @@ extern const char * const unsupported_str;
195195
typedef void (*crypt_func)(void *, const uint8_t *, uint8_t *, int);
196196
typedef void (*hmac_func)(const uint8_t *msg, int length, const uint8_t *key,
197197
int key_len, uint8_t *digest);
198+
typedef void (*hmac_func_v)(const uint8_t **msg, int *length, int count, const uint8_t *key,
199+
int key_len, uint8_t *digest);
200+
198201

199202
int get_file(const char *filename, uint8_t **buf);
200203

0 commit comments

Comments
 (0)