Просмотр исходного кода

Correct encryptor/decryptor

tags/0.9
9seconds 7 лет назад
Родитель
Сommit
812b5e6e0b
2 измененных файлов: 6 добавлений и 6 удалений
  1. 5
    5
      mtproto/wrappers/crypt.go
  2. 1
    1
      telegram/middle.go

+ 5
- 5
mtproto/wrappers/crypt.go Просмотреть файл

25
 func NewMiddleProxyCipherRWC(conn wrappers.ReadWriteCloserWithAddr, req *rpc.RPCNonceRequest,
25
 func NewMiddleProxyCipherRWC(conn wrappers.ReadWriteCloserWithAddr, req *rpc.RPCNonceRequest,
26
 	resp *rpc.RPCNonceResponse, client *net.TCPAddr, secret []byte) wrappers.ReadWriteCloserWithAddr {
26
 	resp *rpc.RPCNonceResponse, client *net.TCPAddr, secret []byte) wrappers.ReadWriteCloserWithAddr {
27
 	remote := conn.Addr()
27
 	remote := conn.Addr()
28
-	encryptor := newCBCCipher(CipherPurposeClient, req, resp, client, remote, secret)
29
-	decryptor := newCBCCipher(CipherPurposeServer, req, resp, client, remote, secret)
28
+	encryptor, _ := newCBCCipher(CipherPurposeClient, req, resp, client, remote, secret)
29
+	_, decryptor := newCBCCipher(CipherPurposeServer, req, resp, client, remote, secret)
30
 
30
 
31
 	return wrappers.NewBlockCipherRWC(conn, encryptor, decryptor)
31
 	return wrappers.NewBlockCipherRWC(conn, encryptor, decryptor)
32
 }
32
 }
33
 
33
 
34
 func newCBCCipher(purpose CipherPurpose, req *rpc.RPCNonceRequest, resp *rpc.RPCNonceResponse,
34
 func newCBCCipher(purpose CipherPurpose, req *rpc.RPCNonceRequest, resp *rpc.RPCNonceResponse,
35
-	client *net.TCPAddr, remote *net.TCPAddr, secret []byte) cipher.BlockMode {
35
+	client *net.TCPAddr, remote *net.TCPAddr, secret []byte) (cipher.BlockMode, cipher.BlockMode) {
36
 	message := bytes.Buffer{}
36
 	message := bytes.Buffer{}
37
 	message.Write(resp.Nonce[:])
37
 	message.Write(resp.Nonce[:])
38
 	message.Write(req.Nonce[:])
38
 	message.Write(req.Nonce[:])
74
 	return makeCipher(message.Bytes())
74
 	return makeCipher(message.Bytes())
75
 }
75
 }
76
 
76
 
77
-func makeCipher(message []byte) cipher.BlockMode {
77
+func makeCipher(message []byte) (cipher.BlockMode, cipher.BlockMode) {
78
 	md5sum := md5.Sum(message[1:])
78
 	md5sum := md5.Sum(message[1:])
79
 	sha1sum := sha1.Sum(message)
79
 	sha1sum := sha1.Sum(message)
80
 
80
 
86
 		panic("Cannot create cipher from the given key")
86
 		panic("Cannot create cipher from the given key")
87
 	}
87
 	}
88
 
88
 
89
-	return cipher.NewCBCEncrypter(block, iv[:])
89
+	return cipher.NewCBCEncrypter(block, iv[:]), cipher.NewCBCDecrypter(block, iv[:])
90
 }
90
 }
91
 
91
 
92
 func reverseBytes(data []byte) []byte {
92
 func reverseBytes(data []byte) []byte {

+ 1
- 1
telegram/middle.go Просмотреть файл

55
 	}
55
 	}
56
 
56
 
57
 	secureConn := mtwrappers.NewFrameRWC(conn, rpc.RPCHandshakeSeqNo)
57
 	secureConn := mtwrappers.NewFrameRWC(conn, rpc.RPCHandshakeSeqNo)
58
-	secureConn = mtwrappers.NewMiddleProxyCipherRWC(conn, rpcNonceReq,
58
+	secureConn = mtwrappers.NewMiddleProxyCipherRWC(secureConn, rpcNonceReq,
59
 		rpcNonceResp, connOpts.ClientAddr, t.proxySecret)
59
 		rpcNonceResp, connOpts.ClientAddr, t.proxySecret)
60
 
60
 
61
 	rpcHandshakeReq, err := t.sendRPCHandshakeRequest(secureConn)
61
 	rpcHandshakeReq, err := t.sendRPCHandshakeRequest(secureConn)

Загрузка…
Отмена
Сохранить