|
|
@@ -2,6 +2,7 @@ package fake_test
|
|
2
|
2
|
|
|
3
|
3
|
import (
|
|
4
|
4
|
"bytes"
|
|
|
5
|
+ cryptotls "crypto/tls"
|
|
5
|
6
|
"encoding/binary"
|
|
6
|
7
|
"encoding/json"
|
|
7
|
8
|
"io"
|
|
|
@@ -234,9 +235,24 @@ func (suite *ParseClientHelloHandshakeBodyTestSuite) TestCannotSkipRemainingCiph
|
|
234
|
235
|
suite.ErrorContains(err, "cannot read cipher suite")
|
|
235
|
236
|
}
|
|
236
|
237
|
|
|
|
238
|
+func (suite *ParseClientHelloHandshakeBodyTestSuite) TestCannotFindCipher() {
|
|
|
239
|
+ // All cipher suites are GREASE values — must return ErrCannotFindCipher.
|
|
|
240
|
+ body := make([]byte, 2+fake.RandomLen+1+2+4+1)
|
|
|
241
|
+ binary.BigEndian.PutUint16(body[2+fake.RandomLen+1:], 4)
|
|
|
242
|
+ binary.BigEndian.PutUint16(body[2+fake.RandomLen+1+2:], 0x0a0a)
|
|
|
243
|
+ binary.BigEndian.PutUint16(body[2+fake.RandomLen+1+2+2:], 0x1a1a)
|
|
|
244
|
+ body[2+fake.RandomLen+1+2+4] = 1
|
|
|
245
|
+
|
|
|
246
|
+ suite.writeBody(body)
|
|
|
247
|
+
|
|
|
248
|
+ _, err := fake.ReadClientHello(suite.connMock, suite.secret.Key[:], suite.secret.Host, TolerateTime)
|
|
|
249
|
+ suite.ErrorIs(err, fake.ErrCannotFindCipher)
|
|
|
250
|
+}
|
|
|
251
|
+
|
|
237
|
252
|
func (suite *ParseClientHelloHandshakeBodyTestSuite) TestCannotReadCompressionMethodsLength() {
|
|
238
|
253
|
body := make([]byte, 2+fake.RandomLen+1+2+2)
|
|
239
|
254
|
binary.BigEndian.PutUint16(body[2+fake.RandomLen+1:], 2)
|
|
|
255
|
+ binary.BigEndian.PutUint16(body[2+fake.RandomLen+1+2:], cryptotls.TLS_AES_128_GCM_SHA256)
|
|
240
|
256
|
|
|
241
|
257
|
suite.writeBody(body)
|
|
242
|
258
|
|
|
|
@@ -247,6 +263,7 @@ func (suite *ParseClientHelloHandshakeBodyTestSuite) TestCannotReadCompressionMe
|
|
247
|
263
|
func (suite *ParseClientHelloHandshakeBodyTestSuite) TestCannotSkipCompressionMethods() {
|
|
248
|
264
|
body := make([]byte, 2+fake.RandomLen+1+2+2+1)
|
|
249
|
265
|
binary.BigEndian.PutUint16(body[2+fake.RandomLen+1:], 2)
|
|
|
266
|
+ binary.BigEndian.PutUint16(body[2+fake.RandomLen+1+2:], cryptotls.TLS_AES_128_GCM_SHA256)
|
|
250
|
267
|
body[2+fake.RandomLen+1+2+2] = 1
|
|
251
|
268
|
|
|
252
|
269
|
suite.writeBody(body)
|
|
|
@@ -282,6 +299,7 @@ func (suite *ParseClientHelloSNITestSuite) writeExtensions(extensions []byte) {
|
|
282
|
299
|
// cipherSuite(2) + compressionLen(1) + compression(1) = 41
|
|
283
|
300
|
body := make([]byte, 41)
|
|
284
|
301
|
binary.BigEndian.PutUint16(body[35:], 2)
|
|
|
302
|
+ binary.BigEndian.PutUint16(body[37:], cryptotls.TLS_AES_128_GCM_SHA256)
|
|
285
|
303
|
body[39] = 1
|
|
286
|
304
|
|
|
287
|
305
|
suite.readBuf.Write(body)
|