12#include <openssl/crypto.h>
13#include <openssl/ec.h>
14#include <openssl/ossl_typ.h>
25 std::vector<uint8_t> shared_secret;
27 void compute_shared_secret()
31 own_key = make_key_pair(curve);
36 throw std::logic_error(
37 "Cannot compute shared secret - missing peer key");
40 shared_secret = own_key->derive_shared_secret(*peer_key);
52 own_key = make_key_pair(curve);
53 shared_secret.clear();
59 auto tmp = own_key->public_key_raw();
60 tmp.insert(tmp.begin(), tmp.size());
68 throw std::runtime_error(
"Cannot get peer key - missing peer key");
71 auto tmp = peer_key->public_key_raw();
72 tmp.insert(tmp.begin(), tmp.size());
80 OPENSSL_cleanse(shared_secret.data(), shared_secret.size());
81 shared_secret.clear();
88 throw std::runtime_error(
"Provided peer key share is empty");
91 std::vector<uint8_t> tmp(ks.begin(), ks.end());
92 tmp.erase(tmp.begin());
99 throw std::runtime_error(
"Failed to parse peer key share");
102 peer_key = std::make_shared<ccf::crypto::PublicKey_OpenSSL>(pk);
103 shared_secret.clear();
108 if (shared_secret.empty())
110 compute_shared_secret();
113 return shared_secret;
int get_openssl_group_id() const
Definition public_key.cpp:131
Definition key_exchange.h:20
std::vector< uint8_t > get_peer_key_share() const
Definition key_exchange.h:64
~KeyExchangeContext()
Definition key_exchange.h:46
void load_peer_key_share(std::span< const uint8_t > ks)
Definition key_exchange.h:84
const std::vector< uint8_t > & get_shared_secret()
Definition key_exchange.h:106
KeyExchangeContext()
Definition key_exchange.h:44
std::vector< uint8_t > get_own_key_share()
Definition key_exchange.h:48
void reset()
Definition key_exchange.h:76
std::shared_ptr< KeyPair > KeyPairPtr
Definition key_pair.h:145
std::shared_ptr< PublicKey > PublicKeyPtr
Definition key_pair.h:144
Unique_PKEY key_from_raw_ec_point(const std::vector< uint8_t > &raw, int nid)
Definition public_key.cpp:259
CurveID
Definition curve.h:18
Definition app_interface.h:14
Definition key_exchange.h:18