decode method
Decodes a Monero mnemonic string into a List
This method takes a Monero mnemonic string as input and processes it to obtain the corresponding entropy bytes. It validates the mnemonic's word count and detects the language if it was not specified during construction. Then, it converts the mnemonic words into entropy bytes by considering 3 words at a time, where 3 words represent 4 bytes.
Throws a StateError if the mnemonic words count is not valid.
Returns a List
mnemonic
: The Monero mnemonic string to decode.
Implementation
@override
List<int> decode(String mnemonic) {
final mn = MoneroMnemonic.fromString(mnemonic);
final wcount = mn.wordsCount();
try {
MoneroMnemonicConst.mnemonicWordNum
.where((element) => element.value == wcount);
} on StateError {
throw ArgumentException("Mnemonic words count is not valid ($wcount)");
}
final lang = findLanguage(mn);
final words = mn.toList();
validateCheckSum(words, lang.item2 as MoneroLanguages);
List<int> entropyBytes = List.empty();
for (int i = 0; i < words.length ~/ 3; i++) {
final String word1 = words[i * 3];
final String word2 = words[i * 3 + 1];
final String word3 = words[i * 3 + 2];
final List<int> chunkBytes = MnemonicUtils.wordsToBytesChunk(
word1, word2, word3, lang.item1,
endian: Endian.little);
entropyBytes = List<int>.from([...entropyBytes, ...chunkBytes]);
}
return entropyBytes;
}