compact h2_chain

update-fork
MITSUNARI Shigeo 5 years ago
parent 63fb03524b
commit 77e4c0a9d1
  1. 236
      include/mcl/mapto_wb19.hpp

@ -393,198 +393,52 @@ struct MapToG2_WB19 {
} }
assert(0); assert(0);
} }
void h2_chain(G2& t1, const G2& P) const void h2_chain(G2& out, const G2& P) const
{ {
G2 t0, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15; G2 t[16];
t0 = P; t[0] = P;
dbl(t1, t0); dbl(t[1], t[0]);
add(t4, t1, t0); add(t[4], t[1], t[0]);
add(t2, t4, t1); add(t[2], t[4], t[1]);
add(t3, t2, t1); add(t[3], t[2], t[1]);
add(t11, t3, t1); add(t[11], t[3], t[1]);
add(t9, t11, t1); add(t[9], t[11], t[1]);
add(t10, t9, t1); add(t[10], t[9], t[1]);
add(t5, t10, t1); add(t[5], t[10], t[1]);
add(t7, t5, t1); add(t[7], t[5], t[1]);
add(t15, t7, t1); add(t[15], t[7], t[1]);
add(t13, t15, t1); add(t[13], t[15], t[1]);
add(t6, t13, t1); add(t[6], t[13], t[1]);
add(t14, t6, t1); add(t[14], t[6], t[1]);
add(t12, t14, t1); add(t[12], t[14], t[1]);
add(t8, t12, t1); add(t[8], t[12], t[1]);
dbl(t1, t6); dbl(t[1], t[6]);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t13); const struct {
for (size_t i = 0; i < 2; i++) dbl(t1, t1); uint32_t n;
add(t1, t1, t0); uint32_t idx;
for (size_t i = 0; i < 9; i++) dbl(t1, t1); } tbl[] = {
add(t1, t1, t8); { 5, 13 }, { 2, 0 }, { 9, 8 }, { 5, 11 }, { 6, 13 }, { 8, 2 }, { 5, 3 },
for (size_t i = 0; i < 5; i++) dbl(t1, t1); { 5, 3 }, { 4, 5 }, { 4, 0 }, { 8, 11 }, { 8, 8 }, { 4, 2 }, { 9, 5 },
add(t1, t1, t11); { 6, 11 }, { 2, 0 }, { 9, 8 }, { 5, 13 }, { 4, 0 }, { 11, 9 }, { 7, 12 },
for (size_t i = 0; i < 6; i++) dbl(t1, t1); { 7, 7 }, { 5, 12 }, { 5, 14 }, { 8, 13 }, { 6, 3 }, { 5, 0 }, { 8, 9 },
add(t1, t1, t13); { 6, 13 }, { 4, 10 }, { 4, 2 }, { 6, 10 }, { 6, 2 }, { 4, 0 }, { 10, 9 },
for (size_t i = 0; i < 8; i++) dbl(t1, t1); { 6, 14 }, { 4, 3 }, { 6, 9 }, { 6, 15 }, { 5, 8 }, { 5, 12 }, { 4, 5 },
add(t1, t1, t2); { 6, 15 }, { 6, 2 }, { 7, 5 }, { 6, 3 }, { 6, 9 }, { 6, 15 }, { 6, 14 },
for (size_t i = 0; i < 5; i++) dbl(t1, t1); { 5, 8 }, { 10, 6 }, { 5, 5 }, { 3, 0 }, { 9, 13 }, { 7, 12 }, { 4, 5 },
add(t1, t1, t3); { 6, 2 }, { 6, 11 }, { 4, 10 }, { 4, 4 }, { 6, 10 }, { 7, 7 }, { 3, 2 },
for (size_t i = 0; i < 5; i++) dbl(t1, t1); { 4, 3 }, { 8, 9 }, { 8, 9 }, { 6, 8 }, { 5, 7 }, { 5, 6 }, { 6, 5 },
add(t1, t1, t3); { 6, 4 }, { 5, 5 }, { 6, 4 }, { 6, 3 }, { 6, 4 }, { 6, 5 }, { 6, 3 },
for (size_t i = 0; i < 4; i++) dbl(t1, t1); { 7, 3 }, { 6, 3 }, { 5, 4 }, { 6, 3 }, { 6, 3 }, { 3, 0 }, { 6, 3 },
add(t1, t1, t5); { 6, 3 },
for (size_t i = 0; i < 4; i++) dbl(t1, t1); };
add(t1, t1, t0); for (size_t j = 0; j < CYBOZU_NUM_OF_ARRAY(tbl); j++) {
for (size_t i = 0; i < 8; i++) dbl(t1, t1); const uint32_t n = tbl[j].n;
add(t1, t1, t11); for (size_t i = 0; i < n; i++) dbl(t[1], t[1]);
for (size_t i = 0; i < 8; i++) dbl(t1, t1); add(t[1], t[1], t[tbl[j].idx]);
add(t1, t1, t8); }
for (size_t i = 0; i < 4; i++) dbl(t1, t1); for (size_t i = 0; i < 5; i++) dbl(t[1], t[1]);
add(t1, t1, t2); add(out, t[1], t[2]);
for (size_t i = 0; i < 9; i++) dbl(t1, t1);
add(t1, t1, t5);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t11);
for (size_t i = 0; i < 2; i++) dbl(t1, t1);
add(t1, t1, t0);
for (size_t i = 0; i < 9; i++) dbl(t1, t1);
add(t1, t1, t8);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t13);
for (size_t i = 0; i < 4; i++) dbl(t1, t1);
add(t1, t1, t0);
for (size_t i = 0; i < 11; i++) dbl(t1, t1);
add(t1, t1, t9);
for (size_t i = 0; i < 7; i++) dbl(t1, t1);
add(t1, t1, t12);
for (size_t i = 0; i < 7; i++) dbl(t1, t1);
add(t1, t1, t7);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t12);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t14);
for (size_t i = 0; i < 8; i++) dbl(t1, t1);
add(t1, t1, t13);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t3);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t0);
for (size_t i = 0; i < 8; i++) dbl(t1, t1);
add(t1, t1, t9);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t13);
for (size_t i = 0; i < 4; i++) dbl(t1, t1);
add(t1, t1, t10);
for (size_t i = 0; i < 4; i++) dbl(t1, t1);
add(t1, t1, t2);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t10);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t2);
for (size_t i = 0; i < 4; i++) dbl(t1, t1);
add(t1, t1, t0);
for (size_t i = 0; i < 10; i++) dbl(t1, t1);
add(t1, t1, t9);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t14);
for (size_t i = 0; i < 4; i++) dbl(t1, t1);
add(t1, t1, t3);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t9);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t15);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t8);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t12);
for (size_t i = 0; i < 4; i++) dbl(t1, t1);
add(t1, t1, t5);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t15);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t2);
for (size_t i = 0; i < 7; i++) dbl(t1, t1);
add(t1, t1, t5);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t3);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t9);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t15);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t14);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t8);
for (size_t i = 0; i < 10; i++) dbl(t1, t1);
add(t1, t1, t6);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t5);
for (size_t i = 0; i < 3; i++) dbl(t1, t1);
add(t1, t1, t0);
for (size_t i = 0; i < 9; i++) dbl(t1, t1);
add(t1, t1, t13);
for (size_t i = 0; i < 7; i++) dbl(t1, t1);
add(t1, t1, t12);
for (size_t i = 0; i < 4; i++) dbl(t1, t1);
add(t1, t1, t5);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t2);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t11);
for (size_t i = 0; i < 4; i++) dbl(t1, t1);
add(t1, t1, t10);
for (size_t i = 0; i < 4; i++) dbl(t1, t1);
add(t1, t1, t4);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t10);
for (size_t i = 0; i < 7; i++) dbl(t1, t1);
add(t1, t1, t7);
for (size_t i = 0; i < 3; i++) dbl(t1, t1);
add(t1, t1, t2);
for (size_t i = 0; i < 4; i++) dbl(t1, t1);
add(t1, t1, t3);
for (size_t i = 0; i < 8; i++) dbl(t1, t1);
add(t1, t1, t9);
for (size_t i = 0; i < 8; i++) dbl(t1, t1);
add(t1, t1, t9);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t8);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t7);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t6);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t5);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t4);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t5);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t4);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t3);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t4);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t5);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t3);
for (size_t i = 0; i < 7; i++) dbl(t1, t1);
add(t1, t1, t3);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t3);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t4);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t3);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t3);
for (size_t i = 0; i < 3; i++) dbl(t1, t1);
add(t1, t1, t0);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t3);
for (size_t i = 0; i < 6; i++) dbl(t1, t1);
add(t1, t1, t3);
for (size_t i = 0; i < 5; i++) dbl(t1, t1);
add(t1, t1, t2);
} }
void mx_chain(G2& Q, const G2& P) const void mx_chain(G2& Q, const G2& P) const
{ {

Loading…
Cancel
Save