66 typename Group::affine_element,
68 starting_index>::get_generators();
69 const auto generators = Group::derive_generators(domain_separator.value, num_generators, starting_index);
70 if (precomputed.size() != generators.size()) {
71 info(
"Precomputed generators size mismatch");
74 for (
auto [p, g] :
zip_view(precomputed, generators)) {
76 info(
"WARNING: Generators do not match precomputed generators! THESE SHOULD GENERALLY NOT CHANGE, "
77 "SOMETHING MAY BE WRONG ON A MORE FUNDAMENTAL LEVEL!");
78 info(
"WARNING: IF YOU REALLY ARE SURE THESE NEED TO BE CHANGED: Include the below code in "
79 "precomputed_generators_*_impl.hpp to hardcode the generators");
82 char* demangled_name_c_str =
83 abi::__cxa_demangle(
typeid(
typename Group::affine_element).name(),
nullptr,
nullptr,
nullptr);
84 std::string type_name_str =
85 demangled_name_c_str !=
nullptr
86 ? demangled_name_c_str
87 :
typeid(
typename Group::affine_element).name();
90 info(
"template <> class PrecomputedGenerators<\"",
91 domain_separator.value,
101 info(
"with these values for generators: ");
102 for (
size_t i = 0; i < generators.size(); ++i) {
103 std::stringstream x_stream;
104 x_stream << generators[i].x;
105 std::stringstream y_stream;
106 y_stream << generators[i].y;
107 const char* suffix = (i == generators.size() - 1) ?
"" :
",";
108 info(
" { uint256_t(\"", x_stream.str(),
"\"), uint256_t(\"", y_stream.str(),
"\") }", suffix);
114 if (demangled_name_c_str !=
nullptr) {
constexpr DomainSeparator(const char(&str)[N])