A post-quantum cryptography tool for file encryption using quantum-resistant algorithms. This application combines post-quantum Key Encapsulation Mechanisms (KEM) with classical symmetric encryption to protect files against future quantum computer threats.
Dark Streamlit interface for ML-KEM-768 key generation, file encryption, decryption, and PEM key inspection.
- Post-Quantum Security: Uses ML-KEM-768, with Kyber768 retained as a legacy compatibility alias
- Hybrid Encryption: Combines quantum-resistant key exchange with AES-256-GCM symmetric encryption
- Password-Protected Keys: Private keys are always encrypted with scrypt-derived AES-256-GCM keys
- User-Friendly Interface: Simple web-based UI built with Streamlit
- PEM Key Format: Keys stored in PEM-like format with quantum algorithm extensions
The backend readiness warning shown here is expected when native liboqs is not installed in the local environment. Click any image to open the full screenshot page.
See docs/SCREENSHOTS.md for the dedicated screenshot page.
- Python 3.10 through 3.13
- Open Quantum Safe native
liboqsshared library - Open Quantum Safe
liboqs-pythonwrapper, which imports asoqs - Dependencies listed in
requirements.txt - Optional hash-locked installs from
requirements-lock.txtorrequirements-dev-lock.txt
-
Clone the repository:
git clone https://github.com/brainx/Quantum-Encryptor.git cd Quantum-Encryptor -
Create a virtual environment (recommended):
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies:
pip install -r requirements.txt
For a reproducible runtime install with pinned hashes:
pip install --require-hashes -r requirements-lock.txt
-
Install or expose native
liboqs.The app checks for a native
liboqsshared library before importingliboqs-python, so startup and tests do not trigger wrapper auto-install side effects. Ifliboqsis not installed in a standard library path, setOQS_INSTALL_PATHto the install prefix that containslib/,lib64/, orbin/.export OQS_INSTALL_PATH=/path/to/liboqs/install
-
Start the application:
./start.sh
The app listens on
127.0.0.1:4000by default. SetPORTto override the local development port:PORT=4001 ./start.sh
Set
PYTHONif you want the wrapper scripts to use a specific interpreter:PYTHON=.venv/bin/python ./start.sh PYTHON=.venv/bin/python ./test.sh
-
Open the web interface in your browser. You can:
- Generate a new post-quantum key pair
- Encrypt files using a recipient's public key
- Decrypt files using your private key
- Access key utilities
- Select "Generate Keys" from the sidebar
- Enter and confirm a strong private-key password
- Generate the keys and download both public and private key files
- Share your public key with others who want to send you encrypted files
- Select "Encrypt File" from the sidebar
- Upload the file you want to encrypt
- Upload the recipient's public key (.pem file)
- Specify the output filename
- Download the encrypted file
- Select "Decrypt File" from the sidebar
- Upload the encrypted file (.pqc file)
- Upload your private key (.pem file)
- Enter your private-key password
- Download the decrypted file
Local automation agents can use the deterministic JSON CLI instead of driving the Streamlit UI. Run commands from the repository workspace and pass only workspace-relative paths. Absolute paths, .. traversal, symlink escapes, and accidental output overwrites are rejected.
mkdir -p keys data
python -m pqc_agent_tools health --json
export PQC_PRIVATE_KEY_PASSWORD='<strong-private-key-password>'
python -m pqc_agent_tools generate-keys \
--public-out keys/agent-public.pem \
--private-out keys/agent-private.pem
python -m pqc_agent_tools inspect-key --key keys/agent-public.pem
python -m pqc_agent_tools inspect-key --key keys/agent-private.pem
python -m pqc_agent_tools encrypt \
--input data/message.txt \
--public-key keys/agent-public.pem \
--output data/message.pqc
python -m pqc_agent_tools inspect-file --input data/message.pqc
python -m pqc_agent_tools verify-file \
--input data/message.pqc \
--private-key keys/agent-private.pem
python -m pqc_agent_tools decrypt \
--input data/message.pqc \
--private-key keys/agent-private.pem \
--output data/message.decrypted.txtThe installed console entry point is equivalent:
quantum-encryptor-agent health --jsonThe CLI prints JSON only and never includes plaintext, private keys, passwords, raw file bytes, or absolute local paths in its output. Private-key operations read passwords from the environment variable named by --password-env, defaulting to PQC_PRIVATE_KEY_PASSWORD.
- Encrypted files use KEM-derived AES-256-GCM keys, require format version 3, and authenticate file header metadata as associated data
- Encrypted private-key PEM files require
PQC-Key-Format: 2; private-key metadata, KEM algorithm, KDF parameters, salt, and nonce are authenticated as AES-GCM associated data - Private keys must be password protected with scrypt-derived AES-256-GCM keys; unencrypted private keys and legacy encrypted private-key PEM metadata are rejected by default
- Private-key passwords require at least 16 characters, at least 5 unique characters, and must not match known weak values
- Decryption checks encrypted-file KEM metadata against the private-key KEM metadata, with
ML-KEM-768andKyber768treated as compatibility aliases - PEM/key reads are capped at 128 KiB before parsing; plaintext and encrypted-container reads keep the existing bounded in-memory limits
- The web UI enforces a 100 MiB plaintext processing limit because files are handled in memory; encrypted containers allow bounded header and authentication overhead above that plaintext limit
- The local agent CLI accepts only workspace-relative paths, returns machine-readable JSON without secret material, and writes private keys plus decrypted outputs with owner-only permissions on POSIX systems; non-overwrite output creation uses exclusive file creation
- Native
liboqsis loaded lazily and missing backend support disables key generation/encryption instead of crashing the app - CI runs formatting, linting, type checks, unit tests, and a native
liboqsintegration test job - See docs/THREAT_MODEL.md for repository trust boundaries, assets, abuse cases, and invariants
- Disclaimer: This software has not undergone an independent security audit and should be reviewed before production use
crypto_config.py- Configuration parameters for cryptographic operationscrypto_core.py- Core cryptographic functions (key generation, encryption, decryption)pqc_agent_tools.py- Local JSON CLI for agentic workflowspqc_app.py- Streamlit web application interfaceui_helpers.py- UI-safe filename helpersstart.sh- Local application startup scripttest.sh- Test runnerrequirements-lock.txt/requirements-dev-lock.txt- Hash-locked runtime and development dependency setspyproject.toml/setup.py- Packaging metadata
This project is licensed under the MIT License - see the LICENSE file for details.
- Open Quantum Safe for liboqs implementation
- NIST for leading the post-quantum cryptography standardization effort