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

wrapper_obfuscated2.go 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package wrappers
  2. import (
  3. "crypto/cipher"
  4. "net"
  5. "time"
  6. "github.com/juju/errors"
  7. "go.uber.org/zap"
  8. )
  9. type wrapperObfuscated2 struct {
  10. encryptor cipher.Stream
  11. decryptor cipher.Stream
  12. parent StreamReadWriteCloser
  13. }
  14. func (w *wrapperObfuscated2) ReadTimeout(p []byte, timeout time.Duration) (int, error) {
  15. n, err := w.parent.ReadTimeout(p, timeout)
  16. if err != nil {
  17. return 0, errors.Annotate(err, "Cannot read stream ciphered data")
  18. }
  19. w.decryptor.XORKeyStream(p, p[:n])
  20. return n, nil
  21. }
  22. func (w *wrapperObfuscated2) Read(p []byte) (int, error) {
  23. n, err := w.parent.Read(p)
  24. if err != nil {
  25. return 0, errors.Annotate(err, "Cannot read stream ciphered data")
  26. }
  27. w.decryptor.XORKeyStream(p, p[:n])
  28. return n, nil
  29. }
  30. func (w *wrapperObfuscated2) WriteTimeout(p []byte, timeout time.Duration) (int, error) {
  31. buf := make([]byte, len(p))
  32. copy(buf, p)
  33. w.encryptor.XORKeyStream(buf, buf)
  34. return w.parent.WriteTimeout(buf, timeout)
  35. }
  36. func (w *wrapperObfuscated2) Write(p []byte) (int, error) {
  37. buf := make([]byte, len(p))
  38. copy(buf, p)
  39. w.encryptor.XORKeyStream(buf, buf)
  40. return w.parent.Write(buf)
  41. }
  42. func (w *wrapperObfuscated2) Conn() net.Conn {
  43. return w.parent.Conn()
  44. }
  45. func (w *wrapperObfuscated2) Logger() *zap.SugaredLogger {
  46. return w.parent.Logger().Named("obfuscated2")
  47. }
  48. func (w *wrapperObfuscated2) LocalAddr() *net.TCPAddr {
  49. return w.parent.LocalAddr()
  50. }
  51. func (w *wrapperObfuscated2) RemoteAddr() *net.TCPAddr {
  52. return w.parent.RemoteAddr()
  53. }
  54. func (w *wrapperObfuscated2) Close() error {
  55. return w.parent.Close()
  56. }
  57. func NewObfuscated2(socket StreamReadWriteCloser, encryptor, decryptor cipher.Stream) StreamReadWriteCloser {
  58. return &wrapperObfuscated2{
  59. parent: socket,
  60. encryptor: encryptor,
  61. decryptor: decryptor,
  62. }
  63. }