@@ -1713,16 +1713,21 @@ static int revisit_prefix(char words[][SEEDTOOL_MAX_WORD_LEN + 1], const size_t
17131713 * seedtool_validate_mnemonic yet - the checksum gate belongs only where the
17141714 * mnemonic is meant to be whole and correct, which is why that flow reviews
17151715 * through review_prefix instead.
1716- * join_words and seedtool_validate_mnemonic are the same pair review_and_
1717- * confirm itself calls every time it redraws; reused once more here, before
1718- * the first draw, so an invalid checksum is announced up front rather than
1719- * only implied by "Review words" silently reading "Review - fix a word"
1720- * instead - the inert "Checksum invalid" row this screen used to carry (see
1721- * "Drop the inert 'Checksum invalid' row from word review") was removed for
1722- * being a dead click, not because the reader shouldn't be told; a one-shot
1723- * acknowledge, the same widget restore_seed's own "Checksum valid" already
1724- * uses for the opposite verdict, says it without adding a row that does
1725- * nothing when picked. */
1716+ *
1717+ * No checksum is announced here, and the absence is deliberate: there is
1718+ * nothing left for it to announce. The last word of a whole mnemonic is
1719+ * entered under seedtool_final_word_candidates, both keyboards narrow to that
1720+ * set rather than merely displaying it, and stepping back clears the word so
1721+ * the last one is always entered last against a filter rebuilt from the words
1722+ * currently standing. What leaves enter_mnemonic_words with success has a
1723+ * checksum that holds.
1724+ *
1725+ * A one-shot notice did stand here, from before that filter existed, and its
1726+ * own commit said the check was being moved to where it prevents the mistake
1727+ * instead of reporting it. Only the moving happened. Restoring it would mean
1728+ * restoring a screen no input can reach - and the reader is not left without a
1729+ * gate either way, since review_and_confirm still reads the checksum on every
1730+ * redraw and keeps Continue untakeable while it fails. */
17261731static int restore_mnemonic (const size_t count , char words [][SEEDTOOL_MAX_WORD_LEN + 1 ], bool * const by_number ,
17271732 char * mnemonic , const size_t mnemonic_len , bool resume )
17281733{
@@ -1737,10 +1742,6 @@ static int restore_mnemonic(const size_t count, char words[][SEEDTOOL_MAX_WORD_L
17371742 if (entered != 1 ) {
17381743 return entered ;
17391744 }
1740- if (join_words (words , count , mnemonic , mnemonic_len )
1741- && seedtool_validate_mnemonic (mnemonic , NULL ) != SEEDTOOL_OK ) {
1742- notice ("Invalid checksum" , "Check your words" , "Fix one to continue" );
1743- }
17441745 }
17451746 resume = false;
17461747 const int reviewed = review_and_confirm (words , count , * by_number , mnemonic , mnemonic_len );
0 commit comments