generatePhrase function
Implementation
String generatePhrase({required CryptoImplementation crypto}) {
final seedWords = Uint16List(SEED_WORDS_LENGTH);
// TODO Use random number generator from CryptoImplementation
final random = Random.secure();
// Populate the seed words from the random values.
for (var i = 0; i < SEED_WORDS_LENGTH; i++) {
seedWords[i] = random.nextInt(1 << 16);
var numBits = 10;
// For the 1st word, only the first 256 words are considered valid.
if (i == 0) {
numBits = 8;
}
seedWords[i] = seedWords[i] % (1 << numBits);
}
// Generate checksum from hash of the seed.
final checksumWords = generateChecksumWordsFromSeedWords(
seedWords,
crypto: crypto,
);
final phraseWords = List<String>.filled(PHRASE_LENGTH, '', growable: false);
for (var i = 0; i < SEED_WORDS_LENGTH; i++) {
phraseWords[i] = wordlist[seedWords[i]];
}
for (var i = 0; i < CHECKSUM_WORDS_LENGTH; i++) {
phraseWords[i + SEED_WORDS_LENGTH] = wordlist[checksumWords[i]];
}
return phraseWords.join(" ");
}