YPC  0.2.0
forward_interface.h
1 #pragma once
2 #include "ypc/common/crypto_prefix.h"
3 #include "ypc/core_t/analyzer/interface/keymgr_interface.h"
4 #include "ypc/core_t/analyzer/internal/results/forward_result.h"
5 #include "ypc/corecommon/allowance.h"
6 #include "ypc/stbox/ebyte.h"
7 #include "ypc/stbox/stx_status.h"
8 
9 namespace ypc {
10 namespace internal {
11 template <typename Crypto, typename Result> class forward_interface {
12 public:
13  typedef nt<stbox::bytes> ntt;
14  uint32_t set_forward_target_info(const ntt::param_t &param) {
15  return stbox::stx_status::success;
16  }
17 };
18 
19 template <typename Crypto>
21  : virtual public forward_result<Crypto>,
22  virtual public enclave_hash_var,
23  virtual public keymgr_interface<Crypto> {
26 
27 public:
28  typedef nt<stbox::bytes> ntt;
29  uint32_t set_forward_target_info(const ntt::param_t &param) {
30  auto param_data = param.get<ntt::param_data>();
31 
32  stbox::bytes pkey4v = param.get<ntt::pkey>();
33  stbox::bytes private_key;
34  stbox::bytes dian_pkey;
35  auto ret = keymgr_interface_t::request_private_key_for_public_key(
36  pkey4v, private_key, dian_pkey);
37  if (ret) {
38  LOG(ERROR) << "request_private_key failed: " << stbox::status_string(ret);
39  return ret;
40  }
41 
42 
43  auto forward_info = param.get<ntt::forward>();
44 
45  auto to_check_data = param_data + enclave_hash_var::m_enclave_hash +
46  dian_pkey + forward_info.get<ntt::enclave_hash>() +
47  forward_info.get<ntt::pkey>();
48  auto allow = forward_info.get<ntt::encrypted_sig>();
49  ret = allowance<Crypto>::check(private_key, to_check_data, allow);
50  if (ret) {
51  LOG(WARNING) << "check_allowance:" << allow
52  << " failed: " << stbox::status_string(ret) << ", ignore it";
53  return stbox::stx_status::forward_allowance_invalid;
54  }
55 
56  forward_result_t::m_target_enclave_hash =
57  forward_info.get<ntt::enclave_hash>();
58  forward_result_t::m_target_dian_pkey = forward_info.get<ntt::pkey>();
59 
60  return stbox::stx_status::success;
61  }
62 };
63 } // namespace internal
64 } // namespace ypc
ypc::internal::forward_interface
Definition: forward_interface.h:11
ypc::nt
Definition: nt_cols.h:6
ypc::internal::enclave_hash_var
Definition: enclave_hash_var.h:7
ypc::internal::keymgr_interface
Definition: keymgr_interface.h:18
ypc::crypto::crypto_pack
Definition: crypto_pack.h:14
ypc::internal::forward_result
Definition: forward_result.h:15
ypc::allowance
Definition: allowance.h:7