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
62
test/tests/extractable_full_test.cpp
Normal file
62
test/tests/extractable_full_test.cpp
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
#include <gtest/gtest.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <vector>
|
||||
|
||||
#include "dpf.hpp"
|
||||
|
||||
// Extractable full-domain expansion must match point eval share-for-share,
|
||||
// including both lanes of the packed leaf that holds the programmed point.
|
||||
TEST(ExtractableFull, Fp61SharesMatchPointEval)
|
||||
{
|
||||
constexpr std::uint8_t alpha = 9;
|
||||
const dpf::fp61 message{42};
|
||||
auto [k0, k1] = dpf::make_dpf(alpha, message, dpf::extractable{});
|
||||
|
||||
auto [buf0, it0] = dpf::eval_full(k0);
|
||||
auto [buf1, it1] = dpf::eval_full(k1);
|
||||
auto a0 = std::begin(it0);
|
||||
auto a1 = std::begin(it1);
|
||||
|
||||
for (unsigned i = 0; i < 256; ++i, ++a0, ++a1)
|
||||
{
|
||||
const auto x = static_cast<std::uint8_t>(i);
|
||||
const auto p0 = (*dpf::eval_point(k0, x)).raw();
|
||||
const auto p1 = (*dpf::eval_point(k1, x)).raw();
|
||||
EXPECT_EQ((*a0).raw().raw(), p0.raw()) << "party0 at " << i;
|
||||
EXPECT_EQ((*a1).raw().raw(), p1.raw()) << "party1 at " << i;
|
||||
}
|
||||
EXPECT_EQ(a0, std::end(it0));
|
||||
EXPECT_EQ(a1, std::end(it1));
|
||||
|
||||
EXPECT_EQ(dpf::reconstruct(*a0 = *std::begin(it0), *std::begin(it1)),
|
||||
dpf::fp61{0}); // silence unused if reconstruct needs the type
|
||||
(void)buf0;
|
||||
(void)buf1;
|
||||
}
|
||||
|
||||
TEST(ExtractableFull, Fp61OpenedMailbox)
|
||||
{
|
||||
constexpr std::uint8_t alpha = 9;
|
||||
const dpf::fp61 message{42};
|
||||
auto [k0, k1] = dpf::make_dpf(alpha, message, dpf::extractable{});
|
||||
auto [buf0, it0] = dpf::eval_full(k0);
|
||||
auto [buf1, it1] = dpf::eval_full(k1);
|
||||
|
||||
std::vector<dpf::fp61> y0, y1;
|
||||
for (auto it = std::begin(it0); it != std::end(it0); ++it)
|
||||
y0.push_back((*it).raw());
|
||||
for (auto it = std::begin(it1); it != std::end(it1); ++it)
|
||||
y1.push_back((*it).raw());
|
||||
|
||||
EXPECT_EQ(y0[alpha] - y1[alpha], message);
|
||||
EXPECT_EQ((y0[0] - y1[0]).raw(), 0u);
|
||||
EXPECT_EQ((y0[8] - y1[8]).raw(), 0u);
|
||||
EXPECT_EQ((y0[10] - y1[10]).raw(), 0u);
|
||||
|
||||
std::vector<dpf::fp61> challenge(256);
|
||||
for (std::size_t i = 0; i < challenge.size(); ++i)
|
||||
challenge[i] = dpf::fp61{static_cast<std::uint64_t>(i + 1)};
|
||||
EXPECT_TRUE(dpf::sketch_verify(dpf::sketch_fold(y0, challenge),
|
||||
dpf::sketch_fold(y1, challenge)));
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue