public static void square(int len, int[] x, int[] zz) { int extLen = len << 1; int c = 0; int j = len, k = extLen; do { long xVal = (x[--j] & M); long p = xVal * xVal; zz[--k] = (c << 31) | (int)(p >>> 33); zz[--k] = (int)(p >>> 1); c = (int)p; } while (j > 0); for (int i = 1; i < len; ++i) { c = squareWordAdd(x, i, zz); addWordAt(extLen, c, zz, i << 1); } shiftUpBit(extLen, zz, x[0] << 31); }
public static void square(int len, int[] x, int[] zz) { int extLen = len << 1; int c = 0; int j = len, k = extLen; do { long xVal = (x[--j] & M); long p = xVal * xVal; zz[--k] = (c << 31) | (int)(p >>> 33); zz[--k] = (int)(p >>> 1); c = (int)p; } while (j > 0); for (int i = 1; i < len; ++i) { c = squareWordAdd(x, i, zz); addWordAt(extLen, c, zz, i << 1); } shiftUpBit(extLen, zz, x[0] << 31); }
public static void square(int len, int[] x, int xOff, int[] zz, int zzOff) { int extLen = len << 1; int c = 0; int j = len, k = extLen; do { long xVal = (x[xOff + --j] & M); long p = xVal * xVal; zz[zzOff + --k] = (c << 31) | (int)(p >>> 33); zz[zzOff + --k] = (int)(p >>> 1); c = (int)p; } while (j > 0); for (int i = 1; i < len; ++i) { c = squareWordAdd(x, xOff, i, zz, zzOff); addWordAt(extLen, c, zz, zzOff, i << 1); } shiftUpBit(extLen, zz, zzOff, x[xOff] << 31); }
public static void square(int len, int[] x, int xOff, int[] zz, int zzOff) { int extLen = len << 1; int c = 0; int j = len, k = extLen; do { long xVal = (x[xOff + --j] & M); long p = xVal * xVal; zz[zzOff + --k] = (c << 31) | (int)(p >>> 33); zz[zzOff + --k] = (int)(p >>> 1); c = (int)p; } while (j > 0); for (int i = 1; i < len; ++i) { c = squareWordAdd(x, xOff, i, zz, zzOff); addWordAt(extLen, c, zz, zzOff, i << 1); } shiftUpBit(extLen, zz, zzOff, x[xOff] << 31); }