13 using namespace libff;
16 static const size_t ADD_NUM_DIFFERENT_ELEMENTS = 1024;
19 static const size_t ADD_NUM_ELEMENTS = 1024 * 1024;
23 std::vector<GroupT> elements;
25 elements.reserve(ADD_NUM_ELEMENTS);
27 for (; i < ADD_NUM_DIFFERENT_ELEMENTS; ++i) {
28 elements.push_back(GroupT::random_element());
30 for (; i < ADD_NUM_ELEMENTS; ++i) {
31 elements.push_back(elements[i % ADD_NUM_DIFFERENT_ELEMENTS]);
35 std::cout <<
" num elements: " << std::to_string(ADD_NUM_ELEMENTS)
38 size_t num_elements = 0;
39 GroupT accum = GroupT::zero();
41 for (
const GroupT &el : elements) {
42 accum = accum.add(el);
47 if (num_elements != ADD_NUM_ELEMENTS) {
48 throw std::runtime_error(
"invalid number of elements seen");
56 std::vector<GroupT> elements;
58 elements.reserve(ADD_NUM_ELEMENTS);
60 for (; i < ADD_NUM_DIFFERENT_ELEMENTS; ++i) {
61 GroupT e = GroupT::random_element();
62 e.to_affine_coordinates();
63 elements.push_back(e);
65 for (; i < ADD_NUM_ELEMENTS; ++i) {
66 elements.push_back(elements[i % ADD_NUM_DIFFERENT_ELEMENTS]);
70 std::cout <<
" num elements: " << std::to_string(ADD_NUM_ELEMENTS)
73 size_t num_elements = 0;
74 GroupT accum = GroupT::one();
76 for (
const GroupT &el : elements) {
77 accum = accum.mixed_add(el);
82 if (num_elements != ADD_NUM_ELEMENTS) {
83 throw std::runtime_error(
"invalid number of elements seen");
91 static const size_t NUM_ELEMENTS = 1000;
97 std::vector<GroupT> elements;
98 elements.reserve(NUM_ELEMENTS);
99 for (
size_t i = 0; i < NUM_ELEMENTS; ++i) {
100 elements.push_back(GroupT::random_element());
104 for (
const GroupT &el : elements) {
105 if (!el.is_in_safe_subgroup()) {
122 pk.to_affine_coordinates();
125 std::vector<Fr<ppT>> messages;
132 std::vector<G1<ppT>> signatures;
136 signatures.push_back(sk * messages[i] *
G1<ppT>::one());
140 signatures.back().to_affine_coordinates();
163 ppT::final_exponentiation(ppT::double_miller_loop(
164 sig_prec, id_precomp, H_precomp, pk_precomp));
168 throw std::runtime_error(
169 "signature verification failed " + std::to_string(i));
173 throw std::runtime_error(
174 "signature verification passed (should fail)");
189 std::cout <<
"alt_bn128_pp\n";
192 std::cout <<
" profile_group_add<alt_bn128_G1>:\n";
193 if (!profile_group_add<alt_bn128_G1>()) {
194 throw std::runtime_error(
"failed");
197 std::cout <<
" profile_group_mixed_add<alt_bn128_G1>:\n";
198 if (!profile_group_mixed_add<alt_bn128_G1>()) {
199 throw std::runtime_error(
"failed");
202 std::cout <<
" profile_group_add<alt_bn128_G2>:\n";
203 if (!profile_group_add<alt_bn128_G2>()) {
204 throw std::runtime_error(
"failed");
207 std::cout <<
" profile_group_mixed_add<alt_bn128_G2>:\n";
208 if (!profile_group_mixed_add<alt_bn128_G2>()) {
209 throw std::runtime_error(
"failed");
212 std::cout <<
" profile_affine_e_over_e<alt_bn128>:\n";
213 profile_pairing_e_over_e<alt_bn128_pp>();
215 std::cout <<
"bls12_377_pp\n";
218 std::cout <<
" profile_group_add<bls12_377_G1>:\n";
219 if (!profile_group_add<bls12_377_G1>()) {
220 throw std::runtime_error(
"failed");
223 std::cout <<
" profile_group_mixed_add<bls12_377_G1>:\n";
224 if (!profile_group_mixed_add<bls12_377_G1>()) {
225 throw std::runtime_error(
"failed");
228 std::cout <<
" profile_group_add<bls12_377_G2>:\n";
229 if (!profile_group_add<bls12_377_G2>()) {
230 throw std::runtime_error(
"failed");
233 std::cout <<
" profile_group_membership<bls12_377_G1>:\n";
234 if (!profile_group_membership<bls12_377_G1>()) {
235 throw std::runtime_error(
"failed");
238 std::cout <<
" profile_group_membership<bls12_377_G2>:\n";
239 if (!profile_group_membership<bls12_377_G2>()) {
240 throw std::runtime_error(
"failed");
243 std::cout <<
" profile_affine_e_over_e<bls12_377>:\n";
244 profile_pairing_e_over_e<bls12_377_pp>();