1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-26 17:38:39 +00:00

use imported flag to indicate that storage was imported from an external source

This commit is contained in:
Pavol Rusnak 2014-05-26 00:58:17 +02:00
parent 555b56181e
commit 2066f9e95c
9 changed files with 28 additions and 16 deletions

View File

@ -109,7 +109,7 @@ void fsm_msgInitialize(Initialize *msg)
resp->has_patch_version = true; resp->patch_version = VERSION_PATCH;
resp->has_device_id = true; strlcpy(resp->device_id, storage_uuid_str, sizeof(resp->device_id));
resp->has_pin_protection = true; resp->pin_protection = storage.has_pin;
resp->has_passphrase_protection = true; resp->passphrase_protection = storage.passphrase_protection;
resp->has_passphrase_protection = true; resp->passphrase_protection = storage.has_passphrase_protection && storage.passphrase_protection;
#ifdef SCM_REVISION
resp->has_revision = true; memcpy(resp->revision.bytes, SCM_REVISION, sizeof(resp->revision)); resp->revision.size = SCM_REVISION_LEN;
#endif
@ -125,6 +125,7 @@ void fsm_msgInitialize(Initialize *msg)
resp->coins_count = COINS_COUNT;
memcpy(resp->coins, coins, COINS_COUNT * sizeof(CoinType));
resp->has_initialized = true; resp->initialized = storage_isInitialized();
resp->has_imported = true; resp->imported = storage.has_imported && storage.imported;
msg_write(MessageType_MessageType_Features, resp);
}

View File

@ -1,5 +1,5 @@
/* Automatically generated nanopb constant definitions */
/* Generated by nanopb-0.2.7 */
/* Generated by nanopb-0.2.8 */
#include "messages.pb.h"
@ -18,7 +18,7 @@ const pb_field_t Initialize_fields[1] = {
PB_LAST_FIELD
};
const pb_field_t Features_fields[15] = {
const pb_field_t Features_fields[16] = {
PB_FIELD2( 1, STRING , OPTIONAL, STATIC , FIRST, Features, vendor, vendor, 0),
PB_FIELD2( 2, UINT32 , OPTIONAL, STATIC , OTHER, Features, major_version, vendor, 0),
PB_FIELD2( 3, UINT32 , OPTIONAL, STATIC , OTHER, Features, minor_version, major_version, 0),
@ -33,6 +33,7 @@ const pb_field_t Features_fields[15] = {
PB_FIELD2( 12, BOOL , OPTIONAL, STATIC , OTHER, Features, initialized, coins, 0),
PB_FIELD2( 13, BYTES , OPTIONAL, STATIC , OTHER, Features, revision, initialized, 0),
PB_FIELD2( 14, BYTES , OPTIONAL, STATIC , OTHER, Features, bootloader_hash, revision, 0),
PB_FIELD2( 15, BOOL , OPTIONAL, STATIC , OTHER, Features, imported, bootloader_hash, 0),
PB_LAST_FIELD
};

View File

@ -1,5 +1,5 @@
/* Automatically generated nanopb header */
/* Generated by nanopb-0.2.7 */
/* Generated by nanopb-0.2.8 */
#ifndef _PB_MESSAGES_PB_H_
#define _PB_MESSAGES_PB_H_
@ -240,6 +240,8 @@ typedef struct _Features {
Features_revision_t revision;
bool has_bootloader_hash;
Features_bootloader_hash_t bootloader_hash;
bool has_imported;
bool imported;
} Features;
typedef struct {
@ -485,6 +487,7 @@ extern const char SimpleSignTx_coin_name_default[17];
#define Features_initialized_tag 12
#define Features_revision_tag 13
#define Features_bootloader_hash_tag 14
#define Features_imported_tag 15
#define FirmwareUpload_payload_tag 1
#define GetAddress_address_n_tag 1
#define GetAddress_coin_name_tag 2
@ -542,7 +545,7 @@ extern const char SimpleSignTx_coin_name_default[17];
/* Struct field encoding specification for nanopb */
extern const pb_field_t Initialize_fields[1];
extern const pb_field_t Features_fields[15];
extern const pb_field_t Features_fields[16];
extern const pb_field_t ApplySettings_fields[3];
extern const pb_field_t ChangePin_fields[2];
extern const pb_field_t Ping_fields[5];
@ -588,7 +591,7 @@ extern const pb_field_t DebugLinkLog_fields[4];
/* Maximum encoded size of messages (where known) */
#define Initialize_size 0
#define Features_size (222 + 4*CoinType_size)
#define Features_size (224 + 4*CoinType_size)
#define ApplySettings_size 54
#define ChangePin_size 2
#define Ping_size 265

View File

@ -1,11 +1,11 @@
/* Automatically generated nanopb constant definitions */
/* Generated by nanopb-0.2.7 */
/* Generated by nanopb-0.2.8 */
#include "storage.pb.h"
const pb_field_t Storage_fields[9] = {
const pb_field_t Storage_fields[10] = {
PB_FIELD2( 1, UINT32 , REQUIRED, STATIC , FIRST, Storage, version, version, 0),
PB_FIELD2( 2, MESSAGE , OPTIONAL, STATIC , OTHER, Storage, node, version, &HDNodeType_fields),
PB_FIELD2( 3, STRING , OPTIONAL, STATIC , OTHER, Storage, mnemonic, node, 0),
@ -14,6 +14,7 @@ const pb_field_t Storage_fields[9] = {
PB_FIELD2( 6, STRING , OPTIONAL, STATIC , OTHER, Storage, pin, pin_failed_attempts, 0),
PB_FIELD2( 7, STRING , OPTIONAL, STATIC , OTHER, Storage, language, pin, 0),
PB_FIELD2( 8, STRING , OPTIONAL, STATIC , OTHER, Storage, label, language, 0),
PB_FIELD2( 9, BOOL , OPTIONAL, STATIC , OTHER, Storage, imported, label, 0),
PB_LAST_FIELD
};

View File

@ -1,5 +1,5 @@
/* Automatically generated nanopb header */
/* Generated by nanopb-0.2.7 */
/* Generated by nanopb-0.2.8 */
#ifndef _PB_STORAGE_PB_H_
#define _PB_STORAGE_PB_H_
@ -28,6 +28,8 @@ typedef struct _Storage {
char language[17];
bool has_label;
char label[33];
bool has_imported;
bool imported;
} Storage;
/* Default values for struct fields */
@ -41,12 +43,13 @@ typedef struct _Storage {
#define Storage_pin_tag 6
#define Storage_language_tag 7
#define Storage_label_tag 8
#define Storage_imported_tag 9
/* Struct field encoding specification for nanopb */
extern const pb_field_t Storage_fields[9];
extern const pb_field_t Storage_fields[10];
/* Maximum encoded size of messages (where known) */
#define Storage_size (330 + HDNodeType_size)
#define Storage_size (332 + HDNodeType_size)
#ifdef __cplusplus
} /* extern "C" */

View File

@ -1,5 +1,5 @@
/* Automatically generated nanopb constant definitions */
/* Generated by nanopb-0.2.7 */
/* Generated by nanopb-0.2.8 */
#include "types.pb.h"

View File

@ -1,5 +1,5 @@
/* Automatically generated nanopb header */
/* Generated by nanopb-0.2.7 */
/* Generated by nanopb-0.2.8 */
#ifndef _PB_TYPES_PB_H_
#define _PB_TYPES_PB_H_

View File

@ -141,6 +141,9 @@ void storage_loadDevice(LoadDevice *msg)
{
storage_reset();
storage.has_imported = true;
storage.imported = true;
if (msg->has_pin > 0) {
storage_setPin(msg->pin);
}
@ -212,7 +215,7 @@ bool storage_getRootNode(HDNode *node)
return false;
}
hdnode_from_xprv(storage.node.depth, storage.node.fingerprint, storage.node.child_num, storage.node.chain_code.bytes, storage.node.private_key.bytes, &sessionRootNode);
if (storage.has_passphrase_protection > 0) {
if (storage.has_passphrase_protection && storage.passphrase_protection) {
// decrypt hd node
aes_ctx ctx;
aes_enc_key((const uint8_t *)sessionPassphrase, strlen(sessionPassphrase), &ctx);

@ -1 +1 @@
Subproject commit e4f9dcd7c966c136bd33ccc58321db8d8b83d09b
Subproject commit 1865a0428d1803416174f31a1d6b53b6632384a9