add custom secret support

This commit is contained in:
ConfusedCharacter 2024-02-16 12:13:04 +03:30
parent 2b99ff65c5
commit 9743d1eefd

View File

@ -1,5 +1,7 @@
import binascii
import asyncio
import hashlib
import base64
import os
from .connection import ObfuscatedConnection
@ -98,7 +100,7 @@ class TcpMTProxy(ObfuscatedConnection):
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
proxy_host, proxy_port = self.address_info(proxy)
self._secret = bytes.fromhex(proxy[2])
self._secret = TcpMTProxy.normilize_secret(proxy[2])
super().__init__(
proxy_host, proxy_port, dc_id, loggers=loggers)
@ -130,6 +132,21 @@ class TcpMTProxy(ObfuscatedConnection):
raise ValueError("No proxy info specified for MTProxy connection")
return proxy_info[:2]
@staticmethod
def normilize_secret(secret):
if secret[:2] in ["ee","dd"]: # Remove extra bytes
secret = secret[2:]
try:
secret_bytes = bytes.fromhex(secret)
except:
try:
secret_bytes = base64.b64decode(secret.encode())
except binascii.Error:
secret = secret + "=="
secret_bytes = base64.b64decode(secret.encode())
return secret_bytes[:16] # Remove the domain from the secret (until domain support is added)
class ConnectionTcpMTProxyAbridged(TcpMTProxy):
"""
@ -149,4 +166,4 @@ class ConnectionTcpMTProxyRandomizedIntermediate(TcpMTProxy):
"""
Connect to proxy using randomized intermediate protocol (dd-secrets)
"""
packet_codec = RandomizedIntermediatePacketCodec
packet_codec = RandomizedIntermediatePacketCodec