| 10-key-material-hardening |
06 |
entropy |
| security |
| key-material |
| entropy |
| rng |
| KEY-05 |
| F-10a |
| F-07 |
| R-05 |
| R-09 |
| R-13 |
|
complete |
| docs/security/ENTROPY-SEED-AUDIT-2026-07-31.md F-10a (the deliberately-unclassified raw match table), F-07, F-02, F-09 |
| 10-01 (F-01 onboarding gate) and 10-05 (F-13 Core wallet deletion) committed first |
|
| crate::entropy — sealed KeyGenRng allowlist, degenerate-entropy predicate, CSPRNG-readiness ledger |
| core/clippy.toml — crate-wide compile-time ban on rand::random / rand::thread_rng |
| core/deny.toml — change-detecting rand duplicate-major rule, grandfathered 2026-08-02 |
| docs/security/KEY-05-ENTROPY-ENFORCEMENT.md — per-site classification + observed gate evidence |
|
| core/archipelago/src/entropy.rs (new) |
| core/archipelago/src/seed.rs |
| core/archipelago/src/session.rs |
| core/archipelago/src/storage_crypto.rs |
| core/archipelago/src/credentials/store.rs |
| core/archipelago/src/wallet/bdhke.rs |
| core/archipelago/src/mesh/x3dh.rs |
| core/archipelago/src/container/secrets.rs |
| core/archipelago/src/totp.rs |
| 17 further call-site files (see the commit) |
|
| added |
patterns |
| cargo-deny 0.20.2 (pinned; installed from crates.io in CI) |
|
| Sealed trait as an allowlist: supertrait in a private module, so no other module can add a member |
| Hardcoded pre-migration ciphertext vectors from an INDEPENDENT implementation, because a same-process round trip proves self-consistency rather than compatibility |
| Degenerate-entropy predicate restricted to shapes with closed-form false-positive bounds — no heuristics, no entropy estimators |
| Gates proven by observation (inject -> observe failure -> revert -> observe pass), never by assumption |
|
|
| created |
modified |
| core/archipelago/src/entropy.rs |
| core/clippy.toml |
| core/deny.toml |
|
| docs/security/KEY-05-ENTROPY-ENFORCEMENT.md |
| .github/workflows/ci.yml |
| 23 source files under core/archipelago/src (see commit 09a1f762) |
|
|
| cargo-deny wired as bans-only; advisories deliberately NOT enabled (human checkpoint, Task 5) — F-07's advisory half stays OPEN |
| cargo-deny installed from crates.io at a pinned 0.20.2 rather than via EmbarkStudios/cargo-deny-action, because that action exposes no version-pinning input and an unpinned supply-chain checker reproduces the very failure shape this plan removes |
| generate_mnemonic_with switched from generate_in_with to from_entropy so the draw is inspectable at the seam; equivalence held by the pre-existing known-answer test |
| The blinding factor in bdhke.rs is deliberately NOT routed through the guard — intercepting it would mean reimplementing secp256k1 rejection sampling, a larger correctness risk than the guard buys |
| totp.rs migrated SOURCE only; the % charset.len() reduction and 32-char charset untouched (R-12 stays deferred, bias is presently zero) |
| session token minting aborts rather than returns on a degenerate draw, because the callers live in files this plan does not own and widening them to Result is an API change out of scope |
|
| duration |
completed |
tasks_completed |
tasks_total |
| resumed session; migration pre-existing uncommitted, gates + evidence completed 2026-08-02 |
2026-08-02 |
6 |
6 |
|