105 {
106 finalize_login_request_results result;
107 my->expire_requests();
108 auto& index = my->requests.get<login_request_pub_key_index>();
109 auto it = index.find(
params.server_ephemeral_pub_key);
110 if (it == index.end()) {
111 result.error = "server_ephemeral_pub_key expired or not found";
112 return result;
113 }
114 auto request = *it;
115 index.erase(it);
116
117 auto shared_secret = request.server_ephemeral_priv_key.generate_shared_secret(
params.client_ephemeral_pub_key);
118
120 chain::datastream<char*> sig_data_ds{combined_data.data(), combined_data.size()};
124 combined_data.resize(sig_data_ds.tellp());
125
126 result.digest = chain::sha256::hash(combined_data);
127 for (
auto& sig :
params.signatures)
129
130 try {
133 chain.get_authorization_manager().check_authorization(
136 result.permission_satisfied = true;
137 } catch (...) {
138 result.error = "keys do not satisfy permission";
139 }
140
141 return result;
142}
abstract_plugin & get_plugin(const string &name) const
void pack(Stream &s, const std::deque< T > &value)
fc::crypto::public_key public_key_type