CleverWild
36249129d1
feat(vault)!: implement full Shamir re-key flow and governance execution (§3.3–§3.5)
...
- Add `rekey.proto` with `ContributePassphrase` / `ContributeRecoveryPassphrase` / `RekeyResult`
- Wire `rekey` as a 4th vault stream payload in `vault.proto` and gRPC dispatch
- Add `RekeyRootKey` message to `Vault` actor: generates new random seal key, re-encrypts root key, writes new `root_key_history` row
- Add `StartRekey`, `ContributeRekey`, `ContributeRecoveryRekey` messages to `VaultCoordinator`; `finalize_rekey` uses threshold-1 fast path identical to bootstrap
- `execute_replace_operator` now UPDATEs `operator_identity.public_key` in-place (avoids FK constraint violation), deletes stale `operator` share row, then triggers `StartRekey`
- `execute_update_shamir_parameters` triggers `StartRekey` instead of warning stub
- `ProposalKind::ReplaceOperator` carries `old_operator_id`; encode/decode updated accordingly
- `GlobalActors::spawn` extracts `vault_coordinator` before `Ok(Self { … })` so it can be cloned into `ProposalManager::new`
- Add `handle_rekey` in session handlers forwarding passphrase contributions to `VaultCoordinator`
- Fix test: rename `replace_operator_inserts_identity_row` → `replace_operator_updates_pubkey_and_starts_rekey`, assert count stays 1 and pubkey is updated
2026-08-26 13:01:44 +02:00
CleverWild
3817a080c9
refactor(proposal): replace string kind dispatch with ProposalKindTag enum (strum)
2026-08-26 13:01:44 +02:00
CleverWild
e121708d28
fix(crypto): handle 1-of-N Shamir split when ordinary_count=1
2026-08-26 13:01:44 +02:00
CleverWild
6e3fa736e0
feat(server): recovery operators with sleeping/wakeup mechanism (§3.5/§3.6)
2026-08-26 13:01:44 +02:00
CleverWild
19a62e7195
feat(server): key-rotation proposals require full quorum (§3.3)
2026-08-26 13:01:44 +02:00
CleverWild
57200cbc50
feat(server): two-operator vault requires at least one recovery share
2026-08-26 13:01:44 +02:00
CleverWild
291ef2e831
refactor(server): typed pubkey len via u32::try_from in ReplaceOperator
2026-08-26 13:01:44 +02:00
CleverWild
d12109c2c9
feat(server): ProposalKind::ApproveOneOffTransaction
2026-08-26 13:01:44 +02:00
CleverWild
277fb3c92d
feat(server): ProposalKind::ApprovePersistentGrant
2026-08-26 13:01:44 +02:00
CleverWild
9e42097683
feat(server): ProposalKind::UpdateShamirParameters
2026-08-26 13:01:44 +02:00
CleverWild
25b86b14e9
feat(server): ProposalKind::ReplaceOperator
2026-08-26 13:01:44 +02:00
CleverWild
ba8748a17b
feat(server): ProposalKind ::GrantWalletAccess and ::ApproveServerUpdate
2026-08-26 13:01:44 +02:00
CleverWild
f16d0a26e2
feat(server): introduce ProposalManager actor with quorum voting logic
2026-08-26 13:01:44 +02:00
CleverWild
074e6501ec
feat(crypto): expose governance signing context and make shamir_threshold pub const
2026-08-26 13:01:44 +02:00
CleverWild
b6c91c56eb
housekepping: add fixme for start_bootstrap's operator_id
2026-08-26 13:01:44 +02:00
CleverWild
240fd3eb63
refactor(server::crypto): use fixed-size [u8; 32] and KeyCell throughout seal key API
2026-08-26 13:01:44 +02:00
CleverWild
83075e9df7
feat(server): introduce VaultCoordinator for multi-operator Shamir bootstrap/unseal
...
VaultCoordinator collects operator passphrases, splits the seal key into
Shamir shares on bootstrap (encrypting each share with the operator's
passphrase via Argon2 + XChaCha20-Poly1305), and reconstructs the seal
key from threshold shares on unseal. Adds vsss-rs 5.4.0 and rand_core 0.6
dependencies.
2026-08-26 13:01:44 +02:00
CleverWild
fc7f2b1a03
refactor(server::actors::vault): clean up Bootstrap/TryUnseal, remove Bootstrapping state
...
Bootstrap and TryUnseal now accept a SafeCell<Vec<u8>> seal key directly.
The Bootstrapping intermediate state is removed — multi-operator coordination
is the responsibility of VaultCoordinator, which calls Bootstrap atomically
once all shares are collected.
2026-08-26 13:01:44 +02:00
CleverWild
928799fa07
feat(server::actors::evm): implement operator_delete_grant
...
Sets revoked_at on the evm_basic_grant row; returns NotFound if the grant
does not exist. Wires the handler in OperatorSession replacing the todo!().
2026-08-26 13:01:44 +02:00
Skipper
28b7276e11
WIP: some things
2026-08-26 13:01:44 +02:00
Skipper
9ca2c4ed64
refactor(server::db): introduced newtype wrappers for entity id's in database
2026-08-26 13:01:44 +02:00
Skipper
ab79959dce
housekeeping(server): deps upgrade + diesel migration to AsyncFnOnce
2026-08-26 13:01:44 +02:00
Skipper
ec5a8143fb
refactor: rename to to better reflect meaning
2026-08-26 13:01:44 +02:00
Skipper
602be3aa11
merge: feat-lints into main
2026-08-26 13:00:40 +02:00
CleverWild
d4084ded35
feat: rustc and clippy linting
2026-08-26 13:00:40 +02:00
Skipper
e6724cb8d3
merge: refactor-integrity-check into main
2026-08-26 13:00:40 +02:00
Skipper
6b572d0c86
housekeeping(server): clean too-broad visibility markers and organize imports
2026-08-26 13:00:40 +02:00
Skipper
d7ca0b4fc8
housekeeping(server): dependencies upgrade
2026-08-26 13:00:40 +02:00
Skipper
f6151293d4
refactor(server): now keeps track of useragents, instead of
2026-08-26 13:00:40 +02:00
hdbg
1d9b572565
feat(user-agent): add VaultGate for sealed vault authentication
2026-08-26 13:00:40 +02:00
hdbg
d2f41e693c
fix(server::user_agent): useragents now self-sign themselves on bootstrap
2026-08-26 13:00:40 +02:00
hdbg
9650407093
refactor(server): reorganized client/user_agent actors into separate module peers and added event MessageBus
2026-08-26 13:00:40 +02:00
CleverWild
247cb90fbf
refactor(hashing): introduce Hashable derive macro and migrate server types
2026-08-26 13:00:39 +02:00
hdbg
a49baf7386
housekeeping(server): fixed clippy warns
2026-08-26 13:00:39 +02:00
hdbg
6b814f4869
refactor(server): moved shared module crypto into arbiter-crypto
2026-08-26 13:00:39 +02:00
hdbg
4c2e00b56d
refactor(server): migrated auth to ml-dsa
2026-08-26 13:00:39 +02:00
hdbg
13fb31f841
fix(server::bootsrapper): token compare is now constant-time
2026-08-26 13:00:39 +02:00
hdbg
11ad5df426
feat(server): add integrity verification for client keys
2026-08-26 13:00:39 +02:00
hdbg
d482ed37aa
fix(server): replaced postcard-based integrity fingerprint with custom trait providing order-independent hashing
2026-08-26 13:00:39 +02:00
hdbg
dcf42b0e4e
fix(server): added chain_id check and covered check_shared_constraints with unit tests
2026-08-26 13:00:39 +02:00
hdbg
9173be2920
tests(server): fixed for new integrity checks
2026-08-26 13:00:39 +02:00
hdbg
d55e9880ec
refactor(server): rework envelopes and integrity check
2026-08-26 13:00:39 +02:00
hdbg
ba7bfe9b6f
fix(server): remove stale mentions of miette
2026-08-26 13:00:39 +02:00
CleverWild
4bd8a2df33
feat(server): integrity envelope engine for EVM grants with HMAC verification
2026-08-26 13:00:39 +02:00
hdbg
37fa954933
merge: @main into client-integrity-verification
2026-08-26 13:00:39 +02:00
hdbg
5c3421de1e
housekeeping(server): fixed clippy warns
2026-08-26 13:00:39 +02:00
hdbg
be23f87e67
refactor(user-agent): remove backfill pubkey integrity tags
2026-08-26 13:00:39 +02:00
hdbg
29f2174dcf
fix(server): previously, user agent auth accepted invalid signatures
2026-08-26 13:00:39 +02:00
hdbg
149035ecf5
refactor(server): separate crypto by purpose and moved outside of actor into separate module
2026-08-26 13:00:39 +02:00
CleverWild
17ea8d8dc9
feat(auth): implement attestation status verification for public keys
2026-08-26 13:00:39 +02:00