daef7ea190
Helper functions (matrix-mas capability group): - mas_client_register_bash_infra: register/sync OAuth clients via mas-cli - mas_syn2mas_migration_bash_infra: dry-run + apply user migration to MAS - synapse_msc3861_enable_go_infra: edit homeserver.yaml MSC3861 block (with diff) - wellknown_oidc_patch_go_infra: patch well-known JSON with msc2965.authentication - synapse_login_flows_check_go_infra: health-check post-migration login flows Flows + issues for custom Matrix clients (PC + Android): - 0010 matrix-client-pc: Wails + React+Mantine (issues 0147-0153) - 0011 matrix-client-android: Kotlin + Compose (issues 0154-0161) - 0162 enable MAS as auth provider (Synapse delegate) — EXECUTED on VPS - 0163 custom admin panel propio (sustituye synapse-admin) Production state (organic-machine.com): - Synapse migrated SQLite -> Postgres - MSC3861 active, password_config disabled - 21 users + 41 access_tokens migrated via syn2mas - 4 MAS clients registered (element, matrix_pc, matrix_android, admin_panel) - synapse-admin container removed + Coolify route deleted - well-known patched with org.matrix.msc2965.authentication Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.4 KiB
3.4 KiB
id, title, status, priority, created, related_flows, related_issues, dependencies, tags
| id | title | status | priority | created | related_flows | related_issues | dependencies | tags | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0157 | matrix-client-android E2EE rust-sdk: cross-signing, SAS, recovery | pending | critical | 2026-05-24 |
|
|
|
|
Objetivo
Encriptacion end-to-end con matrix-rust-sdk Kotlin bindings (mejor impl Olm/Megolm disponible). Cross-signing keys, SAS verification con emoji, recovery passphrase, key backup server-side. UI para verificar otros usuarios + manejar devices propios.
Tareas
- ViewModel:
SecurityViewModel(matrixClient):bootstrapCrossSigning(passphrase).recoverFromPassphrase(passphrase).startVerification(userId, deviceId) -> VerificationSession.verifyEmoji(sessionId, accepted).listOwnDevices() -> Flow<List<Device>>.backupMegolmKeys().
- Compose:
OnboardingE2EEScreen— wizard 3 pasos: generar passphrase, backup, verify primer device.SettingsSecurityScreen:- Lista devices propios con badge verified/unverified.
- Dialog SAS con emoji grid 7x1 cuando hay verificacion en curso.
- Boton "Reset cross-signing" (destructive, requiere typing "RESET").
- Boton "Restore from passphrase".
EventBubblecon icono shield (green/amber/red).- Banner room con "X devices not verified" si aplica.
- Crypto store:
matrix-rust-sdkgestiona internamente. Solo asegurar queapplicationContext.filesDires persistente entre upgrades.- Backup local del store (export encriptado) antes de uninstall: feature opcional via "Export to file" en settings.
- Tests:
- Instrumented
BootstrapCrossSigningTest. - Instrumented
VerificationSASTestcon mock peer. - Instrumented
RecoveryFromPassphraseTest. - E2E manual con Element Web: enviar/recibir msg E2EE, verificar device cross-platform.
- Instrumented
Funciones del registry a crear
matrix_e2ee_kotlin_infra— wrapper rust-sdk encryption module.passphrase_derive_key_kotlin_core— PBKDF2 wrapper.VerificationDialog_kotlin_ui— Compose emoji grid SAS.OnboardingE2EEScreen_kotlin_ui— wizard.SettingsSecurityScreen_kotlin_ui— devices + verification UI.
Acceptance
- Bootstrap crea cross-signing keys + sube cifradas.
- Msg enviado en room E2EE se descifra en Element Web + cliente PC Wails (y al reves).
- SAS verification con emoji grid vs Element Web: ambos 7 emojis iguales, accept funciona.
- Login device nuevo + restore passphrase recupera msgs historicos.
- Device no verificado dispara shield amber en EventBubble.
- Decryption failure muestra shield rojo + boton "Request key".
Notas
Anti-criterios:
- NO marcar done si E2EE silent-falla (mensaje no descifrado pero sin warning visible).
- NO marcar done si passphrase queda en plain text en disco.
- NO marcar done si cross-signing no funciona contra cliente PC Wails (interop critica).
Decisiones:
matrix-rust-sdk>> matrix-android-sdk2 (deprecated). Olm/Megolm en Rust = mejor perf + sin memory leaks.- Passphrase format igual que cliente PC (4 palabras Diceware o 12-byte base32).
Gotchas:
- Key rotation Megolm: rust-sdk lo gestiona, pero monitorizar logs en primera semana de uso real.
- Olm sessions max: rust-sdk auto-rotate, no accion manual.
- Devices nuevos sin passphrase: msgs pre-existentes NO se descifran. UI debe ser clara.