MOD: docs included
This commit is contained in:
parent
7407a92e69
commit
aa61de33a2
|
|
@ -0,0 +1,117 @@
|
||||||
|
========================================
|
||||||
|
Copius Cipher Chain Cryptography Library
|
||||||
|
========================================
|
||||||
|
|
||||||
|
Overview
|
||||||
|
========
|
||||||
|
|
||||||
|
``ccc_rust`` is the **provider-agnostic cryptographic core** of the CCC
|
||||||
|
architecture. It delivers hardware-grade cryptography through a clean,
|
||||||
|
trait-driven design that supports multiple backend providers.
|
||||||
|
|
||||||
|
|
||||||
|
=================================== ========================== ===========================
|
||||||
|
Repository What ships Depends on
|
||||||
|
=================================== ========================== ===========================
|
||||||
|
``ccc_rust`` Pure Rust crypto library wolfSSL (vendored)
|
||||||
|
``ccc_dart_plugin`` Flutter plugin + Dart API ``ccc_rust`` (git/semver)
|
||||||
|
``letusmsg`` (existing app) App integration ``ccc_dart_plugin`` package
|
||||||
|
=================================== ========================== ===========================
|
||||||
|
|
||||||
|
|
||||||
|
Guiding Principles
|
||||||
|
------------------
|
||||||
|
1. **Provider-Agnostic Architecture**
|
||||||
|
- All cryptography is defined by traits.
|
||||||
|
- Providers implement traits.
|
||||||
|
- No provider-specific logic leaks into higher layers.
|
||||||
|
|
||||||
|
2. **Runtime Capability Discovery**
|
||||||
|
- Algorithms report availability at runtime.
|
||||||
|
- No compile-time assumptions of support.
|
||||||
|
- Missing algorithms fail gracefully.
|
||||||
|
|
||||||
|
3. **Strict Layer Isolation**
|
||||||
|
- No Flutter, Dart, or FFI bridge code.
|
||||||
|
- No platform plugin scaffolding.
|
||||||
|
- This crate must build standalone.
|
||||||
|
|
||||||
|
4. **1-to-1 Algorithm ID Mapping**
|
||||||
|
- Enum discriminants match ``cipher_constants.dart`` exactly.
|
||||||
|
- No translation tables required downstream.
|
||||||
|
|
||||||
|
5. **Zeroization by Default**
|
||||||
|
- Private keys and derived secrets use ``zeroize``.
|
||||||
|
- Sensitive buffers are wiped on drop.
|
||||||
|
|
||||||
|
6. **Reproducible Builds**
|
||||||
|
- wolfSSL is vendored as a pinned submodule.
|
||||||
|
- Stable Rust toolchain is pinned.
|
||||||
|
- No floating dependency branches.
|
||||||
|
|
||||||
|
7. **Security > Convenience**
|
||||||
|
- Explicit errors over silent fallback.
|
||||||
|
- No insecure defaults.
|
||||||
|
- No optional weakening of primitives.
|
||||||
|
|
||||||
|
8. **FFI host compatible**
|
||||||
|
- Consumable by any FFI host (Flutter plugin, Python tests, CLI tools).
|
||||||
|
- The library has no runtime dependency on Flutter.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Implementation Summary (Milestone 1)
|
||||||
|
====================================
|
||||||
|
|
||||||
|
Core crate (``ccc-crypto-core``)
|
||||||
|
--------------------------------
|
||||||
|
* Algorithm enums with fixed ``u32`` discriminants for cross-layer compatibility.
|
||||||
|
* Provider trait surfaces:
|
||||||
|
* ``AeadProvider``
|
||||||
|
* ``KdfProvider``
|
||||||
|
* ``MacProvider``
|
||||||
|
* ``HashProvider``
|
||||||
|
* ``KemProvider``
|
||||||
|
* ``CryptoProvider``
|
||||||
|
* ``ProviderRegistry`` (global, lazy-initialized registry model).
|
||||||
|
* Core result/error and crypto data types, including zeroized key material handling.
|
||||||
|
|
||||||
|
|
||||||
|
wolfSSL provider crate (``ccc-crypto-wolfssl``)
|
||||||
|
------------------------------------------------
|
||||||
|
* AEAD: AES-256-GCM, ChaCha20-Poly1305, XChaCha20-Poly1305.
|
||||||
|
* KDF: HKDF-SHA256/384/512, Argon2id, BLAKE2b-based KDF path.
|
||||||
|
* MAC: HMAC-SHA256/384/512, BLAKE2b-MAC, constant-time verification.
|
||||||
|
* Hash: SHA-256/384/512, SHA3-256/512, BLAKE2b-512.
|
||||||
|
* KEM: X25519 and X448 keygen/encap/decap.
|
||||||
|
* Startup capability probing and benchmark hooks.
|
||||||
|
|
||||||
|
|
||||||
|
Conformance test suite
|
||||||
|
----------------------
|
||||||
|
* NIST SP 800-38D AES-GCM vectors.
|
||||||
|
* RFC 8439 ChaCha20-Poly1305 vectors.
|
||||||
|
* RFC 5869 HKDF vectors.
|
||||||
|
* RFC 4231 HMAC vectors.
|
||||||
|
* FIPS/reference hash vectors.
|
||||||
|
* RFC 7748 X25519/X448 DH vectors.
|
||||||
|
* XChaCha20-Poly1305 extended-nonce roundtrip + auth-failure checks.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Future Providers
|
||||||
|
================
|
||||||
|
|
||||||
|
================== =====================================================
|
||||||
|
Library Rust crate / approach
|
||||||
|
================== =====================================================
|
||||||
|
libsodium ``sodiumoxide`` or ``safe_libsodium``
|
||||||
|
OpenSSL ``openssl`` crate
|
||||||
|
BoringSSL ``boring`` crate
|
||||||
|
RustCrypto Pure-Rust trait impls; no native dep
|
||||||
|
liboqs Open Quantum Safe — ML-KEM, BIKE, HQC, Falcon, Dilithium, SPHINCS+
|
||||||
|
Signal libsignal ``libsignal`` (Apache-2 subset)
|
||||||
|
Botan ``botan`` crate
|
||||||
|
mbedTLS ``mbedtls`` crate
|
||||||
|
Nettle ``nettle-sys`` crate
|
||||||
|
================== =====================================================
|
||||||
|
|
@ -0,0 +1,357 @@
|
||||||
|
CCC Rust — Cryptographic Provider Core
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
:Repository: ``ccc_rust``
|
||||||
|
:Milestone: 1 (Foundation Layer)
|
||||||
|
:Status: Implementation-Ready
|
||||||
|
:Language: Rust (stable toolchain)
|
||||||
|
:Primary Provider (Phase 4): wolfSSL v5.7.2-stable
|
||||||
|
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
|
||||||
|
``ccc_rust`` is the **provider-agnostic cryptographic core** of the CCC
|
||||||
|
architecture. It delivers hardware-grade cryptography through a clean,
|
||||||
|
trait-driven design that supports multiple backend providers.
|
||||||
|
|
||||||
|
This repository contains **no Flutter, no Dart, and no bridge code**.
|
||||||
|
It is a pure Rust workspace that can be consumed by:
|
||||||
|
|
||||||
|
* Flutter (via FFI bridge — Milestone 2)
|
||||||
|
* CLI tools
|
||||||
|
* Backend services
|
||||||
|
* Test harnesses
|
||||||
|
* Other FFI hosts (Python, Swift, etc.)
|
||||||
|
|
||||||
|
All cryptographic primitives execute here.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Purpose
|
||||||
|
-------
|
||||||
|
|
||||||
|
The goals of ``ccc_rust`` are:
|
||||||
|
|
||||||
|
* Provide a unified trait-based crypto abstraction
|
||||||
|
* Support pluggable providers (wolfSSL first, others later)
|
||||||
|
* Expose runtime capability reporting
|
||||||
|
* Enforce zeroization of sensitive material
|
||||||
|
* Validate correctness via conformance test vectors
|
||||||
|
* Remain independent of UI or platform frameworks
|
||||||
|
|
||||||
|
This repository is the cryptographic trust root of the CCC system.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Guiding Principles
|
||||||
|
------------------
|
||||||
|
|
||||||
|
1. **Provider-Agnostic Architecture**
|
||||||
|
- All cryptography is defined by traits.
|
||||||
|
- Providers implement traits.
|
||||||
|
- No provider-specific logic leaks into higher layers.
|
||||||
|
|
||||||
|
2. **Runtime Capability Discovery**
|
||||||
|
- Algorithms report availability at runtime.
|
||||||
|
- No compile-time assumptions of support.
|
||||||
|
- Missing algorithms fail gracefully.
|
||||||
|
|
||||||
|
3. **Strict Layer Isolation**
|
||||||
|
- No Flutter, Dart, or FFI bridge code.
|
||||||
|
- No platform plugin scaffolding.
|
||||||
|
- This crate must build standalone.
|
||||||
|
|
||||||
|
4. **1-to-1 Algorithm ID Mapping**
|
||||||
|
- Enum discriminants match ``cipher_constants.dart`` exactly.
|
||||||
|
- No translation tables required downstream.
|
||||||
|
|
||||||
|
5. **Zeroization by Default**
|
||||||
|
- Private keys and derived secrets use ``zeroize``.
|
||||||
|
- Sensitive buffers are wiped on drop.
|
||||||
|
|
||||||
|
6. **Conformance Before Capability**
|
||||||
|
- An algorithm is considered available only if:
|
||||||
|
- The probe succeeds
|
||||||
|
- Test vectors pass
|
||||||
|
- No silent partial implementations.
|
||||||
|
|
||||||
|
7. **Reproducible Builds**
|
||||||
|
- wolfSSL is vendored as a pinned submodule.
|
||||||
|
- Stable Rust toolchain is pinned.
|
||||||
|
- No floating dependency branches.
|
||||||
|
|
||||||
|
8. **Security > Convenience**
|
||||||
|
- Explicit errors over silent fallback.
|
||||||
|
- No insecure defaults.
|
||||||
|
- No optional weakening of primitives.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Workspace Layout
|
||||||
|
----------------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
ccc_rust/
|
||||||
|
├── Cargo.toml
|
||||||
|
├── rust-toolchain.toml
|
||||||
|
├── .cargo/
|
||||||
|
│ └── config.toml
|
||||||
|
├── vendors/
|
||||||
|
│ └── wolfssl/ (git submodule, pinned)
|
||||||
|
├── crates/
|
||||||
|
│ ├── ccc-crypto-core/
|
||||||
|
│ └── ccc-crypto-wolfssl/
|
||||||
|
└── tests/
|
||||||
|
└── conformance/
|
||||||
|
|
||||||
|
Crate Responsibilities
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
ccc-crypto-core
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Defines:
|
||||||
|
|
||||||
|
* Algorithm enums (AEAD, KDF, MAC, Hash, KEM)
|
||||||
|
* Provider traits
|
||||||
|
* Capability structures
|
||||||
|
* Provider registry
|
||||||
|
* Error types
|
||||||
|
* Shared data structures
|
||||||
|
|
||||||
|
This crate contains **no algorithm implementations**.
|
||||||
|
|
||||||
|
ccc-crypto-wolfssl
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Implements:
|
||||||
|
|
||||||
|
* ``CryptoProvider`` trait
|
||||||
|
* wolfSSL-backed AEAD, KDF, MAC, Hash, and KEM
|
||||||
|
* Startup capability probe
|
||||||
|
* Benchmark harness
|
||||||
|
* Self-test integration
|
||||||
|
|
||||||
|
wolfSSL is compiled via ``cmake`` + ``bindgen`` in ``build.rs``.
|
||||||
|
|
||||||
|
tests/conformance
|
||||||
|
^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Executable test harness validating:
|
||||||
|
|
||||||
|
* NIST vectors
|
||||||
|
* RFC vectors
|
||||||
|
* DH test vectors
|
||||||
|
* Hash reference outputs
|
||||||
|
|
||||||
|
All vectors must pass before tagging a release.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Supported Algorithms (Phase 4)
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
AEAD
|
||||||
|
~~~~
|
||||||
|
|
||||||
|
* AES-256-GCM
|
||||||
|
* ChaCha20-Poly1305
|
||||||
|
* XChaCha20-Poly1305
|
||||||
|
|
||||||
|
KDF
|
||||||
|
~~~
|
||||||
|
|
||||||
|
* HKDF-SHA256
|
||||||
|
* HKDF-SHA384
|
||||||
|
* HKDF-SHA512
|
||||||
|
* Argon2id
|
||||||
|
* BLAKE2b-KDF
|
||||||
|
|
||||||
|
MAC
|
||||||
|
~~~
|
||||||
|
|
||||||
|
* HMAC-SHA256
|
||||||
|
* HMAC-SHA512
|
||||||
|
* BLAKE2b-MAC
|
||||||
|
|
||||||
|
Hash
|
||||||
|
~~~~
|
||||||
|
|
||||||
|
* SHA-256
|
||||||
|
* SHA-384
|
||||||
|
* SHA-512
|
||||||
|
* SHA3-256
|
||||||
|
* SHA3-512
|
||||||
|
* BLAKE2b-512
|
||||||
|
|
||||||
|
KEM
|
||||||
|
~~~
|
||||||
|
|
||||||
|
* X25519
|
||||||
|
* X448
|
||||||
|
|
||||||
|
Planned (Phase 5):
|
||||||
|
|
||||||
|
* ML-KEM-768
|
||||||
|
* ML-KEM-1024
|
||||||
|
* Classic McEliece
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Core Traits
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The central abstraction:
|
||||||
|
|
||||||
|
.. code-block:: rust
|
||||||
|
|
||||||
|
pub trait CryptoProvider:
|
||||||
|
AeadProvider
|
||||||
|
+ KdfProvider
|
||||||
|
+ MacProvider
|
||||||
|
+ HashProvider
|
||||||
|
+ Send
|
||||||
|
+ Sync
|
||||||
|
{
|
||||||
|
fn provider_name(&self) -> &'static str;
|
||||||
|
fn capabilities(&self) -> ProviderCapabilities;
|
||||||
|
fn self_test(&self) -> SelfTestReport;
|
||||||
|
fn benchmark(&self) -> BenchmarkReport;
|
||||||
|
}
|
||||||
|
|
||||||
|
Providers are registered in:
|
||||||
|
|
||||||
|
.. code-block:: rust
|
||||||
|
|
||||||
|
ProviderRegistry:
|
||||||
|
OnceLock<Mutex<HashMap<&'static str, Box<dyn CryptoProvider>>>>
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Capability Model
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Each algorithm reports:
|
||||||
|
|
||||||
|
* ``available: bool``
|
||||||
|
* ``deterministic_io: bool``
|
||||||
|
* ``efficiency_score: u8``
|
||||||
|
* ``reliability_score: u8``
|
||||||
|
|
||||||
|
Availability is determined via live probe calls — not compile flags.
|
||||||
|
|
||||||
|
Benchmark scores are normalized (0–100) based on throughput testing.
|
||||||
|
|
||||||
|
Self-test reliability is derived from vector validation.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Build Instructions
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Standard build:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cargo build --workspace
|
||||||
|
|
||||||
|
Run tests:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cargo test --workspace
|
||||||
|
|
||||||
|
Run conformance suite:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cargo run -p ccc-conformance-tests
|
||||||
|
|
||||||
|
Cross-compile:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cargo build --target aarch64-apple-ios
|
||||||
|
cargo build --target aarch64-linux-android
|
||||||
|
|
||||||
|
Security audit:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cargo audit
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Milestone 1 Release Gate
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Before tagging ``v0.1.0``:
|
||||||
|
|
||||||
|
* All unit tests pass
|
||||||
|
* Conformance suite prints ``ALL VECTORS PASSED``
|
||||||
|
* iOS + Android targets compile
|
||||||
|
* No Flutter or Dart dependencies
|
||||||
|
* No CVEs in dependency tree
|
||||||
|
|
||||||
|
Only after this gate is passed does Milestone 2 begin.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
How to Add a New Provider
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
1. Create a new crate under ``crates/``.
|
||||||
|
2. Implement all provider traits.
|
||||||
|
3. Implement capability probing.
|
||||||
|
4. Implement self-test integration.
|
||||||
|
5. Implement benchmark().
|
||||||
|
6. Register provider in registry.
|
||||||
|
7. Add vector validation to conformance suite.
|
||||||
|
|
||||||
|
No changes to existing providers are required.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Security Model
|
||||||
|
--------------
|
||||||
|
|
||||||
|
* All private keys use ``Zeroizing<Vec<u8>>``.
|
||||||
|
* No key material is logged.
|
||||||
|
* No debug-only crypto paths.
|
||||||
|
* Capability probing prevents accidental exposure of unsupported algorithms.
|
||||||
|
* No implicit algorithm fallback.
|
||||||
|
|
||||||
|
This repository contains the cryptographic enforcement layer.
|
||||||
|
Higher layers orchestrate — this layer executes.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Non-Goals
|
||||||
|
---------
|
||||||
|
|
||||||
|
* No Flutter bindings
|
||||||
|
* No Dart APIs
|
||||||
|
* No UI code
|
||||||
|
* No business logic
|
||||||
|
* No message formatting logic
|
||||||
|
* No network code
|
||||||
|
|
||||||
|
Those belong to higher milestones.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Future Providers (Planned)
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
* libsodium
|
||||||
|
* OpenSSL
|
||||||
|
* BoringSSL
|
||||||
|
* RustCrypto (pure Rust)
|
||||||
|
* liboqs (post-quantum)
|
||||||
|
* Botan
|
||||||
|
* mbedTLS
|
||||||
|
* Nettle
|
||||||
|
|
||||||
|
The trait system allows incremental addition without breaking consumers.
|
||||||
|
|
||||||
Loading…
Reference in New Issue