polydecompress function

Poly polydecompress(
  1. Uint8List r
)

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;
}