2 #include "ypc/common/endian.h"
3 #include "ypc/core_t/analyzer/helper/parser_type_traits.h"
4 #include "ypc/core_t/analyzer/var/data_hash_var.h"
5 #include "ypc/core_t/analyzer/var/enclave_hash_var.h"
6 #include "ypc/core_t/analyzer/var/encrypted_param_var.h"
7 #include "ypc/core_t/analyzer/var/request_key_var.h"
8 #include "ypc/core_t/analyzer/var/result_var.h"
9 #include "ypc/stbox/ebyte.h"
10 #include "ypc/stbox/stx_status.h"
14 template <
typename Crypto>
24 uint32_t generate_result() {
25 auto status = ecc::encrypt_message_with_prefix(
26 request_key_var_t::m_pkey4v, result_var::m_result,
27 utc::crypto_prefix_arbitrary, m_encrypted_result_str);
29 if (status != stbox::stx_status::success) {
30 LOG(ERROR) <<
"error for encrypt_message: "
31 << stbox::status_string(status);
34 stbox::bytes cost_gas_str(
sizeof(m_cost_gas));
35 memcpy((uint8_t *)&cost_gas_str[0], (uint8_t *)&m_cost_gas,
37 ypc::utc::endian_swap(cost_gas_str);
40 m_encrypted_param + m_data_hash + m_enclave_hash + cost_gas_str;
41 status = ecc::sign_message(m_private_key, cost_msg, m_cost_signature_str);
43 if (status != stbox::stx_status::success) {
44 LOG(ERROR) <<
"error for sign cost: " << status;
48 auto msg = m_encrypted_param + m_data_hash + m_enclave_hash + cost_gas_str +
49 m_encrypted_result_str;
50 status = ecc::sign_message(m_private_key, msg, m_result_signature_str);
51 return static_cast<uint32_t
>(status);
54 uint32_t get_analyze_result_size() {
56 ntt::onchain_result_package_t pkg;
57 pkg.set<ntt::data_hash>(data_hash_var::m_data_hash);
58 pkg.set<ntt::encrypted_result>(m_encrypted_result_str);
59 pkg.set<ntt::result_signature>(m_result_signature_str);
60 pkg.set<ntt::cost_signature>(m_cost_signature_str);
61 ff::net::marshaler lm(ff::net::marshaler::length_retriver);
63 return lm.get_length();
65 uint32_t get_analyze_result(uint8_t *result, uint32_t size) {
67 ntt::onchain_result_package_t pkg;
68 pkg.set<ntt::data_hash>(data_hash_var::m_data_hash);
69 pkg.set<ntt::encrypted_result>(m_encrypted_result_str);
70 pkg.set<ntt::result_signature>(m_result_signature_str);
71 pkg.set<ntt::cost_signature>(m_cost_signature_str);
72 ff::net::marshaler lm(ff::net::marshaler::length_retriver);
74 if (size != lm.get_length()) {
75 return stbox::stx_status::out_buffer_length_error;
77 ff::net::marshaler ld((
char *)result, size, ff::net::marshaler::serializer);
79 return stbox::stx_status::success;
83 stbox::bytes m_encrypted_result_str;
84 stbox::bytes m_cost_signature_str;
85 stbox::bytes m_result_signature_str;
88 template <
typename Crypto>
91 template <
typename Crypto>
93 constexpr
static uint32_t value = ypc::utc::onchain_result_parser;