Skip to content

Commit 96296fa

Browse files
siemen11nasahlpa
authored andcommitted
[pentest] Extend pentest lib
This commit extends the pentest lib with the following changes: - Add the CSR config to add dummy instructions. - Add the variable to enable or disable the alerts from the sensor control. - Add functions to read out the sensor ctrl and the alert handler, and integrate this functionality to the test framework. Signed-off-by: Siemen Dhooghe <[email protected]> Co-authored-by: Pascal Nasahl <[email protected]> (cherry picked from 4c73bfc)
1 parent 893a50d commit 96296fa

File tree

51 files changed

+961
-216
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+961
-216
lines changed

sw/device/sca/aes_serial.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -782,8 +782,11 @@ static void init_aes(void) {
782782
* UART.
783783
*/
784784
bool test_main(void) {
785+
bool sensor_ctrl_enable = false;
786+
bool sensor_ctrl_en_fatal[SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS] = {false};
785787
pentest_init(kPentestTriggerSourceAes,
786-
kPentestPeripheralIoDiv4 | kPentestPeripheralAes);
788+
kPentestPeripheralIoDiv4 | kPentestPeripheralAes,
789+
sensor_ctrl_enable, sensor_ctrl_en_fatal);
787790

788791
LOG_INFO("Running AES serial");
789792

sw/device/sca/ecc256_sign_serial.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,13 @@ static void ecc256_ecdsa(const uint8_t *arg, size_t len) {
269269
*/
270270
static void simple_serial_main(void) {
271271
SS_CHECK_STATUS_OK(entropy_testutils_auto_mode_init());
272-
272+
bool sensor_ctrl_enable = false;
273+
bool sensor_ctrl_en_fatal[SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS] = {false};
273274
pentest_init(kPentestTriggerSourceOtbn,
274275
kPentestPeripheralEntropy | kPentestPeripheralIoDiv4 |
275276
kPentestPeripheralOtbn | kPentestPeripheralCsrng |
276-
kPentestPeripheralEdn | kPentestPeripheralHmac);
277+
kPentestPeripheralEdn | kPentestPeripheralHmac,
278+
sensor_ctrl_enable, sensor_ctrl_en_fatal);
277279

278280
LOG_INFO("Running ECC serial");
279281
LOG_INFO("Initializing simple serial interface to capture board.");

sw/device/sca/ecc384_serial.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -288,11 +288,13 @@ static void ecc384_ecdsa(const uint8_t *ecc384_secret_k_bytes,
288288
*/
289289
static void simple_serial_main(void) {
290290
SS_CHECK_STATUS_OK(entropy_testutils_auto_mode_init());
291-
291+
bool sensor_ctrl_enable = false;
292+
bool sensor_ctrl_en_fatal[SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS] = {false};
292293
pentest_init(kPentestTriggerSourceOtbn,
293294
kPentestPeripheralEntropy | kPentestPeripheralIoDiv4 |
294295
kPentestPeripheralOtbn | kPentestPeripheralCsrng |
295-
kPentestPeripheralEdn | kPentestPeripheralHmac);
296+
kPentestPeripheralEdn | kPentestPeripheralHmac,
297+
sensor_ctrl_enable, sensor_ctrl_en_fatal);
296298

297299
LOG_INFO("Running ECC serial");
298300
LOG_INFO("Initializing simple serial interface to capture board.");

sw/device/sca/kmac_serial.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,8 +581,11 @@ static void sha3_serial_seed_lfsr(const uint8_t *seed, size_t seed_len) {
581581
* UART.
582582
*/
583583
bool test_main(void) {
584+
bool sensor_ctrl_enable = false;
585+
bool sensor_ctrl_en_fatal[SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS] = {false};
584586
pentest_init(kPentestTriggerSourceKmac,
585-
kPentestPeripheralIoDiv4 | kPentestPeripheralKmac);
587+
kPentestPeripheralIoDiv4 | kPentestPeripheralKmac,
588+
sensor_ctrl_enable, sensor_ctrl_en_fatal);
586589

587590
LOG_INFO("Running kmac_serial");
588591

sw/device/sca/otbn_vertical/otbn_vertical_serial.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,13 @@ static void ecc256_app_select(const uint8_t *app_cmd, size_t app_cmd_len) {
6464
*/
6565
static void simple_serial_main(void) {
6666
SS_CHECK_STATUS_OK(entropy_testutils_auto_mode_init());
67-
67+
bool sensor_ctrl_enable = false;
68+
bool sensor_ctrl_en_fatal[SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS] = {false};
6869
pentest_init(kPentestTriggerSourceOtbn,
6970
kPentestPeripheralEntropy | kPentestPeripheralIoDiv4 |
7071
kPentestPeripheralOtbn | kPentestPeripheralCsrng |
71-
kPentestPeripheralEdn | kPentestPeripheralHmac);
72+
kPentestPeripheralEdn | kPentestPeripheralHmac,
73+
sensor_ctrl_enable, sensor_ctrl_en_fatal);
7274

7375
LOG_INFO("Running ECC serial");
7476
LOG_INFO("Initializing simple serial interface to capture board.");

sw/device/sca/sha3_serial.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -505,8 +505,11 @@ static void sha3_serial_seed_lfsr(const uint8_t *seed, size_t seed_len) {
505505
* UART.
506506
*/
507507
bool test_main(void) {
508+
bool sensor_ctrl_enable = false;
509+
bool sensor_ctrl_en_fatal[SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS] = {false};
508510
pentest_init(kPentestTriggerSourceKmac,
509-
kPentestPeripheralIoDiv4 | kPentestPeripheralKmac);
511+
kPentestPeripheralIoDiv4 | kPentestPeripheralKmac,
512+
sensor_ctrl_enable, sensor_ctrl_en_fatal);
510513

511514
LOG_INFO("Running sha3_serial");
512515

sw/device/tests/penetrationtests/firmware/fi/crypto_fi.c

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -238,25 +238,36 @@ status_t handle_crypto_fi_aes(ujson_t *uj) {
238238
}
239239

240240
status_t handle_crypto_fi_init(ujson_t *uj) {
241-
penetrationtest_cpuctrl_t uj_data;
242-
TRY(ujson_deserialize_penetrationtest_cpuctrl_t(uj, &uj_data));
241+
penetrationtest_cpuctrl_t uj_cpuctrl_data;
242+
TRY(ujson_deserialize_penetrationtest_cpuctrl_t(uj, &uj_cpuctrl_data));
243+
penetrationtest_sensor_config_t uj_sensor_data;
244+
TRY(ujson_deserialize_penetrationtest_sensor_config_t(uj, &uj_sensor_data));
245+
penetrationtest_alert_config_t uj_alert_data;
246+
TRY(ujson_deserialize_penetrationtest_alert_config_t(uj, &uj_alert_data));
243247

244248
pentest_select_trigger_type(kPentestTriggerTypeSw);
245249
pentest_init(kPentestTriggerSourceAes,
246250
kPentestPeripheralIoDiv4 | kPentestPeripheralAes |
247251
kPentestPeripheralKmac | kPentestPeripheralEdn |
248252
kPentestPeripheralCsrng | kPentestPeripheralEntropy |
249-
kPentestPeripheralHmac);
253+
kPentestPeripheralHmac,
254+
uj_sensor_data.sensor_ctrl_enable,
255+
uj_sensor_data.sensor_ctrl_en_fatal);
250256
// Configure the alert handler. Alerts triggered by IP blocks are captured
251257
// and reported to the test.
252-
pentest_configure_alert_handler();
258+
pentest_configure_alert_handler(
259+
uj_alert_data.alert_classes, uj_alert_data.enable_alerts,
260+
uj_alert_data.enable_classes, uj_alert_data.accumulation_thresholds,
261+
uj_alert_data.signals, uj_alert_data.duration_cycles,
262+
uj_alert_data.ping_timeout);
253263

254264
// Configure the CPU for the pentest.
255265
penetrationtest_device_info_t uj_output;
256266
TRY(pentest_configure_cpu(
257-
uj_data.enable_icache, &uj_output.icache_en, uj_data.enable_dummy_instr,
258-
&uj_output.dummy_instr_en, uj_data.enable_jittery_clock,
259-
uj_data.enable_sram_readback, &uj_output.clock_jitter_locked,
267+
uj_cpuctrl_data.enable_icache, &uj_output.icache_en,
268+
uj_cpuctrl_data.enable_dummy_instr, &uj_output.dummy_instr_en,
269+
uj_cpuctrl_data.dummy_instr_count, uj_cpuctrl_data.enable_jittery_clock,
270+
uj_cpuctrl_data.enable_sram_readback, &uj_output.clock_jitter_locked,
260271
&uj_output.clock_jitter_en, &uj_output.sram_main_readback_locked,
261272
&uj_output.sram_ret_readback_locked, &uj_output.sram_main_readback_en,
262273
&uj_output.sram_ret_readback_en));
@@ -305,6 +316,12 @@ status_t handle_crypto_fi_init(ujson_t *uj) {
305316
TRY(pentest_read_device_id(uj_output.device_id));
306317
RESP_OK(ujson_serialize_penetrationtest_device_info_t, uj, &uj_output);
307318

319+
// Read the sensor config.
320+
TRY(pentest_send_sensor_config(uj));
321+
322+
// Read the alert config.
323+
TRY(pentest_send_alert_config(uj));
324+
308325
// Read different SKU config fields and return to host.
309326
TRY(pentest_send_sku_config(uj));
310327

sw/device/tests/penetrationtests/firmware/fi/ibex_fi.c

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3821,8 +3821,12 @@ status_t handle_ibex_fi_char_unrolled_reg_op_loop_chain(ujson_t *uj)
38213821
}
38223822

38233823
status_t handle_ibex_fi_init(ujson_t *uj) {
3824-
penetrationtest_cpuctrl_t uj_data;
3825-
TRY(ujson_deserialize_penetrationtest_cpuctrl_t(uj, &uj_data));
3824+
penetrationtest_cpuctrl_t uj_cpuctrl_data;
3825+
TRY(ujson_deserialize_penetrationtest_cpuctrl_t(uj, &uj_cpuctrl_data));
3826+
penetrationtest_sensor_config_t uj_sensor_data;
3827+
TRY(ujson_deserialize_penetrationtest_sensor_config_t(uj, &uj_sensor_data));
3828+
penetrationtest_alert_config_t uj_alert_data;
3829+
TRY(ujson_deserialize_penetrationtest_alert_config_t(uj, &uj_alert_data));
38263830

38273831
pentest_select_trigger_type(kPentestTriggerTypeSw);
38283832
// As we are using the software defined trigger, the first argument of
@@ -3832,18 +3836,25 @@ status_t handle_ibex_fi_init(ujson_t *uj) {
38323836
kPentestPeripheralIoDiv4 | kPentestPeripheralEdn |
38333837
kPentestPeripheralCsrng | kPentestPeripheralEntropy |
38343838
kPentestPeripheralAes | kPentestPeripheralHmac |
3835-
kPentestPeripheralKmac | kPentestPeripheralOtbn);
3839+
kPentestPeripheralKmac | kPentestPeripheralOtbn,
3840+
uj_sensor_data.sensor_ctrl_enable,
3841+
uj_sensor_data.sensor_ctrl_en_fatal);
38363842

38373843
// Configure the alert handler. Alerts triggered by IP blocks are captured
38383844
// and reported to the test.
3839-
pentest_configure_alert_handler();
3845+
pentest_configure_alert_handler(
3846+
uj_alert_data.alert_classes, uj_alert_data.enable_alerts,
3847+
uj_alert_data.enable_classes, uj_alert_data.accumulation_thresholds,
3848+
uj_alert_data.signals, uj_alert_data.duration_cycles,
3849+
uj_alert_data.ping_timeout);
38403850

38413851
// Configure the CPU for the pentest.
38423852
penetrationtest_device_info_t uj_output;
38433853
TRY(pentest_configure_cpu(
3844-
uj_data.enable_icache, &uj_output.icache_en, uj_data.enable_dummy_instr,
3845-
&uj_output.dummy_instr_en, uj_data.enable_jittery_clock,
3846-
uj_data.enable_sram_readback, &uj_output.clock_jitter_locked,
3854+
uj_cpuctrl_data.enable_icache, &uj_output.icache_en,
3855+
uj_cpuctrl_data.enable_dummy_instr, &uj_output.dummy_instr_en,
3856+
uj_cpuctrl_data.dummy_instr_count, uj_cpuctrl_data.enable_jittery_clock,
3857+
uj_cpuctrl_data.enable_sram_readback, &uj_output.clock_jitter_locked,
38473858
&uj_output.clock_jitter_en, &uj_output.sram_main_readback_locked,
38483859
&uj_output.sram_ret_readback_locked, &uj_output.sram_main_readback_en,
38493860
&uj_output.sram_ret_readback_en));
@@ -3867,6 +3878,12 @@ status_t handle_ibex_fi_init(ujson_t *uj) {
38673878
TRY(pentest_read_device_id(uj_output.device_id));
38683879
RESP_OK(ujson_serialize_penetrationtest_device_info_t, uj, &uj_output);
38693880

3881+
// Read the sensor config.
3882+
TRY(pentest_send_sensor_config(uj));
3883+
3884+
// Read the alert config.
3885+
TRY(pentest_send_alert_config(uj));
3886+
38703887
// Read different SKU config fields and return to host.
38713888
TRY(pentest_send_sku_config(uj));
38723889

sw/device/tests/penetrationtests/firmware/fi/lc_ctrl_fi.c

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,29 @@ static dif_rv_core_ibex_t rv_core_ibex;
1919
static dif_lc_ctrl_t lc;
2020

2121
status_t handle_lc_ctrl_fi_init(ujson_t *uj) {
22-
penetrationtest_cpuctrl_t uj_data;
23-
TRY(ujson_deserialize_penetrationtest_cpuctrl_t(uj, &uj_data));
22+
penetrationtest_cpuctrl_t uj_cpuctrl_data;
23+
TRY(ujson_deserialize_penetrationtest_cpuctrl_t(uj, &uj_cpuctrl_data));
24+
penetrationtest_sensor_config_t uj_sensor_data;
25+
TRY(ujson_deserialize_penetrationtest_sensor_config_t(uj, &uj_sensor_data));
26+
penetrationtest_alert_config_t uj_alert_data;
27+
TRY(ujson_deserialize_penetrationtest_alert_config_t(uj, &uj_alert_data));
2428

2529
pentest_select_trigger_type(kPentestTriggerTypeSw);
2630
// As we are using the software defined trigger, the first argument of
2731
// pentest_init is not needed. kPentestTriggerSourceAes is selected as a
2832
// placeholder.
2933
pentest_init(kPentestTriggerSourceAes,
30-
kPentestPeripheralIoDiv4 | kPentestPeripheralCsrng);
34+
kPentestPeripheralIoDiv4 | kPentestPeripheralCsrng,
35+
uj_sensor_data.sensor_ctrl_enable,
36+
uj_sensor_data.sensor_ctrl_en_fatal);
3137

3238
// Configure the CPU for the pentest.
3339
penetrationtest_device_info_t uj_output;
3440
TRY(pentest_configure_cpu(
35-
uj_data.enable_icache, &uj_output.icache_en, uj_data.enable_dummy_instr,
36-
&uj_output.dummy_instr_en, uj_data.enable_jittery_clock,
37-
uj_data.enable_sram_readback, &uj_output.clock_jitter_locked,
41+
uj_cpuctrl_data.enable_icache, &uj_output.icache_en,
42+
uj_cpuctrl_data.enable_dummy_instr, &uj_output.dummy_instr_en,
43+
uj_cpuctrl_data.dummy_instr_count, uj_cpuctrl_data.enable_jittery_clock,
44+
uj_cpuctrl_data.enable_sram_readback, &uj_output.clock_jitter_locked,
3845
&uj_output.clock_jitter_en, &uj_output.sram_main_readback_locked,
3946
&uj_output.sram_ret_readback_locked, &uj_output.sram_main_readback_en,
4047
&uj_output.sram_ret_readback_en));
@@ -50,12 +57,22 @@ status_t handle_lc_ctrl_fi_init(ujson_t *uj) {
5057

5158
// Configure the alert handler. Alerts triggered by IP blocks are captured
5259
// and reported to the test.
53-
pentest_configure_alert_handler();
60+
pentest_configure_alert_handler(
61+
uj_alert_data.alert_classes, uj_alert_data.enable_alerts,
62+
uj_alert_data.enable_classes, uj_alert_data.accumulation_thresholds,
63+
uj_alert_data.signals, uj_alert_data.duration_cycles,
64+
uj_alert_data.ping_timeout);
5465

5566
// Read device ID and return to host.
5667
TRY(pentest_read_device_id(uj_output.device_id));
5768
RESP_OK(ujson_serialize_penetrationtest_device_info_t, uj, &uj_output);
5869

70+
// Read the sensor config.
71+
TRY(pentest_send_sensor_config(uj));
72+
73+
// Read the alert config.
74+
TRY(pentest_send_alert_config(uj));
75+
5976
// Read different SKU config fields and return to host.
6077
TRY(pentest_send_sku_config(uj));
6178

sw/device/tests/penetrationtests/firmware/fi/otbn_fi.c

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1225,8 +1225,12 @@ status_t handle_otbn_fi_char_unrolled_reg_op_loop(ujson_t *uj) {
12251225
}
12261226

12271227
status_t handle_otbn_fi_init(ujson_t *uj) {
1228-
penetrationtest_cpuctrl_t uj_data;
1229-
TRY(ujson_deserialize_penetrationtest_cpuctrl_t(uj, &uj_data));
1228+
penetrationtest_cpuctrl_t uj_cpuctrl_data;
1229+
TRY(ujson_deserialize_penetrationtest_cpuctrl_t(uj, &uj_cpuctrl_data));
1230+
penetrationtest_sensor_config_t uj_sensor_data;
1231+
TRY(ujson_deserialize_penetrationtest_sensor_config_t(uj, &uj_sensor_data));
1232+
penetrationtest_alert_config_t uj_alert_data;
1233+
TRY(ujson_deserialize_penetrationtest_alert_config_t(uj, &uj_alert_data));
12301234

12311235
// Configure the entropy complex for OTBN. Set the reseed interval to max
12321236
// to avoid a non-constant trigger window.
@@ -1237,7 +1241,9 @@ status_t handle_otbn_fi_init(ujson_t *uj) {
12371241
kPentestPeripheralIoDiv4 | kPentestPeripheralEdn |
12381242
kPentestPeripheralCsrng | kPentestPeripheralEntropy |
12391243
kPentestPeripheralAes | kPentestPeripheralHmac |
1240-
kPentestPeripheralKmac | kPentestPeripheralOtbn);
1244+
kPentestPeripheralKmac | kPentestPeripheralOtbn,
1245+
uj_sensor_data.sensor_ctrl_enable,
1246+
uj_sensor_data.sensor_ctrl_en_fatal);
12411247

12421248
// Configure Ibex to allow reading ERR_STATUS register.
12431249
TRY(dif_rv_core_ibex_init(
@@ -1249,14 +1255,19 @@ status_t handle_otbn_fi_init(ujson_t *uj) {
12491255

12501256
// Configure the alert handler. Alerts triggered by IP blocks are captured
12511257
// and reported to the test.
1252-
pentest_configure_alert_handler();
1258+
pentest_configure_alert_handler(
1259+
uj_alert_data.alert_classes, uj_alert_data.enable_alerts,
1260+
uj_alert_data.enable_classes, uj_alert_data.accumulation_thresholds,
1261+
uj_alert_data.signals, uj_alert_data.duration_cycles,
1262+
uj_alert_data.ping_timeout);
12531263

12541264
// Configure the CPU for the pentest.
12551265
penetrationtest_device_info_t uj_output;
12561266
TRY(pentest_configure_cpu(
1257-
uj_data.enable_icache, &uj_output.icache_en, uj_data.enable_dummy_instr,
1258-
&uj_output.dummy_instr_en, uj_data.enable_jittery_clock,
1259-
uj_data.enable_sram_readback, &uj_output.clock_jitter_locked,
1267+
uj_cpuctrl_data.enable_icache, &uj_output.icache_en,
1268+
uj_cpuctrl_data.enable_dummy_instr, &uj_output.dummy_instr_en,
1269+
uj_cpuctrl_data.dummy_instr_count, uj_cpuctrl_data.enable_jittery_clock,
1270+
uj_cpuctrl_data.enable_sram_readback, &uj_output.clock_jitter_locked,
12601271
&uj_output.clock_jitter_en, &uj_output.sram_main_readback_locked,
12611272
&uj_output.sram_ret_readback_locked, &uj_output.sram_main_readback_en,
12621273
&uj_output.sram_ret_readback_en));
@@ -1272,6 +1283,12 @@ status_t handle_otbn_fi_init(ujson_t *uj) {
12721283
TRY(pentest_read_device_id(uj_output.device_id));
12731284
RESP_OK(ujson_serialize_penetrationtest_device_info_t, uj, &uj_output);
12741285

1286+
// Read the sensor config.
1287+
TRY(pentest_send_sensor_config(uj));
1288+
1289+
// Read the alert config.
1290+
TRY(pentest_send_alert_config(uj));
1291+
12751292
// Read different SKU config fields and return to host.
12761293
TRY(pentest_send_sku_config(uj));
12771294

0 commit comments

Comments
 (0)