FILE / ScuroNeko/mtg

obfuscated2/obfuscated2_test.go

Исходный файл и его история в репозитории.
FILE 2cc845f158d5da6b5bc6ec04f29aa1554f327b3b
Files
mtg/obfuscated2/obfuscated2_test.go
T
2018-05-31 09:54:20 +03:00

80 lines
2.3 KiB
Go

package obfuscated2
import (
"crypto/sha256"
"fmt"
"testing"
"github.com/stretchr/testify/assert"
)
func TestObfs2TelegramFrameDecrypt(t *testing.T) {
_, frame := MakeTelegramObfuscated2Frame()
decryptor := makeStreamCipher(frame.Key(), frame.IV())
decrypted := make(Frame, FrameLen)
decryptor.XORKeyStream(decrypted, frame)
assert.True(t, decrypted.Valid())
}
func TestObfs2TelegramDecryptEncryptDecrypt(t *testing.T) {
obfs2, frame := MakeTelegramObfuscated2Frame()
inverted := frame.Invert()
encryptor := makeStreamCipher(inverted.Key(), inverted.IV())
data := []byte{1, 2, 3}
encrypted := make([]byte, 3)
encryptor.XORKeyStream(encrypted, data)
decrypted := obfs2.Decrypt(encrypted)
assert.Equal(t, data, decrypted)
}
func TestObfs2Full(t *testing.T) {
secret := []byte{1, 2, 3, 4, 5}
clientFrame := generateFrame()
clientHasher := sha256.New()
clientHasher.Write(clientFrame.Key())
clientHasher.Write(secret)
clientKey := clientHasher.Sum(nil)
encryptor := makeStreamCipher(clientKey, clientFrame.IV())
encrypted := make(Frame, FrameLen)
encryptor.XORKeyStream(encrypted, clientFrame)
copy(encrypted[:56], clientFrame[:56])
invertedClientFrame := clientFrame.Invert()
clientHasher = sha256.New()
clientHasher.Write(invertedClientFrame.Key())
clientHasher.Write(secret)
invertedClientKey := clientHasher.Sum(nil)
clientDecryptor := makeStreamCipher(invertedClientKey, invertedClientFrame.IV())
clientObfs, _, err := ParseObfuscated2ClientFrame(secret, encrypted)
assert.Nil(t, err)
tgObfs, tgFrame := MakeTelegramObfuscated2Frame()
tgDecryptor := makeStreamCipher(tgFrame.Key(), tgFrame.IV())
decrypted := make(Frame, FrameLen)
tgDecryptor.XORKeyStream(decrypted, tgFrame)
assert.True(t, decrypted.Valid())
tgInvertedFrame := tgFrame.Invert()
tgEncryptor := makeStreamCipher(tgInvertedFrame.Key(), tgInvertedFrame.IV())
message := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}
tgEncryptedMessage := make([]byte, len(message))
tgEncryptor.XORKeyStream(tgEncryptedMessage, message)
tgEncDecryptedMessage := tgObfs.Decrypt(tgEncryptedMessage)
assert.Equal(t, message, tgEncDecryptedMessage)
clientEncryptedMessage := clientObfs.Encrypt(tgEncDecryptedMessage)
finalMessage := make([]byte, len(clientEncryptedMessage))
clientDecryptor.XORKeyStream(finalMessage, clientEncryptedMessage)
assert.Equal(t, finalMessage, message)
}