PODT is a CMake-based C++ research artifact for secure decision tree evaluation. This repository accompanies the following paper:
J. Li and L. F. Zhang.
Silent Guardians: Independent and Secure Decision Tree Evaluation Without Chatter.in IEEE Transactions on Dependable and Secure Computing, vol. 23, no. 4, pp. 7691-7708, 2026. https://doi.org/10.1109/TDSC.2026.3675596
The repository contains three protocol implementations:
| Component | Security setting | Notes |
|---|---|---|
ODTE_SH |
Semi-honest | Baseline implementation |
PVODTE_MS |
Maliciously secure | Variant with verification parameter A |
PVODTE_MH |
Maliciously secure | Variant based on VHSS verification |
This code is intended for experimental evaluation and reproducibility. It is not a production cryptographic library.
.
├── CMakeLists.txt
├── CMakePresets.json
├── cmake/
├── common/
├── ODTE_SH/
├── PVODTE_MS/
├── PVODTE_MH/
└── .github/workflows/ci.yml
- CMake
>= 3.25 - A C++11-compatible compiler
- NTL
- GMP
Example package names:
# Ubuntu / Debian
sudo apt-get update
sudo apt-get install -y cmake g++ libntl-dev libgmp-dev# macOS with Homebrew
brew install cmake ntl gmpConfigure and build:
cmake --preset default
cmake --build --preset defaultRun the repository smoke tests:
ctest --preset defaultRun one protocol directly:
./build/default/ODTE_SH/ODTE_SH --quick
./build/default/PVODTE_MS/PVODTE_MS --quick
./build/default/PVODTE_MH/PVODTE_MH --quickIf the dependencies are not in a standard search path, configure with an explicit prefix:
cmake -S . -B build -DCMAKE_PREFIX_PATH=/opt/homebrewYou can also pass NTL_DIR and GMP_DIR directly:
cmake -S . -B build -DNTL_DIR=/path/to/ntl -DGMP_DIR=/path/to/gmpThe default commands are:
./build/default/ODTE_SH/ODTE_SH
./build/default/PVODTE_MS/PVODTE_MS
./build/default/PVODTE_MH/PVODTE_MHThese run the repository's default workload family:
- tree depths:
3,8,13,17,20 - attribute counts:
13,9,13,57,784 - message bit-length:
10 - repetitions:
5
Use --quick only for a fast end-to-end check. It runs a reduced case and is not intended for paper timings.
All three executables share the same CLI:
./build/default/ODTE_SH/ODTE_SH --help
./build/default/ODTE_SH/ODTE_SH --depth 3 --attributes 13 --msgbit 10 --cycles 3Supported options:
--quick: run a reduced smoke-test case--depth <n>: set tree depth for a single custom run--attributes <n>: set attribute count for a single custom run--msgbit <n>: set message bit-length--cycles <n>: set timing repetitions--debug: enable debug mode--help: print usage
To compare all three protocols on the same parameter point:
./build/default/ODTE_SH/ODTE_SH --depth 3 --attributes 13 --msgbit 10 --cycles 3
./build/default/PVODTE_MS/PVODTE_MS --depth 3 --attributes 13 --msgbit 10 --cycles 3
./build/default/PVODTE_MH/PVODTE_MH --depth 3 --attributes 13 --msgbit 10 --cycles 3Each run prints phase-wise timing statistics such as:
Setup algo timeProvider encryption timeFeature Selection timeHSSCMPorVHSSCMP timeClassificationGen timeDTevaluation 0/1 timeDecryption time
The reported values are mean time in milliseconds plus RSD (relative standard deviation). In --quick mode the default repetition count is 1, so RSD is usually 0%.
ctest --preset defaultcurrently runs the same--quickmode for all three executables.- The benchmark drivers generate inputs internally; this repository is aimed at protocol evaluation, not deployment.
- The repo includes
CMakePresets.json,.editorconfig,.clang-format, and GitHub Actions CI for basic project hygiene.
If you use this repository in academic work, please cite:
@article{li2026silent,
author = {J. Li and L. F. Zhang},
title = {Silent Guardians: Independent and Secure Decision Tree Evaluation Without Chatter},
journal = {IEEE Transactions on Dependable and Secure Computing},
year = {2026},
volume = {23},
number = {4},
pages = {7691--7708},
doi = {10.1109/TDSC.2026.3675596}
}Released under the MIT License. See LICENSE for details.