feat(crypto): SRP-6a, the register's half and the device's
ADR 0017's step 1. Generic over group and hash (SrpGroup); production takes RFC 5054's 3072-bit group with SHA-256. k = H(N | PAD(g)), u = H(PAD(A) | PAD(B)), K = H(PAD(S)), M1 = H(H(N) xor H(g) | H(I) | s | PAD(A) | PAD(B) | K), M2 = H(PAD(A) | M1 | K). A and B must lie in 1..N-1 and u must not be 0; a and b are 256 bits from Random.secure(); proofs are compared in constant time. x comes from the caller (halkyon_keys makes it); RFC 5054's own x is there for the vectors only. - The register's half in halkyon_base_server (base.dart: srpChallenge, srpVerify), the device's written by hand in halkyon_base_client (srp.dart: SrpClient, srpVerifier). Serverpod's generator cleans and writes only a client's lib/src/protocol/ (serverpod_cli 4.0.4's _getDirectoriesRequiringCleaning; a generate leaves srp/ untouched). - Tests: RFC 5054 Appendix B on both halves; the client against the register, succeeding and every refusal. - The module's tests depend on its client, and pub resolves every member's dev dependencies, so Learn's server image takes the module's client into its workspace too. - The format check covers the hand-written half. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
ae0d88818b
commit
bc499713b8
1 changed files with 1369 additions and 27 deletions
|
|
@ -15,13 +15,16 @@ COPY pubspec.yaml pubspec.lock ./
|
|||
COPY tool/workspace_only.sh tool/
|
||||
COPY apps/learn/halkyon_learn_server apps/learn/halkyon_learn_server
|
||||
COPY packages/halkyon_base_server packages/halkyon_base_server
|
||||
COPY packages/halkyon_base_client packages/halkyon_base_client
|
||||
|
||||
# The workspace root with only the server and the module it builds on: neither the
|
||||
# other apps nor the client packages are needed to build the server, and the Flutter
|
||||
# packages would need Flutter. Everything else stays as the repository has it, above
|
||||
# all the dependency overrides, which bring the server our fork of the offline sync
|
||||
# package (fetched with the git the Dart image has).
|
||||
RUN sh tool/workspace_only.sh apps/learn/halkyon_learn_server packages/halkyon_base_server
|
||||
# other apps nor Learn's client package are needed to build the server, and the Flutter
|
||||
# packages would need Flutter. The module's client comes along only because the
|
||||
# module's tests depend on it (SRP's two halves, held to each other), and pub resolves
|
||||
# every member's dev dependencies; the server never imports it. Everything else stays
|
||||
# as the repository has it, above all the dependency overrides, which bring the server
|
||||
# our fork of the offline sync package (fetched with the git the Dart image has).
|
||||
RUN sh tool/workspace_only.sh apps/learn/halkyon_learn_server packages/halkyon_base_server packages/halkyon_base_client
|
||||
RUN dart pub get
|
||||
WORKDIR /app/apps/learn/halkyon_learn_server
|
||||
RUN dart build cli --target bin/main.dart --output build
|
||||
|
|
|
|||
Loading…
Reference in a new issue