FieldElement.fromByteArray constructor

FieldElement.fromByteArray(
  1. List<int> input
)

Implementation

FieldElement.fromByteArray(List<int> input) : _t = List.filled(10, 0) {
  int h0 = load_4(input, 0);
  int h1 = load_3(input, 4) << 6;
  int h2 = load_3(input, 7) << 5;
  int h3 = load_3(input, 10) << 3;
  int h4 = load_3(input, 13) << 2;
  int h5 = load_4(input, 16);
  int h6 = load_3(input, 20) << 7;
  int h7 = load_3(input, 23) << 5;
  int h8 = load_3(input, 26) << 4;
  int h9 = (load_3(input, 29) & 0x7FFFFF) << 2;
  int carry0;
  int carry1;
  int carry2;
  int carry3;
  int carry4;
  int carry5;
  int carry6;
  int carry7;
  int carry8;
  int carry9;
  // Remember: 2^255 congruent 19 modulo p
  carry9 = (h9 + (1 << 24)) >> 25;
  h0 += carry9 * 19;
  h9 -= carry9 << 25;
  carry1 = (h1 + (1 << 24)) >> 25;
  h2 += carry1;
  h1 -= carry1 << 25;
  carry3 = (h3 + (1 << 24)) >> 25;
  h4 += carry3;
  h3 -= carry3 << 25;
  carry5 = (h5 + (1 << 24)) >> 25;
  h6 += carry5;
  h5 -= carry5 << 25;
  carry7 = (h7 + (1 << 24)) >> 25;
  h8 += carry7;
  h7 -= carry7 << 25;
  carry0 = (h0 + (1 << 25)) >> 26;
  h1 += carry0;
  h0 -= carry0 << 26;
  carry2 = (h2 + (1 << 25)) >> 26;
  h3 += carry2;
  h2 -= carry2 << 26;
  carry4 = (h4 + (1 << 25)) >> 26;
  h5 += carry4;
  h4 -= carry4 << 26;
  carry6 = (h6 + (1 << 25)) >> 26;
  h7 += carry6;
  h6 -= carry6 << 26;
  carry8 = (h8 + (1 << 25)) >> 26;
  h9 += carry8;
  h8 -= carry8 << 26;
  _t[0] = h0;
  _t[1] = h1;
  _t[2] = h2;
  _t[3] = h3;
  _t[4] = h4;
  _t[5] = h5;
  _t[6] = h6;
  _t[7] = h7;
  _t[8] = h8;
  _t[9] = h9;
}