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>
27 lines
2.4 KiB
Markdown
27 lines
2.4 KiB
Markdown
# 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.
|