Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions passy.c
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,13 @@ Passy* passy_alloc() {
view_dispatcher_add_view(
passy->view_dispatcher, PassyViewMenu, submenu_get_view(passy->submenu));

// Variable Item List
passy->variable_item_list = variable_item_list_alloc();
view_dispatcher_add_view(
passy->view_dispatcher,
PassyViewVariableItemList,
variable_item_list_get_view(passy->variable_item_list));

// Popup
passy->popup = popup_alloc();
view_dispatcher_add_view(passy->view_dispatcher, PassyViewPopup, popup_get_view(passy->popup));
Expand Down Expand Up @@ -210,6 +217,10 @@ void passy_free(Passy* passy) {
view_dispatcher_remove_view(passy->view_dispatcher, PassyViewMenu);
submenu_free(passy->submenu);

// Variable Item List
view_dispatcher_remove_view(passy->view_dispatcher, PassyViewVariableItemList);
variable_item_list_free(passy->variable_item_list);

// Popup
view_dispatcher_remove_view(passy->view_dispatcher, PassyViewPopup);
popup_free(passy->popup);
Expand Down
15 changes: 15 additions & 0 deletions passy_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,21 @@

#define TAG "PassyCommon"

const char* passy_auth_method_string(PassyAuthMethod method) {
switch(method) {
case PassyAuthMethodBac:
return "BAC";
case PassyAuthMethodPace:
return "PACE";
case PassyAuthMethodNone:
return "None";
case PassyAuthMethodAny:
return "Any";
default:
return "Unknown";
}
}

static char asn1_log[PASSY_WORKER_MAX_BUFFER_SIZE];
int print_struct_callback(const void* buffer, size_t size, void* app_key) {
if(app_key) {
Expand Down
9 changes: 9 additions & 0 deletions passy_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,15 @@ typedef enum {
PassyReadDG15 = 0x010F,
} PassyReadType;

typedef enum {
PassyAuthMethodNone,
PassyAuthMethodAny,
PassyAuthMethodBac,
PassyAuthMethodPace,
PASSY_AUTH_METHOD_COUNT,
} PassyAuthMethod;

const char* passy_auth_method_string(PassyAuthMethod method);
void passy_log_bitbuffer(char* tag, char* prefix, BitBuffer* buffer);
void passy_log_buffer(char* tag, char* prefix, uint8_t* buffer, size_t buffer_len);
void passy_mac(uint8_t* key, uint8_t* data, size_t data_length, uint8_t* mac, bool prepadded);
Expand Down
4 changes: 4 additions & 0 deletions passy_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include <dialogs/dialogs.h>

#include <gui/modules/submenu.h>
#include <gui/modules/variable_item_list.h>
#include <gui/modules/popup.h>
#include <gui/modules/loading.h>
#include <gui/modules/text_input.h>
Expand Down Expand Up @@ -69,6 +70,7 @@ struct Passy {

// Common Views
Submenu* submenu;
VariableItemList* variable_item_list;
Popup* popup;
Loading* loading;
TextInput* text_input;
Expand All @@ -95,6 +97,7 @@ struct Passy {
BitBuffer* dg_header;

PassyReadType read_type;
PassyAuthMethod auth_mehod;

size_t offset;
size_t bytes_total;
Expand All @@ -105,6 +108,7 @@ struct Passy {

typedef enum {
PassyViewMenu,
PassyViewVariableItemList,
PassyViewPopup,
PassyViewLoading,
PassyViewTextInput,
Expand Down
122 changes: 122 additions & 0 deletions scenes/passy_scene_auth_menu.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
#include "../passy_i.h"

#define TAG "PassySceneAuthMenu"

enum SubmenuIndex {
SubmenuIndexDocNr,
SubmenuIndexDob,
SubmenuIndexDoe,
SubmenuIndexMethod,
// SubmenuIndexSave,
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We'd want to just delete these

// SubmenuIndexLoad,
};

void passy_scene_auth_menu_auth_method_changed(VariableItem* item) {
Passy* passy = variable_item_get_context(item);
UNUSED(passy); // TODO: use to save selected method
uint8_t index = variable_item_get_current_value_index(item);
// store selected auth method in passy
passy->auth_mehod = index;
variable_item_set_current_value_text(item, passy_auth_method_string(index));
}

void passy_scene_auth_menu_var_list_enter_callback(void* context, uint32_t index) {
Passy* passy = context;
view_dispatcher_send_custom_event(passy->view_dispatcher, index);
}

void passy_scene_auth_menu_on_enter(void* context) {
Passy* passy = context;
VariableItemList* variable_item_list = passy->variable_item_list;

// By entering the Auth menu, we default to Auth: Any
PassyAuthMethod* auth_method = &passy->auth_mehod;
if(*auth_method == PassyAuthMethodNone) {
*auth_method = PassyAuthMethodAny;
}

VariableItem* item;
uint8_t value_index;

const size_t temp_str_size = 15;
char temp_str[temp_str_size];

item = variable_item_list_add(variable_item_list, "Document Nr.", 1, NULL, NULL);
strlcpy(temp_str, passy->passport_number, temp_str_size);
temp_str[temp_str_size - 1] = '\x00';
if(strlen(temp_str) > 8) {
temp_str[8] = '.';
temp_str[9] = '.';
temp_str[10] = '.';
temp_str[11] = '\x00';
}
variable_item_set_current_value_text(item, temp_str);

item = variable_item_list_add(variable_item_list, "Birth Date", 1, NULL, NULL);
variable_item_set_current_value_text(item, passy->date_of_birth);

item = variable_item_list_add(variable_item_list, "Expiry Date", 1, NULL, NULL);
variable_item_set_current_value_text(item, passy->date_of_expiry);

item = variable_item_list_add(
variable_item_list,
"Method",
PASSY_AUTH_METHOD_COUNT,
passy_scene_auth_menu_auth_method_changed,
passy);

value_index = *auth_method;
variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, passy_auth_method_string(value_index));

//TODO: save/load
//variable_item_list_add(variable_item_list, "Save parameters", 1, NULL, NULL);
//variable_item_list_add(variable_item_list, "Load parameters", 1, NULL, NULL);

variable_item_list_set_enter_callback(
variable_item_list, passy_scene_auth_menu_var_list_enter_callback, passy);
view_dispatcher_switch_to_view(passy->view_dispatcher, PassyViewVariableItemList);
}

bool passy_scene_auth_menu_on_event(void* context, SceneManagerEvent event) {
Passy* passy = context;
bool consumed = false;

if(event.type == SceneManagerEventTypeCustom) {
switch(event.event) {
case SubmenuIndexDob:
scene_manager_next_scene(passy->scene_manager, PassySceneDoBInput);
consumed = true;
break;
case SubmenuIndexDoe:
scene_manager_next_scene(passy->scene_manager, PassySceneDoEInput);
consumed = true;
break;
case SubmenuIndexDocNr:
scene_manager_next_scene(passy->scene_manager, PassyScenePassportNumberInput);
consumed = true;
break;
case SubmenuIndexMethod:
consumed = true;
break;
// case SubmenuIndexSave:
// scene_manager_next_scene(nfc->scene_manager, PassySceneAuthMenuSaveName);
// consumed = true;
// break;
// case SubmenuIndexLoad:
// nfc_scene_passport_auth_load(nfc);
// consumed = true;
// break;
}
} else if(event.type == SceneManagerEventTypeBack) {
consumed = scene_manager_previous_scene(passy->scene_manager);
}
return consumed;
}

void passy_scene_auth_menu_on_exit(void* context) {
Passy* passy = context;

// Clear view
variable_item_list_reset(passy->variable_item_list);
}
1 change: 1 addition & 0 deletions scenes/passy_scene_config.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
ADD_SCENE(passy, main_menu, MainMenu)
ADD_SCENE(passy, auth_menu, AuthMenu)
ADD_SCENE(passy, read, Read)
ADD_SCENE(passy, read_error, ReadError)
ADD_SCENE(passy, read_success, ReadSuccess)
Expand Down
2 changes: 1 addition & 1 deletion scenes/passy_scene_dob_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ bool passy_scene_dob_input_on_event(void* context, SceneManagerEvent event) {
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == PassyCustomEventTextInputDone) {
strlcpy(passy->date_of_birth, passy->text_store, strlen(passy->text_store) + 1);
scene_manager_next_scene(passy->scene_manager, PassySceneDoEInput);
scene_manager_previous_scene(passy->scene_manager);
consumed = true;
}
}
Expand Down
2 changes: 1 addition & 1 deletion scenes/passy_scene_doe_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ bool passy_scene_doe_input_on_event(void* context, SceneManagerEvent event) {
if(event.event == PassyCustomEventTextInputDone) {
strlcpy(passy->date_of_expiry, passy->text_store, strlen(passy->text_store) + 1);
passy_save_mrz_info(passy);
scene_manager_next_scene(passy->scene_manager, PassySceneMainMenu);
scene_manager_previous_scene(passy->scene_manager);
consumed = true;
}
}
Expand Down
2 changes: 1 addition & 1 deletion scenes/passy_scene_main_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ bool passy_scene_main_menu_on_event(void* context, SceneManagerEvent event) {
if(event.type == SceneManagerEventTypeCustom) {
scene_manager_set_scene_state(passy->scene_manager, PassySceneMainMenu, event.event);
if(event.event == SubmenuIndexEnterMRZInfo) {
scene_manager_next_scene(passy->scene_manager, PassyScenePassportNumberInput);
scene_manager_next_scene(passy->scene_manager, PassySceneAuthMenu);
consumed = true;
} else if(event.event == SubmenuIndexDeleteMRZInfo) {
scene_manager_next_scene(passy->scene_manager, PassySceneDelete);
Expand Down
2 changes: 1 addition & 1 deletion scenes/passy_scene_passport_number_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ bool passy_scene_passport_number_input_on_event(void* context, SceneManagerEvent
}

strlcpy(passy->passport_number, passy->text_store, strlen(passy->text_store) + 1);
scene_manager_next_scene(passy->scene_manager, PassySceneDoBInput);
scene_manager_previous_scene(passy->scene_manager);
consumed = true;
}
}
Expand Down