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
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

init.go 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package faketls
  2. import (
  3. "bytes"
  4. "errors"
  5. )
  6. const (
  7. // RandomLen defines a size of the random digest in TLS Hellos.
  8. RandomLen = 32
  9. // ClientHelloRandomOffset is an offset in ClientHello record where
  10. // random digest is started.
  11. ClientHelloRandomOffset = 6
  12. // ClientHelloSessionIDOffset is an offset in ClientHello record where
  13. // SessionID is started.
  14. ClientHelloSessionIDOffset = ClientHelloRandomOffset + RandomLen
  15. // ClientHelloMinLen is a minimal possible length of
  16. // ClientHello record.
  17. ClientHelloMinLen = 6
  18. // WelcomePacketRandomOffset is an offset of random in ServerHello
  19. // packet (including record envelope).
  20. WelcomePacketRandomOffset = 11
  21. // HandshakeTypeClient is a value representing a client handshake.
  22. HandshakeTypeClient = 0x01
  23. // HandshakeTypeServer is a value representing a server handshake.
  24. HandshakeTypeServer = 0x02
  25. // ChangeCipherValue is a value representing a change cipher
  26. // specification record.
  27. ChangeCipherValue = 0x01
  28. // ExtensionSNI is a value for TLS extension 'SNI'.
  29. ExtensionSNI = 0x00
  30. )
  31. var (
  32. // ErrBadDigest is returned if given TLS Client Hello mismatches with a
  33. // derived one.
  34. ErrBadDigest = errors.New("bad digest")
  35. serverHelloSuffix = []byte{
  36. 0x00, // no compression
  37. 0x00, 0x2e, // 46 bytes of data
  38. 0x00, 0x2b, // Extension - Supported Versions
  39. 0x00, 0x02, // 2 bytes are following
  40. 0x03, 0x04, // TLS 1.3
  41. 0x00, 0x33, // Extension - Key Share
  42. 0x00, 0x24, // 36 bytes
  43. 0x00, 0x1d, // x25519 curve
  44. 0x00, 0x20, // 32 bytes of key
  45. }
  46. clientHelloEmptyRandom = bytes.Repeat([]byte{0}, RandomLen)
  47. )