diff --git a/core/embed/rust/src/trezorhal/bip39.rs b/core/embed/rust/src/trezorhal/bip39.rs index 3fd9913517..96be01c43d 100644 --- a/core/embed/rust/src/trezorhal/bip39.rs +++ b/core/embed/rust/src/trezorhal/bip39.rs @@ -2,12 +2,12 @@ use core::cmp::Ordering; use cstr_core::CStr; // TODO: expose from trezor-crypto via build.rs -const BIP39_WORDS: usize = 2048; +const BIP39_WORD_COUNT: usize = 2048; extern "C" { // trezor-crypto/bip39.h fn mnemonic_word_completion_mask(prefix: *const cty::c_char, len: cty::c_int) -> u32; - pub static BIP39_WORDLIST_ENGLISH: [*const cty::c_char; BIP39_WORDS]; + pub static BIP39_WORDLIST_ENGLISH: [*const cty::c_char; BIP39_WORD_COUNT]; } unsafe fn from_utf8_unchecked<'a>(word: *const cty::c_char) -> &'a str { @@ -136,9 +136,9 @@ mod tests { #[test] fn test_filter_prefix_empty() { let words = Wordlist::all().filter_prefix(""); - assert_eq!(words.len(), BIP39_WORDS); + assert_eq!(words.len(), BIP39_WORD_COUNT); let iter = words.iter(); - assert_eq!(iter.size_hint(), (BIP39_WORDS, Some(BIP39_WORDS))); + assert_eq!(iter.size_hint(), (BIP39_WORD_COUNT, Some(BIP39_WORD_COUNT))); } #[test] @@ -171,9 +171,9 @@ mod tests { fn test_wordlist_get() { let words = Wordlist::all(); assert_eq!(words.get(0), Some("abandon")); - assert_eq!(words.get(BIP39_WORDS - 1), Some("zoo")); - assert_eq!(words.get(BIP39_WORDS), None); - assert_eq!(words.get(BIP39_WORDS + 1), None); + assert_eq!(words.get(BIP39_WORD_COUNT - 1), Some("zoo")); + assert_eq!(words.get(BIP39_WORD_COUNT), None); + assert_eq!(words.get(BIP39_WORD_COUNT + 1), None); let filtered = words.filter_prefix("str"); assert_eq!(filtered.get(0), Some("strategy")); diff --git a/crypto/bip39.c b/crypto/bip39.c index 2dae55c7b2..fd2e77804d 100644 --- a/crypto/bip39.c +++ b/crypto/bip39.c @@ -242,7 +242,7 @@ void mnemonic_to_seed(const char *mnemonic, const char *passphrase, // binary search for finding the word in the wordlist int mnemonic_find_word(const char *word) { - int lo = 0, hi = BIP39_WORDS - 1; + int lo = 0, hi = BIP39_WORD_COUNT - 1; while (lo <= hi) { int mid = lo + (hi - lo) / 2; int cmp = strcmp(word, BIP39_WORDLIST_ENGLISH[mid]); @@ -261,7 +261,7 @@ int mnemonic_find_word(const char *word) { const char *mnemonic_complete_word(const char *prefix, int len) { // we need to perform linear search, // because we want to return the first match - for (int i = 0; i < BIP39_WORDS; i++) { + for (int i = 0; i < BIP39_WORD_COUNT; i++) { if (strncmp(BIP39_WORDLIST_ENGLISH[i], prefix, len) == 0) { return BIP39_WORDLIST_ENGLISH[i]; } @@ -270,7 +270,7 @@ const char *mnemonic_complete_word(const char *prefix, int len) { } const char *mnemonic_get_word(int index) { - if (index >= 0 && index < BIP39_WORDS) { + if (index >= 0 && index < BIP39_WORD_COUNT) { return BIP39_WORDLIST_ENGLISH[index]; } else { return NULL; @@ -282,7 +282,7 @@ uint32_t mnemonic_word_completion_mask(const char *prefix, int len) { return 0x3ffffff; // all letters (bits 1-26 set) } uint32_t res = 0; - for (int i = 0; i < BIP39_WORDS; i++) { + for (int i = 0; i < BIP39_WORD_COUNT; i++) { const char *word = BIP39_WORDLIST_ENGLISH[i]; if (strncmp(word, prefix, len) == 0 && word[len] >= 'a' && word[len] <= 'z') { diff --git a/crypto/bip39.h b/crypto/bip39.h index 682ee577eb..3160e0ff4b 100644 --- a/crypto/bip39.h +++ b/crypto/bip39.h @@ -29,14 +29,14 @@ #include "options.h" -#define BIP39_WORDS 2048 +#define BIP39_WORD_COUNT 2048 #define BIP39_PBKDF2_ROUNDS 2048 #if USE_BIP39_CACHE void bip39_cache_clear(void); #endif -extern const char *const BIP39_WORDLIST_ENGLISH[BIP39_WORDS]; +extern const char *const BIP39_WORDLIST_ENGLISH[BIP39_WORD_COUNT]; const char *mnemonic_generate(int strength); // strength in bits const char *mnemonic_from_data(const uint8_t *data, int len); diff --git a/crypto/bip39_english.c b/crypto/bip39_english.c index 31a36f35d3..87b01aaf8f 100644 --- a/crypto/bip39_english.c +++ b/crypto/bip39_english.c @@ -23,7 +23,7 @@ #include "bip39.h" -const char* const BIP39_WORDLIST_ENGLISH[BIP39_WORDS] = { +const char* const BIP39_WORDLIST_ENGLISH[BIP39_WORD_COUNT] = { "abandon", "ability", "able", "about", "above", "absent", "absorb", "abstract", "absurd", "abuse", "access", "accident", "account", "accuse", "achieve", "acid", "acoustic", "acquire", diff --git a/crypto/tests/test_check.c b/crypto/tests/test_check.c index 65ed36cdfd..ef3dd85abe 100644 --- a/crypto/tests/test_check.c +++ b/crypto/tests/test_check.c @@ -5603,7 +5603,7 @@ END_TEST START_TEST(test_mnemonic_find_word) { ck_assert_int_eq(-1, mnemonic_find_word("aaaa")); ck_assert_int_eq(-1, mnemonic_find_word("zzzz")); - for (int i = 0; i < BIP39_WORDS; i++) { + for (int i = 0; i < BIP39_WORD_COUNT; i++) { const char *word = mnemonic_get_word(i); int index = mnemonic_find_word(word); ck_assert_int_eq(i, index); diff --git a/legacy/firmware/recovery.c b/legacy/firmware/recovery.c index 48dad99d88..317fb2e20d 100644 --- a/legacy/firmware/recovery.c +++ b/legacy/firmware/recovery.c @@ -451,7 +451,7 @@ void next_word(void) { oledDrawStringCenter(OLED_WIDTH / 2, 8, _("Please enter"), FONT_STANDARD); word_pos = word_order[word_index]; if (word_pos == 0) { - strlcpy(fake_word, mnemonic_get_word(random_uniform(BIP39_WORDS)), + strlcpy(fake_word, mnemonic_get_word(random_uniform(BIP39_WORD_COUNT)), sizeof(fake_word)); oledDrawStringCenter(OLED_WIDTH / 2, 24, fake_word, FONT_FIXED | FONT_DOUBLE);