FieldElement.fromByteArray constructor
FieldElement.fromByteArray(
- 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;
}