mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-08-31 22:54:01 +03:00
Use pool for frames
This commit is contained in:
@@ -19,7 +19,7 @@ type Obfuscated2 struct {
|
||||
// details: http://telegra.ph/telegram-blocks-wtf-05-26
|
||||
//
|
||||
// Beware, link above is in russian.
|
||||
func ParseObfuscated2ClientFrame(secret []byte, frame Frame) (*Obfuscated2, int16, error) {
|
||||
func ParseObfuscated2ClientFrame(secret []byte, frame *Frame) (*Obfuscated2, int16, error) {
|
||||
decHasher := sha256.New()
|
||||
decHasher.Write(frame.Key()) // nolint: errcheck
|
||||
decHasher.Write(secret) // nolint: errcheck
|
||||
@@ -31,8 +31,9 @@ func ParseObfuscated2ClientFrame(secret []byte, frame Frame) (*Obfuscated2, int1
|
||||
encHasher.Write(secret) // nolint: errcheck
|
||||
encryptor := makeStreamCipher(encHasher.Sum(nil), invertedFrame.IV())
|
||||
|
||||
decryptedFrame := make(Frame, FrameLen)
|
||||
decryptor.XORKeyStream(decryptedFrame, frame)
|
||||
decryptedFrame := MakeFrame()
|
||||
defer ReturnFrame(decryptedFrame)
|
||||
decryptor.XORKeyStream(*decryptedFrame, *frame)
|
||||
if !decryptedFrame.Valid() {
|
||||
return nil, 0, errors.New("Unknown protocol")
|
||||
}
|
||||
@@ -48,17 +49,18 @@ func ParseObfuscated2ClientFrame(secret []byte, frame Frame) (*Obfuscated2, int1
|
||||
// MakeTelegramObfuscated2Frame creates new handshake frame to send to
|
||||
// Telegram.
|
||||
// https://blog.susanka.eu/how-telegram-obfuscates-its-mtproto-traffic/
|
||||
func MakeTelegramObfuscated2Frame() (*Obfuscated2, Frame) {
|
||||
func MakeTelegramObfuscated2Frame() (*Obfuscated2, *Frame) {
|
||||
frame := generateFrame()
|
||||
|
||||
encryptor := makeStreamCipher(frame.Key(), frame.IV())
|
||||
decryptorFrame := frame.Invert()
|
||||
decryptor := makeStreamCipher(decryptorFrame.Key(), decryptorFrame.IV())
|
||||
|
||||
copyFrame := make(Frame, frameOffsetIV)
|
||||
copy(copyFrame, frame)
|
||||
encryptor.XORKeyStream(frame, frame)
|
||||
copy(frame, copyFrame)
|
||||
copyFrame := MakeFrame()
|
||||
defer ReturnFrame(copyFrame)
|
||||
copy((*copyFrame)[:frameOffsetIV], (*frame)[:frameOffsetIV])
|
||||
encryptor.XORKeyStream(*frame, *frame)
|
||||
copy((*frame)[:frameOffsetIV], (*copyFrame)[:frameOffsetIV])
|
||||
|
||||
obfs := &Obfuscated2{
|
||||
Decryptor: decryptor,
|
||||
|
||||
Reference in New Issue
Block a user