Citadel is unaudited software.
The implementation:
- Uses NIST-standardized primitives (ML-KEM-768, AES-256-GCM, HKDF-SHA256)
- Follows established hybrid construction patterns (X25519 + ML-KEM)
- Has comprehensive test coverage including fuzz testing
- Has NOT undergone independent security audit
| Version | Support Status |
|---|---|
| 0.1.x | Active (security fixes) |
| < 0.1 | Unsupported |
Only the latest release receives security fixes.
Do not open public issues for security vulnerabilities.
- Go to the repository's Security tab
- Click "Report a vulnerability"
- Provide details (see below)
Email: andre.cordero36@gmail.com
PGP key available at: [keyserver-link]
- Affected versions / commit hash
- Minimal reproduction case
- Expected vs. actual behavior
- Impact assessment
- Whether timing side-channels or DoS is involved
| Severity | Initial Response | Target Fix |
|---|---|---|
| Critical | 24 hours | 72 hours |
| High | 48 hours | 1 week |
| Medium | 1 week | 2 weeks |
| Low | 2 weeks | Next release |
- Memory safety — parsing panics, buffer overflows, use-after-free
- Cryptographic correctness — wrong outputs, key leakage, nonce reuse
- Oracle behavior — distinguishable errors that leak information
- Misuse resistance failures — accepting malformed inputs, downgrade attacks
- Key handling bugs — missing zeroization, accidental exposure
- Wire format vulnerabilities — version confusion, suite downgrade
- Key management, access control, or compliance certification
- Platform-level compromise (OS, hardware)
- Side-channel attacks requiring physical access
- Denial of service via large inputs (documented limitation)
- Issues in dependencies (report upstream, notify us)
- Hybrid security — if either X25519 or ML-KEM-768 remains secure, plaintext is protected
- AAD/context binding — wrong AAD or context causes decryption failure
- Tampering detection — any modification to ciphertext causes failure
- Uniform errors — all decryption failures produce identical error type
- Wire format stability — v1 format will always be decodable
- Constant-time execution — inherited from dependencies, not verified
- Side-channel resistance — not tested against power/EM/timing attacks
- FIPS compliance — uses NIST primitives, not a certified module
- Performance — optimized for correctness, not speed
Citadel depends on:
| Crate | Purpose | Maintainer |
|---|---|---|
ml-kem |
Post-quantum KEM | RustCrypto |
x25519-dalek |
Classical ECDH | Dalek |
aes-gcm |
Symmetric encryption | RustCrypto |
hkdf |
Key derivation | RustCrypto |
sha2, sha3 |
Hash functions | RustCrypto |
zeroize |
Secure memory clearing | RustCrypto |
subtle |
Constant-time operations | Dalek |
We track security advisories for all dependencies via cargo audit.
- Bug fixes and security patches
- No breaking API changes
- Wire format compatible
- Safe to upgrade immediately
- May include breaking changes
- Migration guide provided
- Old versions supported for 6 months
- Announce 30 days before release
- Semantic versioning strictly followed
- LTS versions designated annually
- Security fixes backported to LTS
- Announcement — deprecated feature marked in docs
- Warning — compile-time warning for 2 releases
- Removal — removed in next major version
If a critical vulnerability is discovered:
- Immediate — assess scope and impact
- 24 hours — develop patch, prepare advisory
- 48 hours — release patched version
- 72 hours — publish security advisory
- 1 week — post-mortem published
The wire format includes suite identifiers to support future algorithms:
- New KEM suites can be added (different
suite_kembyte) - New AEAD suites can be added (different
suite_aeadbyte) - Old suites remain decodable (no silent downgrades)
Migration path for algorithm updates:
- New version supports both old and new suites
- Encrypt with new suite, decrypt both
- Re-encrypt legacy data during maintenance window
- Eventually deprecate old suite
| Component | Last Review | Reviewer |
|---|---|---|
| Wire format | Internal | — |
| KDF construction | Internal | — |
| Error handling | Internal | — |
| Fuzz testing | Ongoing | libFuzzer |
No independent audit has been conducted.
If you require audited cryptography, consider:
- AWS Encryption SDK
- Google Tink
- libsodium
- Security issues: andre.cordero36@gmail.com
- General questions: GitHub Discussions
- Commercial support: andre.cordero36@outlook.com