@@ -37,7 +37,7 @@ static void input_callback(InputEvent* input_event, FuriMessageQueue* event_queu
3737 furi_message_queue_put (event_queue , & event , FuriWaitForever );
3838}
3939
40- static void totp_state_init (PluginState * const plugin_state ) {
40+ static bool totp_state_init (PluginState * const plugin_state ) {
4141 plugin_state -> gui = furi_record_open (RECORD_GUI );
4242 plugin_state -> notification = furi_record_open (RECORD_NOTIFICATION );
4343 plugin_state -> dialogs = furi_record_open (RECORD_DIALOGS );
@@ -61,8 +61,20 @@ static void totp_state_init(PluginState* const plugin_state) {
6161 totp_scene_director_activate_scene (plugin_state , TotpSceneAuthentication , NULL );
6262 } else {
6363 totp_crypto_seed_iv (plugin_state , NULL , 0 );
64- totp_scene_director_activate_scene (plugin_state , TotpSceneGenerateToken , NULL );
64+ if (totp_crypto_verify_key (plugin_state )) {
65+ totp_scene_director_activate_scene (plugin_state , TotpSceneGenerateToken , NULL );
66+ } else {
67+ FURI_LOG_E (LOGGING_TAG , "Digital signature verification failed. Looks like conf file was created on another flipper and can't be used on any other" );
68+ DialogMessage * message = dialog_message_alloc ();
69+ dialog_message_set_buttons (message , "Exit" , NULL , NULL );
70+ dialog_message_set_text (message , "Digital signature verification failed" , SCREEN_WIDTH_CENTER , SCREEN_HEIGHT_CENTER , AlignCenter , AlignCenter );
71+ dialog_message_show (plugin_state -> dialogs , message );
72+ dialog_message_free (message );
73+ return false;
74+ }
6575 }
76+
77+ return true;
6678}
6779
6880static void dispose_plugin_state (PluginState * plugin_state ) {
@@ -94,7 +106,11 @@ int32_t totp_app() {
94106 FuriMessageQueue * event_queue = furi_message_queue_alloc (8 , sizeof (PluginEvent ));
95107 PluginState * plugin_state = malloc (sizeof (PluginState ));
96108
97- totp_state_init (plugin_state );
109+ if (!totp_state_init (plugin_state )) {
110+ FURI_LOG_E (LOGGING_TAG , "App state initialization failed\r\n" );
111+ dispose_plugin_state (plugin_state );
112+ return 254 ;
113+ }
98114
99115 ValueMutex state_mutex ;
100116 if (!init_mutex (& state_mutex , plugin_state , sizeof (PluginState ))) {
@@ -126,7 +142,7 @@ int32_t totp_app() {
126142 }
127143
128144 processing = totp_scene_director_handle_event (& event , plugin_state );
129- } else if (plugin_state -> current_scene != TotpSceneAuthentication && furi_get_tick () - last_user_interaction_time > IDLE_TIMEOUT ) {
145+ } else if (plugin_state -> pin_set && plugin_state -> current_scene != TotpSceneAuthentication && furi_get_tick () - last_user_interaction_time > IDLE_TIMEOUT ) {
130146 totp_scene_director_activate_scene (plugin_state , TotpSceneAuthentication , NULL );
131147 }
132148
0 commit comments