diff --git a/dap-sdk b/dap-sdk index a620492c6b5908345c55167618ab2802431cfdb9..c7b6e75b903529d767159b7fecb7a7b32a7d272c 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit a620492c6b5908345c55167618ab2802431cfdb9 +Subproject commit c7b6e75b903529d767159b7fecb7a7b32a7d272c diff --git a/modules/chain/tests/dap_chain_ledger_tests.c b/modules/chain/tests/dap_chain_ledger_tests.c index da64d64ce39b8e4ba83c2f4351374a2481b981f4..609408f87ae3650b825b0a9716aa83d9d30b1944 100644 --- a/modules/chain/tests/dap_chain_ledger_tests.c +++ b/modules/chain/tests/dap_chain_ledger_tests.c @@ -369,7 +369,7 @@ void dap_chain_ledger_test_run(void){ dap_print_module_name("dap_chain_ledger"); uint16_t l_flags = 0; l_flags |= DAP_CHAIN_LEDGER_CHECK_TOKEN_EMISSION; - dap_ledger_t *l_ledger = dap_chain_ledger_create(l_flags, "Snet", s_token_ticker); + dap_ledger_t *l_ledger = dap_chain_ledger_create(l_flags, "Snet", s_token_ticker, NULL); char *l_seed_ph = "H58i9GJKbn91238937^#$t6cjdf"; size_t l_seed_ph_size = strlen(l_seed_ph); dap_cert_t *l_cert = dap_cert_generate_mem_with_seed("testCert", DAP_ENC_KEY_TYPE_SIG_PICNIC, l_seed_ph, l_seed_ph_size); diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index cb47e1ee7d91f14b0ce2dcc39a942a4e30c5e7e6..a1b363302d85d4679845bef3138f78718733b8a7 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -1993,7 +1993,7 @@ char l_buf[1024]; case CMD_WALLET_NEW: { dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-password", &l_pass_str); dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-sign", &l_sign_type_str); - dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-restore", &l_restore_str); + int l_restore_opt = dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-restore", &l_restore_str); // rewrite existing wallet int l_is_force = dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-force", NULL); @@ -2038,9 +2038,23 @@ char l_buf[1024]; if (l_sign_type.type == SIG_TYPE_TESLA) return dap_cli_server_cmd_set_reply_text(a_str_reply, "Tesla algorithm is no longer supported, please, use another variant"), -1; + uint8_t *l_seed = NULL; + size_t l_seed_size = 0, l_restore_str_size = dap_strlen(l_restore_str); + + if(l_restore_opt) { + if (l_restore_str_size > 3 && !dap_strncmp(l_restore_str, "0x", 2) && !dap_is_hex_string(l_restore_str + 2, l_restore_str_size - 2)) { + l_seed_size = (l_restore_str_size - 2) / 2; + l_seed = DAP_NEW_SIZE(uint8_t, l_seed_size); + dap_hex2bin(l_seed, l_restore_str + 2, l_restore_str_size - 2); + } else { + dap_cli_server_cmd_set_reply_text(a_str_reply, "Restored hash is invalid or too short, wallet is not created. Please use -restore 0x<hex value>"); + return -1; + } + } + // Creates new wallet dap_chain_wallet_t *l_wallet = dap_chain_wallet_create_with_seed(l_wallet_name, c_wallets_path, l_sign_type, - l_restore_str, dap_strlen(l_restore_str), l_pass_str); + l_seed, l_seed_size, l_pass_str); if (!l_wallet) return dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet is not created because of internal error"), -1;