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