mirror of
https://github.com/nethical6/conversation-steganography.git
synced 2026-07-22 01:55:08 +02:00
62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package conversationstenography
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestStreamingRoundTrip(t *testing.T) {
|
|
key := []byte("0123456789abcdef0123456789abcdef")
|
|
e, _ := NewEncoder(key, "chat-42")
|
|
d, _ := NewDecoder(key, "chat-42")
|
|
for _, want := range []string{"first phrase", "continues here", "and finishes"} {
|
|
wire, err := e.Encode(want)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !strings.HasPrefix(wire, "enc:DEC1.") {
|
|
t.Fatalf("missing explicit marker: %q", wire)
|
|
}
|
|
got, err := d.Decode(wire)
|
|
if err != nil || got != want {
|
|
t.Fatalf("got %q, %v; want %q", got, err, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestUnmarkedInputIsRejected(t *testing.T) {
|
|
key := []byte("0123456789abcdef0123456789abcdef")
|
|
d, _ := NewDecoder(key, "chat-42")
|
|
if _, err := d.Decode("DEC1.abc"); err == nil {
|
|
t.Fatal("unmarked input accepted")
|
|
}
|
|
}
|
|
|
|
func TestWrongKeyAndOrderFail(t *testing.T) {
|
|
key := []byte("0123456789abcdef0123456789abcdef")
|
|
e, _ := NewEncoder(key, "chat-42")
|
|
first, _ := e.Encode("first")
|
|
second, _ := e.Encode("second")
|
|
|
|
wrong, _ := NewDecoder([]byte("abcdef0123456789abcdef0123456789"), "chat-42")
|
|
if _, err := wrong.Decode(first); err == nil {
|
|
t.Fatal("wrong key accepted")
|
|
}
|
|
|
|
d, _ := NewDecoder(key, "chat-42")
|
|
if _, err := d.Decode(second); err == nil {
|
|
t.Fatal("out-of-order message accepted")
|
|
}
|
|
}
|
|
|
|
func TestTamperingFails(t *testing.T) {
|
|
key := []byte("0123456789abcdef0123456789abcdef")
|
|
e, _ := NewEncoder(key, "chat-42")
|
|
d, _ := NewDecoder(key, "chat-42")
|
|
wire, _ := e.Encode("secret")
|
|
wire = wire[:len(wire)-1] + "A"
|
|
if _, err := d.Decode(wire); err == nil {
|
|
t.Fatal("tampered message accepted")
|
|
}
|
|
}
|