feat(keys): passwords taken as RFC 8265's OpaqueString

Other spaces become a plain space and the text is composed (NFC) before
Argon2id, so a password typed on another system, accents composed or
not, unlocks the same keys; empty passwords and control characters are
refused. The normalisation (unorm_dart) is pinned exactly, as it must
never change once an account exists. ADR 0017 records both decisions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-20 12:28:56 +02:00
commit 200a2df32f
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -21,6 +21,9 @@ dependencies:
# which replaced sodium_libs's prebuilt binaries. 4.1.0+1, as 4.1.1 on needs
# code_assets 2, which Learn's mecab_for_dart (2.0.5) doesn't allow yet.
sodium: 4.1.0+1
# Unicode NFC for passwords (RFC 8265's OpaqueString), pinned exactly: a
# password's normalisation must never change once an account exists.
unorm_dart: 0.3.3
dev_dependencies:
test: ^1.31.1