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 символов.

client_handshake.go 1.2KB

12345678910111213141516171819202122232425262728293031323334353637
  1. package obfuscated2
  2. import (
  3. "crypto/cipher"
  4. "crypto/subtle"
  5. "encoding/hex"
  6. "fmt"
  7. )
  8. // Connection Type secure. We support only fake tls.
  9. var clientHandshakeMagic = []byte{0xdd, 0xdd, 0xdd, 0xdd}
  10. func ClientHandshake(secret []byte, handshakeFrame *HandhakeFrame) (int16, cipher.Stream, cipher.Stream, error) {
  11. decHasher := acquireSha256Hasher()
  12. defer releaseSha256Hasher(decHasher)
  13. decHasher.Write(handshakeFrame.key()) // nolint: errcheck
  14. decHasher.Write(secret) // nolint: errcheck
  15. decryptor := makeAesCtr(decHasher.Sum(nil), handshakeFrame.iv())
  16. encHasher := acquireSha256Hasher()
  17. defer releaseSha256Hasher(encHasher)
  18. invertedFrame := handshakeFrame.invert()
  19. encHasher.Write(invertedFrame.key()) // nolint: errcheck
  20. encHasher.Write(secret) // nolint: errcheck
  21. encryptor := makeAesCtr(encHasher.Sum(nil), invertedFrame.iv())
  22. decryptedFrame := HandhakeFrame{}
  23. decryptor.XORKeyStream(decryptedFrame.data[:], handshakeFrame.data[:])
  24. if magic := decryptedFrame.magic(); subtle.ConstantTimeCompare(clientHandshakeMagic, magic) != 1 {
  25. return 0, nil, nil, fmt.Errorf("unsupported connection type: %s", hex.EncodeToString(magic))
  26. }
  27. return decryptedFrame.dc(), encryptor, decryptor, nil
  28. }