// 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_HW_SHA256_H_
#define OPENTITAN_SW_DEVICE_LIB_HW_SHA256_H_

#include <stddef.h>

#include "sw/vendor/cryptoc/include/cryptoc/hash-internal.h"

typedef HASH_CTX HW_SHA256_CTX;

#define SHA256_DIGEST_SIZE 32

/**
 * hw_SHA256_init initializes `ctx`.
 *
 * @param ctx SHA256 context.
 */
void hw_SHA256_init(HW_SHA256_CTX *ctx);

/**
 * hw_SHA256_update adds `len` bytes from `data` to `ctx`.
 *
 * @param ctx SHA256 context.
 * @param data Input buffer.
 * @param len Number of bytes to add.
 */
void hw_SHA256_update(HW_SHA256_CTX *ctx, const void *data, size_t len);

/**
 * hw_SHA256_final adds the final padding to `ctx` and calculates digest.
 *
 * @param ctx SHA256 context.
 *
 * @return pointer to digest buffer held in `ctx`.
 */
const uint8_t *hw_SHA256_final(HW_SHA256_CTX *ctx);

/**
 * hw_SHA256_hash writes `digest` from `len` bytes of `data`.
 *
 * @param data Input buffer.
 * @param len Number of bytes to add.
 * @param digest Output buffer.
 */
const uint8_t *hw_SHA256_hash(const void *data, size_t len, uint8_t *digest);

#endif  // OPENTITAN_SW_DEVICE_LIB_HW_SHA256_H_
