Skip to content

Adopt invitation MLS with protected Cambium provisioning - #329

Merged
TheCryptoDonkey merged 13 commits into
mainfrom
feat/private-device-auth-20261025
Oct 26, 2026
Merged

TheCryptoDonkey merged 13 commits into
mainfrom
feat/private-device-auth-20261025

Conversation

@TheCryptoDonkey

@TheCryptoDonkey TheCryptoDonkey commented Oct 25, 2026 •

Copy link
Copy Markdown
Member

Accepted rendezvous children now remain usable after the short encrypted handoff acceptance deadline, until rotation, revocation, clear/sign-out or protected-state loss. Fresh late replies still refuse. Request, credential, room and invitation expiry and current-child guards remain enforced; no automatic reprovisioning or new authority is added.

Latest candidate 784bfd6 includes main 574ce60. 539 protocol and 109 focused app tests passed at lifetime commit61a9056b; its four changed files remain byte-identical after the current-main merge. Final merged source/Compose compilation and62 reaction/relay/shared-pool/NIP46 integration tests passed. This is component/composition evidence; updated-head hosted CI is separate.

The Android invitation-profile draft now uses our Cambium signer path as well as direct Heartwood bunkers. KithMoot retains its own target transport key in the existing Keystore-encrypted account record, sends only its public key through a strict Activity-only heartwood_provision_rendezvous request, and validates the original persona, device, nonce, index and expiry before accepting the child-key-encrypted reply. Cold restore migrates a missing target before account adoption and preserves the retained account if that protected write fails.

The selected signer/package, original job, session, stage and time window remain checked through request, vault acceptance and result publication. Cancellation or navigation during synchronous storage cannot publish fresh success; a stale completed write is retained for protected-status readback. No Cambium client secret, root secret or generic RPC/decrypt capability is exposed. The shared typed signer surface also handles restored direct bunker wrappers. Direct NIP46 index and expiry are corrected to JSON numbers, matching Heartwood's actual parser.

This retains the experimental invitation controls: independent inviter pin, fresh typed vault authorisation, atomic witnessed context/session adoption, exact response retry, trusted snapshot-v3 restart, loss/import/clone holds, independent keeper registration request/receipt exchange, member-only Add, Update, messages and current-member Remove, including removing the creator. Membership never grants storage keeper authority. The prior private inbox sender/keeper controls remain included. The initial app preview is single-home.

Validation:

  • Earlier handoff candidate 647f801: 18 focused tests passed (7 encrypted NIP46 wire, 2 target-key, 4 vault, 5 protocol), with source/Compose compilation; zero failures/errors/skips. The post-storage completion safeguard was compiled and verified in the final run.
  • Matching Cambium e82a247ae2b358fa0ebcc46162f4b39447a37da7 passed 63 focused parser, intent gate, typed approval and registry tests plus Activity/SDK source compilation. Source review corrected the Android post-storage completion race.
  • The prior invitation candidate b58a26a passed 92 focused invitation/vault/host/client tests with actual matching JNI compilation. This prior-head evidence is distinct from current-head hosted CI.
  • Strict native bundle pin and production/build flags remain unchanged. The fa366b49 source bundle's published development prerelease was independently downloaded and byte-verified: SHA256 8d2d19d2be315952826e70d54ffa7bb4eb75b0536d43a0800ee8259e7e61ef56.

Includes current main 574ce60 and private-read work #328. Requires forgesworn/cambium#35, forgesworn/vennel#315 and forgesworn/bothy-node#121/#122 for corresponding real signer/node adoption. Browser counterpart: forgesworn/kithmoot#575 and forgesworn/bark#63.

Keep draft. Release builds keep experimental MLS disabled; debug builds also require explicit -Pkithmoot.experimentalInvitationMls=true. Actual UI through Cambium and physical Heartwood, complete browser/Android Link/Bothy delivery, live public-relay metadata measurement and independent security review remain unexecuted. Arbitrary jointly restored backups remain outside the selected profile. No installation, app release or production activation is included.

@TheCryptoDonkey TheCryptoDonkey changed the title Add private keeper request sender APIs Add private keeper requests and permission controls Oct 25, 2026
@TheCryptoDonkey TheCryptoDonkey changed the title Add private keeper requests and permission controls Adopt the experimental private invitation MLS profile on Android Oct 25, 2026
@TheCryptoDonkey TheCryptoDonkey changed the title Adopt the experimental private invitation MLS profile on Android Adopt invitation MLS with protected Cambium provisioning Oct 25, 2026
@TheCryptoDonkey
TheCryptoDonkey merged commit 31c987a into main Oct 26, 2026
14 of 17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant