Added derivation_to_scalar

pull/10/head
Guten Ye 6 years ago
parent 31f5f4d461
commit 10ebb31d49

@ -761,3 +761,23 @@ string serial_bridge::derive_subaddress_public_key(const string &args_string)
//
return ret_json_from_root(root);
}
string serial_bridge::derivation_to_scalar(const string &args_string)
{
boost::property_tree::ptree json_root;
if (!parsed_json_root(args_string, json_root)) {
// it will already have thrown an exception
return error_ret_json_from_message("Invalid JSON");
}
crypto::key_derivation derivation;
if (!epee::string_tools::hex_to_pod(json_root.get<string>("derivation"), derivation)) {
return error_ret_json_from_message("Invalid 'derivation'");
}
std::size_t output_index = stoul(json_root.get<string>("output_index"));
crypto::ec_scalar scalar = AUTO_VAL_INIT(scalar);
crypto::derivation_to_scalar(derivation, output_index, scalar);
boost::property_tree::ptree root;
root.put(ret_json_key__generic_retVal(), epee::string_tools::pod_to_hex(scalar));
//
return ret_json_from_root(root);
}

@ -69,6 +69,7 @@ namespace serial_bridge
string generate_key_derivation(const string &args_string);
string derive_public_key(const string &args_string);
string derive_subaddress_public_key(const string &args_string);
string derivation_to_scalar(const string &args_string);
string decodeRct(const string &args_string);
string decodeRctSimple(const string &args_string);
}

@ -1091,6 +1091,30 @@ BOOST_AUTO_TEST_CASE(bridge__mainnet_pubKeyDerivations)
}
}
//
BOOST_AUTO_TEST_CASE(bridged__derivation_to_scalar)
{
using namespace serial_bridge;
//
boost::property_tree::ptree root;
root.put("derivation", "7a4c13a037d4bd2a7dd99a8c24669e9e04ca4e8a90e5b6703e88e87ad51c1849");
root.put("output_index", "1");
//
auto ret_string = serial_bridge::derivation_to_scalar(args_string_from_root(root));
stringstream ret_stream;
ret_stream << ret_string;
boost::property_tree::ptree ret_tree;
boost::property_tree::read_json(ret_stream, ret_tree);
optional<string> err_string = ret_tree.get_optional<string>(ret_json_key__any__err_msg());
if (err_string != none) {
BOOST_REQUIRE_MESSAGE(false, *err_string);
}
optional<string> str = ret_tree.get_optional<string>(ret_json_key__generic_retVal());
BOOST_REQUIRE(str != none);
BOOST_REQUIRE((*str).size() > 0);
BOOST_REQUIRE(*str == "767a2b9b814b78d55e27ab7fc9bae03253a810c820e7abb4cabadde44b599d04");
cout << "bridged__derivation_to_scalar: " << *str << endl;
}
//
BOOST_AUTO_TEST_CASE(bridged__decodeRct)
{
using namespace serial_bridge;

Loading…
Cancel
Save