Files
Loki/internal/nodewire/crypto_test.go
T

64 lines
1.6 KiB
Go

package nodewire
import (
"bytes"
"testing"
)
// La clé de canal doit être IDENTIQUE des deux bouts (poste priv + agent pub =
// agent priv + poste pub).
func TestChannelKeySymmetric(t *testing.T) {
aPriv, aPub, _ := GenKeyPair()
bPriv, bPub, _ := GenKeyPair()
ka, err := ChannelKey(aPriv, bPub)
if err != nil {
t.Fatal(err)
}
kb, err := ChannelKey(bPriv, aPub)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(ka, kb) {
t.Fatal("les deux bouts n'obtiennent pas la même clé de canal")
}
}
// Un aller-retour chiffré passe ; un frame rejoué est rejeté.
func TestChanRoundTripAndReplay(t *testing.T) {
aPriv, aPub, _ := GenKeyPair()
bPriv, bPub, _ := GenKeyPair()
ka, _ := ChannelKey(aPriv, bPub) // poste
kb, _ := ChannelKey(bPriv, aPub) // agent
poste, _ := NewChan(ka, true)
agent, _ := NewChan(kb, false)
f := poste.Seal([]byte("dir C:\\"))
got, err := agent.Open(f)
if err != nil || string(got) != "dir C:\\" {
t.Fatalf("aller-retour: %q err=%v", got, err)
}
// Rejeu du même frame → rejeté (compteur non croissant).
if _, err := agent.Open(f); err == nil {
t.Fatal("un frame rejoué aurait dû être rejeté")
}
// Sens inverse.
f2 := agent.Seal([]byte("exit: 0"))
got2, err := poste.Open(f2)
if err != nil || string(got2) != "exit: 0" {
t.Fatalf("retour: %q err=%v", got2, err)
}
}
// SealTo doit produire le format ephPub32||nonce12||ct que l'agent sait ouvrir.
func TestSealToFormat(t *testing.T) {
_, pub, _ := GenKeyPair()
blob, err := SealTo(pub, []byte("secret"))
if err != nil {
t.Fatal(err)
}
if len(blob) < 32+12+16 {
t.Fatalf("sceau trop court: %d octets", len(blob))
}
}