mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2025-09-09 15:58:48 +00:00
92 lines
2.8 KiB
Python
92 lines
2.8 KiB
Python
import builtins
|
|
from mnemonic import Mnemonic
|
|
from seedpass.core.manager import PasswordManager
|
|
from utils import seed_prompt
|
|
|
|
|
|
def test_validate_bip85_seed_invalid_word():
|
|
pm = PasswordManager.__new__(PasswordManager)
|
|
bad_phrase = "abandon " * 11 + "zzzz"
|
|
assert not pm.validate_bip85_seed(bad_phrase)
|
|
|
|
|
|
def test_validate_bip85_seed_checksum_failure():
|
|
pm = PasswordManager.__new__(PasswordManager)
|
|
# Use a known valid phrase to avoid randomness causing a valid checksum
|
|
phrase = (
|
|
"legal winner thank year wave sausage worth useful legal winner thank yellow"
|
|
)
|
|
words = phrase.split()
|
|
words[-1] = "abandon"
|
|
bad_phrase = " ".join(words)
|
|
assert not pm.validate_bip85_seed(bad_phrase)
|
|
|
|
|
|
def test_setup_existing_seed_words(monkeypatch):
|
|
m = Mnemonic("english")
|
|
phrase = m.generate(strength=128)
|
|
words = phrase.split()
|
|
word_iter = iter(words)
|
|
monkeypatch.setattr(
|
|
"seedpass.core.manager.masked_input",
|
|
lambda *_: next(word_iter),
|
|
)
|
|
# Ensure prompt_seed_words uses the patched function
|
|
monkeypatch.setattr(seed_prompt, "masked_input", lambda *_: next(word_iter))
|
|
monkeypatch.setattr(builtins, "input", lambda *_: "y")
|
|
|
|
pm = PasswordManager.__new__(PasswordManager)
|
|
monkeypatch.setattr(pm, "_finalize_existing_seed", lambda seed, **_: seed)
|
|
|
|
result = pm.setup_existing_seed(method="words")
|
|
assert result == phrase
|
|
|
|
|
|
def test_setup_existing_seed_paste(monkeypatch):
|
|
m = Mnemonic("english")
|
|
phrase = m.generate(strength=128)
|
|
|
|
called = {}
|
|
|
|
def fake_masked_input(prompt: str) -> str:
|
|
called["prompt"] = prompt
|
|
return phrase
|
|
|
|
monkeypatch.setattr("seedpass.core.manager.masked_input", fake_masked_input)
|
|
monkeypatch.setattr(
|
|
builtins,
|
|
"input",
|
|
lambda *_: (_ for _ in ()).throw(RuntimeError("input called")),
|
|
)
|
|
|
|
pm = PasswordManager.__new__(PasswordManager)
|
|
monkeypatch.setattr(pm, "_finalize_existing_seed", lambda seed, **_: seed)
|
|
|
|
result = pm.setup_existing_seed(method="paste")
|
|
assert result == phrase
|
|
assert called["prompt"].startswith("Enter your 12-word BIP-85 seed")
|
|
|
|
|
|
def test_setup_existing_seed_with_args(monkeypatch):
|
|
m = Mnemonic("english")
|
|
phrase = m.generate(strength=128)
|
|
|
|
called = {}
|
|
|
|
monkeypatch.setattr(
|
|
"seedpass.core.manager.masked_input",
|
|
lambda *_: (_ for _ in ()).throw(RuntimeError("prompt")),
|
|
)
|
|
|
|
def finalize(seed, *, password=None):
|
|
called["seed"] = seed
|
|
called["pw"] = password
|
|
return "fp"
|
|
|
|
pm = PasswordManager.__new__(PasswordManager)
|
|
monkeypatch.setattr(pm, "_finalize_existing_seed", finalize)
|
|
result = pm.setup_existing_seed(method="paste", seed=phrase, password="pw")
|
|
assert result == "fp"
|
|
assert called["seed"] == phrase
|
|
assert called["pw"] == "pw"
|