mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-13 10:17:58 +02:00
64 lines
1.6 KiB
Go
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))
|
|
}
|
|
}
|