xtruan 2 лет назад
Родитель
Сommit
7c5daaa4a6
1 измененных файлов с 70 добавлено и 30 удалено
  1. 70 30
      views/flipbip39_scene_1.c

+ 70 - 30
views/flipbip39_scene_1.c

@@ -25,8 +25,14 @@ struct FlipBip39Scene1 {
 
 
 
 
 typedef struct {
 typedef struct {
+    int page;
     int strength;
     int strength;
-    const char* seed;
+    const char* seed1;
+    const char* seed2;
+    const char* seed3;
+    const char* seed4;
+    const char* seed5;
+    const char* seed6;
     const char* mnemonic1;
     const char* mnemonic1;
     const char* mnemonic2;
     const char* mnemonic2;
     const char* mnemonic3;
     const char* mnemonic3;
@@ -55,16 +61,33 @@ void flipbip39_scene_1_draw(Canvas* canvas, FlipBip39Scene1Model* model) {
     canvas_set_font(canvas, FontSecondary);
     canvas_set_font(canvas, FontSecondary);
     //canvas_draw_str_aligned(canvas, 1, 2, AlignLeft, AlignTop, model->strength == 128 ? "128-bit" : "256-bit");
     //canvas_draw_str_aligned(canvas, 1, 2, AlignLeft, AlignTop, model->strength == 128 ? "128-bit" : "256-bit");
     //canvas_draw_str_aligned(canvas, 1, 2, AlignLeft, AlignTop, model->seed);
     //canvas_draw_str_aligned(canvas, 1, 2, AlignLeft, AlignTop, model->seed);
-    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);
+    
+    // Mnenomic
+    if (model->page == 0) {
+        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);
+    }
+    // Seed
+    else if (model->page == 1) {
+        canvas_draw_str_aligned(canvas, 1, 2, AlignLeft, AlignTop, model->seed1);
+        canvas_draw_str_aligned(canvas, 1, 12, AlignLeft, AlignTop, model->seed2);
+        canvas_draw_str_aligned(canvas, 1, 22, AlignLeft, AlignTop, model->seed3);
+        canvas_draw_str_aligned(canvas, 1, 32, AlignLeft, AlignTop, model->seed4);
+        canvas_draw_str_aligned(canvas, 1, 42, AlignLeft, AlignTop, model->seed5);
+        canvas_draw_str_aligned(canvas, 1, 52, AlignLeft, AlignTop, model->seed6);
+    }
 
 
+    
 }
 }
 
 
 static void flipbip39_scene_1_model_init(FlipBip39Scene1Model* const model, const int strength) {
 static void flipbip39_scene_1_model_init(FlipBip39Scene1Model* const model, const int strength) {
+    
+    model->page = 0;
+
     // Generate a random mnemonic using trezor-crypto
     // Generate a random mnemonic using trezor-crypto
     model->strength = strength;
     model->strength = strength;
     const char* mnemonic = mnemonic_generate(model->strength);
     const char* mnemonic = mnemonic_generate(model->strength);
@@ -101,29 +124,28 @@ static void flipbip39_scene_1_model_init(FlipBip39Scene1Model* const model, cons
         mnemopart = flipbip39_strtok(NULL, ",");
         mnemopart = flipbip39_strtok(NULL, ",");
     }
     }
 
 
-    // WIP / TODO: Generate a seed from the mnemonic
-    uint8_t seed[64];
-    mnemonic_to_seed(mnemonic, "", seed, 0);
-    char *seedptr = malloc(64 * 2 + 1);
+    // Generate a BIP39 seed from the mnemonic
+    uint8_t seedbytes[64];
+    mnemonic_to_seed(mnemonic, "", seedbytes, 0);
+    char *seed = malloc(64 * 2 + 1);
     
     
+    // Convert the seed to a hex string
     for (size_t i = 0; i < 64; i++) {
     for (size_t i = 0; i < 64; i++) {
-        snprintf(seedptr + (i * 2), 2, "%.2x", seed[i]);
+        sprintf(seed + (i * 2), "%.2x", seedbytes[i]);
     }
     }
     
     
-    //strcpy(seedptr, (char*)seed);
-    model->seed = seedptr;
-    
-    // for (size_t i = 0; i < 6; i++) {
-    //     char *seedpartptr = malloc(22 + 1);
-    //     strncpy(seedpartptr, seedptr + (i * 22), 22);
-    //     //model->seed = seedpartptr;
-    //     if (i == 0) model->mnemonic1 = seedpartptr;
-    //     if (i == 1) model->mnemonic2 = seedpartptr;
-    //     if (i == 2) model->mnemonic3 = seedpartptr;
-    //     if (i == 3) model->mnemonic4 = seedpartptr;
-    //     if (i == 4) model->mnemonic5 = seedpartptr;
-    //     if (i == 5) model->mnemonic6 = seedpartptr;
-    // }
+    // Split the seed into parts
+    for (size_t seedpartnum = 1; seedpartnum <= 6; seedpartnum++) {
+        char *seedpartptr = malloc(22 + 1);
+        strncpy(seedpartptr, seed + ((seedpartnum - 1) * 22), 22);
+        
+        if (seedpartnum == 1) model->seed1 = seedpartptr;
+        if (seedpartnum == 2) model->seed2 = seedpartptr;
+        if (seedpartnum == 3) model->seed3 = seedpartptr;
+        if (seedpartnum == 4) model->seed4 = seedpartptr;
+        if (seedpartnum == 5) model->seed5 = seedpartptr;
+        if (seedpartnum == 6) model->seed6 = seedpartptr;
+    }
 
 
     // WIP / TODO: Generate a BIP32 root key from the mnemonic
     // WIP / TODO: Generate a BIP32 root key from the mnemonic
 
 
@@ -169,9 +191,15 @@ static void flipbip39_scene_1_model_init(FlipBip39Scene1Model* const model, cons
     // }
     // }
 
 
     // Clear the mnemonic
     // Clear the mnemonic
+    mnemonic_clear();
     memzero(mnemo, strlen(mnemo));
     memzero(mnemo, strlen(mnemo));
     free(mnemo);
     free(mnemo);
-    mnemonic_clear();
+
+    // Clear the seed
+    memzero(seed, sizeof(seed));
+    free(seed);
+
+    // Clear the BIP39 cache
     bip39_cache_clear();
     bip39_cache_clear();
 }
 }
 
 
@@ -199,7 +227,8 @@ bool flipbip39_scene_1_input(InputEvent* event, void* context) {
                     instance->view,
                     instance->view,
                     FlipBip39Scene1Model* model,
                     FlipBip39Scene1Model* model,
                     {
                     {
-                        UNUSED(model);
+                        //UNUSED(model);
+                        model->page = (model->page + 1) % 2;
                     },
                     },
                     true);
                     true);
                 break;
                 break;
@@ -219,8 +248,14 @@ void flipbip39_scene_1_exit(void* context) {
         FlipBip39Scene1Model * model,
         FlipBip39Scene1Model * model,
         {
         {
             // Clear the mnemonic from memory
             // Clear the mnemonic from memory
+            model->page = 0;
             model->strength = 0;
             model->strength = 0;
-            memzero((void*)model->seed, strlen(model->seed));
+            memzero((void*)model->seed1, strlen(model->seed1));
+            memzero((void*)model->seed2, strlen(model->seed2));
+            memzero((void*)model->seed3, strlen(model->seed3));
+            memzero((void*)model->seed4, strlen(model->seed4));
+            memzero((void*)model->seed5, strlen(model->seed5));
+            memzero((void*)model->seed6, strlen(model->seed6));
             memzero((void*)model->mnemonic1, strlen(model->mnemonic1));
             memzero((void*)model->mnemonic1, strlen(model->mnemonic1));
             memzero((void*)model->mnemonic2, strlen(model->mnemonic2));
             memzero((void*)model->mnemonic2, strlen(model->mnemonic2));
             memzero((void*)model->mnemonic3, strlen(model->mnemonic3));
             memzero((void*)model->mnemonic3, strlen(model->mnemonic3));
@@ -291,7 +326,12 @@ void flipbip39_scene_1_free(FlipBip39Scene1* instance) {
         FlipBip39Scene1Model * model,
         FlipBip39Scene1Model * model,
         {
         {
             //UNUSED(model);
             //UNUSED(model);
-            free((void*)model->seed);
+            free((void*)model->seed1);
+            free((void*)model->seed2);
+            free((void*)model->seed3);
+            free((void*)model->seed4);
+            free((void*)model->seed5);
+            free((void*)model->seed6);
             free((void*)model->mnemonic1);
             free((void*)model->mnemonic1);
             free((void*)model->mnemonic2);
             free((void*)model->mnemonic2);
             free((void*)model->mnemonic3);
             free((void*)model->mnemonic3);