2 #include "ypc/common/crypto_prefix.h"
3 #include "ypc/core_t/analyzer/interface/allowance_interface.h"
4 #include "ypc/core_t/analyzer/interface/do_parse_interface.h"
5 #include "ypc/core_t/analyzer/interface/forward_interface.h"
6 #include "ypc/core_t/analyzer/interface/keymgr_interface.h"
7 #include "ypc/core_t/analyzer/internal/is_param_encrypted.h"
8 #include "ypc/core_t/analyzer/internal/keymgr_session.h"
9 #include "ypc/core_t/analyzer/var/encrypted_param_var.h"
10 #include "ypc/core_t/analyzer/var/parser_var.h"
11 #include "ypc/core_t/analyzer/var/request_key_var.h"
12 #include "ypc/core_t/analyzer/var/result_var.h"
13 #include "ypc/corecommon/allowance.h"
14 #include "ypc/stbox/ebyte.h"
15 #include "ypc/stbox/stx_status.h"
19 typedef nt<stbox::bytes>
ntt;
21 template <
typename Crypto,
typename DataSession,
typename ParserT,
22 typename Result,
typename ModelT,
23 template <
typename>
class DataAllowancePolicy,
24 template <
typename>
class ModelAllowancePolicy,
25 bool input_encrypted = is_param_encrypted<Result>::value>
28 template <
typename Crypto,
typename DataSession,
typename ParserT,
29 typename Result,
typename ModelT,
30 template <
typename>
class DataAllowancePolicy,
31 template <
typename>
class ModelAllowancePolicy>
33 DataAllowancePolicy, ModelAllowancePolicy, true>
42 ModelAllowancePolicy>,
49 DataAllowancePolicy, ModelAllowancePolicy>
54 uint32_t parse_data_item_impl(
const uint8_t *input_param, uint32_t len) {
56 LOG(INFO) <<
"start parse data";
63 LOG(INFO) <<
"done unmarshal param, start request private key";
66 request_key_var_t::m_pkey4v = param.get<ntt::pkey>();
67 stbox::bytes dian_pkey;
68 auto ret = keymgr_interface_t::request_private_key_for_public_key(
69 request_key_var_t::m_pkey4v, request_key_var_t::m_private_key,
72 LOG(ERROR) <<
"request_private_key failed: " << stbox::status_string(ret);
76 LOG(INFO) <<
"start decrypt param";
78 stbox::bytes decrypted_param(
79 ecc::get_decrypt_message_size_with_prefix(len));
80 auto param_data = param.get<ntt::param_data>();
82 ret = ecc::decrypt_message_with_prefix(request_key_var_t::m_private_key,
83 param_data, decrypted_param,
84 ypc::utc::crypto_prefix_arbitrary);
86 LOG(ERROR) <<
"decrypt_message_with_prefix failed: "
87 << stbox::status_string(ret);
91 LOG(INFO) <<
"start check allowance";
93 param.set<ntt::param_data>(decrypted_param);
94 auto tmp_allowance = param.get<ntt::allowances>();
95 ret = allowance_checker_t::check_allowance(param);
97 LOG(ERROR) <<
"check_allowance failed: " << stbox::status_string(ret);
101 ret = forward_interface_t::set_forward_target_info(param);
103 LOG(ERROR) <<
"set_forward_target_info failed: "
104 << stbox::status_string(ret);
108 encrypted_param_var::m_encrypted_param = param_data;
111 LOG(INFO) <<
"start do_parse";
113 result_var::m_result = do_parse_interface_t::do_parse(
114 decrypted_param.data(), decrypted_param.size());
116 LOG(INFO) <<
"end parse ";
118 result_var::m_cost_gas = 0;
119 return stbox::stx_status::success;
123 template <
typename Crypto,
typename DataSession,
typename ParserT,
124 typename Result,
typename ModelT,
125 template <
typename>
class DataAllowancePolicy,
126 template <
typename>
class ModelAllowancePolicy>
128 DataAllowancePolicy, ModelAllowancePolicy, false>
135 ModelAllowancePolicy> {
139 DataAllowancePolicy, ModelAllowancePolicy>
143 uint32_t parse_data_item_impl(
const uint8_t *input_param, uint32_t len) {
145 LOG(INFO) <<
"start parse data";
152 LOG(INFO) <<
"start check allowance";
154 uint32_t ret = allowance_checker_t::check_allowance(param);
156 LOG(ERROR) <<
"check_allowance failed: " << stbox::status_string(ret);
161 LOG(INFO) <<
"start do_parse";
163 auto param_data = param.get<ntt::param_data>();
164 result_var::m_result =
165 do_parse_interface_t::do_parse(param_data.data(), param_data.size());
167 LOG(INFO) <<
"end parse ";
169 return stbox::stx_status::success;