Checkpoint the party/runtime stack before share-program and malicious-mode work.
Ship the TLS mesh, composer, Beaver/Yao/leaf MPC, prep/online paths, apps, and docs so the tree is pushable before elevating share_expr, security_mode, and prep resume. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
695f8e84f7
commit
0d22946a0e
1835 changed files with 170291 additions and 2849 deletions
|
|
@ -1,4 +1,5 @@
|
|||
#include <gtest/gtest.h>
|
||||
#include <tuple>
|
||||
|
||||
#include "dpf.hpp"
|
||||
#include "grotto/offset_horner.hpp"
|
||||
|
|
@ -445,23 +446,17 @@ TEST(OffsetHorner, WrapSharesHideThePayload)
|
|||
}
|
||||
}
|
||||
|
||||
TEST(OffsetHorner, PowerKeysAreIndependentComparisons)
|
||||
TEST(OffsetHorner, PowersShareOneSeedSpine)
|
||||
{
|
||||
constexpr std::size_t D = 3;
|
||||
const uint16_t center = 1000;
|
||||
auto mat = grotto::make_offset_horner_keys<uint16_t, D>(center);
|
||||
const auto & k0 = std::get<0>(mat.keys[0]);
|
||||
const auto & k1 = std::get<0>(mat.keys[1]);
|
||||
const auto & k0 = std::get<0>(mat.keys);
|
||||
const auto & k1 = std::get<1>(mat.keys);
|
||||
EXPECT_NE(std::memcmp(&k0.root(), &k1.root(), sizeof(k0.root())), 0);
|
||||
bool cw_differs = false;
|
||||
const std::size_t depth = std::remove_reference_t<decltype(k0)>::depth;
|
||||
for (std::size_t level = 0; level < depth; ++level)
|
||||
{
|
||||
if (k0.value_cw(level) != k1.value_cw(level))
|
||||
cw_differs = true;
|
||||
}
|
||||
EXPECT_TRUE(cw_differs);
|
||||
EXPECT_EQ(mat.keys.size(), D + 1);
|
||||
EXPECT_GT(depth, 0u);
|
||||
EXPECT_EQ(k0.value_cw(0), k1.value_cw(0));
|
||||
}
|
||||
|
||||
TEST(OffsetHorner, DegreeZeroMatchesSignRespectingDot)
|
||||
|
|
@ -744,7 +739,6 @@ TEST(OffsetHorner, GenevalXorSharesMatchTheDealerPoint)
|
|||
EXPECT_EQ(grotto::geneval_offset_horner_center(center, uint8_t{0}), center);
|
||||
|
||||
const auto got = grotto::geneval_offset_horner<D>(share, other, eta, knots, coeff);
|
||||
EXPECT_EQ(got.center, center);
|
||||
EXPECT_EQ(got.eta, eta);
|
||||
EXPECT_EQ(got.value0 + got.value1, gold<D>(center, eta, knots, coeff));
|
||||
EXPECT_EQ(got.value0 + got.value1, 30u);
|
||||
|
|
@ -769,7 +763,6 @@ TEST(OffsetHorner, GenevalFromAdditiveSharesOfXAndR)
|
|||
const uint8_t eta = offset_horner_group_sub(x, r);
|
||||
const uint8_t center = offset_horner_group_add(r, r);
|
||||
EXPECT_EQ(got.eta, eta);
|
||||
EXPECT_EQ(got.center, center);
|
||||
EXPECT_EQ(got.value0 + got.value1, gold<D>(center, eta, knots, coeff));
|
||||
EXPECT_EQ(got.value0 + got.value1, 88u);
|
||||
const uint8_t wrapped = offset_horner_group_add(center, eta);
|
||||
|
|
@ -796,7 +789,6 @@ TEST(OffsetHorner, GenevalSignedSharesUseGenevalConvention)
|
|||
const int8_t eta = -3;
|
||||
EXPECT_EQ(grotto::geneval_offset_horner_center(share, other), center);
|
||||
const auto got = grotto::geneval_offset_horner<D>(share, other, eta, knots, coeff);
|
||||
EXPECT_EQ(got.center, center);
|
||||
EXPECT_EQ(got.value0 + got.value1, gold<D>(center, eta, knots, coeff));
|
||||
|
||||
const int8_t x = 40;
|
||||
|
|
@ -809,7 +801,6 @@ TEST(OffsetHorner, GenevalSignedSharesUseGenevalConvention)
|
|||
knots, coeff);
|
||||
const int8_t expect_center = offset_horner_group_add(r, r);
|
||||
const int8_t expect_eta = offset_horner_group_sub(x, r);
|
||||
EXPECT_EQ(from_mask.center, expect_center);
|
||||
EXPECT_EQ(from_mask.eta, expect_eta);
|
||||
EXPECT_EQ(from_mask.value0 + from_mask.value1,
|
||||
gold<D>(expect_center, expect_eta, knots, coeff));
|
||||
|
|
@ -891,7 +882,6 @@ void expect_geneval(T center, T eta, const std::vector<T> & knots,
|
|||
const T other = static_cast<T>(center ^ share);
|
||||
const auto g = grotto::geneval_offset_horner<Degree>(share, other, eta, knots, coeff);
|
||||
const uint64_t want = gold<Degree>(center, eta, knots, coeff);
|
||||
EXPECT_EQ(g.center, center) << where;
|
||||
EXPECT_EQ(g.value0 + g.value1, want) << where;
|
||||
uint64_t summed = 0;
|
||||
for (std::size_t k = 0; k <= Degree; ++k)
|
||||
|
|
@ -1244,14 +1234,17 @@ template <typename T>
|
|||
bool addition_leaves_domain(T center, T eta)
|
||||
{
|
||||
constexpr unsigned bits = dpf::utils::bitlength_of_v<T>;
|
||||
if (bits > 62)
|
||||
if constexpr (bits > 62)
|
||||
return false;
|
||||
const int64_t sum = math_of(center) + math_of(eta);
|
||||
const int64_t mod = int64_t{1} << bits;
|
||||
if constexpr (std::is_signed_v<T>)
|
||||
return sum >= (mod >> 1) || sum < -(mod >> 1);
|
||||
else
|
||||
return sum >= mod;
|
||||
{
|
||||
const int64_t sum = math_of(center) + math_of(eta);
|
||||
const int64_t mod = int64_t{1} << bits;
|
||||
if constexpr (std::is_signed_v<T>)
|
||||
return sum >= (mod >> 1) || sum < -(mod >> 1);
|
||||
else
|
||||
return sum >= mod;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
|
@ -1399,10 +1392,10 @@ void exercise_big_domain()
|
|||
const T r1 = offset_horner_group_sub(r, r0);
|
||||
const auto got = grotto::geneval_offset_horner<D>(x0, x1, r0, r1, knots, coeff);
|
||||
const T sum = offset_horner_group_add(x, r);
|
||||
EXPECT_EQ(got.center, offset_horner_group_add(r, r));
|
||||
const T expect_center = offset_horner_group_add(r, r);
|
||||
EXPECT_EQ(got.eta, offset_horner_group_sub(x, r));
|
||||
EXPECT_EQ(offset_horner_group_add(got.center, got.eta), sum);
|
||||
EXPECT_EQ(got.value0 + got.value1, gold<D>(got.center, got.eta, knots, coeff));
|
||||
EXPECT_EQ(offset_horner_group_add(expect_center, got.eta), sum);
|
||||
EXPECT_EQ(got.value0 + got.value1, gold<D>(expect_center, got.eta, knots, coeff));
|
||||
if (::testing::Test::HasFailure())
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue