7a04f298d2
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
// Package obfuscator contains some MTProxy obfuscation utilities.
|
|
package obfuscator
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/go-faster/errors"
|
|
|
|
"go.mau.fi/mautrix-telegram/pkg/gotd/mtproxy"
|
|
"go.mau.fi/mautrix-telegram/pkg/gotd/mtproxy/faketls"
|
|
"go.mau.fi/mautrix-telegram/pkg/gotd/mtproxy/obfuscated2"
|
|
)
|
|
|
|
// Obfuscator represents MTProxy obfuscator.
|
|
type Obfuscator interface {
|
|
io.ReadWriter
|
|
Handshake(protocol [4]byte, dc int, s mtproxy.Secret) error
|
|
}
|
|
|
|
type tls struct {
|
|
ftls *faketls.FakeTLS
|
|
obfs2 *obfuscated2.Obfuscated2
|
|
}
|
|
|
|
func newTLS(rand io.Reader, conn io.ReadWriter) tls {
|
|
ftls := faketls.NewFakeTLS(rand, conn)
|
|
obfs2 := obfuscated2.NewObfuscated2(rand, ftls)
|
|
return tls{
|
|
ftls: ftls,
|
|
obfs2: obfs2,
|
|
}
|
|
}
|
|
|
|
func (t tls) Write(p []byte) (int, error) {
|
|
return t.obfs2.Write(p)
|
|
}
|
|
|
|
func (t tls) Read(p []byte) (int, error) {
|
|
return t.obfs2.Read(p)
|
|
}
|
|
|
|
func (t tls) Handshake(protocol [4]byte, dc int, s mtproxy.Secret) error {
|
|
if err := t.ftls.Handshake(protocol, dc, s); err != nil {
|
|
return errors.Wrap(err, "faketls handshake")
|
|
}
|
|
|
|
if err := t.obfs2.Handshake(protocol, dc, s); err != nil {
|
|
return errors.Wrap(err, "obfs2 handshake")
|
|
}
|
|
|
|
return nil
|
|
}
|