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

#ifndef _F_LIB_SHA256_H__
#define _F_LIB_SHA256_H__

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

#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  // _F_LIB_SHA256_H__
