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() {
26 if (m_target_enclave_hash.size() == 0) {
27 LOG(ERROR) <<
"target enclave hash not set";
28 return stbox::stx_status::forward_target_not_set;
32 stbox::bytes shu_skey;
33 auto ret = ecc::gen_private_key(shu_skey);
35 LOG(ERROR) <<
"gen_private_key failed: " << stbox::status_string(ret);
38 stbox::bytes shu_pkey;
39 ret = ecc::generate_pkey_from_skey(shu_skey, shu_pkey);
41 LOG(ERROR) <<
"generate_pkey_from_skey failed: "
42 << stbox::status_string(ret);
46 stbox::bytes encrypted_skey;
47 ret = ecc::encrypt_message_with_prefix(m_target_dian_pkey, shu_skey,
48 utc::crypto_prefix_forward,
51 if (ret != stbox::stx_status::success) {
52 LOG(ERROR) <<
"error for encrypt_message: " << stbox::status_string(ret);
56 stbox::bytes to_sign_msg = m_target_dian_pkey + m_target_enclave_hash;
59 ret = ecc::sign_message(shu_skey, to_sign_msg, sig);
61 LOG(ERROR) <<
"sign_message failed: " << stbox::status_string(ret);
66 std::vector<stbox::bytes> batch;
67 batch.push_back(result_var::m_result);
69 ntt::batch_data>(batch);
71 ret = ecc::encrypt_message_with_prefix(
72 shu_pkey, pb, utc::crypto_prefix_arbitrary, m_encrypted_result_str);
74 if (ret != stbox::stx_status::success) {
75 LOG(ERROR) <<
"error for encrypt_message: " << stbox::status_string(ret);
84 stbox::bytes data_hash;
85 ret = ecc::hash_256(stbox::bytes(
"Fidelius"), data_hash);
86 auto data_hash2 = data_hash + result_var::m_result;
87 ret = ecc::hash_256(data_hash2, data_hash);
90 ntt::forward_result_t result;
92 shu.set<ntt::pkey, ntt::encrypted_shu_skey, ntt::shu_forward_signature,
93 ntt::enclave_hash>(shu_pkey, encrypted_skey, sig,
94 m_target_enclave_hash);
95 result.set<ntt::shu_info>(shu);
96 result.set<ntt::data_hash>(data_hash);
97 result.set<ntt::encrypted_result>(m_encrypted_result_str);
100 result_package = result;
106 uint32_t get_analyze_result_size() {
return m_result_bytes.size(); }
107 uint32_t get_analyze_result(uint8_t *result, uint32_t size) {
108 memcpy(result, m_result_bytes.data(), m_result_bytes.size());
109 return stbox::stx_status::success;
113 stbox::bytes m_encrypted_result_str;
114 stbox::bytes m_cost_signature_str;
115 stbox::bytes m_result_signature_str;
117 stbox::bytes m_target_enclave_hash;
118 stbox::bytes m_target_dian_pkey;
120 stbox::bytes m_result_bytes;
123 template <
typename Crypto>
127 constexpr
static uint32_t value = ypc::utc::forward_result_parser;