Skip to content

Commit

Permalink
[fi] Command handlers for Ibex tests
Browse files Browse the repository at this point in the history
This commit adds the command handlers and configs for the following
Ibex FI penetration tests:
- ibex.char.flash_read
- ibex.char.flash_write
- ibex.char.sram_read
- ibex.char.sram_write
- ibex.char.unconditional_branch
- ibex.char.conditional_branch

The device code is located in lowRISC/opentitan#22135 and the binary
was compiled from lowRISC/opentitan@e5a0c2a using:
./bazelisk.sh build //sw/device/tests/crypto/cryptotest/firmware:firmware_fpga_cw310_test_rom

Signed-off-by: Pascal Nasahl <[email protected]>
  • Loading branch information
nasahlpa committed Mar 22, 2024
1 parent 679d99f commit c4575d2
Show file tree
Hide file tree
Showing 8 changed files with 290 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
target:
target_type: cw310
fpga_bitstream: "../objs/lowrisc_systems_chip_earlgrey_cw310_0.1.bit"
force_program_bitstream: False
fw_bin: "../objs/sca_ujson_fpga_cw310.bin"
output_len_bytes: 16
target_clk_mult: 0.24
target_freq: 24000000
baudrate: 115200
protocol: "ujson"
port: "/dev/ttyACM4"
fisetup:
fi_gear: "husky"
fi_type: "voltage_glitch"
parameter_generation: "random"
# Voltage glitch width in cycles.
glitch_width_min: 5
glitch_width_max: 150
glitch_width_step: 3
# Range for trigger delay in cycles.
trigger_delay_min: 0
trigger_delay_max: 500
trigger_step: 10
# Number of iterations for the parameter sweep.
num_iterations: 100
fiproject:
# Project database type and memory threshold.
project_db: "ot_fi_project"
project_mem_threshold: 10000
# Store FI plot.
show_plot: True
num_plots: 10
plot_x_axis: "trigger_delay"
plot_x_axis_legend: "[cycles]"
plot_y_axis: "glitch_width"
plot_y_axis_legend: "[cycles]"
test:
which_test: "ibex_char_conditional_branch"
expected_result: '{"result1":10001,"result2":0,"err_status":0}'
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
target:
target_type: cw310
fpga_bitstream: "../objs/lowrisc_systems_chip_earlgrey_cw310_0.1.bit"
force_program_bitstream: False
fw_bin: "../objs/sca_ujson_fpga_cw310.bin"
output_len_bytes: 16
target_clk_mult: 0.24
target_freq: 24000000
baudrate: 115200
protocol: "ujson"
port: "/dev/ttyACM4"
fisetup:
fi_gear: "husky"
fi_type: "voltage_glitch"
parameter_generation: "random"
# Voltage glitch width in cycles.
glitch_width_min: 5
glitch_width_max: 150
glitch_width_step: 3
# Range for trigger delay in cycles.
trigger_delay_min: 0
trigger_delay_max: 500
trigger_step: 10
# Number of iterations for the parameter sweep.
num_iterations: 100
fiproject:
# Project database type and memory threshold.
project_db: "ot_fi_project"
project_mem_threshold: 10000
# Store FI plot.
show_plot: True
num_plots: 10
plot_x_axis: "trigger_delay"
plot_x_axis_legend: "[cycles]"
plot_y_axis: "glitch_width"
plot_y_axis_legend: "[cycles]"
test:
which_test: "ibex_char_flash_read"
expected_result: '{"result":0,"err_status":0}'
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
target:
target_type: cw310
fpga_bitstream: "../objs/lowrisc_systems_chip_earlgrey_cw310_0.1.bit"
force_program_bitstream: False
fw_bin: "../objs/sca_ujson_fpga_cw310.bin"
output_len_bytes: 16
target_clk_mult: 0.24
target_freq: 24000000
baudrate: 115200
protocol: "ujson"
port: "/dev/ttyACM4"
fisetup:
fi_gear: "husky"
fi_type: "voltage_glitch"
parameter_generation: "random"
# Voltage glitch width in cycles.
glitch_width_min: 5
glitch_width_max: 150
glitch_width_step: 3
# Range for trigger delay in cycles.
trigger_delay_min: 0
trigger_delay_max: 500
trigger_step: 10
# Number of iterations for the parameter sweep.
num_iterations: 100
fiproject:
# Project database type and memory threshold.
project_db: "ot_fi_project"
project_mem_threshold: 10000
# Store FI plot.
show_plot: True
num_plots: 10
plot_x_axis: "trigger_delay"
plot_x_axis_legend: "[cycles]"
plot_y_axis: "glitch_width"
plot_y_axis_legend: "[cycles]"
test:
which_test: "ibex_char_flash_write"
expected_result: '{"result":0,"err_status":0}'
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
target:
target_type: cw310
fpga_bitstream: "../objs/lowrisc_systems_chip_earlgrey_cw310_0.1.bit"
force_program_bitstream: False
fw_bin: "../objs/sca_ujson_fpga_cw310.bin"
output_len_bytes: 16
target_clk_mult: 0.24
target_freq: 24000000
baudrate: 115200
protocol: "ujson"
port: "/dev/ttyACM4"
fisetup:
fi_gear: "husky"
fi_type: "voltage_glitch"
parameter_generation: "random"
# Voltage glitch width in cycles.
glitch_width_min: 5
glitch_width_max: 150
glitch_width_step: 3
# Range for trigger delay in cycles.
trigger_delay_min: 0
trigger_delay_max: 500
trigger_step: 10
# Number of iterations for the parameter sweep.
num_iterations: 100
fiproject:
# Project database type and memory threshold.
project_db: "ot_fi_project"
project_mem_threshold: 10000
# Store FI plot.
show_plot: True
num_plots: 10
plot_x_axis: "trigger_delay"
plot_x_axis_legend: "[cycles]"
plot_y_axis: "glitch_width"
plot_y_axis_legend: "[cycles]"
test:
which_test: "ibex_char_sram_read"
expected_result: '{"result":0,"err_status":0}'
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
target:
target_type: cw310
fpga_bitstream: "../objs/lowrisc_systems_chip_earlgrey_cw310_0.1.bit"
force_program_bitstream: False
fw_bin: "../objs/sca_ujson_fpga_cw310.bin"
output_len_bytes: 16
target_clk_mult: 0.24
target_freq: 24000000
baudrate: 115200
protocol: "ujson"
port: "/dev/ttyACM4"
fisetup:
fi_gear: "husky"
fi_type: "voltage_glitch"
parameter_generation: "random"
# Voltage glitch width in cycles.
glitch_width_min: 5
glitch_width_max: 150
glitch_width_step: 3
# Range for trigger delay in cycles.
trigger_delay_min: 0
trigger_delay_max: 500
trigger_step: 10
# Number of iterations for the parameter sweep.
num_iterations: 100
fiproject:
# Project database type and memory threshold.
project_db: "ot_fi_project"
project_mem_threshold: 10000
# Store FI plot.
show_plot: True
num_plots: 10
plot_x_axis: "trigger_delay"
plot_x_axis_legend: "[cycles]"
plot_y_axis: "glitch_width"
plot_y_axis_legend: "[cycles]"
test:
which_test: "ibex_char_sram_write"
expected_result: '{"result":0,"err_status":0}'
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
target:
target_type: cw310
fpga_bitstream: "../objs/lowrisc_systems_chip_earlgrey_cw310_0.1.bit"
force_program_bitstream: False
fw_bin: "../objs/sca_ujson_fpga_cw310.bin"
output_len_bytes: 16
target_clk_mult: 0.24
target_freq: 24000000
baudrate: 115200
protocol: "ujson"
port: "/dev/ttyACM4"
fisetup:
fi_gear: "husky"
fi_type: "voltage_glitch"
parameter_generation: "random"
# Voltage glitch width in cycles.
glitch_width_min: 5
glitch_width_max: 150
glitch_width_step: 3
# Range for trigger delay in cycles.
trigger_delay_min: 0
trigger_delay_max: 500
trigger_step: 10
# Number of iterations for the parameter sweep.
num_iterations: 100
fiproject:
# Project database type and memory threshold.
project_db: "ot_fi_project"
project_mem_threshold: 10000
# Store FI plot.
show_plot: True
num_plots: 10
plot_x_axis: "trigger_delay"
plot_x_axis_legend: "[cycles]"
plot_y_axis: "glitch_width"
plot_y_axis_legend: "[cycles]"
test:
which_test: "ibex_char_unconditional_branch"
expected_result: '{"result":100,"err_status":0}'
4 changes: 2 additions & 2 deletions objs/sca_ujson_fpga_cw310.bin
Git LFS file not shown
54 changes: 54 additions & 0 deletions target/communication/fi_ibex_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,60 @@ def ibex_char_mem_op_loop(self) -> None:
time.sleep(0.01)
self.target.write(json.dumps("CharMemOpLoop").encode("ascii"))

def ibex_char_flash_read(self) -> None:
""" Starts the ibex.char.flash_read test.
"""
# IbexFi command.
self._ujson_ibex_fi_cmd()
# CharFlashRead command.
time.sleep(0.01)
self.target.write(json.dumps("CharFlashRead").encode("ascii"))

def ibex_char_flash_write(self) -> None:
""" Starts the ibex.char.flash_write test.
"""
# IbexFi command.
self._ujson_ibex_fi_cmd()
# CharFlashWrite command.
time.sleep(0.01)
self.target.write(json.dumps("CharFlashWrite").encode("ascii"))

def ibex_char_sram_read(self) -> None:
""" Starts the ibex.char.sram_read test.
"""
# IbexFi command.
self._ujson_ibex_fi_cmd()
# CharSramRead command.
time.sleep(0.01)
self.target.write(json.dumps("CharSramRead").encode("ascii"))

def ibex_char_sram_write(self) -> None:
""" Starts the ibex.char.sram_write test.
"""
# IbexFi command.
self._ujson_ibex_fi_cmd()
# CharSramWrite command.
time.sleep(0.01)
self.target.write(json.dumps("CharSramWrite").encode("ascii"))

def ibex_char_unconditional_branch(self) -> None:
""" Starts the ibex.char.unconditional_branch test.
"""
# IbexFi command.
self._ujson_ibex_fi_cmd()
# CharUncondBranch command.
time.sleep(0.01)
self.target.write(json.dumps("CharUncondBranch").encode("ascii"))

def ibex_char_conditional_branch(self) -> None:
""" Starts the ibex.char.conditional_branch test.
"""
# IbexFi command.
self._ujson_ibex_fi_cmd()
# CharCondBranch command.
time.sleep(0.01)
self.target.write(json.dumps("CharCondBranch").encode("ascii"))

def init_trigger(self) -> None:
""" Initialize the FI trigger on the chip.
Expand Down

0 comments on commit c4575d2

Please sign in to comment.