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
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

server_handshake_fuzz_test.go 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package obfuscated2_test
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. "github.com/stretchr/testify/mock"
  6. )
  7. func FuzzServerSend(f *testing.F) {
  8. f.Add([]byte{1, 2, 3, 4, 5})
  9. f.Fuzz(func(t *testing.T, data []byte) {
  10. handshakeData := NewServerHandshakeTestData(t)
  11. handshakeData.connMock.
  12. On("Write", mock.Anything).
  13. Return(len(data), nil).
  14. Once().
  15. Run(func(args mock.Arguments) {
  16. message := make([]byte, len(data))
  17. handshakeData.decryptor.XORKeyStream(message, args.Get(0).([]byte)) //nolint: forcetypeassert
  18. assert.Equal(t, message, data)
  19. })
  20. n, err := handshakeData.proxyConn.Write(data)
  21. assert.EqualValues(t, len(data), n)
  22. assert.NoError(t, err)
  23. handshakeData.connMock.AssertExpectations(t)
  24. })
  25. }
  26. func FuzzServerReceive(f *testing.F) {
  27. f.Add([]byte{1, 2, 3, 4, 5})
  28. f.Fuzz(func(t *testing.T, data []byte) {
  29. handshakeData := NewServerHandshakeTestData(t)
  30. buffer := make([]byte, len(data))
  31. handshakeData.connMock.
  32. On("Read", mock.Anything).
  33. Return(len(data), nil).
  34. Once().
  35. Run(func(args mock.Arguments) {
  36. message := make([]byte, len(data))
  37. handshakeData.encryptor.XORKeyStream(message, data)
  38. copy(args.Get(0).([]byte), message) //nolint: forcetypeassert
  39. })
  40. n, err := handshakeData.proxyConn.Read(buffer)
  41. assert.EqualValues(t, len(data), n)
  42. assert.NoError(t, err)
  43. assert.Equal(t, data, buffer)
  44. handshakeData.connMock.AssertExpectations(t)
  45. })
  46. }