mnemonicToEntropy function

Uint8List mnemonicToEntropy(
  1. dynamic mnemonic
)

This function is used to compute entropy from mnemonic.

Implementation

Uint8List mnemonicToEntropy(var mnemonic) {
  final language = mnemonicLanguage(mnemonic);
  if (language == Language.unknown) {
    throw ArgumentError(_invalidMnemonic);
  }
  final words = formatMnemonic(mnemonic);
  final list = language.wordlist;
  final bits = words.map((word) {
    final index = list.indexOf(word);
    if (index == -1) {
      throw ArgumentError(_invalidMnemonic);
    }
    return index.toRadixString(2).padLeft(11, '0');
  }).join('');
  final entropyBits = bits.substring(0, bits.length - bits.length ~/ 33);
  final dividerIndex = (bits.length ~/ 33) * 32;
  final checksumBits = bits.substring(dividerIndex);

  final regex = RegExp(r".{1,8}", caseSensitive: false, multiLine: false);
  final chunks = regex.allMatches(entropyBits).map((m) => m.group(0)).toList();
  final entropy = chunks.map((binary) => _binaryToInt(binary!)).toList();

  // calculate the checksum and compare
  final newChecksum = _entropyChecksumBits(Uint8List.fromList(entropy));
  if (newChecksum != checksumBits) {
    throw StateError(_invalidChecksum);
  }

  return Uint8List.fromList(entropy);
}