// Package obfuscator contains some MTProxy obfuscation utilities.
package obfuscator import ( ) // 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 ( io.Reader, io.ReadWriter) tls { := faketls.NewFakeTLS(, ) := obfuscated2.NewObfuscated2(, ) return tls{ ftls: , obfs2: , } } func ( tls) ( []byte) (int, error) { return .obfs2.Write() } func ( tls) ( []byte) (int, error) { return .obfs2.Read() } func ( tls) ( [4]byte, int, mtproxy.Secret) error { if := .ftls.Handshake(, , ); != nil { return errors.Wrap(, "faketls handshake") } if := .obfs2.Handshake(, , ); != nil { return errors.Wrap(, "obfs2 handshake") } return nil }