Files
sdk/python/blyss/seed.py
2023-02-07 15:21:24 -08:00

61 lines
1.3 KiB
Python

"""Seed
INTERNAL
Helper methods to generate and manipulate random seeds.
"""
import os
import base64
SEED_BYTES = 32
SEED_STR_LEN = 44
def _bytes_to_base64(arr: bytes) -> str:
return base64.standard_b64encode(arr).decode()
def _base64_to_bytes(b64_str: str) -> bytes:
return base64.standard_b64decode(b64_str)
def string_from_seed(seed: bytes) -> str:
"""Convert bytes to a base64 string seed.
Args:
seed (bytes): Raw, random bytes of length SEED_BYTES.
Returns:
str: The seed string, of length SEED_STR_LEN.
"""
assert len(seed) == SEED_BYTES
seed_str = _bytes_to_base64(seed)
assert len(seed_str) == SEED_STR_LEN
return seed_str
def seed_from_string(seed_str: str) -> bytes:
"""Convert a base64 string seed to bytes.
Args:
seed_str (str): The seed string, of length SEED_STR_LEN.
Returns:
bytes: The raw bytes, of length SEED_BYTES.
"""
assert len(seed_str) == SEED_STR_LEN
seed = _base64_to_bytes(seed_str)
assert len(seed) == SEED_BYTES
return seed
def get_random_seed() -> str:
"""Generate a random seed using `os.urandom`.
Returns:
str: The seed string, of length SEED_STR_LEN.
"""
seed = os.urandom(SEED_BYTES)
return string_from_seed(seed)