diff --git a/src/xhshow/generators/fingerprint.py b/src/xhshow/generators/fingerprint.py index db2b967..38957e7 100644 --- a/src/xhshow/generators/fingerprint.py +++ b/src/xhshow/generators/fingerprint.py @@ -65,7 +65,7 @@ def generate_b1(self, fp: dict) -> str: b.append(int("".join(chars[:2]), 16)) [b.append(ord(j)) for j in chars[2:]] - b1 = self._encoder.encode(json.dumps(b, separators=(",", ":"))) + b1 = self._encoder.encode(bytearray(b)) return b1 diff --git a/src/xhshow/utils/encoder.py b/src/xhshow/utils/encoder.py index 0d105c9..a3faf96 100644 --- a/src/xhshow/utils/encoder.py +++ b/src/xhshow/utils/encoder.py @@ -2,6 +2,7 @@ import base64 import binascii +from collections.abc import Iterable from ..config import CryptoConfig @@ -29,7 +30,7 @@ def __init__(self, config: CryptoConfig): config.STANDARD_BASE64_ALPHABET, ) - def encode(self, data_to_encode: str) -> str: + def encode(self, data_to_encode: bytes | str | Iterable[int]) -> str: """ Encode a string using custom Base64 alphabet @@ -39,7 +40,13 @@ def encode(self, data_to_encode: str) -> str: Returns: Base64 string encoded using custom alphabet """ - data_bytes = data_to_encode.encode("utf-8") + if isinstance(data_to_encode, bytes | bytearray): + data_bytes = data_to_encode + elif isinstance(data_to_encode, str): + data_bytes = data_to_encode.encode("utf-8") + else: + # Iterable[int] case + data_bytes = bytearray(data_to_encode) standard_encoded_bytes = base64.b64encode(data_bytes) standard_encoded_string = standard_encoded_bytes.decode("utf-8") diff --git a/tests/test_crypto.py b/tests/test_crypto.py index 5bad44c..ce304e8 100644 --- a/tests/test_crypto.py +++ b/tests/test_crypto.py @@ -647,7 +647,7 @@ def test_sign_headers_parameter_validation(self): # Test unsupported method should raise error with pytest.raises(ValueError, match="Unsupported method"): client.sign_headers( - method="PUT", + method="PUT", # type: ignore[arg-type] uri="/api/test", cookies=cookies, params={"key": "value"},