|
|
@@ -8,6 +8,7 @@ import (
|
|
8
|
8
|
"testing"
|
|
9
|
9
|
|
|
10
|
10
|
"github.com/9seconds/mtg/v2/mtglib"
|
|
|
11
|
+ "github.com/9seconds/mtg/v2/mtglib/internal/doppel"
|
|
11
|
12
|
"github.com/9seconds/mtg/v2/mtglib/internal/tls"
|
|
12
|
13
|
"github.com/9seconds/mtg/v2/mtglib/internal/tls/fake"
|
|
13
|
14
|
"github.com/stretchr/testify/suite"
|
|
|
@@ -38,7 +39,7 @@ func (suite *SendServerHelloTestSuite) SetupTest() {
|
|
38
|
39
|
}
|
|
39
|
40
|
|
|
40
|
41
|
func (suite *SendServerHelloTestSuite) TestRecordStructure() {
|
|
41
|
|
- noise, err := fake.SendServerHello(suite.buf, suite.secret.Key[:], suite.hello)
|
|
|
42
|
+ err := fake.SendServerHello(suite.buf, suite.secret.Key[:], suite.hello)
|
|
42
|
43
|
suite.NoError(err)
|
|
43
|
44
|
|
|
44
|
45
|
var rec bytes.Buffer
|
|
|
@@ -53,14 +54,18 @@ func (suite *SendServerHelloTestSuite) TestRecordStructure() {
|
|
53
|
54
|
suite.NoError(err)
|
|
54
|
55
|
suite.Equal(byte(tls.TypeChangeCipherSpec), recordType)
|
|
55
|
56
|
|
|
56
|
|
- suite.Empty(suite.buf.Bytes())
|
|
|
57
|
+ rec.Reset()
|
|
57
|
58
|
|
|
58
|
|
- // noise is raw payload without TLS record header
|
|
59
|
|
- suite.Len(noise, 1369)
|
|
|
59
|
+ recordType, length, err := tls.ReadRecord(suite.buf, &rec)
|
|
|
60
|
+ suite.NoError(err)
|
|
|
61
|
+ suite.Equal(byte(tls.TypeApplicationData), recordType)
|
|
|
62
|
+ suite.Greater(length, int64(doppel.TLSRecordSizeStart))
|
|
|
63
|
+
|
|
|
64
|
+ suite.Empty(suite.buf.Bytes())
|
|
60
|
65
|
}
|
|
61
|
66
|
|
|
62
|
67
|
func (suite *SendServerHelloTestSuite) TestHMAC() {
|
|
63
|
|
- noise, err := fake.SendServerHello(suite.buf, suite.secret.Key[:], suite.hello)
|
|
|
68
|
+ err := fake.SendServerHello(suite.buf, suite.secret.Key[:], suite.hello)
|
|
64
|
69
|
suite.NoError(err)
|
|
65
|
70
|
|
|
66
|
71
|
packet := make([]byte, suite.buf.Len())
|
|
|
@@ -74,18 +79,11 @@ func (suite *SendServerHelloTestSuite) TestHMAC() {
|
|
74
|
79
|
mac.Write(suite.hello.Random[:])
|
|
75
|
80
|
mac.Write(packet)
|
|
76
|
81
|
|
|
77
|
|
- // HMAC is computed over the full noise TLS record (with header),
|
|
78
|
|
- // but SendServerHello returns noise without the header,
|
|
79
|
|
- // so we reconstruct the full record.
|
|
80
|
|
- var fullNoise bytes.Buffer
|
|
81
|
|
- tls.WriteRecord(&fullNoise, noise) //nolint: errcheck
|
|
82
|
|
- mac.Write(fullNoise.Bytes())
|
|
83
|
|
-
|
|
84
|
82
|
suite.Equal(random, mac.Sum(nil))
|
|
85
|
83
|
}
|
|
86
|
84
|
|
|
87
|
85
|
func (suite *SendServerHelloTestSuite) TestHandshakePayload() {
|
|
88
|
|
- _, err := fake.SendServerHello(suite.buf, suite.secret.Key[:], suite.hello)
|
|
|
86
|
+ err := fake.SendServerHello(suite.buf, suite.secret.Key[:], suite.hello)
|
|
89
|
87
|
suite.NoError(err)
|
|
90
|
88
|
|
|
91
|
89
|
packet := suite.buf.Bytes()
|
|
|
@@ -107,7 +105,7 @@ func (suite *SendServerHelloTestSuite) TestHandshakePayload() {
|
|
107
|
105
|
}
|
|
108
|
106
|
|
|
109
|
107
|
func (suite *SendServerHelloTestSuite) TestChangeCipherSpec() {
|
|
110
|
|
- _, err := fake.SendServerHello(suite.buf, suite.secret.Key[:], suite.hello)
|
|
|
108
|
+ err := fake.SendServerHello(suite.buf, suite.secret.Key[:], suite.hello)
|
|
111
|
109
|
suite.NoError(err)
|
|
112
|
110
|
|
|
113
|
111
|
// Skip first record
|