/* return This mod modulus, N is modulus, ND is Montgomery Constant */ public FF reduce(FF N, FF ND) { // fast karatsuba Montgomery reduction int n = N.length; FF t = new FF(2 * n); FF r = new FF(n); FF m = new FF(n); r.sducopy(this); m.karmul_lower(0, this, 0, ND, 0, t, 0, n); karmul_upper(N, m, t, n); m.sducopy(this); r.add(N); r.sub(m); r.norm(); return(r); }