org.bouncycastle.pqc.crypto.newhope.Reduce Maven / Gradle / Ivy
package org.bouncycastle.pqc.crypto.newhope;
class Reduce
{
static final int QInv = 12287; // -inverse_mod(p,2^18)
static final int RLog = 18;
static final int RMask = (1 << RLog) - 1;
static short montgomery(int a)
{
int u = a * QInv;
u &= RMask;
u *= Params.Q;
u += a;
return (short)(u >>> RLog);
}
static short barrett(short a)
{
int t = a & 0xFFFF;
int u = (t * 5) >>> 16;
u *= Params.Q;
return (short)(t - u);
}
}