Files
seedPass/src/tests/test_password_helpers.py
2025-06-30 14:11:16 -04:00

56 lines
1.7 KiB
Python

import string
from password_manager.password_generation import PasswordGenerator
class DummyEnc:
def derive_seed_from_mnemonic(self, mnemonic):
return b"\x00" * 32
class DummyBIP85:
def derive_entropy(self, index: int, bytes_len: int, app_no: int = 32) -> bytes:
return bytes((index + i) % 256 for i in range(bytes_len))
def make_generator():
pg = PasswordGenerator.__new__(PasswordGenerator)
pg.encryption_manager = DummyEnc()
pg.bip85 = DummyBIP85()
return pg
def test_derive_password_entropy_length():
pg = make_generator()
dk = pg._derive_password_entropy(index=1)
assert isinstance(dk, bytes)
assert len(dk) == 32
dk2 = pg._derive_password_entropy(index=2)
assert dk != dk2
def test_map_entropy_to_chars_only_uses_alphabet():
pg = make_generator()
alphabet = string.ascii_letters + string.digits
mapped = pg._map_entropy_to_chars(b"\x00\x01\x02", alphabet)
assert all(c in alphabet for c in mapped)
assert len(mapped) == 3
def test_enforce_complexity_minimum_counts():
pg = make_generator()
alphabet = string.ascii_letters + string.digits + string.punctuation
dk = bytes(range(32))
result = pg._enforce_complexity("a" * 32, alphabet, dk)
assert sum(1 for c in result if c.isupper()) >= 2
assert sum(1 for c in result if c.islower()) >= 2
assert sum(1 for c in result if c.isdigit()) >= 2
assert sum(1 for c in result if c in string.punctuation) >= 2
def test_shuffle_deterministically_repeatable():
pg = make_generator()
dk = bytes(range(32))
pw1 = pg._shuffle_deterministically("abcdef", dk)
pw2 = pg._shuffle_deterministically("abcdef", dk)
assert pw1 == pw2