Source code for ska_ser_skuid.base32

# https://www.crockford.com/base32.html
BASE32_ALPHABET = "0123456789abcdefghjkmnpqrstvwxyz"


[docs] def b32encode(n: int) -> str: """Encode a non-negative integer using Crockford Base32. Uses the alphabet ``0-9 a-z`` (excluding ``i``, ``l``, ``o``, ``u``). :param n: Non-negative integer to encode. :returns: Crockford Base32 string representation. :raises ValueError: If *n* is negative. """ if n == 0: return "0" elif n < 0: raise ValueError(f"Only encodes positive integers, got {n}") encoded = "" while n > 0: n, remainder = divmod(n, 32) encoded = BASE32_ALPHABET[remainder] + encoded return encoded
[docs] def b32decode(encoded_id: str) -> int: """Decode a Crockford Base32 string back to an integer. :param encoded_id: A non-empty string using the Crockford Base32 alphabet. :returns: The decoded non-negative integer. :raises ValueError: If *encoded_id* is empty or contains an invalid character. """ if not encoded_id: raise ValueError("Cannot decode empty string") decoded = 0 for char in encoded_id: if char not in BASE32_ALPHABET: raise ValueError(f"Invalid base32 character: {char}") decoded = decoded * 32 + BASE32_ALPHABET.index(char) return decoded