diff --git a/gli4py/glinet.py b/gli4py/glinet.py index e09b42d..0477edc 100644 --- a/gli4py/glinet.py +++ b/gli4py/glinet.py @@ -93,6 +93,7 @@ async def login(self, username: str, password: str) -> None: alg = res["alg"] salt = res["salt"] nonce = res["nonce"] + hash_method = res.get("hash-method", "md5") # Step2: Generate cipher text using openssl algorithm if alg == 1: # MD5 @@ -106,11 +107,18 @@ async def login(self, username: str, password: str) -> None: password ) else: - raise ValueError("Router requested unsupported hashing algorithm") + raise ValueError("Router requested unsupported hashing algorithm for cipher password") # Step3: Generate hash values for login data = f"{username}:{cipher_password}:{nonce}" - hsh = hashlib.md5(data.encode()).hexdigest() + if hash_method == "md5": # MD5 + hsh = hashlib.md5(data.encode()).hexdigest() + elif hash_method == "sha256": # SHA-256 + hsh = hashlib.sha256(data.encode()).hexdigest() + elif hash_method == "sha256": # SHA-512 + hsh = hashlib.sha512(data.encode()).hexdigest() + else: + raise ValueError("Router requested unsupported hashing algorithm for hash") # Step4: Get sid by login res = await self._get_sid(username, hsh)