polydecompress function
Decompresses a polynomial from its compressed byte array representation.
Implementation
Poly polydecompress(Uint8List r) {
Poly a = Poly();
int pos = 0;
for (int i = 0; i < KYBER_N; i += 8) {
int packed = r[pos] | (r[pos + 1] << 8) | (r[pos + 2] << 16);
pos += 3;
int d0 = (packed >> 0) & 0x7;
int d1 = (packed >> 3) & 0x7;
int d2 = (packed >> 6) & 0x7;
int d3 = (packed >> 9) & 0x7;
int d4 = (packed >> 12) & 0x7;
int d5 = (packed >> 15) & 0x7;
int d6 = (packed >> 18) & 0x7;
int d7 = (packed >> 21) & 0x7;
a.coeffs[i + 0] = (d0 * KYBER_Q + 4) >> 3;
a.coeffs[i + 1] = (d1 * KYBER_Q + 4) >> 3;
a.coeffs[i + 2] = (d2 * KYBER_Q + 4) >> 3;
a.coeffs[i + 3] = (d3 * KYBER_Q + 4) >> 3;
a.coeffs[i + 4] = (d4 * KYBER_Q + 4) >> 3;
a.coeffs[i + 5] = (d5 * KYBER_Q + 4) >> 3;
a.coeffs[i + 6] = (d6 * KYBER_Q + 4) >> 3;
a.coeffs[i + 7] = (d7 * KYBER_Q + 4) >> 3;
}
return a;
}