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);
110#if defined(OT_PLATFORM_RV32) || defined(HMAC_UNIT_TEST_)
111inline void hmac_sha256_init(
void) {
112 hmac_sha256_configure(
false);
116void hmac_sha256_init(
void);
122inline void sc_hmac_hmac_sha256_init(hmac_key_t key,
bool big_endian_digest) {
123 sc_hmac_hmac_sha256_configure(big_endian_digest, key);
137void hmac_sha256_update(
const void *data,
size_t len);
149void hmac_sha256_update_words(
const uint32_t *data,
size_t len);
154void hmac_sha256_process(
void);
167void hmac_sha256_final_truncated(uint32_t *digest,
size_t len);
176#if defined(OT_PLATFORM_RV32) || defined(HMAC_UNIT_TEST_)
177inline void hmac_sha256_final(hmac_digest_t *digest) {
178 hmac_sha256_final_truncated(digest->digest,
ARRAYSIZE(digest->digest));
181void hmac_sha256_final(hmac_digest_t *digest);
192void hmac_sha256(
const void *data,
size_t len, hmac_digest_t *digest);
208void hmac_sha256_save(hmac_context_t *ctx);
219void hmac_sha256_restore(
const hmac_context_t *ctx);