diff --git a/legacy/firmware/ethereum.c b/legacy/firmware/ethereum.c index 551c656e67..edb51f299d 100644 --- a/legacy/firmware/ethereum.c +++ b/legacy/firmware/ethereum.c @@ -679,7 +679,6 @@ void ethereum_message_sign(const EthereumSignMessage *msg, const HDNode *node, return; } - resp->has_address = true; resp->address[0] = '0'; resp->address[1] = 'x'; ethereum_address_checksum(pubkeyhash, resp->address + 2, false, 0); @@ -695,7 +694,6 @@ void ethereum_message_sign(const EthereumSignMessage *msg, const HDNode *node, return; } - resp->has_signature = true; resp->signature.bytes[64] = 27 + v; resp->signature.size = 65; msg_write(MessageType_MessageType_EthereumMessageSignature, resp); diff --git a/legacy/firmware/fsm_msg_coin.h b/legacy/firmware/fsm_msg_coin.h index 7f77015a5b..477f02ea0f 100644 --- a/legacy/firmware/fsm_msg_coin.h +++ b/legacy/firmware/fsm_msg_coin.h @@ -47,7 +47,6 @@ void fsm_msgGetPublicKey(const GetPublicKey *msg) { if (!node) return; hdnode_fill_public_key(node); - resp->has_node = true; resp->node.depth = node->depth; resp->node.fingerprint = fingerprint; resp->node.child_num = node->child_num; @@ -61,7 +60,6 @@ void fsm_msgGetPublicKey(const GetPublicKey *msg) { resp->node.public_key.bytes[0] = 0; } - resp->has_xpub = true; if (coin->xpub_magic && (script_type == InputScriptType_SPENDADDRESS || script_type == InputScriptType_SPENDMULTISIG)) { hdnode_serialize_public(node, fingerprint, coin->xpub_magic, resp->xpub, @@ -252,7 +250,6 @@ void fsm_msgSignMessage(const SignMessage *msg) { layoutProgressSwipe(_("Signing"), 0); if (cryptoMessageSign(coin, node, msg->script_type, msg->message.bytes, msg->message.size, resp->signature.bytes) == 0) { - resp->has_address = true; hdnode_fill_public_key(node); if (!compute_address(coin, msg->script_type, node, false, NULL, resp->address)) { @@ -261,7 +258,6 @@ void fsm_msgSignMessage(const SignMessage *msg) { layoutHome(); return; } - resp->has_signature = true; resp->signature.size = 65; msg_write(MessageType_MessageType_MessageSignature, resp); } else { diff --git a/legacy/firmware/fsm_msg_common.h b/legacy/firmware/fsm_msg_common.h index 29c3b55951..42249077b6 100644 --- a/legacy/firmware/fsm_msg_common.h +++ b/legacy/firmware/fsm_msg_common.h @@ -20,11 +20,8 @@ bool get_features(Features *resp) { resp->has_vendor = true; strlcpy(resp->vendor, "trezor.io", sizeof(resp->vendor)); - resp->has_major_version = true; resp->major_version = VERSION_MAJOR; - resp->has_minor_version = true; resp->minor_version = VERSION_MINOR; - resp->has_patch_version = true; resp->patch_version = VERSION_PATCH; resp->has_device_id = true; strlcpy(resp->device_id, config_uuid_str, sizeof(resp->device_id)); diff --git a/legacy/firmware/fsm_msg_crypto.h b/legacy/firmware/fsm_msg_crypto.h index 4ce787e36b..acea2ca96c 100644 --- a/legacy/firmware/fsm_msg_crypto.h +++ b/legacy/firmware/fsm_msg_crypto.h @@ -20,8 +20,6 @@ void fsm_msgCipherKeyValue(const CipherKeyValue *msg) { CHECK_INITIALIZED - CHECK_PARAM(msg->has_key, _("No key provided")); - CHECK_PARAM(msg->has_value, _("No value provided")); CHECK_PARAM(msg->value.size % 16 == 0, _("Value length must be a multiple of 16")); @@ -67,7 +65,6 @@ void fsm_msgCipherKeyValue(const CipherKeyValue *msg) { aes_cbc_decrypt(msg->value.bytes, resp->value.bytes, msg->value.size, data + 32, &ctx); } - resp->has_value = true; resp->value.size = msg->value.size; msg_write(MessageType_MessageType_CipheredKeyValue, resp); layoutHome(); @@ -89,8 +86,7 @@ void fsm_msgSignIdentity(const SignIdentity *msg) { CHECK_PIN uint8_t hash[32]; - if (!msg->has_identity || - cryptoIdentityFingerprint(&(msg->identity), hash) == 0) { + if (cryptoIdentityFingerprint(&(msg->identity), hash) == 0) { fsm_sendFailure(FailureType_Failure_DataError, _("Invalid identity")); layoutHome(); return; @@ -152,14 +148,12 @@ void fsm_msgSignIdentity(const SignIdentity *msg) { node, 0x00, resp->address, sizeof(resp->address)); // hardcoded Bitcoin address type } - resp->has_public_key = true; resp->public_key.size = 33; memcpy(resp->public_key.bytes, node->public_key, 33); if (node->public_key[0] == 1) { /* ed25519 public key */ resp->public_key.bytes[0] = 0; } - resp->has_signature = true; resp->signature.size = 65; msg_write(MessageType_MessageType_SignedIdentity, resp); } else { @@ -184,8 +178,7 @@ void fsm_msgGetECDHSessionKey(const GetECDHSessionKey *msg) { CHECK_PIN uint8_t hash[32]; - if (!msg->has_identity || - cryptoIdentityFingerprint(&(msg->identity), hash) == 0) { + if (cryptoIdentityFingerprint(&(msg->identity), hash) == 0) { fsm_sendFailure(FailureType_Failure_DataError, _("Invalid identity")); layoutHome(); return; @@ -213,7 +206,6 @@ void fsm_msgGetECDHSessionKey(const GetECDHSessionKey *msg) { int result_size = 0; if (hdnode_get_shared_key(node, msg->peer_public_key.bytes, resp->session_key.bytes, &result_size) == 0) { - resp->has_session_key = true; resp->session_key.size = result_size; msg_write(MessageType_MessageType_ECDHSessionKey, resp); } else { @@ -293,7 +285,6 @@ void fsm_msgCosiSign(const CosiSign *msg) { init_rfc6979(node->private_key, nonce, &rng); generate_rfc6979(nonce, &rng); - resp->has_signature = true; resp->signature.size = 32; ed25519_cosi_sign(msg->data.bytes, msg->data.size, node->private_key, nonce, diff --git a/legacy/firmware/fsm_msg_ethereum.h b/legacy/firmware/fsm_msg_ethereum.h index 821ccc1185..aed40d45fd 100644 --- a/legacy/firmware/fsm_msg_ethereum.h +++ b/legacy/firmware/fsm_msg_ethereum.h @@ -44,7 +44,6 @@ void fsm_msgEthereumGetPublicKey(const EthereumGetPublicKey *msg) { } } - resp->has_node = true; resp->node.depth = node->depth; resp->node.fingerprint = fingerprint; resp->node.child_num = node->child_num; @@ -54,7 +53,6 @@ void fsm_msgEthereumGetPublicKey(const EthereumGetPublicKey *msg) { resp->node.public_key.size = 33; memcpy(resp->node.public_key.bytes, node->public_key, 33); - resp->has_xpub = true; hdnode_serialize_public(node, fingerprint, coin->xpub_magic, resp->xpub, sizeof(resp->xpub)); diff --git a/legacy/firmware/fsm_msg_lisk.h b/legacy/firmware/fsm_msg_lisk.h index da8a5d9046..40bfe488b8 100644 --- a/legacy/firmware/fsm_msg_lisk.h +++ b/legacy/firmware/fsm_msg_lisk.h @@ -28,7 +28,6 @@ void fsm_msgLiskGetAddress(const LiskGetAddress *msg) { msg->address_n_count, NULL); if (!node) return; - resp->has_address = true; hdnode_fill_public_key(node); lisk_get_address_from_public_key(&node->public_key[1], resp->address); @@ -58,7 +57,6 @@ void fsm_msgLiskGetPublicKey(const LiskGetPublicKey *msg) { hdnode_fill_public_key(node); - resp->has_public_key = true; resp->public_key.size = 32; if (msg->has_show_display && msg->show_display) { diff --git a/legacy/firmware/fsm_msg_nem.h b/legacy/firmware/fsm_msg_nem.h index 6b14d03ca2..4466c8b13c 100644 --- a/legacy/firmware/fsm_msg_nem.h +++ b/legacy/firmware/fsm_msg_nem.h @@ -280,11 +280,9 @@ void fsm_msgNEMSignTx(NEMSignTx *msg) { } } - resp->has_data = true; resp->data.size = nem_transaction_end(&context, node->private_key, resp->signature.bytes); - resp->has_signature = true; resp->signature.size = sizeof(ed25519_signature); msg_write(MessageType_MessageType_NEMSignedTx, resp); @@ -336,7 +334,6 @@ void fsm_msgNEMDecryptMessage(NEMDecryptMessage *msg) { return; } - resp->has_payload = true; resp->payload.size = NEM_DECRYPTED_SIZE(resp->payload.bytes, size); layoutNEMTransferPayload(resp->payload.bytes, resp->payload.size, true); diff --git a/legacy/firmware/fsm_msg_stellar.h b/legacy/firmware/fsm_msg_stellar.h index 7c2a3a38c8..06582de135 100644 --- a/legacy/firmware/fsm_msg_stellar.h +++ b/legacy/firmware/fsm_msg_stellar.h @@ -43,7 +43,6 @@ void fsm_msgStellarGetAddress(const StellarGetAddress *msg) { } } - resp->has_address = true; stellar_publicAddressAsStr(node->public_key + 1, resp->address, sizeof(resp->address)); diff --git a/legacy/firmware/lisk.c b/legacy/firmware/lisk.c index 0b3d18a39e..8e1f6ba81a 100644 --- a/legacy/firmware/lisk.c +++ b/legacy/firmware/lisk.c @@ -69,9 +69,7 @@ void lisk_sign_message(const HDNode *node, const LiskSignMessage *msg, memcpy(resp->signature.bytes, signature, sizeof(signature)); memcpy(resp->public_key.bytes, &node->public_key[1], 32); - resp->has_signature = true; resp->signature.size = 64; - resp->has_public_key = true; resp->public_key.size = 32; } @@ -173,97 +171,94 @@ static void lisk_format_value(uint64_t value, char *formated_value) { void lisk_sign_tx(const HDNode *node, LiskSignTx *msg, LiskSignedTx *resp) { lisk_update_raw_tx(node, msg); - if (msg->has_transaction) { - SHA256_CTX ctx = {0}; - sha256_Init(&ctx); + SHA256_CTX ctx = {0}; + sha256_Init(&ctx); - switch (msg->transaction.type) { - case LiskTransactionType_Transfer: - layoutRequireConfirmTx(msg->transaction.recipient_id, - msg->transaction.amount); - break; - case LiskTransactionType_RegisterDelegate: - layoutRequireConfirmDelegateRegistration(&msg->transaction.asset); - break; - case LiskTransactionType_CastVotes: - layoutRequireConfirmCastVotes(&msg->transaction.asset); - break; - case LiskTransactionType_RegisterSecondPassphrase: - layoutLiskPublicKey(msg->transaction.asset.signature.public_key.bytes); - break; - case LiskTransactionType_RegisterMultisignatureAccount: - layoutRequireConfirmMultisig(&msg->transaction.asset); - break; - default: - fsm_sendFailure(FailureType_Failure_DataError, - _("Invalid transaction type")); - layoutHome(); - break; - } - if (!protectButton((msg->transaction.type == - LiskTransactionType_RegisterSecondPassphrase - ? ButtonRequestType_ButtonRequest_PublicKey - : ButtonRequestType_ButtonRequest_SignTx), - false)) { - fsm_sendFailure(FailureType_Failure_ActionCancelled, "Signing cancelled"); + switch (msg->transaction.type) { + case LiskTransactionType_Transfer: + layoutRequireConfirmTx(msg->transaction.recipient_id, + msg->transaction.amount); + break; + case LiskTransactionType_RegisterDelegate: + layoutRequireConfirmDelegateRegistration(&msg->transaction.asset); + break; + case LiskTransactionType_CastVotes: + layoutRequireConfirmCastVotes(&msg->transaction.asset); + break; + case LiskTransactionType_RegisterSecondPassphrase: + layoutLiskPublicKey(msg->transaction.asset.signature.public_key.bytes); + break; + case LiskTransactionType_RegisterMultisignatureAccount: + layoutRequireConfirmMultisig(&msg->transaction.asset); + break; + default: + fsm_sendFailure(FailureType_Failure_DataError, + _("Invalid transaction type")); layoutHome(); - return; - } - - layoutRequireConfirmFee(msg->transaction.fee, msg->transaction.amount); - if (!protectButton(ButtonRequestType_ButtonRequest_ConfirmOutput, false)) { - fsm_sendFailure(FailureType_Failure_ActionCancelled, "Signing cancelled"); - layoutHome(); - return; - } - layoutProgressSwipe(_("Signing transaction"), 0); - - sha256_Update(&ctx, (const uint8_t *)&msg->transaction.type, 1); - - lisk_hashupdate_uint32(&ctx, msg->transaction.timestamp); - - sha256_Update(&ctx, msg->transaction.sender_public_key.bytes, 32); - - if (msg->transaction.has_requester_public_key) { - sha256_Update(&ctx, msg->transaction.requester_public_key.bytes, - msg->transaction.requester_public_key.size); - } - - uint64_t recipient_id = 0; - if (msg->transaction.has_recipient_id && - msg->transaction.recipient_id[0] != 0) { - // parse integer from lisk address ("123L" -> 123) - for (size_t i = 0; i < strlen(msg->transaction.recipient_id) - 1; i++) { - if (msg->transaction.recipient_id[i] < '0' || - msg->transaction.recipient_id[i] > '9') { - fsm_sendFailure(FailureType_Failure_DataError, - _("Invalid recipient_id")); - layoutHome(); - return; - } - recipient_id *= 10; - recipient_id += (msg->transaction.recipient_id[i] - '0'); - } - } - lisk_hashupdate_uint64_be(&ctx, recipient_id); - lisk_hashupdate_uint64_le(&ctx, msg->transaction.amount); - - lisk_hashupdate_asset(&ctx, msg->transaction.type, &msg->transaction.asset); - - // if signature exist calculate second signature - if (msg->transaction.has_signature) { - sha256_Update(&ctx, msg->transaction.signature.bytes, - msg->transaction.signature.size); - } - - uint8_t hash[32] = {0}; - sha256_Final(&ctx, hash); - ed25519_sign(hash, 32, node->private_key, &node->public_key[1], - resp->signature.bytes); - - resp->has_signature = true; - resp->signature.size = 64; + break; } + if (!protectButton( + (msg->transaction.type == LiskTransactionType_RegisterSecondPassphrase + ? ButtonRequestType_ButtonRequest_PublicKey + : ButtonRequestType_ButtonRequest_SignTx), + false)) { + fsm_sendFailure(FailureType_Failure_ActionCancelled, "Signing cancelled"); + layoutHome(); + return; + } + + layoutRequireConfirmFee(msg->transaction.fee, msg->transaction.amount); + if (!protectButton(ButtonRequestType_ButtonRequest_ConfirmOutput, false)) { + fsm_sendFailure(FailureType_Failure_ActionCancelled, "Signing cancelled"); + layoutHome(); + return; + } + layoutProgressSwipe(_("Signing transaction"), 0); + + sha256_Update(&ctx, (const uint8_t *)&msg->transaction.type, 1); + + lisk_hashupdate_uint32(&ctx, msg->transaction.timestamp); + + sha256_Update(&ctx, msg->transaction.sender_public_key.bytes, 32); + + if (msg->transaction.has_requester_public_key) { + sha256_Update(&ctx, msg->transaction.requester_public_key.bytes, + msg->transaction.requester_public_key.size); + } + + uint64_t recipient_id = 0; + if (msg->transaction.has_recipient_id && + msg->transaction.recipient_id[0] != 0) { + // parse integer from lisk address ("123L" -> 123) + for (size_t i = 0; i < strlen(msg->transaction.recipient_id) - 1; i++) { + if (msg->transaction.recipient_id[i] < '0' || + msg->transaction.recipient_id[i] > '9') { + fsm_sendFailure(FailureType_Failure_DataError, + _("Invalid recipient_id")); + layoutHome(); + return; + } + recipient_id *= 10; + recipient_id += (msg->transaction.recipient_id[i] - '0'); + } + } + lisk_hashupdate_uint64_be(&ctx, recipient_id); + lisk_hashupdate_uint64_le(&ctx, msg->transaction.amount); + + lisk_hashupdate_asset(&ctx, msg->transaction.type, &msg->transaction.asset); + + // if signature exist calculate second signature + if (msg->transaction.has_signature) { + sha256_Update(&ctx, msg->transaction.signature.bytes, + msg->transaction.signature.size); + } + + uint8_t hash[32] = {0}; + sha256_Final(&ctx, hash); + ed25519_sign(hash, 32, node->private_key, &node->public_key[1], + resp->signature.bytes); + + resp->signature.size = 64; } // Layouts diff --git a/legacy/firmware/stellar.c b/legacy/firmware/stellar.c index 3cfa005993..ccc7bd5695 100644 --- a/legacy/firmware/stellar.c +++ b/legacy/firmware/stellar.c @@ -1150,7 +1150,6 @@ void stellar_fillSignedTx(StellarSignedTx *resp) { // signing memcpy(resp->public_key.bytes, stellar_activeTx.signing_pubkey, 32); resp->public_key.size = 32; - resp->has_public_key = true; // Add the signature (note that this does not include the 4-byte hint since it // can be calculated from the public key) @@ -1159,7 +1158,6 @@ void stellar_fillSignedTx(StellarSignedTx *resp) { stellar_getSignatureForActiveTx(signature); memcpy(resp->signature.bytes, signature, sizeof(signature)); resp->signature.size = sizeof(signature); - resp->has_signature = true; } bool stellar_allOperationsConfirmed() {