feat(auth): bring opaque (RFC 9807) auth

OPAQUE (RFC 9807) implementation (using `opaque-ke` crate)

    with opaque authentfication, server will never receive the password (in the auth=password mode)
    this is a must have to create trust with users to permit end to end encryption in the future
    (we cannot know if user use the same password/passphrase for his asymetric key or his oxicloud auth,
    this is why server must never have the password)

    pass1: prepare server
This commit is contained in:
Edouard Vanbelle
2026-07-26 15:04:31 +02:00
parent d76803f602
commit 0e395ae15f
19 changed files with 1570 additions and 7 deletions
+28
View File
@@ -117,3 +117,31 @@ OXICLOUD_MAGIC_LINK_SEND_PER_IP_PER_HOUR=50
# permits IP spoofing for tests
OXICLOUD_TRUST_PROXY_CIDR=0.0.0.0/0
# ── OPAQUE aPAKE (Phase 0 substrate) ────────────────────────────────
# Boot the OPAQUE service in Migrate mode so every Hurl run exercises:
# 1. OpaqueConfig::from_env parsing all five OPAQUE env vars.
# 2. effective_mode(&auth) permitting Migrate because password IS in
# OXICLOUD_AUTH_METHODS above (would auto-downgrade to Off if we
# had disabled it — that path is unit-tested in
# common::config::tests::effective_mode_downgrades_to_off_...).
# 3. OpaqueService::from_config accepting a valid serialised setup.
# 4. AppState wiring populating `opaque_service = Some(_)`.
#
# Phase 0 has no wire-facing endpoints, so this only proves the
# substrate loads cleanly; opaque_substrate.hurl asserts the legacy
# /api/auth/login path remains intact and the future OPAQUE endpoints
# still 404 (they flip to 200 when Phase 1 lands).
#
# The SERVER_SETUP below is a throwaway keypair generated once for the
# test env — real deployments call `opaque-setup` and paste the output.
# Never reuse this value outside CI. Regenerate any time with:
# cargo run --bin opaque-setup
OXICLOUD_OPAQUE_MODE=migrate
OXICLOUD_OPAQUE_SERVER_SETUP="ZY4hAGa1MNyE7Ht+8ksLcyMmi/K2iJvxQly+DdfllUxjiH0+CjCt4hG6+9Y68jGet2L213dV0hajCbr4fXnekkWtUxqLr+butVHEksZ9NJRuZTvS6SMC73yf/yku4WUHT1NSRB2yHurAFmYn75D9wdA1VaXTuwgO/u5i1pvcsQs="
# Fast Argon2id — CI machines are underpowered vs production (256 MiB
# default would drag every test-scaffold future OPAQUE handshake in
# Phase 1+). Matches the params used in the round-trip unit test.
OXICLOUD_OPAQUE_KSF_MEMORY_KIB=8
OXICLOUD_OPAQUE_KSF_ITERATIONS=1
OXICLOUD_OPAQUE_KSF_PARALLELISM=1