MCPcopy Create free account
hub / github.com/coinbase/cb-mpc / TEST

Function TEST

tests/unit/c_api/test_pve_batch.cpp:73–130  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

71} // namespace
72
73TEST(CApiPveBatch, EncVerDec_DefBasePke_RsaBlob) {
74 const cbmpc_curve_id_t curve = CBMPC_CURVE_SECP256K1;
75 const cmem_t label = {reinterpret_cast<uint8_t*>(const_cast<char*>("label")), 5};
76
77 constexpr int n = 4;
78 std::array<uint8_t, static_cast<size_t>(n) * 32> xs_flat{};
79 std::array<int, n> xs_sizes{};
80 for (int i = 0; i < n; i++) {
81 xs_sizes[static_cast<size_t>(i)] = 32;
82 for (int j = 0; j < 32; j++) xs_flat[static_cast<size_t>(i * 32 + j)] = static_cast<uint8_t>(i + j);
83 }
84 const cmems_t xs_in = {n, xs_flat.data(), xs_sizes.data()};
85
86 cmem_t ek_blob{nullptr, 0};
87 cmem_t dk_blob{nullptr, 0};
88 ASSERT_EQ(cbmpc_pve_generate_base_pke_rsa_keypair(&ek_blob, &dk_blob), CBMPC_SUCCESS);
89
90 cmem_t ct{nullptr, 0};
91 ASSERT_EQ(cbmpc_pve_batch_encrypt(/*base_pke=*/nullptr, curve, ek_blob, label, xs_in, &ct), CBMPC_SUCCESS);
92
93 int batch_count = 0;
94 ASSERT_EQ(cbmpc_pve_batch_get_count(ct, &batch_count), CBMPC_SUCCESS);
95 ASSERT_EQ(batch_count, n);
96
97 cmem_t L_ct{nullptr, 0};
98 ASSERT_EQ(cbmpc_pve_batch_get_Label(ct, &L_ct), CBMPC_SUCCESS);
99 expect_eq(L_ct, label);
100 cbmpc_cmem_free(L_ct);
101
102 std::array<uint8_t, static_cast<size_t>(n) * 33> Qs_flat{};
103 std::array<int, n> Qs_sizes{};
104 for (int i = 0; i < n; i++) {
105 const mem_t xi(xs_flat.data() + i * 32, 32);
106 const buf_t qi = expected_Q(curve, xi);
107 ASSERT_EQ(qi.size(), 33);
108 Qs_sizes[static_cast<size_t>(i)] = qi.size();
109 std::memmove(Qs_flat.data() + i * 33, qi.data(), static_cast<size_t>(qi.size()));
110 }
111 const cmems_t Qs_expected = {n, Qs_flat.data(), Qs_sizes.data()};
112
113 ASSERT_EQ(cbmpc_pve_batch_verify(/*base_pke=*/nullptr, curve, ek_blob, ct, Qs_expected, label), CBMPC_SUCCESS);
114
115 cmems_t xs_out{0, nullptr, nullptr};
116 ASSERT_EQ(cbmpc_pve_batch_decrypt(/*base_pke=*/nullptr, curve, dk_blob, ek_blob, ct, label, &xs_out), CBMPC_SUCCESS);
117 ASSERT_EQ(xs_out.count, n);
118
119 int off = 0;
120 for (int i = 0; i < n; i++) {
121 ASSERT_EQ(xs_out.sizes[i], 32);
122 ASSERT_EQ(std::memcmp(xs_out.data + off, xs_flat.data() + i * 32, 32), 0);
123 off += xs_out.sizes[i];
124 }
125
126 cbmpc_cmems_free(xs_out);
127 cbmpc_cmem_free(ct);
128 cbmpc_cmem_free(dk_blob);
129 cbmpc_cmem_free(ek_blob);
130}

Callers

nothing calls this directly

Calls 14

cbmpc_pve_batch_encryptFunction · 0.85
cbmpc_cmem_freeFunction · 0.85
cbmpc_pve_batch_verifyFunction · 0.85
cbmpc_pve_batch_decryptFunction · 0.85
cbmpc_cmems_freeFunction · 0.85
cbmpc_pve_batch_get_QsFunction · 0.85
expect_eqFunction · 0.70
expected_QFunction · 0.70

Tested by

no test coverage detected