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));
62 std::vector<uint8_t> serialised(size);
63 auto data = serialised.data();
65 for (
size_t i = 0; i < LIMBS; ++i)
72 Share(
const std::span<uint8_t const>& serialised)
76 throw std::invalid_argument(
"Invalid serialised share size");
78 auto data = serialised.data();
79 auto size = serialised.size();
80 x = serialized::read<uint32_t>(data, size);
81 for (
size_t i = 0; i < LIMBS; ++i)
83 y[i] = serialized::read<uint32_t>(data, size);
89 return fmt::format(
"x: {} y: {}",
x, fmt::join(
y,
", "));
110 Share& raw_secret,
const std::span<Share>& shares,
size_t threshold);
126 const std::span<Share const>& shares,
uint64_t element
Definition sharing.cpp:22
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:130
void recover_unauthenticated_secret(Share &raw_secret, const std::span< Share const > &shares, size_t threshold)
Definition sharing.cpp:165
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:72
uint32_t y[LIMBS]
Definition sharing.h:31
~Share()
Definition sharing.h:38
std::string to_str() const
Definition sharing.h:87
uint32_t x
Definition sharing.h:30
std::vector< uint8_t > serialise() const
Definition sharing.h:59