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
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

obfuscated2_test.go 2.3KB

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