generatePhrase function

String generatePhrase({
  1. required CryptoImplementation crypto,
})

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(" ");
}