5 #ifndef OPENTITAN_SW_DEVICE_TESTS_PENETRATIONTESTS_FIRMWARE_LIB_PENTEST_LIB_H_
6 #define OPENTITAN_SW_DEVICE_TESTS_PENETRATIONTESTS_FIRMWARE_LIB_PENTEST_LIB_H_
9 #include "sw/device/lib/ujson/ujson.h"
10 #include "sw/device/tests/penetrationtests/json/pentest_lib_commands.h"
26 typedef enum pentest_trigger_source {
33 kPentestTriggerSourceAes = 0,
37 kPentestTriggerSourceHmac = 1,
41 kPentestTriggerSourceKmac = 2,
45 kPentestTriggerSourceOtbn = 3,
46 } pentest_trigger_source_t;
51 typedef enum pentest_trigger_type {
59 kPentestTriggerTypeHwGated = 0,
64 kPentestTriggerTypeSw = 1,
65 } pentest_trigger_type_t;
75 typedef enum pentest_peripheral {
79 kPentestPeripheralEdn = 1 << 0,
83 kPentestPeripheralCsrng = 1 << 1,
87 kPentestPeripheralEntropy = 1 << 2,
91 kPentestPeripheralAes = 1 << 3,
95 kPentestPeripheralHmac = 1 << 4,
99 kPentestPeripheralKmac = 1 << 5,
103 kPentestPeripheralOtbn = 1 << 6,
107 kPentestPeripheralIoDiv4 = 1 << 7,
111 kPentestPeripheralIoDiv2 = 1 << 8,
115 kPentestPeripheralUsb = 1 << 9,
119 kPentestPeripheralIo = 1 << 10,
120 } pentest_peripheral_t;
131 typedef uint32_t pentest_peripherals_t;
139 typedef enum pentest_lfsr_context {
143 kPentestLfsrMasking = 0,
147 kPentestLfsrOrder = 1,
149 } pentest_lfsr_context_t;
161 status_t pentest_configure_entropy_source_max_reseed_interval(
void);
177 void pentest_clear_sensor_recov_alerts(
void);
195 void pentest_configure_alert_handler(
void);
205 status_t pentest_read_device_id(uint32_t device_id[]);
243 bool disable_icache,
bool disable_dummy_instr,
bool enable_jittery_clock,
244 bool enable_sram_readback,
bool *clock_jitter_locked,
bool *clock_jitter_en,
245 bool *sram_main_readback_locked,
bool *sram_ret_readback_locked,
246 bool *sram_main_readback_en,
bool *sram_ret_readback_en);
255 void pentest_init(pentest_trigger_source_t trigger,
256 pentest_peripherals_t enable);
263 const dif_uart_t *pentest_get_uart(
void);
270 void pentest_select_trigger_type(pentest_trigger_type_t trigger_type);
279 void pentest_set_trigger_high(
void);
284 void pentest_set_trigger_low(
void);
290 typedef void (*sca_callee)(void);
305 void pentest_call_and_sleep(sca_callee callee, uint32_t sleep_cycles,
306 bool sw_trigger,
bool otbn);
317 void pentest_seed_lfsr(uint32_t seed, pentest_lfsr_context_t context);
332 uint32_t pentest_next_lfsr(uint16_t num_steps, pentest_lfsr_context_t context);
350 uint32_t pentest_linear_layer(uint32_t input);
369 uint32_t pentest_non_linear_layer(uint32_t input);