YPC  0.2.0
data_interface.h
1 #pragma oncew
2 #include "ypc/core_t/analyzer/interface/keymgr_interface.h"
3 #include "ypc/core_t/analyzer/internal/data_streams/multi_data_stream.h"
4 #include "ypc/core_t/analyzer/internal/data_streams/noinput_data_stream.h"
5 #include "ypc/core_t/analyzer/internal/data_streams/raw_data_stream.h"
6 #include "ypc/core_t/analyzer/internal/data_streams/sealed_data_stream.h"
7 #include "ypc/core_t/analyzer/internal/keymgr_session.h"
8 #include "ypc/core_t/analyzer/raw_data_provider.h"
9 #include "ypc/core_t/analyzer/sealed_data_provider.h"
10 #include "ypc/core_t/analyzer/var/data_source_var.h"
11 #include "ypc/corecommon/nt_cols.h"
12 #include "ypc/corecommon/package.h"
13 #include "ypc/stbox/ebyte.h"
14 #include "ypc/stbox/stx_status.h"
15 
16 namespace ypc {
17 namespace internal {
18 
19 template <typename Crypto, typename DataSession> class data_interface {};
20 
21 template <typename Crypto>
23  : virtual public data_source_var<raw_data_stream> {
24 public:
25  uint32_t init_data_source(const uint8_t *data_source_info, uint32_t len) {
26  // in this case, @data_source_info is data hash
27  m_datasource.reset(
28  new raw_data_provider(stbox::bytes(data_source_info, len)));
29  return stbox::stx_status::success;
30  }
31  uint32_t check_actual_data_hash() {
32  auto p = m_datasource.get();
33  if (p->data_hash() != p->expect_data_hash()) {
34  LOG(ERROR) << "expect " << p->expect_data_hash() << ", got "
35  << p->data_hash();
36  return stbox::stx_status::data_hash_not_same_as_expect;
37  }
38  return stbox::stx_status::success;
39  }
40 };
41 
42 template <typename Crypto>
44  : virtual public data_source_var<noinput_data_stream> {
45 public:
46  uint32_t check_actual_data_hash() { return stbox::stx_status::success; }
47 };
48 
49 template <typename Crypto>
51  : virtual public data_source_var<sealed_data_stream>,
52  virtual public keymgr_interface<Crypto>,
53  virtual public keymgr_session {
55 
56 public:
57  uint32_t init_data_source(const uint8_t *data_source_info, uint32_t len) {
58  using ntt = nt<stbox::bytes>;
59  auto pkg = make_package<typename cast_obj_to_package<
60  ntt::sealed_data_info_t>::type>::from_bytes(data_source_info, len);
61  auto ret = keymgr_session::init_keymgr_session();
62  if (ret) {
63  LOG(ERROR) << "init_keymgr_session failed: " << stbox::status_string(ret);
64  return ret;
65  }
66  stbox::bytes private_key, dian_pkey;
67  ret = keymgr_interface_t::request_private_key_for_public_key(
68  pkg.get<ntt::pkey>(), private_key, dian_pkey);
69  if (ret) {
70  LOG(ERROR) << "request_private_key_for_public_key failed: "
71  << stbox::status_string(ret);
72  return ret;
73  }
74 
75  m_ds_use_pkey = pkg.get<ntt::pkey>() + pkg.get<ntt::data_hash>();
76  m_datasource.reset(new sealed_data_provider<Crypto>(
77  pkg.get<ntt::data_hash>(), private_key));
78  return stbox::stx_status::success;
79  }
80 
81  uint32_t check_actual_data_hash() {
82  auto p = m_datasource.get();
83  if (p->data_hash() != p->expect_data_hash()) {
84  LOG(ERROR) << "expect " << p->expect_data_hash() << ", got "
85  << p->data_hash();
86  return stbox::stx_status::data_hash_not_same_as_expect;
87  }
88  return stbox::stx_status::success;
89  }
90 };
91 
92 template <typename Crypto>
94  : virtual public data_source_var<multi_data_stream>,
95  virtual public keymgr_session,
96  virtual public keymgr_interface<Crypto> {
98 
99 public:
100  uint32_t init_data_source(const uint8_t *data_source_info, uint32_t len) {
101  using ntt = nt<stbox::bytes>;
102  auto pkg = make_package<typename cast_obj_to_package<
103  ntt::multi_sealed_data_info_t>::type>::from_bytes(data_source_info,
104  len);
105  auto ret = keymgr_session::init_keymgr_session();
106  if (ret) {
107  LOG(ERROR) << "init_keymgr_session failed: " << stbox::status_string(ret);
108  return ret;
109  }
110  auto infos = pkg.get<ntt::sealed_data_info_vector>();
111  for (auto sdi : infos) {
112  if (sdi.get<ntt::pkey>().size() != 0) {
113  stbox::bytes private_key, dian_pkey;
114  ret = keymgr_interface_t::request_private_key_for_public_key(
115  sdi.get<ntt::pkey>(), private_key, dian_pkey);
116  auto hash = sdi.get<ntt::data_hash>();
117  if (ret) {
118  LOG(ERROR) << "request_private_key_for_public_key for data hash "
119  << hash << " failed: " << stbox::status_string(ret);
120  return ret;
121  }
122  m_ds_use_pkey.push_back(sdi.get<ntt::pkey>() +
123  sdi.get<ntt::data_hash>());
124  m_datasource.push_back(std::shared_ptr<data_source_with_dhash>(
125  new sealed_data_provider<Crypto>(sdi.get<ntt::data_hash>(),
126  private_key)));
127  } else {
128  m_datasource.push_back(std::shared_ptr<data_source_with_dhash>(
129  new raw_data_provider(sdi.get<ntt::data_hash>())));
130  }
131  }
132  return stbox::stx_status::success;
133  }
134 
135  uint32_t check_actual_data_hash() {
136  for (auto ds : m_datasource) {
137  if (ds->data_hash() != ds->expect_data_hash()) {
138  LOG(ERROR) << "expect " << ds->expect_data_hash() << ", got "
139  << ds->data_hash();
140  return stbox::stx_status::data_hash_not_same_as_expect;
141  }
142  }
143  return stbox::stx_status::success;
144  }
145 };
146 } // namespace internal
147 } // namespace ypc
ypc::raw_data_provider
Definition: raw_data_provider.h:17
ypc::sealed_data_provider
Definition: sealed_data_provider.h:16
ypc::internal::data_source_var
Definition: data_source_var.h:10
ypc::nt
Definition: nt_cols.h:6
ypc::internal::multi_data_stream
Definition: multi_data_stream.h:9
ypc::internal::raw_data_stream
Definition: raw_data_stream.h:8
ypc::internal::sealed_data_stream
Definition: sealed_data_stream.h:8
ypc::internal::keymgr_session
Definition: keymgr_session.h:17
ypc::internal::keymgr_interface
Definition: keymgr_interface.h:18
ypc::cast_obj_to_package
Definition: package.h:67
ypc::internal::data_interface
Definition: data_interface.h:19
ypc::make_package
Definition: package.h:48
ypc::internal::noinput_data_stream
Definition: noinput_data_stream.h:8
ypc::crypto::crypto_pack
Definition: crypto_pack.h:14