forked from bifurcation/mint
/
conn_test.go
71 lines (60 loc) · 2.2 KB
/
conn_test.go
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
69
70
71
package mint
import (
"io"
"testing"
)
type pipeReadWriter struct {
r *io.PipeReader
w *io.PipeWriter
}
func pipe() *pipeReadWriter {
p := new(pipeReadWriter)
p.r, p.w = io.Pipe()
return p
}
func (p *pipeReadWriter) Read(data []byte) (n int, err error) {
return p.r.Read(data)
}
func (p *pipeReadWriter) Write(data []byte) (n int, err error) {
return p.w.Write(data)
}
func TestBasicFlow(t *testing.T) {
c2s := pipe()
s2c := pipe()
client := &Conn{
in: newRecordLayer(s2c),
out: newRecordLayer(c2s),
}
server := &Conn{
in: newRecordLayer(c2s),
out: newRecordLayer(s2c),
}
done := make(chan bool)
go func(t *testing.T) {
err := server.serverHandshake()
assertNotError(t, err, "Server failed handshake")
done <- true
}(t)
err := client.clientHandshake()
assertNotError(t, err, "Client failed handshake")
<-done
// Tests that the client and server arrive at the same crypto contexts
assertEquals(t, client.context.initialized, server.context.initialized)
assertEquals(t, client.context.suite, server.context.suite)
assertEquals(t, client.context.params, server.context.params)
assertEquals(t, len(client.context.transcript), len(server.context.transcript))
assertByteEquals(t, client.context.ES, server.context.ES)
assertByteEquals(t, client.context.SS, server.context.SS)
assertByteEquals(t, client.context.xES, server.context.xES)
assertByteEquals(t, client.context.xSS, server.context.xSS)
assertDeepEquals(t, client.context.handshakeKeys, client.context.handshakeKeys)
assertByteEquals(t, client.context.mES, server.context.mES)
assertByteEquals(t, client.context.mSS, server.context.mSS)
assertByteEquals(t, client.context.masterSecret, server.context.masterSecret)
assertByteEquals(t, client.context.serverFinishedKey, server.context.serverFinishedKey)
assertByteEquals(t, client.context.serverFinishedData, server.context.serverFinishedData)
assertByteEquals(t, client.context.clientFinishedKey, server.context.clientFinishedKey)
assertByteEquals(t, client.context.clientFinishedData, server.context.clientFinishedData)
assertByteEquals(t, client.context.trafficSecret, server.context.trafficSecret)
assertDeepEquals(t, client.context.applicationKeys, client.context.applicationKeys)
}