|
|
@ -17,6 +17,21 @@
|
|
|
|
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static bool fsm_nemCheckPath(uint32_t address_n_count,
|
|
|
|
|
|
|
|
const uint32_t *address_n, uint8_t network) {
|
|
|
|
|
|
|
|
if (nem_path_check(address_n_count, address_n, network, true)) {
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (config_getSafetyCheckLevel() == SafetyCheckLevel_Strict &&
|
|
|
|
|
|
|
|
!nem_path_check(address_n_count, address_n, network, false)) {
|
|
|
|
|
|
|
|
fsm_sendFailure(FailureType_Failure_DataError, _("Forbidden key path"));
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return fsm_layoutPathWarning();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void fsm_msgNEMGetAddress(NEMGetAddress *msg) {
|
|
|
|
void fsm_msgNEMGetAddress(NEMGetAddress *msg) {
|
|
|
|
if (!msg->has_network) {
|
|
|
|
if (!msg->has_network) {
|
|
|
|
msg->network = NEM_NETWORK_MAINNET;
|
|
|
|
msg->network = NEM_NETWORK_MAINNET;
|
|
|
@ -31,11 +46,19 @@ void fsm_msgNEMGetAddress(NEMGetAddress *msg) {
|
|
|
|
|
|
|
|
|
|
|
|
RESP_INIT(NEMAddress);
|
|
|
|
RESP_INIT(NEMAddress);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!fsm_nemCheckPath(msg->address_n_count, msg->address_n, msg->network)) {
|
|
|
|
|
|
|
|
layoutHome();
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
HDNode *node = fsm_getDerivedNode(ED25519_KECCAK_NAME, msg->address_n,
|
|
|
|
HDNode *node = fsm_getDerivedNode(ED25519_KECCAK_NAME, msg->address_n,
|
|
|
|
msg->address_n_count, NULL);
|
|
|
|
msg->address_n_count, NULL);
|
|
|
|
if (!node) return;
|
|
|
|
if (!node) return;
|
|
|
|
|
|
|
|
|
|
|
|
if (!hdnode_get_nem_address(node, msg->network, resp->address)) return;
|
|
|
|
if (!hdnode_get_nem_address(node, msg->network, resp->address)) {
|
|
|
|
|
|
|
|
layoutHome();
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (msg->has_show_display && msg->show_display) {
|
|
|
|
if (msg->has_show_display && msg->show_display) {
|
|
|
|
char desc[16];
|
|
|
|
char desc[16];
|
|
|
@ -116,6 +139,12 @@ void fsm_msgNEMSignTx(NEMSignTx *msg) {
|
|
|
|
|
|
|
|
|
|
|
|
RESP_INIT(NEMSignedTx);
|
|
|
|
RESP_INIT(NEMSignedTx);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!fsm_nemCheckPath(msg->transaction.address_n_count,
|
|
|
|
|
|
|
|
msg->transaction.address_n, msg->transaction.network)) {
|
|
|
|
|
|
|
|
layoutHome();
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
HDNode *node =
|
|
|
|
HDNode *node =
|
|
|
|
fsm_getDerivedNode(ED25519_KECCAK_NAME, msg->transaction.address_n,
|
|
|
|
fsm_getDerivedNode(ED25519_KECCAK_NAME, msg->transaction.address_n,
|
|
|
|
msg->transaction.address_n_count, NULL);
|
|
|
|
msg->transaction.address_n_count, NULL);
|
|
|
@ -317,6 +346,11 @@ void fsm_msgNEMDecryptMessage(NEMDecryptMessage *msg) {
|
|
|
|
|
|
|
|
|
|
|
|
CHECK_PIN
|
|
|
|
CHECK_PIN
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!fsm_nemCheckPath(msg->address_n_count, msg->address_n, msg->network)) {
|
|
|
|
|
|
|
|
layoutHome();
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const HDNode *node = fsm_getDerivedNode(ED25519_KECCAK_NAME, msg->address_n,
|
|
|
|
const HDNode *node = fsm_getDerivedNode(ED25519_KECCAK_NAME, msg->address_n,
|
|
|
|
msg->address_n_count, NULL);
|
|
|
|
msg->address_n_count, NULL);
|
|
|
|
if (!node) return;
|
|
|
|
if (!node) return;
|
|
|
|