aboutsummaryrefslogtreecommitdiffstats
path: root/hmac_update.c
blob: 7f4cef31710516a54b020dea70eec656119a4e5b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/* See LICENSE file for copyright and license details. */
#include "common.h"


/**
 * Feed data into the HMAC algorithm
 * 
 * @param   state  The state of the algorithm
 * @param   data   Data to feed into the algorithm
 * @param   n      The number of bytes to feed into the
 *                 algorithm, this must be a multiple of 8
 * @return         Zero on success, -1 on error
 */
int
libsha2_hmac_update(struct libsha2_hmac_state *restrict state, const void *restrict data, size_t n)
{
	if (!state->inited) {
		if (libsha2_init(&state->sha2_state, state->sha2_state.algorithm))
			return -1;
		libsha2_update(&state->sha2_state, state->ipad, state->sha2_state.chunk_size * 8);
		state->inited = 1;
	}

	libsha2_update(&state->sha2_state, data, n);
	return 0;
}