// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
#ifndef OPENTITAN_SW_DEVICE_LIB_CRYPTO_DRIVERS_HMAC_H_
#define OPENTITAN_SW_DEVICE_LIB_CRYPTO_DRIVERS_HMAC_H_

#include <stddef.h>
#include <stdint.h>

#include "sw/device/lib/base/macros.h"

#ifdef __cplusplus
extern "C" {
#endif

enum {
  /* Number of bits in an HMAC or SHA-256 digest. */
  kHmacDigestNumBits = 256,
  /* Number of bytes in an HMAC or SHA-256 digest. */
  kHmacDigestNumBytes = kHmacDigestNumBits / 8,
  /* Number of words in an HMAC or SHA-256 digest. */
  kHmacDigestNumWords = kHmacDigestNumBytes / sizeof(uint32_t),
};

/**
 * Error types for the HMAC driver.
 */
typedef enum hmac_error {
  kHmacOk = 0,
  /* Invalid argument.*/
  kHmacErrorBadArg = 1,
  /* HMAC device is still processing. */
  kHmacErrorBusy = 2,
  /* Attempt to push when FIFO is full. */
  kHmacErrorFifoFull = 3,
} hmac_error_t;

/**
 * A typed representation of the HMAC digest.
 */
typedef struct hmac_digest {
  uint32_t digest[kHmacDigestNumWords];
} hmac_digest_t;

/**
 * Initializes the HMAC in SHA256 mode.
 *
 * This function resets the HMAC module to clear the digest register.
 * It then configures the HMAC block in SHA256 mode with little endian
 * data input and digest output.
 */
void hmac_sha256_init(void);

/**
 * Sends `len` bytes from `data` to the SHA2-256 function.
 *
 * This function does not check for the size of the available HMAC
 * FIFO. Since the this function is meant to run in blocking mode,
 * polling for FIFO status is equivalent to stalling on FIFO write.
 *
 * @param data Buffer to copy data from.
 * @param len size of the `data` buffer in bytes.
 * @return The result of the operation.
 */
OT_WARN_UNUSED_RESULT
hmac_error_t hmac_sha256_update(const void *data, size_t len);

/**
 * Finalizes SHA256 operation and writes `digest` buffer.
 *
 * Blocks while the device is processing.
 *
 * @param[out] digest Buffer to copy digest to.
 * @return The result of the operation.
 */
OT_WARN_UNUSED_RESULT
hmac_error_t hmac_sha256_final(hmac_digest_t *digest);

#ifdef __cplusplus
}
#endif

#endif  // OPENTITAN_SW_DEVICE_LIB_CRYPTO_DRIVERS_HMAC_H_
