13#include "openssl/crypto.h"
15#include <fmt/format.h>
24 static constexpr size_t LIMBS = 10;
25 static constexpr const char* key_label =
"CCF Wrapping Key v1";
33 sizeof(uint32_t) +
sizeof(uint32_t) * LIMBS;
40 OPENSSL_cleanse(
y,
sizeof(
y));
47 throw std::invalid_argument(
48 "Cannot derive a key from a partial share");
50 const std::span<const uint8_t> ikm(
51 reinterpret_cast<const uint8_t*
>(
y),
sizeof(
y));
52 const std::span<const uint8_t> label(
53 reinterpret_cast<const uint8_t*
>(
y),
sizeof(
y));
59 void serialise(std::vector<uint8_t>& serialised)
const
62 if (serialised.size() != size)
64 throw std::invalid_argument(
"Invalid serialised share size");
67 auto data = serialised.data();
69 for (
size_t i = 0; i < LIMBS; ++i)
75 Share(
const std::span<uint8_t const>& serialised)
79 throw std::invalid_argument(
"Invalid serialised share size");
81 auto data = serialised.data();
82 auto size = serialised.size();
83 x = serialized::read<uint32_t>(data, size);
84 for (
size_t i = 0; i < LIMBS; ++i)
86 y[i] = serialized::read<uint32_t>(data, size);
92 return fmt::format(
"x: {} y: {}",
x, fmt::join(
y,
", "));
113 Share& raw_secret,
const std::span<Share>& shares,
size_t threshold);
129 const std::span<Share const>& shares,
uint64_t element
Definition sharing.cpp:20
element ct_reduce(element x)
Definition sharing.cpp:37
void sample_secret_and_shares(Share &raw_secret, const std::span< Share > &shares, size_t threshold)
Definition sharing.cpp:136
void recover_unauthenticated_secret(Share &raw_secret, const std::span< Share const > &shares, size_t threshold)
Definition sharing.cpp:171
std::vector< uint8_t > hkdf(MDType md_type, size_t length, const std::span< const uint8_t > &ikm, const std::span< const uint8_t > &salt={}, const std::span< const uint8_t > &info={})
Definition hash.cpp:51
std::vector< uint8_t > HashBytes
Definition hash_bytes.h:10
void write(uint8_t *&data, size_t &size, const T &v)
Definition serialized.h:106
bool operator==(const Share &other) const =default
static constexpr size_t serialised_size
Definition sharing.h:32
HashBytes key(size_t key_size) const
Definition sharing.h:43
Share(const std::span< uint8_t const > &serialised)
Definition sharing.h:75
uint32_t y[LIMBS]
Definition sharing.h:31
void serialise(std::vector< uint8_t > &serialised) const
Definition sharing.h:59
~Share()
Definition sharing.h:38
std::string to_str() const
Definition sharing.h:90
uint32_t x
Definition sharing.h:30