In the Kyber specification there is an algorithm "Parse", which receives a byte stream as input and from this the NTT representation $\hat{a} = \hat{a}_0+\hat{a}_1X + ... + \hat{a}_{n-1}X^{n-1} \in R_q$ is calculated from $a \in R_q$. For the sake of completeness, I have added the algorithm here:
I have a few questions:
What exactly is meant here by "NTT representation" of a polynomial? So far I have interpreted the NTT as a special "ring variant" of the DFT. However, I cannot see from the algorithm Parse how the "NTT representation" is calculated here at all.
The goal should be that the coefficients of the output polynomial are in $\mathbb{Z}_q$. But what exactly are we trying to achieve with the operations $d_1 := b_i + 256 \cdot (b_{i+1} \text{ mod}^+ 16)$ and $d_2 := \lfloor b_{i+1}/16 \rfloor + 16 \cdot b_{i+2}$? The background to this is not entirely clear to me.
Since the parse algorithm plays a role in the calculation of the public key $\mathbf{A}$ and the entries of this matrix should be uniformly random, I wonder how this is guaranteed here?
I hope my questions are understandable and meet the requirements of the forum. Thank you in advance and I look forward to your answers!