polytomsg function
Converts a polynomial p into a message byte array msg.
This function iterates over the coefficients of the polynomial p
and reconstructs the original message by interpreting groups of 8
coefficients as the bits of a byte. Each coefficient contributes
one bit to the message byte, determined by its proximity to KYBER_Q / 2.
The output message msg will have KYBER_SYMBYTES bytes, reflecting
the polynomial's encoded message form.
Implementation
void polytomsg(Uint8List msg, Poly p) {
for (int i = 0; i < KYBER_SYMBYTES; i++) {
msg[i] = 0;
for (int j = 0; j < 8; j++) {
int t = p.coeffs[8 * i + j];
t = (t + (KYBER_Q ~/ 2)) % KYBER_Q;
int bit = ((2 * t) ~/ KYBER_Q) & 1;
msg[i] |= (bit << j);
}
}
}