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>
2.4 KiB
2.4 KiB
Licences
The repository's packages carry different licences, each package's full text in its
LICENSE file:
| Package | Licence | SPDX |
|---|---|---|
apps/learn/halkyon_learn_flutter, Learn's app |
GNU Affero General Public License, version 3 or any later version | AGPL-3.0-or-later |
apps/learn/halkyon_learn_client, generated from Learn's models |
GNU Affero General Public License, version 3 or any later version | AGPL-3.0-or-later |
apps/learn/halkyon_learn_server |
Server Side Public License, version 1 | SSPL-1.0 |
apps/learn/halkyon_learn_curator, turning dictionary downloads into dictionary files |
GNU Affero General Public License, version 3 or any later version | AGPL-3.0-or-later |
packages/halkyon_base_server, the Serverpod module every Halkyon server includes |
Server Side Public License, version 1 | SSPL-1.0 |
packages/halkyon_base_client, generated from the module's models, with SRP's client half |
GNU Affero General Public License, version 3 or any later version | AGPL-3.0-or-later |
packages/halkyon_app, packages/halkyon_ui |
GNU Affero General Public License, version 3 or any later version | AGPL-3.0-or-later |
packages/halkyon_core, packages/halkyon_interop |
GNU Affero General Public License, version 3 or any later version, as halkyon_shared, where they began, licensed them | AGPL-3.0-or-later |
apps/todo/halkyon_todo_flutter, Todo's app |
GNU Affero General Public License, version 3 or any later version | AGPL-3.0-or-later |
apps/todo/halkyon_todo_client, generated from Todo's models |
GNU Affero General Public License, version 3 or any later version | AGPL-3.0-or-later |
apps/todo/halkyon_todo_server |
Server Side Public License, version 1 (decided 2026-10-19, as Learn's) | SSPL-1.0 |
The servers and the module build on Serverpod's core, which is under the SSPL, and so are under it too. The apps and the shared Flutter packages link only permissively licensed packages (Todo's icon is Lucide's, under the ISC licence, whose notice the app registers), and the client packages are generated from our own model definitions, so all of them are under the AGPL. The curator depends on neither a server nor Serverpod: Learn's server reads the files it writes, never its code.
Everything else in this repository (tooling, documentation, deployment files) is under
AGPL-3.0-or-later unless a file says otherwise.