CleverWild
b43f4c267a
refactor(proposal): drop the expired status, enforce expiry on every vote
2026-08-26 12:49:11 +02:00
CleverWild
da1c5f02bc
fix(db): require share_salt to be supplied by the daemon
2026-08-25 20:36:19 +02:00
CleverWild
cfd0d5bbe6
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-25 14:46:32 +02:00
CleverWild
2378690329
refactor(proposal): replace string kind dispatch with ProposalKindTag enum (strum)
2026-08-25 14:46:32 +02:00
CleverWild
8d940daf90
feat(vault): add recovery passphrase handling for bootstrap and unseal processes
2026-08-25 14:46:32 +02:00
CleverWild
547cb9325b
fix(crypto): handle 1-of-N Shamir split when ordinary_count=1
2026-08-25 14:46:32 +02:00
CleverWild
048343cc94
feat(server): recovery operators with sleeping/wakeup mechanism (§3.5/§3.6)
2026-08-25 14:46:32 +02:00
CleverWild
95c5a54530
feat(server): key-rotation proposals require full quorum (§3.3)
2026-08-25 14:46:32 +02:00
CleverWild
d2de5bcd37
feat(server): two-operator vault requires at least one recovery share
2026-08-25 14:46:32 +02:00
CleverWild
a31ef6389b
refactor(server): typed pubkey len via u32::try_from in ReplaceOperator
2026-08-25 14:46:32 +02:00
CleverWild
039a20225a
feat(server): ProposalKind::ApproveOneOffTransaction
2026-08-25 14:46:32 +02:00
CleverWild
1d86820afe
feat(server): ProposalKind::ApprovePersistentGrant
2026-08-25 14:46:32 +02:00
CleverWild
16e388d7fd
feat(server): ProposalKind::UpdateShamirParameters
2026-08-25 14:46:32 +02:00
CleverWild
48c77c7d96
feat(server): ProposalKind::ReplaceOperator
2026-08-25 14:46:32 +02:00
CleverWild
d60fa81441
feat(server): ProposalKind ::GrantWalletAccess and ::ApproveServerUpdate
2026-08-25 14:46:32 +02:00
CleverWild
f9795747a6
test(server): governance integration tests
2026-08-25 14:46:32 +02:00
CleverWild
cd01ad6a9d
feat(server::grpc): wire governance RPCs through operator session
2026-08-25 14:46:32 +02:00
CleverWild
4dac689745
feat(server): introduce ProposalManager actor with quorum voting logic
2026-08-25 14:46:31 +02:00
CleverWild
4879d9971c
feat(crypto): expose governance signing context and make shamir_threshold pub const
2026-08-25 14:46:31 +02:00
CleverWild
b0437ebfce
feat(db): add proposal and proposal_vote tables
2026-08-25 14:46:31 +02:00
CleverWild
93070af53b
feat(proto): add governance proposal/vote RPC definitions
2026-08-25 14:46:31 +02:00
CleverWild
70c4def8b9
housekepping: add fixme for start_bootstrap's operator_id
2026-08-25 14:46:31 +02:00
CleverWild
4bb408e509
refactor(server::crypto): use fixed-size [u8; 32] and KeyCell throughout seal key API
2026-08-25 14:46:31 +02:00
CleverWild
a7c53aa9b6
fix(server::tests): tighten unseal test seal_key params to &[u8; 32]
2026-08-25 14:46:31 +02:00
CleverWild
8265281213
feat(server::grpc): wire Shamir committee bootstrap and unseal proto messages
...
Adds DeclareCommittee and ContributePassphrase variants to bootstrap.proto,
ContributePassphrase to unseal.proto, and AwaitingContributions result codes
to both. Implements corresponding inbound converters and outbound reply
mappings. VaultGate handlers delegate to VaultCoordinator.
2026-08-25 14:46:31 +02:00
CleverWild
c8948c73fb
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-25 14:46:31 +02:00
CleverWild
602dda1fa7
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-25 14:46:31 +02:00
CleverWild
8c49ee6e51
feat(server::crypto): add Shamir secret sharing utilities
...
Wraps vsss_rs Gf256::split_array / combine_array into thin split_key /
combine_shares helpers. Also widens derive_key salt parameter from &[u8;16]
to &[u8] to accommodate the 32-byte share salts.
2026-08-25 14:46:31 +02:00
CleverWild
bcd08dbb64
feat(server::db): add share_salt column to operator table
...
Each operator row now stores a 32-byte random salt used to derive the
per-operator share encryption key from their passphrase (Argon2 KDF).
2026-08-25 14:46:31 +02:00
CleverWild
2abc6fa0e6
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-25 14:46:31 +02:00
CleverWild
81cf3693c2
fix(server::peers::operator::auth): make ChallengeContext pub for smlang state machine
...
smlang generates a public state enum whose variants contain ChallengeContext,
requiring the type itself to be fully public. Also tightens the wildcard arm
in client auth to an exhaustive match.
2026-08-25 14:46:31 +02:00
Skipper
9000909e54
WIP: some things
2026-08-25 14:46:31 +02:00
Skipper
a773255935
refactor(server::db): introduced newtype wrappers for entity id's in database
2026-05-04 19:35:27 +02:00
Skipper
3f801abdff
housekeeping(server): deps upgrade + diesel migration to AsyncFnOnce
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-test Pipeline was successful
ci/woodpecker/push/server-lint Pipeline failed
ci/woodpecker/push/server-audit Pipeline was successful
ci/woodpecker/push/server-vet Pipeline failed
ci/woodpecker/push/server-test Pipeline was successful
2026-05-01 11:22:40 +02:00
Skipper
1f9b253433
housekeeping(server): removed unused deps
2026-04-19 13:46:49 +02:00
Skipper
a1c3ffd2d1
refactor: rename to to better reflect meaning
ci/woodpecker/push/server-audit Pipeline was successful
ci/woodpecker/push/server-vet Pipeline failed
ci/woodpecker/push/server-lint Pipeline failed
ci/woodpecker/push/server-test Pipeline was successful
2026-04-19 13:41:50 +02:00
Skipper
9ab074170b
merge: feat-lints into main
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-test Pipeline was successful
ci/woodpecker/push/server-audit Pipeline was successful
ci/woodpecker/push/server-lint Pipeline failed
ci/woodpecker/push/server-vet Pipeline failed
ci/woodpecker/push/server-test Pipeline was successful
ci/woodpecker/push/useragent-analyze Pipeline failed
2026-04-18 15:04:33 +02:00
Skipper
38cf1b98b9
housekeeping(server): clippy warns fix
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline was successful
ci/woodpecker/pr/server-test Pipeline was successful
ci/woodpecker/pr/useragent-analyze Pipeline failed
2026-04-18 13:53:11 +02:00
Skipper
9cf87b2058
merge: refactor-integrity-check into main
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-test Pipeline was successful
ci/woodpecker/pr/useragent-analyze Pipeline failed
2026-04-18 13:46:28 +02:00
Skipper
929d50b589
housekeeping(server): clean too-broad visibility markers and organize imports
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-test Pipeline failed
ci/woodpecker/pr/useragent-analyze Pipeline failed
2026-04-18 13:30:09 +02:00
Skipper
70acfc99b5
merge: refactor-integrity-check into main
2026-04-18 13:19:13 +02:00
Skipper
4a8e51ef32
docs: updated to new auth challenge format and removed stale TOCTOU race condition note
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-audit Pipeline failed
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-test Pipeline was successful
ci/woodpecker/pr/useragent-analyze Pipeline failed
2026-04-17 18:25:55 +02:00
Skipper
9ee86afc19
fix(useragent): now using new challenge format
2026-04-17 18:19:51 +02:00
Skipper
790026e93b
fix(server::tests): api surface of auth challenge changed
2026-04-17 17:58:22 +02:00
Skipper
0e09afda5d
refactor(server::{useragent::auth, client::auth}): use random based + timestamp nonce instead of monotonic counter in database
2026-04-17 17:44:42 +02:00
Skipper
51e6571d80
refactor(server): now keeps track of useragents, instead of
2026-04-17 00:00:43 +02:00
Skipper
3b828d5874
refactor(server::grpc::vault_gate): standard approach using / traits
2026-04-16 22:15:18 +02:00
Skipper
a6f94e3115
fix(server): sending fixed vault state when on stage
2026-04-16 19:36:41 +02:00
hdbg
f49e995c2f
WIP: kameo::messages wiring for transport generalization
ci/woodpecker/pr/server-test Pipeline failed
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-audit Pipeline failed
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/useragent-analyze Pipeline failed
2026-04-16 17:18:46 +02:00
Skipper
e88df432fb
housekeeping(server): dependencies upgrade
ci/woodpecker/pr/server-lint Pipeline was successful
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-test Pipeline failed
2026-04-14 19:10:07 +02:00