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>
22 lines
547 B
YAML
22 lines
547 B
YAML
name: halkyon_base_client
|
|
description: >-
|
|
The client side of halkyon_base, generated by Serverpod: what a Halkyon
|
|
app calls to sign in, to manage its account, and to learn an instance's
|
|
basics; and SRP-6a's client half, written by hand.
|
|
version: 0.1.0
|
|
publish_to: none
|
|
|
|
environment:
|
|
sdk: ^3.13.0
|
|
|
|
resolution: workspace
|
|
|
|
dependencies:
|
|
# SRP-6a's hashes (lib/src/srp/, hand-written beside the generated code).
|
|
crypto: ^3.0.7
|
|
meta: ^1.16.0
|
|
serverpod_auth_idp_client: 4.0.4
|
|
serverpod_client: 4.0.4
|
|
|
|
dev_dependencies:
|
|
test: ^1.31.1
|