| // 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_ |