def encode_int(value: int, alphabet: str) -> str: if value < 0: raise ValueError("cannot encode negative integers") if value == 0: return alphabet[0] base = len(alphabet) out = [] while value: value, digit = divmod(value, base) out.append(alphabet[digit]) return "".join(reversed(out)) def decode_int(text: str, alphabet: str) -> int: index = {char: i for i, char in enumerate(alphabet)} value = 0 base = len(alphabet) for char in text: if char not in index: raise ValueError(f"invalid character for alphabet: {char!r}") value = value * base + index[char] return value def bytes_to_int(data: bytes) -> int: return int.from_bytes(data, "big") if data else 0 def int_to_bytes(value: int, length: int) -> bytes: return value.to_bytes(length, "big") if length else b""