4#ifndef OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_DRIVERS_HMAC_H_
5#define OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_DRIVERS_HMAC_H_
10#include "sw/device/silicon_creator/lib/error.h"
20 kHmacDigestNumBytes = 32,
24 kHmacDigestNumWords = kHmacDigestNumBytes /
sizeof(uint32_t),
28 kHmacKeyNumBytes = kHmacDigestNumBytes,
32 kHmacKeyNumWords = kHmacDigestNumWords,
39 uint32_t digest[kHmacDigestNumWords];
46 uint32_t key[kHmacDigestNumWords];
57 uint32_t msg_len_upper;
58 uint32_t msg_len_lower;
59 uint32_t digest[kHmacDigestNumWords];
72void sc_hmac_hmac_sha256_configure(
bool big_endian_digest, hmac_key_t key);
85void sc_hmac_hmac_sha256(
const void *data,
size_t len, hmac_key_t key,
86 bool big_endian_digest, hmac_digest_t *digest);
98void hmac_sha256_configure(
bool big_endian_digest);
105void hmac_sha256_start(
void);
110inline void hmac_sha256_init(
void) {
111 hmac_sha256_configure(
false);
118inline void sc_hmac_hmac_sha256_init(hmac_key_t key,
bool big_endian_digest) {
119 sc_hmac_hmac_sha256_configure(big_endian_digest, key);
133void hmac_sha256_update(
const void *data,
size_t len);
145void hmac_sha256_update_words(
const uint32_t *data,
size_t len);
150void hmac_sha256_process(
void);
163void hmac_sha256_final_truncated(uint32_t *digest,
size_t len);
172inline void hmac_sha256_final(hmac_digest_t *digest) {
173 hmac_sha256_final_truncated(digest->digest,
ARRAYSIZE(digest->digest));
184void hmac_sha256(
const void *data,
size_t len, hmac_digest_t *digest);
200void hmac_sha256_save(hmac_context_t *ctx);
211void hmac_sha256_restore(
const hmac_context_t *ctx);