Skip to content

Router A/B

Router A/B is the split-server architecture for derivation-time custody, SigningWorker activation, and normal signing admission.

Roles

RoleResponsibility
RouterPublic API, auth, policy, quota, replay, Wallet Session verification, authorized-operation admission, and response binding.
Deriver AA-side server derivation material and A-side proof/output packages.
Deriver BB-side server derivation material and B-side proof/output packages.
SigningWorkerActivated server signing material for the normal signing path.

Flow Shape

Ed25519 registration, recovery, export, refresh, share provisioning, and activation:

text
Client -> Router -> Deriver A + Deriver B -> Client or SigningWorker

Day-to-day signing:

text
Client -> Router -> SigningWorker -> Router -> Client

Deriver A and Deriver B stay out of the hot path for ordinary signatures.

Security Claims

Router sees public metadata, route auth, policy state, replay state, quota state, and encrypted role envelopes. Deriver A sees A-side material. Deriver B sees B-side material. SigningWorker sees activated server signing material for the selected signing root, key version, lane, and session.

Public clients use Router A/B normal signing surfaces.

Ed25519 lifecycle ceremonies use Streaming Yao between A and B. ECDSA uses its strict threshold-PRF and additive-share path. Both curves leave the Derivers after activation and use Router plus SigningWorker for normal signing.

Sign-Ready Boundary

Router A/B separates signing authority from signing material readiness.

text
AuthorizationGrantRef + WalletSessionId + quotaId -> reusable authority
verified step-up evidence -> one-operation authority
AuthorizedOperationId -> exact admitted operation
thresholdSessionId + worker material -> may participate in threshold signing
both validated together -> sign-ready

The Router owns Wallet Session verification, atomic operation admission/quota consumption, replay, and request admission. The browser worker owns holder-side signing material. The SigningWorker owns server-side signing material. A public signing route should only be called after the SDK has selected a lane whose current browser worker material is runtime-validated for the same Router A/B scope and authorized operation.

State names used by the SDK:

StateRouter A/B meaning
runtime_validatedSign-ready. Authorization source, authorized operation, threshold identity, quota state, Router A/B scope, and worker material are bound together.
restore_availableDurable worker material exists. The SDK can run restore before signing.
material_hint_unvalidatedA persisted worker-material handle exists, but the current worker has not validated it.
auth_ready_material_pendingWallet Session auth is available, but required holder-side material is missing.
non_signingThe record is valid for another lifecycle surface and cannot authorize Router A/B signing.
invalidRequired auth, scope, quota, identity, or material fields are missing or inconsistent.

Final signing accepts only runtime_validated. Any other state must route to restore, step-up, diagnostics, or failure before a signing request is sent.