halkyon/LICENSE.md
Tizian 「ティツィアーン」 bc499713b8
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>
2026-10-22 18:11:08 +02:00

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.