| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package faketls_test
-
- import (
- "bytes"
- "crypto/hmac"
- "crypto/rand"
- "crypto/sha256"
- "testing"
- "time"
-
- "github.com/9seconds/mtg/v2/mtglib"
- "github.com/9seconds/mtg/v2/mtglib/internal/faketls"
- "github.com/9seconds/mtg/v2/mtglib/internal/faketls/record"
- "github.com/stretchr/testify/suite"
- )
-
- type WelcomeTestSuite struct {
- suite.Suite
-
- h *faketls.ClientHello
- buf *bytes.Buffer
- secret mtglib.Secret
- }
-
- func (suite *WelcomeTestSuite) SetupTest() {
- suite.h = &faketls.ClientHello{
- Time: time.Now(),
- Host: "google.com",
- CipherSuite: 4867,
- SessionID: make([]byte, 32),
- }
-
- _, err := rand.Read(suite.h.SessionID) //nolint: staticcheck
- suite.NoError(err)
-
- _, err = rand.Read(suite.h.Random[:]) //nolint: staticcheck
- suite.NoError(err)
-
- suite.buf = &bytes.Buffer{}
-
- suite.secret = mtglib.GenerateSecret("google.com")
- }
-
- func (suite *WelcomeTestSuite) TestOk() {
- suite.NoError(faketls.SendWelcomePacket(suite.buf, suite.secret.Key[:], *suite.h))
-
- welcomePacket := []byte{}
- welcomePacket = append(welcomePacket, suite.buf.Bytes()...)
-
- rec := record.AcquireRecord()
- defer record.ReleaseRecord(rec)
-
- suite.NoError(rec.Read(suite.buf))
- suite.Equal(record.TypeHandshake, rec.Type)
- suite.Equal(record.Version12, rec.Version)
-
- suite.NoError(rec.Read(suite.buf))
- suite.Equal(record.TypeChangeCipherSpec, rec.Type)
- suite.Equal(record.Version12, rec.Version)
-
- suite.NoError(rec.Read(suite.buf))
- suite.Equal(record.TypeApplicationData, rec.Type)
- suite.Equal(record.Version12, rec.Version)
- suite.Empty(suite.buf.Bytes())
-
- random := make([]byte, 32)
- copy(random, welcomePacket[11:])
-
- empty := make([]byte, 32)
- copy(welcomePacket[11:], empty)
-
- mac := hmac.New(sha256.New, suite.secret.Key[:])
- mac.Write(suite.h.Random[:])
- mac.Write(welcomePacket)
-
- suite.Equal(random, mac.Sum(nil))
- }
-
- func TestWelcome(t *testing.T) {
- t.Parallel()
- suite.Run(t, &WelcomeTestSuite{})
- }
|