Skip to content

Commit

Permalink
[ci] Add capture test to the CI
Browse files Browse the repository at this point in the history
This commit adds the first FPGA test to the CI.
The test captures and publishes 1000 traces using
aes-fvsr-key-batch command.
  • Loading branch information
vrozic committed Sep 28, 2023
1 parent c60d627 commit 2607011
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 6 deletions.
29 changes: 23 additions & 6 deletions ci/azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,30 @@
trigger:
pr:
branches:
include:
- "*"

jobs:
- job: hello_world
displayName: Hello world
pool:
vmImage: ubuntu-latest
- job: sca_capture
displayName: "Capture SCA traces"
timeoutInMinutes: 30
pool: FPGA SCA
steps:
- checkout: self
- bash: |
echo Hello, world!
python3 -m pip install --user -r python-requirements.txt
displayName: "Install python dependencies"
- bash: |
apt update
apt install git-lfs
displayName: "Install system dependencies"
- bash: |
git-lfs pull
displayName: "Pull LFS binaries"
- bash: |
pushd ci
./ci_capture_aes_fvsr.sh
popd
displayName: "Capture traces"
- publish: ./ci/ci_projects/opentitan_simple_aes_data/
artifact: traces
displayName: "Upload traces"
30 changes: 30 additions & 0 deletions ci/ci_capture_aes_cw310.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
device:
fpga_bitstream: ../cw/objs/lowrisc_systems_chip_earlgrey_cw310_0.1.bit
force_program_bitstream: True
fw_bin: ../cw/objs/aes_serial_fpga_cw310.bin
pll_frequency: 100000000
baudrate: 115200
capture:
# Only AES-128 ECB is supported at this moment.
key_len_bytes: 16
plain_text_len_bytes: 16
output_len_bytes: 16
# Samples per trace - We oversample by 20x and AES w/ DOM is doing
# ~56/72 cycles per encryption (AES-128/256).
num_samples: 1200
# Offest in samples - The AES idle signal becomes visible 1 target clock
# cycle later (20 samples) and there are 2 synchronization stages at 100 MHz
# at the top level (4 samples).
offset: -40
# 32-bit seed for SW key masking. Key masks are generated using an LFSR.
# To switch off the masking, 0 must be used as LFSR seed.
lfsr_seed: 0xdeadbeef
batch_prng_seed: 0
scope_gain: 31.5
num_traces: 1000
project_name: ci_projects/opentitan_simple_aes
waverunner_ip: 192.168.1.228
plot_capture:
show: False
num_traces: 100
trace_image_filename: null
14 changes: 14 additions & 0 deletions ci/ci_capture_aes_fvsr.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/bash
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# Simple script to test AES fvsr-key capture
../cw/capture.py --cfg-file ci_capture_aes_cw310.yaml capture aes-fvsr-key-batch
if [ -d "./ci_projects/opentitan_simple_aes_data" ];
then
echo "Directory ./ci_projects/opentitan_simple_aes_data exists"
else
echo "Error: Directory ./ci_projects/opentitan_simple_aes_data does not exists."
exit 1
fi

0 comments on commit 2607011

Please sign in to comment.