mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-22 22:48:11 +02:00
Chiffrement : la discussion active et le mode Code ne deviennent plus illisibles
Activer le chiffrement de la mémoire chiffrait TOUTES les valeurs du bucket des discussions, y compris des clés que le code lit et écrit en clair (getStr/putStr) : le pointeur de discussion active, le mode Chat|Code de chaque discussion, la puce « passer en mode Code ». Relues comme du charabia, la discussion active devenait introuvable et le mode Code disparaissait. Les critères, lus en clair eux aussi, s'effaçaient. - Ces clés-pointeurs restent en clair (plainStoreKey) : ni rechiffrées, ni comptées comme « chiffrement incomplet ». - Celles qu'une base existante a déjà chiffrées sont remises en clair dès le déverrouillage, avant le rechargement de la discussion active. - Les critères passent par putStoreBytes/getStoreBytes : chiffrés comme le reste du fil, et lisibles. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5e36b1cf82
commit
9ccdc021cb
4 files changed
+89
-5
No files matched your search
@@ -219,3 +219,45 @@ func TestSnapshotRestore(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Activer le chiffrement ne doit pas rendre illisibles les clés-pointeurs du
|
||||
// bucket des discussions (discussion active, mode Code) ni les critères. Une
|
||||
// version précédente les chiffrait : la discussion active devenait
|
||||
// introuvable. Celles déjà chiffrées sont réparées au déverrouillage.
|
||||
func TestChiffrementGardeLesPointeursLisibles(t *testing.T) {
|
||||
testHome(t)
|
||||
clearMemDEK()
|
||||
id := convEnsureActive()
|
||||
if err := setConvMode(id, "code"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
toolCriteria(map[string]any{"action": "add", "texts": []any{"le build compile"}}, false)
|
||||
if _, err := EnableMemEncryption("motdepasse-fort"); err != nil {
|
||||
t.Fatalf("EnableMemEncryption: %v", err)
|
||||
}
|
||||
if got := getStr(bkChat, ckActive); got != id {
|
||||
t.Fatalf("discussion active illisible après chiffrement : %q", got)
|
||||
}
|
||||
if !convCodeMode() {
|
||||
t.Fatal("mode Code perdu après chiffrement")
|
||||
}
|
||||
if l := critList(id); len(l) != 1 {
|
||||
t.Fatalf("critères perdus après chiffrement : %+v", l)
|
||||
}
|
||||
if !looksEncrypted(getBytes(bkChat, critKey(id))) {
|
||||
t.Fatal("critères en clair alors que les discussions sont chiffrées")
|
||||
}
|
||||
if !bucketFullyEncrypted(bkChat) {
|
||||
t.Fatal("les clés-pointeurs en clair font croire à un chiffrement incomplet")
|
||||
}
|
||||
// Base d'une version précédente : le pointeur a été chiffré.
|
||||
enc, err := encodeMemContent([]byte(id))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_ = putBytes(bkChat, ckActive, enc)
|
||||
healPlainStoreKeys()
|
||||
if got := getStr(bkChat, ckActive); got != id {
|
||||
t.Fatalf("pointeur chiffré non réparé : %q", got)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user