International Association for Cryptologic Research

International Association
for Cryptologic Research

Transactions on Cryptographic Hardware and Embedded Systems 2026

Hardware Private Cubic Circuits


README

Hardware Private Cubic Circuits

This repository contains the source code for the paper "Hardware Private Cubic Circuits".

Requirements

To synthesize, test, and formally verify the hardware modules, the following tools are required: make, yosys, the yosys-slang plugin for Yosys, iverilog, sv2v and gcc. The repository should be cloned with submodules, i.e., git clone --recursive https://github.com/ChairImpSec/HPCC.

Quickstart

On systems with Nix installed, you can load all the required dependencies using nix develop or run the following targets directly:

nix run .#syn # synthesises HPCC and S-Box d=1,d=2,d=3 in F_2 and F_(2^4)
nix run .#test # tests the synthesised designs
nix run .#verif # verifies first- and second-order HPCC in F_2 and F_(2^2) and the first-order S-Box using VerifMSI
nix run .#prolead-verif # statistically validates HPCC using PROLEAD

Note

Verification with VerifMSI++ may take a few hours up to a day on consumer hardware. Verification of higher orders is possible by adjusting the script in flake.nix. We verified both HPCC and the S-Box for d=1, d=2, and only HPCC for d=3.

Warning

PROLEAD verification takes roughly 7 days and roughly 50 GiB of maximum RAM on a 128 core @ 3.10 GHz system.

HPCC

The HPCC module masked_hpcc_mul has the following generic parameters:

The required randomness (in bit) is given by masked_hpcc_mul_package::hpcc_num_randoms(security_order, bit_width, num_a_mults, make_bc_mult).

The module can be synthesized to the desired parameters with make NUM_SHARES=4 BIT_WIDTH=4 NUM_A_MULTS=1 MAKE_BC_MULT=0 syn_masked_hpcc_mul. Note that you must provide the number of shares to the make invocation, not the security order.

A functional testbench can be run using make NUM_SHARES=4 BIT_WIDTH=4 test_masked_hpcc_mul.

The GE area of the design can be obtained from the stats folder, by diving the reported chip area for the module by 0.798, which is the size of a NAND gate in the NANG45 library.

2-Stage AES S-Box

The 2-stage AES S-Box (masked_2stage_aes_sbox) is largely based on the implementation given in Three-Stage-AES. Note that it does not take the security order as a parameter; it uses the number of shares instead.

The module can be synthesized to the desired parameters with make NUM_SHARES=4 syn_masked_2stage_aes_sbox and tested with make NUM_SHARES=4 test_masked_2stage_aes_sbox.

VerifMSI

The PINI property of HPCC can be formally verified to the desired parameters using VerifMSI++ with make BIT_WIDTH=1 NUM_SHARES=2 verif.

This requires that the repository is cloned with submodules using git clone --recursive https://github.com/ChairImpSec/HPCC. Submodules can be loaded after the initial clone using git submodule update --init --recursive.

PROLEAD

Statistical verification of HPCC and the AES S-Box was performed using PROLEAD.

The configurations, netlists and results are available in the prolead directory. They can be reproduced using ./prolead/run.sh <filename_basename> <top_module> as follows:

./prolead/run.sh masked_hpcc_mul_prolead_bw1_d1 masked_hpcc_mul_prolead
./prolead/run.sh masked_hpcc_mul_prolead_bw1_d2 masked_hpcc_mul_prolead
./prolead/run.sh masked_hpcc_mul_bw1_d3 masked_hpcc_mul
./prolead/run.sh masked_2stage_aes_sbox_d1 masked_2stage_aes_sbox
./prolead/run.sh masked_2stage_aes_sbox_d2 masked_2stage_aes_sbox

License