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>
49 lines
1.7 KiB
Dart
49 lines
1.7 KiB
Dart
/// halkyon_base for a host's own code: its configuration
|
|
/// (`HalkyonBase.configure`), how people authenticate, the account's
|
|
/// deletion and the pruning, email sign-in's helpers, the instance's
|
|
/// basics, people's public profiles and their pages, the instance's register
|
|
/// (ADR 0016), SRP's register side (ADR 0017), and the module's models.
|
|
library;
|
|
|
|
export 'src/auth/account.dart';
|
|
export 'src/auth/auth_config.dart';
|
|
export 'src/auth/code_mail.dart';
|
|
export 'src/auth/email.dart';
|
|
export 'src/auth/github.dart';
|
|
export 'src/auth/identified.dart';
|
|
export 'src/auth/scopes.dart';
|
|
export 'src/common/short_code.dart';
|
|
export 'src/generated/protocol.dart' hide Protocol;
|
|
export 'src/halkyon_base.dart';
|
|
export 'src/instance/data_location.dart';
|
|
export 'src/instance/source_code.dart';
|
|
export 'src/profile/link_verification.dart';
|
|
export 'src/profile/profile_page.dart' show addProfilePageRoute, profilePage;
|
|
export 'src/profile/profile_rules.dart'
|
|
show
|
|
accountDomain,
|
|
avatarPath,
|
|
avatarStorage,
|
|
isHandle,
|
|
maxAvatarBytes,
|
|
operatorAccountDomain,
|
|
profilePageUrl,
|
|
reservedHandles;
|
|
export 'src/profile/profiles.dart';
|
|
export 'src/register/account_register.dart';
|
|
export 'src/register/accounts_mode.dart';
|
|
export 'src/register/deletion_notices.dart'
|
|
show MemberNotifier, deliverDeletionNotices;
|
|
export 'src/register/instance_routes.dart';
|
|
export 'src/register/member_pruning.dart';
|
|
export 'src/register/people.dart' show issueSession;
|
|
export 'src/srp/srp_group.dart';
|
|
export 'src/srp/srp_server.dart'
|
|
show
|
|
SrpAccepted,
|
|
SrpChallenge,
|
|
SrpRefusal,
|
|
SrpRefused,
|
|
SrpVerification,
|
|
srpChallenge,
|
|
srpVerify;
|