static void rq_encoderounded()

in sntrup4591761.c [925:957]


static void rq_encoderounded(unsigned char *c,const modq *f)
{
  crypto_int32 f0, f1, f2;
  int i;

  for (i = 0;i < p/3;++i) {
    f0 = *f++ + qshift;
    f1 = *f++ + qshift;
    f2 = *f++ + qshift;
    f0 = (21846 * f0) >> 16;
    f1 = (21846 * f1) >> 16;
    f2 = (21846 * f2) >> 16;
    /* now want f0 + f1*1536 + f2*1536^2 as a 32-bit integer */
    f2 *= 3;
    f1 += f2 << 9;
    f1 *= 3;
    f0 += f1 << 9;
    *c++ = f0; f0 >>= 8;
    *c++ = f0; f0 >>= 8;
    *c++ = f0; f0 >>= 8;
    *c++ = f0;
  }
  /* XXX: using p mod 3 = 2 */
  f0 = *f++ + qshift;
  f1 = *f++ + qshift;
  f0 = (21846 * f0) >> 16;
  f1 = (21846 * f1) >> 16;
  f1 *= 3;
  f0 += f1 << 9;
  *c++ = f0; f0 >>= 8;
  *c++ = f0; f0 >>= 8;
  *c++ = f0;
}