15 {
fr(
uint256_t(
"083e7911d835097629f0067531fc15cafd79a89beecb39903f69572c636f4a5a")),
16 fr(
uint256_t(
"1a7f5efaad7f315c25a918f30cc8d7333fccab7ad7c90f14de81bcc528f9935d")) }));
18 {
fr(
uint256_t(
"054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402")),
19 fr(
uint256_t(
"209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126")) }));
21 {
fr(
uint256_t(
"1c44f2a5207c81c28a8321a5815ce8b1311024bbed131819bbdaf5a2ada84748")),
22 fr(
uint256_t(
"03aaee36e6422a1d0191632ac6599ae9eba5ac2c17a8c920aa3caf8b89c5f8a8")) }));
24 {
fr(
uint256_t(
"26d8b1160c6821a30c65f6cb47124afe01c29f4338f44d4a12c9fccf22fb6fb2")),
25 fr(
uint256_t(
"05c70c3b9c0d25a4c100e3a27bf3cc375f8af8cdd9498ec4089a823d7464caff")) }));
27 {
fr(
uint256_t(
"20ed9c6a1d27271c4498bfce0578d59db1adbeaa8734f7facc097b9b994fcf6e")),
28 fr(
uint256_t(
"29cd7d370938b358c62c4a00f73a0d10aba7e5aaa04704a0713f891ebeb92371")) }));
30 {
fr(
uint256_t(
"0224a8abc6c8b8d50373d64cd2a1ab1567bf372b3b1f7b861d7f01257052d383")),
31 fr(
uint256_t(
"2358629b90eafb299d6650a311e79914b0215eb0a790810b26da5a826726d711")) }));
33 {
fr(
uint256_t(
"0f106f6d46bc904a5290542490b2f238775ff3c445b2f8f704c466655f460a2a")),
34 fr(
uint256_t(
"29ab84d472f1d33f42fe09c47b8f7710f01920d6155250126731e486877bcf27")) }));
36 {
fr(
uint256_t(
"0298f2e42249f0519c8a8abd91567ebe016e480f219b8c19461d6a595cc33696")),
37 fr(
uint256_t(
"035bec4b8520a4ece27bd5aafabee3dfe1390d7439c419a8c55aceb207aac83b")) }));
39 EXPECT_EQ(default_generators.size(), expected_default_generators.size());
40 for (
size_t i = 0; i < default_generators.size(); ++i) {
41 EXPECT_EQ(default_generators[i], expected_default_generators[i]);
56 constexpr std::string_view default_domain_separator =
58 constexpr std::string_view domain_separator =
"TEST_DOMAIN_SEPARATOR";
63 size_t num_generators;
71 for (
auto domain : domains) {
72 for (
auto test_case : cases) {
73 const size_t num_generators = test_case.num_generators;
74 const size_t offset = test_case.offset;
77 auto generators = generator_d.
get(num_generators,
offset, domain);
78 ASSERT_EQ(generators.size(), num_generators);
80 auto derived_generators =
82 ASSERT_EQ(derived_generators.size(), num_generators +
offset);
84 for (
size_t i = 0; i < num_generators; ++i) {
85 EXPECT_EQ(generators[i], derived_generators[
offset + i]);
88 const bool is_default_domain = (domain == default_domain_separator);
92 if (is_default_domain && (num_generators +
offset <= default_num_generators)) {
94 ASSERT_GE(default_generators.size(), num_generators +
offset);
96 for (
size_t i = 0; i < num_generators; ++i) {
97 EXPECT_EQ(generators[i], default_generators[
offset + i]);
GeneratorView get(const size_t num_generators, const size_t generator_offset=0, const std::string_view domain_separator=DEFAULT_DOMAIN_SEPARATOR) const
Return a view of num_generators generators for a given domain_separator, starting at generator index ...
static std::vector< affine_element > derive_generators(const std::vector< uint8_t > &domain_separator_bytes, const size_t num_generators, const size_t starting_index=0)
Derives generator points via hash-to-curve.