Files
Loki/internal/loki/web_internal_crypt_test.go
T
MichaelandClaude Opus 5.5 c38b1ac43e API interne de chiffrement pour la conversation tenue par Rust
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>
2026-10-15 08:49:08 +02:00

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)
}
}