This repository provides the Compass framework presented in our ASPLOS 2026 paper, Compass: Navigating the Design Space of Taint Schemes for RTL Security Verification.
The framework uses chipyard to generate source code of processors, and use our fork of circt to generate their taint logic.
These dependencies can be installed in the env folder on your machine using:
bash env/install.shEach time you want to activate these dependencies, i.e., setting up the environment variables such as PATH, run:
source env/setup.shThe generated taint logic is sent to model checkers to formally verify security properties.
We currently use a commercial software, JasperGold, and assume version 2024.06 is avaliable through jg command.
-
Set
CONFIGinsrc/sodor2/scripts/param.pyto eitherMySodor2StageNaiveConfig,MySodor2StageAutoSandboxConfig, orMySodor2StageCelliftConfig. They correspond to naive taint logic, taint logic from user annotation, and cellIFT. -
User annotation is provided through
iftConfig()function calls in thesrc/sodor2/generatorsfolder -
Run:
python3 src/sodor2/scripts/genTaintLogic.py
- Taint logic is generated in the
src/sodor2/verilog_taintfolder
-
Set
TCL_PATHinsrc/sodor2/scripts/param.pyto eithersrc/sodor2/veri/1taint_sandbox.tclorsrc/sodor2/veri/2original_sandbox.tcl. -
For taint logic case, run:
python3 src/sodor2/ISATaint/scripts/chisel_run.py
- Run:
python3 src/sodor2/scripts/jg_run.py
- Results, i.e., Jaspergold folder, is in
src/sodor2/veri.
-
In
src/sodor2/scripts/param.py, setCONFIGtoMySodor2StageAutoSandboxConfig, and setTCL_PATHtosrc/sodor2/veri/1taint_sandbox.tcl. -
Reset taint logic to the initial one by removing all
iftConfig()function calls in thesrc/sodor2/generatorsfolder undermarkFor=="auto_sandbox"condition. -
Generate taint logic with:
python3 src/sodor2/scripts/genTaintLogic.py
- Try to prove the property with:
python3 src/sodor2/scripts/jg_run.py
- If it is proven, we are done. Otherwise, identify refinement location with:
python3 src/sodor2/scripts/refine.py
-
Add
iftConfig()function calls in thesrc/sodor2/generatorsto refine taint logic. -
Try to check whether the counterexample is eliminated with:
python3 src/sodor2/scripts/refineForSameCex.py
- If eliminated, go back to step 4. Otherwise, go back to step 6.