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

obfuscated2_test.go 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package obfuscated2
  2. import (
  3. "crypto/sha256"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. )
  7. func TestObfs2TelegramFrameDecrypt(t *testing.T) {
  8. _, frame := MakeTelegramObfuscated2Frame()
  9. decryptor := makeStreamCipher(frame.Key(), frame.IV())
  10. decrypted := make(Frame, FrameLen)
  11. decryptor.XORKeyStream(decrypted, frame)
  12. assert.True(t, decrypted.Valid())
  13. }
  14. func TestObfs2TelegramDecryptEncryptDecrypt(t *testing.T) {
  15. obfs2, frame := MakeTelegramObfuscated2Frame()
  16. inverted := frame.Invert()
  17. encryptor := makeStreamCipher(inverted.Key(), inverted.IV())
  18. data := []byte{1, 2, 3}
  19. encrypted := make([]byte, 3)
  20. encryptor.XORKeyStream(encrypted, data)
  21. decrypted := obfs2.Decrypt(encrypted)
  22. assert.Equal(t, data, decrypted)
  23. }
  24. func TestObfs2Full(t *testing.T) {
  25. secret := []byte{1, 2, 3, 4, 5}
  26. clientFrame := generateFrame()
  27. clientHasher := sha256.New()
  28. clientHasher.Write(clientFrame.Key())
  29. clientHasher.Write(secret)
  30. clientKey := clientHasher.Sum(nil)
  31. encryptor := makeStreamCipher(clientKey, clientFrame.IV())
  32. encrypted := make(Frame, FrameLen)
  33. encryptor.XORKeyStream(encrypted, clientFrame)
  34. copy(encrypted[:56], clientFrame[:56])
  35. invertedClientFrame := clientFrame.Invert()
  36. clientHasher = sha256.New()
  37. clientHasher.Write(invertedClientFrame.Key())
  38. clientHasher.Write(secret)
  39. invertedClientKey := clientHasher.Sum(nil)
  40. clientDecryptor := makeStreamCipher(invertedClientKey, invertedClientFrame.IV())
  41. clientObfs, _, err := ParseObfuscated2ClientFrame(secret, encrypted)
  42. assert.Nil(t, err)
  43. tgObfs, tgFrame := MakeTelegramObfuscated2Frame()
  44. tgDecryptor := makeStreamCipher(tgFrame.Key(), tgFrame.IV())
  45. decrypted := make(Frame, FrameLen)
  46. tgDecryptor.XORKeyStream(decrypted, tgFrame)
  47. assert.True(t, decrypted.Valid())
  48. tgInvertedFrame := tgFrame.Invert()
  49. tgEncryptor := makeStreamCipher(tgInvertedFrame.Key(), tgInvertedFrame.IV())
  50. message := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}
  51. tgEncryptedMessage := make([]byte, len(message))
  52. tgEncryptor.XORKeyStream(tgEncryptedMessage, message)
  53. tgEncDecryptedMessage := tgObfs.Decrypt(tgEncryptedMessage)
  54. assert.Equal(t, message, tgEncDecryptedMessage)
  55. clientEncryptedMessage := clientObfs.Encrypt(tgEncDecryptedMessage)
  56. finalMessage := make([]byte, len(clientEncryptedMessage))
  57. clientDecryptor.XORKeyStream(finalMessage, clientEncryptedMessage)
  58. assert.Equal(t, finalMessage, message)
  59. }