mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-15 19:29:16 +02:00
Les discussions sont chiffrées en base quand la mémoire l'est, avec une clé de données qui ne vit qu'en mémoire du Go après déverrouillage. Une conversation tenue par la façade fera sceller et ouvrir ses blobs ici : la clé ne sort jamais. Mémoire verrouillée : 423, jamais d'écriture en clair ni de perte — l'appelant attend le déverrouillage, comme le Go. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
51 lines
1.7 KiB
Go
51 lines
1.7 KiB
Go
package loki
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
)
|
|
|
|
// Sceller puis ouvrir par l'API interne rend le clair ; la clé ne sort pas.
|
|
func TestCryptInterneAllerRetour(t *testing.T) {
|
|
testHome(t)
|
|
t.Setenv(internalTokenEnv, jetonTest)
|
|
|
|
// Chiffrement coupé : scellé = clair, et un clair s'ouvre tel quel.
|
|
w := appelOAIInterne(t, "POST", "/internal/v1/crypt/seal", "bonjour")
|
|
if w.Code != 200 || w.Body.String() != "bonjour" {
|
|
t.Fatalf("seal sans chiffrement : %d %q", w.Code, w.Body.String())
|
|
}
|
|
if w := appelOAIInterne(t, "POST", "/internal/v1/crypt/open", "bonjour"); w.Body.String() != "bonjour" {
|
|
t.Fatalf("open d'un clair : %q", w.Body.String())
|
|
}
|
|
|
|
// Chiffrement actif, mémoire verrouillée : 423, jamais d'écriture en clair.
|
|
if err := putStr(bkConfig, "MEM_ENCRYPTED", "1"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
clearMemDEK()
|
|
if w := appelOAIInterne(t, "POST", "/internal/v1/crypt/seal", "secret"); w.Code != 423 {
|
|
t.Fatalf("seal verrouillé : %d", w.Code)
|
|
}
|
|
|
|
// Déverrouillée : scellé ≠ clair, ouverture = clair.
|
|
dek, _ := randBytes(memDEKLen)
|
|
setMemDEK(dek)
|
|
t.Cleanup(clearMemDEK)
|
|
w = appelOAIInterne(t, "POST", "/internal/v1/crypt/seal", "secret")
|
|
sealed := w.Body.Bytes()
|
|
if w.Code != 200 || bytes.Contains(sealed, []byte("secret")) || !looksEncrypted(sealed) {
|
|
t.Fatalf("seal : %d %q", w.Code, sealed)
|
|
}
|
|
w = appelOAIInterne(t, "POST", "/internal/v1/crypt/open", string(sealed))
|
|
if w.Code != 200 || w.Body.String() != "secret" {
|
|
t.Fatalf("open : %d %q", w.Code, w.Body.String())
|
|
}
|
|
|
|
// Reverrouillée : un scellé ne s'ouvre plus.
|
|
clearMemDEK()
|
|
if w := appelOAIInterne(t, "POST", "/internal/v1/crypt/open", string(sealed)); w.Code != 423 {
|
|
t.Fatalf("open verrouillé : %d", w.Code)
|
|
}
|
|
}
|