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); }
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[] x, int[] zz) { Nat256.square(x, zz); Nat256.square(x, 8, zz, 16); int c24 = Nat256.addToEachOther(zz, 8, zz, 16); int c16 = c24 + Nat256.addTo(zz, 0, zz, 8, 0); c24 += Nat256.addTo(zz, 24, zz, 16, c16); int[] dx = Nat256.create(); Nat256.diff(x, 8, x, 0, dx, 0); int[] tt = Nat256.createExt(); Nat256.square(dx, tt); c24 += Nat.subFrom(16, tt, 0, zz, 8); Nat.addWordAt(32, c24, zz, 24); } }
public static void square(int[] x, int[] zz) { Nat256.square(x, zz); Nat256.square(x, 8, zz, 16); int c24 = Nat256.addToEachOther(zz, 8, zz, 16); int c16 = c24 + Nat256.addTo(zz, 0, zz, 8, 0); c24 += Nat256.addTo(zz, 24, zz, 16, c16); int[] dx = Nat256.create(); Nat256.diff(x, 8, x, 0, dx, 0); int[] tt = Nat256.createExt(); Nat256.square(dx, tt); c24 += Nat.subFrom(16, tt, 0, zz, 8); Nat.addWordAt(32, c24, zz, 24); } }
public static void square(int[] x, int[] zz) { Nat192.square(x, zz); Nat192.square(x, 6, zz, 12); int c18 = Nat192.addToEachOther(zz, 6, zz, 12); int c12 = c18 + Nat192.addTo(zz, 0, zz, 6, 0); c18 += Nat192.addTo(zz, 18, zz, 12, c12); int[] dx = Nat192.create(); Nat192.diff(x, 6, x, 0, dx, 0); int[] tt = Nat192.createExt(); Nat192.square(dx, tt); c18 += Nat.subFrom(12, tt, 0, zz, 6); Nat.addWordAt(24, c18, zz, 18); } }
public static void square(int[] x, int[] zz) { Nat192.square(x, zz); Nat192.square(x, 6, zz, 12); int c18 = Nat192.addToEachOther(zz, 6, zz, 12); int c12 = c18 + Nat192.addTo(zz, 0, zz, 6, 0); c18 += Nat192.addTo(zz, 18, zz, 12, c12); int[] dx = Nat192.create(); Nat192.diff(x, 6, x, 0, dx, 0); int[] tt = Nat192.createExt(); Nat192.square(dx, tt); c18 += Nat.subFrom(12, tt, 0, zz, 6); Nat.addWordAt(24, c18, zz, 18); } }
public static void mul(int[] x, int[] y, int[] zz) { Nat256.mul(x, y, zz); Nat256.mul(x, 8, y, 8, zz, 16); int c24 = Nat256.addToEachOther(zz, 8, zz, 16); int c16 = c24 + Nat256.addTo(zz, 0, zz, 8, 0); c24 += Nat256.addTo(zz, 24, zz, 16, c16); int[] dx = Nat256.create(), dy = Nat256.create(); boolean neg = Nat256.diff(x, 8, x, 0, dx, 0) != Nat256.diff(y, 8, y, 0, dy, 0); int[] tt = Nat256.createExt(); Nat256.mul(dx, dy, tt); c24 += neg ? Nat.addTo(16, tt, 0, zz, 8) : Nat.subFrom(16, tt, 0, zz, 8); Nat.addWordAt(32, c24, zz, 24); }
public static void mul(int[] x, int[] y, int[] zz) { Nat192.mul(x, y, zz); Nat192.mul(x, 6, y, 6, zz, 12); int c18 = Nat192.addToEachOther(zz, 6, zz, 12); int c12 = c18 + Nat192.addTo(zz, 0, zz, 6, 0); c18 += Nat192.addTo(zz, 18, zz, 12, c12); int[] dx = Nat192.create(), dy = Nat192.create(); boolean neg = Nat192.diff(x, 6, x, 0, dx, 0) != Nat192.diff(y, 6, y, 0, dy, 0); int[] tt = Nat192.createExt(); Nat192.mul(dx, dy, tt); c18 += neg ? Nat.addTo(12, tt, 0, zz, 6) : Nat.subFrom(12, tt, 0, zz, 6); Nat.addWordAt(24, c18, zz, 18); }
public static void mul(int[] x, int[] y, int[] zz) { Nat192.mul(x, y, zz); Nat192.mul(x, 6, y, 6, zz, 12); int c18 = Nat192.addToEachOther(zz, 6, zz, 12); int c12 = c18 + Nat192.addTo(zz, 0, zz, 6, 0); c18 += Nat192.addTo(zz, 18, zz, 12, c12); int[] dx = Nat192.create(), dy = Nat192.create(); boolean neg = Nat192.diff(x, 6, x, 0, dx, 0) != Nat192.diff(y, 6, y, 0, dy, 0); int[] tt = Nat192.createExt(); Nat192.mul(dx, dy, tt); c18 += neg ? Nat.addTo(12, tt, 0, zz, 6) : Nat.subFrom(12, tt, 0, zz, 6); Nat.addWordAt(24, c18, zz, 18); }
public static void mul(int[] x, int[] y, int[] zz) { Nat256.mul(x, y, zz); Nat256.mul(x, 8, y, 8, zz, 16); int c24 = Nat256.addToEachOther(zz, 8, zz, 16); int c16 = c24 + Nat256.addTo(zz, 0, zz, 8, 0); c24 += Nat256.addTo(zz, 24, zz, 16, c16); int[] dx = Nat256.create(), dy = Nat256.create(); boolean neg = Nat256.diff(x, 8, x, 0, dx, 0) != Nat256.diff(y, 8, y, 0, dy, 0); int[] tt = Nat256.createExt(); Nat256.mul(dx, dy, tt); c24 += neg ? Nat.addTo(16, tt, 0, zz, 8) : Nat.subFrom(16, tt, 0, zz, 8); Nat.addWordAt(32, c24, zz, 24); }