| 389 | |
| 390 | |
| 391 | class DicewarePasswordGenerator(PasswordGenerator): |
| 392 | def __init__(self, number_of_rolls, word_list_file=None, delimiter=' '): # type: (int, Optional[str], str) -> None |
| 393 | self._number_of_rolls = number_of_rolls if number_of_rolls > 0 else 5 |
| 394 | self.delimiter = delimiter |
| 395 | self._vocabulary = _load_wordlist(word_list_file) |
| 396 | |
| 397 | def generate(self): |
| 398 | if not self._vocabulary: |
| 399 | raise Exception(f'Diceware word list was not loaded') |
| 400 | |
| 401 | words = [secrets.choice(self._vocabulary) for _ in range(self._number_of_rolls)] |
| 402 | shuffle(words) |
| 403 | return self.delimiter.join(words) |
| 404 | |
| 405 | |
| 406 | class KeeperPassphraseGenerator(PasswordGenerator): |