mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-02-04 11:51:50 +00:00
fix(legacy): do not query presence of newly-required protobuf fields
This commit is contained in:
parent
14037d0c31
commit
0964517fe7
@ -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);
|
||||
|
@ -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 {
|
||||
|
@ -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));
|
||||
|
@ -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,
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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
|
||||
|
@ -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() {
|
||||
|
Loading…
Reference in New Issue
Block a user