1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
package nym
import "testing"
func TestParseRecipient(t *testing.T) {
// Real nymdrop-inbox address (see project session.md).
addr := "5xme8W448FjvSG69GaNWNkSwYpurgzmLrooPMt6XWThU.GpKLJHB2oiSqRsG5u55t4h2D25tA7BNSfvCQbfup3j1k@6mMs1GQkDRa7rPPtzG9vkFscmEBmAvQX4zjLSoaDg9Wa"
got, err := ParseRecipient(addr)
if err != nil {
t.Fatalf("parseRecipient: %v", err)
}
if len(got) != RecipientLen {
t.Fatalf("expected %d bytes, got %d", RecipientLen, len(got))
}
}
func TestParseRecipientRustTestVector(t *testing.T) {
// Same address used in nym-client's own Rust unit tests
// (websocket-requests/src/requests.rs: send_request_serialization_works).
addr := "CytBseW6yFXUMzz4SGAKdNLGR7q3sJLLYxyBGvutNEQV.4QXYyEVc5fUDjmmi8PrHN9tdUFV4PCvSJE1278cHyvoe@4sBbL1ngf1vtNqykydQKTFh26sQCw888GpUqvPvyNB4f"
got, err := ParseRecipient(addr)
if err != nil {
t.Fatalf("parseRecipient: %v", err)
}
if len(got) != RecipientLen {
t.Fatalf("expected %d bytes, got %d", RecipientLen, len(got))
}
}
func TestParseRecipientMalformed(t *testing.T) {
cases := []string{
"",
"no-at-sign",
"a@b@c",
"nodot@gateway",
"id.enc@0OIl", // invalid base58 chars
}
for _, addr := range cases {
if _, err := ParseRecipient(addr); err == nil {
t.Errorf("ParseRecipient(%q): expected error, got none", addr)
}
}
}
func TestMakeSendRequestLayout(t *testing.T) {
c := &Client{recipient: make([]byte, RecipientLen)}
for i := range c.recipient {
c.recipient[i] = byte(i)
}
payload := []byte("hello mixnet")
req := make([]byte, 0, 1+len(c.recipient)+8+8+len(payload))
req = append(req, ReqSend)
req = append(req, c.recipient...)
req = append(req, 0, 0, 0, 0, 0, 0, 0, 0) // connection_id = 0
req = append(req, 0, 0, 0, 0, 0, 0, 0, byte(len(payload)))
req = append(req, payload...)
wantLen := 1 + RecipientLen + 8 + 8 + len(payload)
if len(req) != wantLen {
t.Fatalf("expected length %d, got %d", wantLen, len(req))
}
if req[0] != 0x00 {
t.Fatalf("expected tag 0x00, got 0x%02x", req[0])
}
}
|