-
-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathnoise_test.go
More file actions
61 lines (49 loc) · 1.45 KB
/
Copy pathnoise_test.go
File metadata and controls
61 lines (49 loc) · 1.45 KB
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
package noise_test
import (
"testing"
"github.com/keys-pub/keys"
"github.com/keys-pub/keys/noise"
"github.com/stretchr/testify/require"
)
func TestNewHandshake(t *testing.T) {
alice := keys.GenerateX25519Key()
bob := keys.GenerateX25519Key()
na, err := noise.NewHandshake(alice, bob.PublicKey(), true)
require.NoError(t, err)
nb, err := noise.NewHandshake(bob, alice.PublicKey(), false)
require.NoError(t, err)
// -> s
// <- s
b, err := na.Write([]byte("abcdef"))
require.NoError(t, err)
hb1, err := nb.Read(b)
require.NoError(t, err)
require.Equal(t, "abcdef", string(hb1))
require.False(t, na.Complete())
require.False(t, nb.Complete())
// -> e, es, ss
// <- e, ee, se
b, err = nb.Write(nil)
require.NoError(t, err)
hb2, err := na.Read(b)
require.NoError(t, err)
require.Equal(t, "", string(hb2))
require.True(t, na.Complete())
require.True(t, nb.Complete())
ca, err := na.Cipher()
require.NoError(t, err)
cb, err := nb.Cipher()
require.NoError(t, err)
// transport I -> R
encrypted, err := ca.Encrypt(nil, nil, []byte("hello"))
require.NoError(t, err)
decrypted, err := cb.Decrypt(nil, nil, encrypted)
require.NoError(t, err)
require.Equal(t, "hello", string(decrypted))
// transport R -> I
encrypted, err = cb.Encrypt(nil, nil, []byte("what time is the meeting?"))
require.NoError(t, err)
decrypted, err = ca.Decrypt(nil, nil, encrypted)
require.NoError(t, err)
require.Equal(t, "what time is the meeting?", string(decrypted))
}