#ifndef HMAC_CONTEXT_H
#define HMAC_CONTEXT_H
#include "sa_types.h"
#include "stored_key.h"
#ifdef __cplusplus
#include <cstdbool>
#include <cstddef>
extern "C" {
#else
#include <stdbool.h>
#include <stddef.h>
#endif
typedef struct hmac_context_s hmac_context_t;
hmac_context_t* hmac_context_create(
sa_digest_algorithm digest_algorithm,
const stored_key_t* stored_key);
sa_digest_algorithm hmac_context_get_digest(const hmac_context_t* context);
sa_status hmac_context_update(
hmac_context_t* context,
const void* in,
size_t in_length);
sa_status hmac_context_update_key(
hmac_context_t* context,
stored_key_t* stored_key);
sa_status hmac_context_compute(
void* mac,
size_t* mac_length,
hmac_context_t* context);
bool hmac_context_done(hmac_context_t* context);
void hmac_context_free(hmac_context_t* context);
sa_status hmac(
void* mac,
size_t* mac_length,
sa_digest_algorithm digest_algorithm,
const void* in1,
size_t in1_length,
const void* in2,
size_t in2_length,
const void* in3,
size_t in3_length,
const stored_key_t* stored_key);
#ifdef __cplusplus
}
#endif
#endif