Add custom secret support to TcpMTProxy (#4309)

This commit is contained in:
Confused Character 2024-02-17 01:15:38 +03:30 committed by GitHub
parent 2b99ff65c5
commit 22bf0b4310
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,5 +1,6 @@
import asyncio import asyncio
import hashlib import hashlib
import base64
import os import os
from .connection import ObfuscatedConnection from .connection import ObfuscatedConnection
@ -98,7 +99,7 @@ class TcpMTProxy(ObfuscatedConnection):
def __init__(self, ip, port, dc_id, *, loggers, proxy=None, local_addr=None): def __init__(self, ip, port, dc_id, *, loggers, proxy=None, local_addr=None):
# connect to proxy's host and port instead of telegram's ones # connect to proxy's host and port instead of telegram's ones
proxy_host, proxy_port = self.address_info(proxy) proxy_host, proxy_port = self.address_info(proxy)
self._secret = bytes.fromhex(proxy[2]) self._secret = self.normalize_secret(proxy[2])
super().__init__( super().__init__(
proxy_host, proxy_port, dc_id, loggers=loggers) proxy_host, proxy_port, dc_id, loggers=loggers)
@ -130,6 +131,18 @@ class TcpMTProxy(ObfuscatedConnection):
raise ValueError("No proxy info specified for MTProxy connection") raise ValueError("No proxy info specified for MTProxy connection")
return proxy_info[:2] return proxy_info[:2]
@staticmethod
def normalize_secret(secret):
if secret[:2] in ("ee", "dd"): # Remove extra bytes
secret = secret[2:]
try:
secret_bytes = bytes.fromhex(secret)
except ValueError:
secret = secret + '=' * (-len(secret) % 4)
secret_bytes = base64.b64decode(secret.encode())
return secret_bytes[:16] # Remove the domain from the secret (until domain support is added)
class ConnectionTcpMTProxyAbridged(TcpMTProxy): class ConnectionTcpMTProxyAbridged(TcpMTProxy):
""" """