A paper by Tushar Jois, Cora Rowena Ruiz, and Gabe Kaptchuk.
Our paper appears in Free and Open Communications on the Internet (FOCI) 2026(1), and was presented at the FOCI 2026 winter event.
This project was developed using:
- Python 3.10 (if you use the
asdfversion manager, a.tool-versionsfile is included) - macOS Sequoia 15.3.2 with the MPS backend (but CUDA on other platforms should also work)
To install:
- Clone this repository recursively to get the Pulsar submodule:
git clone --recursive https://github.com/spacelab-ccny/assemblage.git-
Follow the installation instructions for Pulsar which are located in the submodule:
pulsar/README.md. -
After completing the Pulsar installation, install additional packages for Assemblage:
# In your SageMath Python environment as set up during the Pulsar installation
pip3 install opencv-python pdqhash raptorq wonderwordsThe code is primarily divided into three scripts, each corresponding to an algorithm defined in our paper:
offline.py # offline() -- Algorithm 1 in the paper
send.py # send() -- Algorithm 2 in the paper
receive.py # receive() -- Algorithm 3 in the paperEach of the above files can be run stand-alone. In addition to these scripts, another script supports the use of erasure codes in Assemblage:
raptor.py # adds erasure codes to send() and receive()To generate the experiments in the paper, run:
# In your SageMath Python environment as set up during the Pulsar installation
python3 benchmark_vector.py # for the single-vector efficiency experiments
python3 benchmark_raptor.py # for the erasure-code efficiency experimentsIf you found our code useful in your work, please use the following citation:
@article{assemblage2026,
title = {Assemblage: Chipping Away at Censorship with Generative Steganography},
author = {Tushar M. Jois and Cora Rowena Ruiz and Gabriel Kaptchuk},
volume = {2026},
number = {1},
journal = {Free and Open Communications on the Internet},
pages = {33--42},
month = Feb,
year = {2026}
}