Romulus is a lightweight, header-only C++ library providing authenticated encryption and cryptographic hashing based on the Skinny-128-384+ tweakable block cipher.
Romulus - The Lightweight Authenticated Encryption and Hash Function
This tool is designed for developers and security engineers who need efficient, zero-dependency authenticated encryption and hashing functions suitable for lightweight cryptographic applications. It is ideal for embedding secure encryption and authentication mechanisms in resource-constrained environments or systems requiring compliance with NIST Lightweight Cryptography standards.
Avoid reusing the same nonce with the same secret key to maintain security. Associated data is authenticated but not encrypted. Always check the boolean verification flag returned by the decrypt function before using decrypted data to prevent processing unauthenticated plaintext. The library is header-only and zero-dependency, facilitating easy integration into C++ projects. Familiarity with NIST Lightweight Cryptography specifications is recommended for deeper understanding.
Ensure you have a C++ compiler supporting C++20 (e.g., g++ or clang++)
Install system development tools: make and cmake
For testing, install wget, unzip, and Python 3
Install Python dependencies with: python3 -m pip install --user -r wrapper/python/requirements.txt
For benchmarking, install google-benchmark as per https://github.com/google/benchmark/tree/60b16f1#installation
g++ --version
Check installed C++ compiler version
make --version
Verify make utility availability
cmake --version
Verify cmake installation
python3 -m pip install --user -r wrapper/python/requirements.txt
Install required Python dependencies for testing
encrypt(key, nonce, associated_data, plaintext)
Encrypts plaintext using 16-byte key and nonce, producing ciphertext and authentication tag
decrypt(key, nonce, tag, associated_data, ciphertext)
Decrypts ciphertext and verifies authentication tag; returns plaintext and boolean verification flag