tests: make design-rationale comments self-contained
Test comments referenced internal design documents that are not part of this repository. The relevant invariants are now stated inline.
This commit is contained in:
@@ -12,7 +12,7 @@ void main() {
|
||||
await SepotCrypto.init();
|
||||
});
|
||||
|
||||
group('S1: fingerprint a ID z klíče', () {
|
||||
group('fingerprint a ID z klíče', () {
|
||||
test('fingerprint má 52 znaků Crockford base32, SEP- zkratka 14', () async {
|
||||
final identity = await LocalIdentity.create('Alice');
|
||||
expect(identity.fingerprint.display, hasLength(52));
|
||||
@@ -36,7 +36,7 @@ void main() {
|
||||
);
|
||||
final fp = SepotFingerprint.ofPublicKey(pubkey);
|
||||
expect(fp.display, hasLength(52));
|
||||
// KAT hodnota vygenerovaná při zavedení S1 (2026-07-03) — pokud se
|
||||
// KAT hodnota zafixovaná při zavedení fingerprintů — pokud se
|
||||
// změní, změnil se hash vstup/algoritmus a VŠECHNA ID uživatelů
|
||||
expect(
|
||||
fp.display,
|
||||
@@ -53,7 +53,8 @@ void main() {
|
||||
|
||||
test('serializovaný privátní klíč je clamping-stabilní', () {
|
||||
// deserialize→serialize musí být identita na už serializovaných
|
||||
// bajtech — na tom stojí mnemonic roundtrip (MASTER-DESIGN §3, F-3)
|
||||
// bajtech — mnemonic kóduje serializovaný (clampnutý) privátní klíč,
|
||||
// takže nestabilní serializace by rozbila obnovu účtu ze slov
|
||||
for (var i = 0; i < 20; i++) {
|
||||
final keys = SepotCrypto.generateIdentityKeys();
|
||||
final roundtrip = SepotCrypto.derivePublicKey(keys.privateKey);
|
||||
@@ -67,7 +68,7 @@ void main() {
|
||||
});
|
||||
});
|
||||
|
||||
group('S2: mnemonic recovery', () {
|
||||
group('mnemonic recovery', () {
|
||||
test('recover z mnemonic obnoví identický klíč i fingerprint', () async {
|
||||
final original = await LocalIdentity.create('Alice');
|
||||
final words = original.mnemonic;
|
||||
|
||||
@@ -12,9 +12,12 @@ import 'package:sepot/models/contact.dart';
|
||||
import 'package:sepot/models/group.dart';
|
||||
import 'package:sepot/models/identity.dart';
|
||||
|
||||
/// Bezpečnostní pravidla skupin (GROUPS-V1.md §Bezpečnostní pravidla).
|
||||
/// Útočné scénáře: podvržený roster, cizí odesílatel, přepis identity
|
||||
/// klíče, pozvánka bez příjemce, roster přes strop.
|
||||
/// Bezpečnostní pravidla skupin — invarianty příjmové cesty: fingerprint
|
||||
/// v rosteru musí odpovídat identity klíči, odesílatel i já musíme být
|
||||
/// členy, roster smí měnit jen stávající člen a identity klíč známého
|
||||
/// kontaktu se nikdy nepřepisuje (TOFU). Útočné scénáře: podvržený roster,
|
||||
/// cizí odesílatel, přepis identity klíče, pozvánka bez příjemce, roster
|
||||
/// přes strop.
|
||||
void main() {
|
||||
late Directory tmp;
|
||||
late CryptoDb db;
|
||||
|
||||
@@ -9,7 +9,7 @@ import 'package:sepot/models/conversation.dart';
|
||||
import 'package:sepot/models/group.dart';
|
||||
import 'package:sepot/models/message.dart';
|
||||
|
||||
/// Skupiny v1 (GROUPS-V1.md) — perzistence a model. Bezpečnostní pravidla
|
||||
/// Skupiny v1 — perzistence a model. Bezpečnostní pravidla
|
||||
/// příjmové cesty (roster anti-spoof, membership guard) mají vlastní test
|
||||
/// v `test/groups_security_test.dart`, protože nepotřebují DB.
|
||||
void main() {
|
||||
@@ -115,7 +115,7 @@ void main() {
|
||||
expect(g.isMember('MALLORY'), isFalse);
|
||||
});
|
||||
|
||||
test('strop členů je 128 (MASTER-DESIGN otázka 9)', () {
|
||||
test('strop členů je 128 (párový fanout = N obálek na zprávu)', () {
|
||||
expect(Group.maxMembers, 128);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user