Procházet zdrojové kódy

updating settings, UI cleanup

Struan Clark před 2 roky
rodič
revize
e924a45170

+ 1 - 1
application.fam

@@ -3,7 +3,7 @@ App(
     name="Flip-BIP39",
     apptype=FlipperAppType.PLUGIN,
     entry_point="flipbip39_app",
-    cdefines=["APP_BOILERPLATE"],
+    cdefines=["APP_FLIPBIP39"],
     requires=[
         "gui",
     ],

+ 0 - 3
crypto/.gitmodules

@@ -1,3 +0,0 @@
-[submodule "tests/wycheproof"]
-	path = tests/wycheproof
-	url = https://github.com/google/wycheproof

+ 1 - 0
flipbip39.c

@@ -41,6 +41,7 @@ FlipBip39* flipbip39_app_alloc() {
     app->haptic = 1;
     app->speaker = 1;
     app->led = 1;
+    app->bip39_strength = 256;
 
     view_dispatcher_add_view(app->view_dispatcher, FlipBip39ViewIdMenu, submenu_get_view(app->submenu));
     app->flipbip39_startscreen = flipbip39_startscreen_alloc();

+ 6 - 0
flipbip39.h

@@ -28,6 +28,7 @@ typedef struct {
     int haptic; 
     int speaker;
     int led;
+    int bip39_strength;
 } FlipBip39;
 
 typedef enum {
@@ -52,3 +53,8 @@ typedef enum {
     FlipBip39LedOff,
     FlipBip39LedOn,
 } FlipBip39LedState;
+
+typedef enum {
+    FlipBip39Strength128 = 128,
+    FlipBip39Strength256 = 256,
+} FlipBip39StrengthState;

+ 2 - 2
scenes/flipbip39_scene_menu.c

@@ -14,8 +14,8 @@ void flipbip39_scene_menu_submenu_callback(void* context, uint32_t index) {
 void flipbip39_scene_menu_on_enter(void* context) {
     FlipBip39* app = context;
 
-    submenu_add_item(app->submenu, "Scene 1", SubmenuIndexScene1, flipbip39_scene_menu_submenu_callback, app);
-    submenu_add_item(app->submenu, "Scene 2", SubmenuIndexScene2, flipbip39_scene_menu_submenu_callback, app);
+    submenu_add_item(app->submenu, "New BIP39 Mnemonic", SubmenuIndexScene1, flipbip39_scene_menu_submenu_callback, app);
+    //submenu_add_item(app->submenu, "Scene 2", SubmenuIndexScene2, flipbip39_scene_menu_submenu_callback, app);
     submenu_add_item(app->submenu, "Settings", SubmenuIndexSettings, flipbip39_scene_menu_submenu_callback, app);
 
     submenu_set_selected_item(app->submenu, scene_manager_get_scene_state(app->scene_manager, FlipBip39SceneMenu));

+ 29 - 2
scenes/flipbip39_scene_settings.c

@@ -2,7 +2,8 @@
 #include <lib/toolbox/value_index.h>
 
 enum SettingsIndex {
-    SettingsIndexHaptic = 10,
+    SettingsIndexBip39Strength = 10,
+    SettingsIndexHaptic,
     SettingsIndexValue1,
     SettingsIndexValue2,
 };
@@ -34,10 +35,18 @@ const uint32_t led_value[2] = {
     FlipBip39LedOn,
 };
 
+const char* const bip39_strength_text[2] = {
+    "24",
+    "12",
+};
+const uint32_t bip39_strength_value[2] = {
+    FlipBip39Strength256,
+    FlipBip39Strength128,
+};
+
 static void flipbip39_scene_settings_set_haptic(VariableItem* item) {
     FlipBip39* app = variable_item_get_context(item);
     uint8_t index = variable_item_get_current_value_index(item);
-
     variable_item_set_current_value_text(item, haptic_text[index]);
     app->haptic = haptic_value[index];
 }
@@ -56,6 +65,13 @@ static void flipbip39_scene_settings_set_led(VariableItem* item) {
     app->led = led_value[index];
 }
 
+static void flipbip39_scene_settings_set_bip39_strength(VariableItem* item) {
+    FlipBip39* app = variable_item_get_context(item);
+    uint8_t index = variable_item_get_current_value_index(item);
+    variable_item_set_current_value_text(item, bip39_strength_text[index]);
+    app->bip39_strength = bip39_strength_value[index];
+}
+
 void flipbip39_scene_settings_submenu_callback(void* context, uint32_t index) {
     FlipBip39* app = context;
     view_dispatcher_send_custom_event(app->view_dispatcher, index);
@@ -66,6 +82,17 @@ void flipbip39_scene_settings_on_enter(void* context) {
     VariableItem* item;
     uint8_t value_index;
 
+    // BIP39 strength
+    item = variable_item_list_add(
+        app->variable_item_list,
+        "BIP39 Words:",
+        2,
+        flipbip39_scene_settings_set_bip39_strength,
+        app);
+    value_index = value_index_uint32(app->bip39_strength, bip39_strength_value, 2);
+    variable_item_set_current_value_index(item, value_index);
+    variable_item_set_current_value_text(item, bip39_strength_text[value_index]);
+
     // Vibro on/off
     item = variable_item_list_add(
         app->variable_item_list,

+ 76 - 18
views/flipbip39_scene_1.c

@@ -5,6 +5,7 @@
 #include <gui/elements.h>
 #include <dolphin/dolphin.h>
 
+#include <string.h>
 #include "../crypto/bip32.h"
 #include "../crypto/bip39.h"
 #include "../crypto/ecdsa.h"
@@ -18,7 +19,12 @@ struct FlipBip39Scene1 {
 
 
 typedef struct {
-    int some_value;
+    const char* mnemonic1;
+    const char* mnemonic2;
+    const char* mnemonic3;
+    const char* mnemonic4;
+    const char* mnemonic5;
+    const char* mnemonic6;
 } FlipBip39Scene1Model;
 
 void flipbip39_scene_1_set_callback(
@@ -32,18 +38,57 @@ void flipbip39_scene_1_set_callback(
 }
 
 void flipbip39_scene_1_draw(Canvas* canvas, FlipBip39Scene1Model* model) {
-    UNUSED(model);
+    //UNUSED(model);
     canvas_clear(canvas);
     canvas_set_color(canvas, ColorBlack);
-    canvas_set_font(canvas, FontPrimary);
-    canvas_draw_str_aligned(canvas, 0, 10, AlignLeft, AlignTop, "This is Scene 1"); 
+    //canvas_set_font(canvas, FontPrimary);
+    //canvas_draw_str_aligned(canvas, 0, 10, AlignLeft, AlignTop, "This is Scene 1"); 
+    
     canvas_set_font(canvas, FontSecondary);
-    canvas_draw_str_aligned(canvas, 0, 22, AlignLeft, AlignTop, mnemonic_generate(128)); 
-    //canvas_draw_str_aligned(canvas, 0, 32, AlignLeft, AlignTop, "used as flipbip39"); 
+    canvas_draw_str_aligned(canvas, 1, 2, AlignLeft, AlignTop, model->mnemonic1);
+    canvas_draw_str_aligned(canvas, 1, 12, AlignLeft, AlignTop, model->mnemonic2);
+    canvas_draw_str_aligned(canvas, 1, 22, AlignLeft, AlignTop, model->mnemonic3);
+    canvas_draw_str_aligned(canvas, 1, 32, AlignLeft, AlignTop, model->mnemonic4);
+    canvas_draw_str_aligned(canvas, 1, 42, AlignLeft, AlignTop, model->mnemonic5);
+    canvas_draw_str_aligned(canvas, 1, 52, AlignLeft, AlignTop, model->mnemonic6);
+
 }
 
-static void flipbip39_scene_1_model_init(FlipBip39Scene1Model* const model) {
-    model->some_value = 1;
+static void flipbip39_scene_1_model_init(FlipBip39Scene1Model* const model, const int strength) {
+    // Generate a random mnemonic using trezor-crypto
+    const char* mnemonic = mnemonic_generate(strength);
+
+    // Delineate 6 sections of the mnemonic
+    char *str = malloc(strlen(mnemonic) + 1);
+    strcpy(str, mnemonic);
+    int word = 0;
+    for (size_t i = 0; i < strlen(str); i++) {
+        if (str[i] == ' ') {
+            word++;
+            if (word % 4 == 0) {
+                str[i] = ',';
+            }
+        } 
+    }
+
+    // Split the mnemonic into 6 parts
+    char *ptr = strtok (str, ",");
+    int partnum = 0;
+    while(ptr != NULL)
+    {
+        char *part = malloc(strlen(ptr) + 1);
+        strcpy(part, ptr);
+        partnum++;
+        
+        if (partnum == 1) model->mnemonic1 = part;
+        if (partnum == 2) model->mnemonic2 = part;
+        if (partnum == 3) model->mnemonic3 = part;
+        if (partnum == 4) model->mnemonic4 = part;
+        if (partnum == 5) model->mnemonic5 = part;
+        if (partnum == 6) model->mnemonic6 = part;
+
+        ptr = strtok(NULL, ",");
+    }
 }
 
 bool flipbip39_scene_1_input(InputEvent* event, void* context) {
@@ -88,11 +133,15 @@ void flipbip39_scene_1_exit(void* context) {
 void flipbip39_scene_1_enter(void* context) {
     furi_assert(context);
     FlipBip39Scene1* instance = (FlipBip39Scene1*)context;
+
+    FlipBip39* app = instance->context;
+    int strength = app->bip39_strength;
+
     with_view_model(
         instance->view,
         FlipBip39Scene1Model * model,
         {
-            flipbip39_scene_1_model_init(model);
+            flipbip39_scene_1_model_init(model, strength);
         },
         true
     );
@@ -108,14 +157,17 @@ FlipBip39Scene1* flipbip39_scene_1_alloc() {
     view_set_enter_callback(instance->view, flipbip39_scene_1_enter);
     view_set_exit_callback(instance->view, flipbip39_scene_1_exit);
 
-    with_view_model(
-        instance->view,
-        FlipBip39Scene1Model * model,
-        {
-            flipbip39_scene_1_model_init(model);
-        },
-        true
-    );
+    // FlipBip39* app = instance->view->context;
+    // int strength = app->bip39_strength;
+
+    // with_view_model(
+    //     instance->view,
+    //     FlipBip39Scene1Model * model,
+    //     {
+    //         flipbip39_scene_1_model_init(model, strength);
+    //     },
+    //     true
+    // );
     
     return instance;
 }
@@ -127,7 +179,13 @@ void flipbip39_scene_1_free(FlipBip39Scene1* instance) {
         instance->view,
         FlipBip39Scene1Model * model,
         {
-            UNUSED(model);
+            //UNUSED(model);
+            free((void*)model->mnemonic1);
+            free((void*)model->mnemonic2);
+            free((void*)model->mnemonic3);
+            free((void*)model->mnemonic4);
+            free((void*)model->mnemonic5);
+            free((void*)model->mnemonic6);
         },
         true);
     view_free(instance->view);

+ 3 - 3
views/flipbip39_startscreen.c

@@ -30,10 +30,10 @@ void flipbip39_startscreen_draw(Canvas* canvas, FlipBip39StartscreenModel* model
     canvas_clear(canvas);
     canvas_set_color(canvas, ColorBlack);
     canvas_set_font(canvas, FontPrimary);
-    canvas_draw_str_aligned(canvas, 64, 10, AlignCenter, AlignTop, "Start Screen"); 
+    canvas_draw_str_aligned(canvas, 64, 10, AlignCenter, AlignTop, "Flip-BIP39"); 
     canvas_set_font(canvas, FontSecondary);
-    canvas_draw_str_aligned(canvas, 64, 22, AlignCenter, AlignTop, "Explain your app"); 
-    canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignTop, "on this screen");
+    canvas_draw_str_aligned(canvas, 64, 22, AlignCenter, AlignTop, "Crypto tools"); 
+    canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignTop, "for Flipper");
     elements_button_center(canvas, "Start"); 
 }