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();
|
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 {
|
test('fingerprint má 52 znaků Crockford base32, SEP- zkratka 14', () async {
|
||||||
final identity = await LocalIdentity.create('Alice');
|
final identity = await LocalIdentity.create('Alice');
|
||||||
expect(identity.fingerprint.display, hasLength(52));
|
expect(identity.fingerprint.display, hasLength(52));
|
||||||
@@ -36,7 +36,7 @@ void main() {
|
|||||||
);
|
);
|
||||||
final fp = SepotFingerprint.ofPublicKey(pubkey);
|
final fp = SepotFingerprint.ofPublicKey(pubkey);
|
||||||
expect(fp.display, hasLength(52));
|
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ů
|
// změní, změnil se hash vstup/algoritmus a VŠECHNA ID uživatelů
|
||||||
expect(
|
expect(
|
||||||
fp.display,
|
fp.display,
|
||||||
@@ -53,7 +53,8 @@ void main() {
|
|||||||
|
|
||||||
test('serializovaný privátní klíč je clamping-stabilní', () {
|
test('serializovaný privátní klíč je clamping-stabilní', () {
|
||||||
// deserialize→serialize musí být identita na už serializovaných
|
// 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++) {
|
for (var i = 0; i < 20; i++) {
|
||||||
final keys = SepotCrypto.generateIdentityKeys();
|
final keys = SepotCrypto.generateIdentityKeys();
|
||||||
final roundtrip = SepotCrypto.derivePublicKey(keys.privateKey);
|
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 {
|
test('recover z mnemonic obnoví identický klíč i fingerprint', () async {
|
||||||
final original = await LocalIdentity.create('Alice');
|
final original = await LocalIdentity.create('Alice');
|
||||||
final words = original.mnemonic;
|
final words = original.mnemonic;
|
||||||
|
|||||||
@@ -12,9 +12,12 @@ import 'package:sepot/models/contact.dart';
|
|||||||
import 'package:sepot/models/group.dart';
|
import 'package:sepot/models/group.dart';
|
||||||
import 'package:sepot/models/identity.dart';
|
import 'package:sepot/models/identity.dart';
|
||||||
|
|
||||||
/// Bezpečnostní pravidla skupin (GROUPS-V1.md §Bezpečnostní pravidla).
|
/// Bezpečnostní pravidla skupin — invarianty příjmové cesty: fingerprint
|
||||||
/// Útočné scénáře: podvržený roster, cizí odesílatel, přepis identity
|
/// v rosteru musí odpovídat identity klíči, odesílatel i já musíme být
|
||||||
/// klíče, pozvánka bez příjemce, roster přes strop.
|
/// č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() {
|
void main() {
|
||||||
late Directory tmp;
|
late Directory tmp;
|
||||||
late CryptoDb db;
|
late CryptoDb db;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import 'package:sepot/models/conversation.dart';
|
|||||||
import 'package:sepot/models/group.dart';
|
import 'package:sepot/models/group.dart';
|
||||||
import 'package:sepot/models/message.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
|
/// příjmové cesty (roster anti-spoof, membership guard) mají vlastní test
|
||||||
/// v `test/groups_security_test.dart`, protože nepotřebují DB.
|
/// v `test/groups_security_test.dart`, protože nepotřebují DB.
|
||||||
void main() {
|
void main() {
|
||||||
@@ -115,7 +115,7 @@ void main() {
|
|||||||
expect(g.isMember('MALLORY'), isFalse);
|
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);
|
expect(Group.maxMembers, 128);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user