operator * method

FieldElement operator *(
  1. FieldElement val
)

Implementation

FieldElement operator *(FieldElement val) {
  final List<int> g = val._t;
  final int g1_19 = 19 * g[1]; /* 1.959375*2^29 */
  final int g2_19 = 19 * g[2]; /* 1.959375*2^30; still ok */
  final int g3_19 = 19 * g[3];
  final int g4_19 = 19 * g[4];
  final int g5_19 = 19 * g[5];
  final int g6_19 = 19 * g[6];
  final int g7_19 = 19 * g[7];
  final int g8_19 = 19 * g[8];
  final int g9_19 = 19 * g[9];
  final int f1_2 = 2 * _t[1];
  final int f3_2 = 2 * _t[3];
  final int f5_2 = 2 * _t[5];
  final int f7_2 = 2 * _t[7];
  final int f9_2 = 2 * _t[9];
  final int f0g0 = _t[0] * g[0];
  final int f0g1 = _t[0] * g[1];
  final int f0g2 = _t[0] * g[2];
  final int f0g3 = _t[0] * g[3];
  final int f0g4 = _t[0] * g[4];
  final int f0g5 = _t[0] * g[5];
  final int f0g6 = _t[0] * g[6];
  final int f0g7 = _t[0] * g[7];
  final int f0g8 = _t[0] * g[8];
  final int f0g9 = _t[0] * g[9];
  final int f1g0 = _t[1] * g[0];
  final int f1g1_2 = f1_2 * g[1];
  final int f1g2 = _t[1] * g[2];
  final int f1g3_2 = f1_2 * g[3];
  final int f1g4 = _t[1] * g[4];
  final int f1g5_2 = f1_2 * g[5];
  final int f1g6 = _t[1] * g[6];
  final int f1g7_2 = f1_2 * g[7];
  final int f1g8 = _t[1] * g[8];
  final int f1g9_38 = f1_2 * g9_19;
  final int f2g0 = _t[2] * g[0];
  final int f2g1 = _t[2] * g[1];
  final int f2g2 = _t[2] * g[2];
  final int f2g3 = _t[2] * g[3];
  final int f2g4 = _t[2] * g[4];
  final int f2g5 = _t[2] * g[5];
  final int f2g6 = _t[2] * g[6];
  final int f2g7 = _t[2] * g[7];
  final int f2g8_19 = _t[2] * g8_19;
  final int f2g9_19 = _t[2] * g9_19;
  final int f3g0 = _t[3] * g[0];
  final int f3g1_2 = f3_2 * g[1];
  final int f3g2 = _t[3] * g[2];
  final int f3g3_2 = f3_2 * g[3];
  final int f3g4 = _t[3] * g[4];
  final int f3g5_2 = f3_2 * g[5];
  final int f3g6 = _t[3] * g[6];
  final int f3g7_38 = f3_2 * g7_19;
  final int f3g8_19 = _t[3] * g8_19;
  final int f3g9_38 = f3_2 * g9_19;
  final int f4g0 = _t[4] * g[0];
  final int f4g1 = _t[4] * g[1];
  final int f4g2 = _t[4] * g[2];
  final int f4g3 = _t[4] * g[3];
  final int f4g4 = _t[4] * g[4];
  final int f4g5 = _t[4] * g[5];
  final int f4g6_19 = _t[4] * g6_19;
  final int f4g7_19 = _t[4] * g7_19;
  final int f4g8_19 = _t[4] * g8_19;
  final int f4g9_19 = _t[4] * g9_19;
  final int f5g0 = _t[5] * g[0];
  final int f5g1_2 = f5_2 * g[1];
  final int f5g2 = _t[5] * g[2];
  final int f5g3_2 = f5_2 * g[3];
  final int f5g4 = _t[5] * g[4];
  final int f5g5_38 = f5_2 * g5_19;
  final int f5g6_19 = _t[5] * g6_19;
  final int f5g7_38 = f5_2 * g7_19;
  final int f5g8_19 = _t[5] * g8_19;
  final int f5g9_38 = f5_2 * g9_19;
  final int f6g0 = _t[6] * g[0];
  final int f6g1 = _t[6] * g[1];
  final int f6g2 = _t[6] * g[2];
  final int f6g3 = _t[6] * g[3];
  final int f6g4_19 = _t[6] * g4_19;
  final int f6g5_19 = _t[6] * g5_19;
  final int f6g6_19 = _t[6] * g6_19;
  final int f6g7_19 = _t[6] * g7_19;
  final int f6g8_19 = _t[6] * g8_19;
  final int f6g9_19 = _t[6] * g9_19;
  final int f7g0 = _t[7] * g[0];
  final int f7g1_2 = f7_2 * g[1];
  final int f7g2 = _t[7] * g[2];
  final int f7g3_38 = f7_2 * g3_19;
  final int f7g4_19 = _t[7] * g4_19;
  final int f7g5_38 = f7_2 * g5_19;
  final int f7g6_19 = _t[7] * g6_19;
  final int f7g7_38 = f7_2 * g7_19;
  final int f7g8_19 = _t[7] * g8_19;
  final int f7g9_38 = f7_2 * g9_19;
  final int f8g0 = _t[8] * g[0];
  final int f8g1 = _t[8] * g[1];
  final int f8g2_19 = _t[8] * g2_19;
  final int f8g3_19 = _t[8] * g3_19;
  final int f8g4_19 = _t[8] * g4_19;
  final int f8g5_19 = _t[8] * g5_19;
  final int f8g6_19 = _t[8] * g6_19;
  final int f8g7_19 = _t[8] * g7_19;
  final int f8g8_19 = _t[8] * g8_19;
  final int f8g9_19 = _t[8] * g9_19;
  final int f9g0 = _t[9] * g[0];
  final int f9g1_38 = f9_2 * g1_19;
  final int f9g2_19 = _t[9] * g2_19;
  final int f9g3_38 = f9_2 * g3_19;
  final int f9g4_19 = _t[9] * g4_19;
  final int f9g5_38 = f9_2 * g5_19;
  final int f9g6_19 = _t[9] * g6_19;
  final int f9g7_38 = f9_2 * g7_19;
  final int f9g8_19 = _t[9] * g8_19;
  final int f9g9_38 = f9_2 * g9_19;
  int h0 = f0g0 +
      f1g9_38 +
      f2g8_19 +
      f3g7_38 +
      f4g6_19 +
      f5g5_38 +
      f6g4_19 +
      f7g3_38 +
      f8g2_19 +
      f9g1_38;
  int h1 = f0g1 +
      f1g0 +
      f2g9_19 +
      f3g8_19 +
      f4g7_19 +
      f5g6_19 +
      f6g5_19 +
      f7g4_19 +
      f8g3_19 +
      f9g2_19;
  int h2 = f0g2 +
      f1g1_2 +
      f2g0 +
      f3g9_38 +
      f4g8_19 +
      f5g7_38 +
      f6g6_19 +
      f7g5_38 +
      f8g4_19 +
      f9g3_38;
  int h3 = f0g3 +
      f1g2 +
      f2g1 +
      f3g0 +
      f4g9_19 +
      f5g8_19 +
      f6g7_19 +
      f7g6_19 +
      f8g5_19 +
      f9g4_19;
  int h4 = f0g4 +
      f1g3_2 +
      f2g2 +
      f3g1_2 +
      f4g0 +
      f5g9_38 +
      f6g8_19 +
      f7g7_38 +
      f8g6_19 +
      f9g5_38;
  int h5 = f0g5 +
      f1g4 +
      f2g3 +
      f3g2 +
      f4g1 +
      f5g0 +
      f6g9_19 +
      f7g8_19 +
      f8g7_19 +
      f9g6_19;
  int h6 = f0g6 +
      f1g5_2 +
      f2g4 +
      f3g3_2 +
      f4g2 +
      f5g1_2 +
      f6g0 +
      f7g9_38 +
      f8g8_19 +
      f9g7_38;
  int h7 = f0g7 +
      f1g6 +
      f2g5 +
      f3g4 +
      f4g3 +
      f5g2 +
      f6g1 +
      f7g0 +
      f8g9_19 +
      f9g8_19;
  int h8 = f0g8 +
      f1g7_2 +
      f2g6 +
      f3g5_2 +
      f4g4 +
      f5g3_2 +
      f6g2 +
      f7g1_2 +
      f8g0 +
      f9g9_38;
  int h9 =
      f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0;
  int carry0;
  int carry1;
  int carry2;
  int carry3;
  int carry4;
  int carry5;
  int carry6;
  int carry7;
  int carry8;
  int carry9;
  carry0 = (h0 + (1 << 25)) >> 26;
  h1 += carry0;
  h0 -= carry0 << 26;
  carry4 = (h4 + (1 << 25)) >> 26;
  h5 += carry4;
  h4 -= carry4 << 26;
  carry1 = (h1 + (1 << 24)) >> 25;
  h2 += carry1;
  h1 -= carry1 << 25;
  carry5 = (h5 + (1 << 24)) >> 25;
  h6 += carry5;
  h5 -= carry5 << 25;
  carry2 = (h2 + (1 << 25)) >> 26;
  h3 += carry2;
  h2 -= carry2 << 26;
  carry6 = (h6 + (1 << 25)) >> 26;
  h7 += carry6;
  h6 -= carry6 << 26;
  carry3 = (h3 + (1 << 24)) >> 25;
  h4 += carry3;
  h3 -= carry3 << 25;
  carry7 = (h7 + (1 << 24)) >> 25;
  h8 += carry7;
  h7 -= carry7 << 25;
  carry4 = (h4 + (1 << 25)) >> 26;
  h5 += carry4;
  h4 -= carry4 << 26;
  carry8 = (h8 + (1 << 25)) >> 26;
  h9 += carry8;
  h8 -= carry8 << 26;
  carry9 = (h9 + (1 << 24)) >> 25;
  h0 += carry9 * 19;
  h9 -= carry9 << 25;
  carry0 = (h0 + (1 << 25)) >> 26;
  h1 += carry0;
  h0 -= carry0 << 26;
  final List<int> h = List.filled(10, 0);
  h[0] = h0;
  h[1] = h1;
  h[2] = h2;
  h[3] = h3;
  h[4] = h4;
  h[5] = h5;
  h[6] = h6;
  h[7] = h7;
  h[8] = h8;
  h[9] = h9;
  return FieldElement._fromConstList(h);
}