44
44
*/
45
45
void hmac_md5 (const uint8_t * msg , int length , const uint8_t * key ,
46
46
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 )
47
53
{
48
54
MD5_CTX context ;
49
55
uint8_t k_ipad [64 ];
@@ -63,7 +69,10 @@ void hmac_md5(const uint8_t *msg, int length, const uint8_t *key,
63
69
64
70
MD5_Init (& context );
65
71
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
+ }
67
76
MD5_Final (digest , & context );
68
77
MD5_Init (& context );
69
78
MD5_Update (& context , k_opad , 64 );
@@ -77,6 +86,12 @@ void hmac_md5(const uint8_t *msg, int length, const uint8_t *key,
77
86
*/
78
87
void hmac_sha1 (const uint8_t * msg , int length , const uint8_t * key ,
79
88
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 )
80
95
{
81
96
SHA1_CTX context ;
82
97
uint8_t k_ipad [64 ];
@@ -96,7 +111,10 @@ void hmac_sha1(const uint8_t *msg, int length, const uint8_t *key,
96
111
97
112
SHA1_Init (& context );
98
113
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
+ }
100
118
SHA1_Final (digest , & context );
101
119
SHA1_Init (& context );
102
120
SHA1_Update (& context , k_opad , 64 );
@@ -110,6 +128,12 @@ void hmac_sha1(const uint8_t *msg, int length, const uint8_t *key,
110
128
*/
111
129
void hmac_sha256 (const uint8_t * msg , int length , const uint8_t * key ,
112
130
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 )
113
137
{
114
138
SHA256_CTX context ;
115
139
uint8_t k_ipad [64 ];
@@ -129,7 +153,10 @@ void hmac_sha256(const uint8_t *msg, int length, const uint8_t *key,
129
153
130
154
SHA256_Init (& context );
131
155
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
+ }
133
160
SHA256_Final (digest , & context );
134
161
SHA256_Init (& context );
135
162
SHA256_Update (& context , k_opad , 64 );
0 commit comments