Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

welcome_test.go 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package faketls_test
  2. import (
  3. "bytes"
  4. "crypto/hmac"
  5. "crypto/rand"
  6. "crypto/sha256"
  7. "testing"
  8. "time"
  9. "github.com/9seconds/mtg/v2/mtglib"
  10. "github.com/9seconds/mtg/v2/mtglib/internal/faketls"
  11. "github.com/9seconds/mtg/v2/mtglib/internal/faketls/record"
  12. "github.com/stretchr/testify/suite"
  13. )
  14. type WelcomeTestSuite struct {
  15. suite.Suite
  16. h *faketls.ClientHello
  17. buf *bytes.Buffer
  18. secret mtglib.Secret
  19. }
  20. func (suite *WelcomeTestSuite) SetupTest() {
  21. suite.h = &faketls.ClientHello{
  22. Time: time.Now(),
  23. Host: "google.com",
  24. CipherSuite: 4867,
  25. SessionID: make([]byte, 32),
  26. }
  27. _, err := rand.Read(suite.h.SessionID) //nolint: staticcheck
  28. suite.NoError(err)
  29. _, err = rand.Read(suite.h.Random[:]) //nolint: staticcheck
  30. suite.NoError(err)
  31. suite.buf = &bytes.Buffer{}
  32. suite.secret = mtglib.GenerateSecret("google.com")
  33. }
  34. func (suite *WelcomeTestSuite) TestOk() {
  35. suite.NoError(faketls.SendWelcomePacket(suite.buf, suite.secret.Key[:], *suite.h))
  36. welcomePacket := []byte{}
  37. welcomePacket = append(welcomePacket, suite.buf.Bytes()...)
  38. rec := record.AcquireRecord()
  39. defer record.ReleaseRecord(rec)
  40. suite.NoError(rec.Read(suite.buf))
  41. suite.Equal(record.TypeHandshake, rec.Type)
  42. suite.Equal(record.Version12, rec.Version)
  43. suite.NoError(rec.Read(suite.buf))
  44. suite.Equal(record.TypeChangeCipherSpec, rec.Type)
  45. suite.Equal(record.Version12, rec.Version)
  46. suite.NoError(rec.Read(suite.buf))
  47. suite.Equal(record.TypeApplicationData, rec.Type)
  48. suite.Equal(record.Version12, rec.Version)
  49. suite.Empty(suite.buf.Bytes())
  50. random := make([]byte, 32)
  51. copy(random, welcomePacket[11:])
  52. empty := make([]byte, 32)
  53. copy(welcomePacket[11:], empty)
  54. mac := hmac.New(sha256.New, suite.secret.Key[:])
  55. mac.Write(suite.h.Random[:])
  56. mac.Write(welcomePacket)
  57. suite.Equal(random, mac.Sum(nil))
  58. }
  59. func TestWelcome(t *testing.T) {
  60. t.Parallel()
  61. suite.Run(t, &WelcomeTestSuite{})
  62. }