| // 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_TESTING_ENTROPY_TESTUTILS_H_ |
| #define OPENTITAN_SW_DEVICE_LIB_TESTING_ENTROPY_TESTUTILS_H_ |
| |
| #include "sw/device/lib/dif/dif_csrng.h" |
| #include "sw/device/lib/dif/dif_edn.h" |
| #include "sw/device/lib/dif/dif_entropy_src.h" |
| |
| /** |
| * Returns default entropy source configuration. |
| */ |
| dif_entropy_src_config_t entropy_testutils_config_default(void); |
| |
| /** |
| * Initializes the entropy complex in auto-request mode. |
| * |
| * Initializes the CSRNG, EDN0, and EDN1 in automatic request mode, with EDN1 |
| * providing highest-quality entropy and EDN0 providing lower-quality entropy. |
| * The entropy source must have been initialized separately before calling this |
| * function. |
| */ |
| void entropy_testutils_auto_mode_init(void); |
| |
| /** |
| * Initializes the entropy complex to serve random bits to EDN0 and EDN1. |
| * |
| * Initializes entropy_src, csrng, EDN0 and EDN1 with default boot time |
| * configuration to enable entropy distribution for testing purposes. |
| */ |
| void entropy_testutils_boot_mode_init(void); |
| |
| /** |
| * Initializes the entropy_src in firmware override mode. |
| * |
| * CSRNG and EDN instances are not initialized by calling this function compared |
| * to the other test init functions. |
| * |
| * @param entropy_src Entropy source handle. |
| * @param buffer_threshold Firmware override buffer threshold. |
| * @param firmware_override_enable Set to true to output entropy data to |
| * registers instead of the CSRNG block. |
| * @param bypass_conditioner Set to true to bypass the entropy_src conditioner. |
| */ |
| void entropy_testutils_fw_override_enable(dif_entropy_src_t *entropy_src, |
| uint8_t buffer_threshold, |
| bool firmware_override_enable, |
| bool bypass_conditioner); |
| |
| /** |
| * Waits for the entropy_src to reach a certain state. |
| * |
| * @param entropy_src Entropy source handle. |
| * @param state Entropy source target FSM state. |
| */ |
| void entropy_testutils_wait_for_state(const dif_entropy_src_t *entropy_src, |
| dif_entropy_src_main_fsm_t state); |
| |
| /** |
| * Stops all entropy complex blocks. |
| * |
| * Stops EDN and CSRNG instances before stopping the entropy source. |
| */ |
| void entropy_testutils_stop_all(void); |
| |
| /** |
| * Throws test assertion if there are any errors detected in any of the entropy |
| * blocks. |
| * |
| * Note that the encoding of the error codes printed in the log follow the |
| * respective DIF error enum mapping, which may be different to the bit mapping |
| * in the error registers. |
| * |
| * @param entropy_src Entropy source handle. |
| * @param csrng CSRNG handle. |
| * @param edn0 EDN0 handle. |
| * @param edn1 EDN1 handle. |
| */ |
| void entropy_testutils_error_check(const dif_entropy_src_t *entropy_src, |
| const dif_csrng_t *csrng, |
| const dif_edn_t *edn0, |
| const dif_edn_t *edn1); |
| |
| #endif // OPENTITAN_SW_DEVICE_LIB_TESTING_ENTROPY_TESTUTILS_H_ |