20 lines
533 B
Python
20 lines
533 B
Python
import secrets
|
|
|
|
from .wordlist import words
|
|
|
|
N_WORDS = 5
|
|
|
|
wset = set(words)
|
|
|
|
|
|
def generate(n=N_WORDS, sep="."):
|
|
"""Generate a password of random words without repeating any word."""
|
|
wl = words.copy()
|
|
return sep.join(wl.pop(secrets.randbelow(len(wl))) for i in range(n))
|
|
|
|
|
|
def is_well_formed(passphrase: str, n=N_WORDS, sep=".") -> bool:
|
|
"""Check if the passphrase is well-formed according to the regex pattern."""
|
|
p = passphrase.split(sep)
|
|
return len(p) == n and all(w in wset for w in passphrase.split("."))
|