mirror of
https://github.com/blyssprivacy/sdk.git
synced 2026-01-13 09:07:58 -05:00
61 lines
1.3 KiB
Python
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)
|