protected static void implSquare(long[] x, long[] zz) { Interleave.expand64To128(x[0], zz, 0); Interleave.expand64To128(x[1], zz, 2); Interleave.expand64To128(x[2], zz, 4); long x3 = x[3]; zz[6] = Interleave.expand32to64((int)x3); zz[7] = Interleave.expand16to32((int)(x3 >>> 32)) & 0xFFFFFFFFL; } }
public static void square(long[] x, long[] z) { long[] t = new long[4]; Interleave.expand64To128Rev(x[0], t, 0); Interleave.expand64To128Rev(x[1], t, 2); long z0 = t[0], z1 = t[1], z2 = t[2], z3 = t[3]; z1 ^= z3 ^ (z3 >>> 1) ^ (z3 >>> 2) ^ (z3 >>> 7); z2 ^= (z3 << 63) ^ (z3 << 62) ^ (z3 << 57); z0 ^= z2 ^ (z2 >>> 1) ^ (z2 >>> 2) ^ (z2 >>> 7); z1 ^= (z2 << 63) ^ (z2 << 62) ^ (z2 << 57); z[0] = z0; z[1] = z1; }
protected static void implSquare(long[] x, long[] zz) { Interleave.expand64To128(x[0], zz, 0); Interleave.expand64To128(x[1], zz, 2); long x2 = x[2]; zz[4] = Interleave.expand32to64((int)x2); zz[5] = Interleave.expand8to16((int)(x2 >>> 32)) & 0xFFFFFFFFL; } }
protected static void implSquare(long[] x, long[] zz) { for (int i = 0; i < 4; ++i) { Interleave.expand64To128(x[i], zz, i << 1); } zz[8] = Interleave.expand32to64((int)x[4]); } }
protected static void implSquare(long[] x, long[] zz) { Interleave.expand64To128(x[0], zz, 0); Interleave.expand64To128(x[1], zz, 2); zz[4] = Interleave.expand8to16((int)x[2]) & 0xFFFFFFFFL; } }
protected static void implSquare(long[] x, long[] zz) { Interleave.expand64To128(x[0], zz, 0); Interleave.expand64To128(x[1], zz, 2); Interleave.expand64To128(x[2], zz, 4); zz[6] = (x[3] & M01); } }
n[i] = Interleave.shuffle2(n[i]);
public static void sqrt(long[] x, long[] z) { long u0, u1; u0 = Interleave.unshuffle(x[0]); u1 = Interleave.unshuffle(x[1]); long e0 = (u0 & 0x00000000FFFFFFFFL) | (u1 << 32); long c0 = (u0 >>> 32) | (u1 & 0xFFFFFFFF00000000L); u0 = Interleave.unshuffle(x[2]); long e1 = (u0 & 0x00000000FFFFFFFFL) ^ (x[3] << 32); long c1 = (u0 >>> 32); z[0] = e0 ^ (c0 << 8); z[1] = e1 ^ (c1 << 8) ^ (c0 >>> 56) ^ (c0 << 33); z[2] = (c1 >>> 56) ^ (c1 << 33) ^ (c0 >>> 31); z[3] = (c1 >>> 31); }
protected static void implSquare(long[] x, long[] zz) { for (int i = 0; i < 6; ++i) { Interleave.expand64To128(x[i], zz, i << 1); } zz[12] = Interleave.expand32to64((int)x[6]); } }
protected static void implSquare(long[] x, long[] zz) { for (int i = 0; i < 9; ++i) { Interleave.expand64To128(x[i], zz, i << 1); } } }
protected static void implSquare(long[] x, long[] zz) { Interleave.expand64To128(x[0], zz, 0); Interleave.expand64To128(x[1], zz, 2); Interleave.expand64To128(x[2], zz, 4); long x3 = x[3]; zz[6] = Interleave.expand32to64((int)x3); zz[7] = Interleave.expand16to32((int)(x3 >>> 32)) & 0xFFFFFFFFL; } }
public static void sqrt(long[] x, long[] z) { long u0, u1; u0 = Interleave.unshuffle(x[0]); u1 = Interleave.unshuffle(x[1]); long e0 = (u0 & 0x00000000FFFFFFFFL) | (u1 << 32); long c0 = (u0 >>> 32) | (u1 & 0xFFFFFFFF00000000L); u0 = Interleave.unshuffle(x[2]); u1 = Interleave.unshuffle(x[3]); long e1 = (u0 & 0x00000000FFFFFFFFL) | (u1 << 32); long c1 = (u0 >>> 32) | (u1 & 0xFFFFFFFF00000000L); u0 = Interleave.unshuffle(x[4]); u1 = Interleave.unshuffle(x[5]); long e2 = (u0 & 0x00000000FFFFFFFFL) | (u1 << 32); long c2 = (u0 >>> 32) | (u1 & 0xFFFFFFFF00000000L); u0 = Interleave.unshuffle(x[6]); long e3 = (u0 & 0x00000000FFFFFFFFL); long c3 = (u0 >>> 32); z[0] = e0 ^ (c0 << 44); z[1] = e1 ^ (c1 << 44) ^ (c0 >>> 20); z[2] = e2 ^ (c2 << 44) ^ (c1 >>> 20); z[3] = e3 ^ (c3 << 44) ^ (c2 >>> 20) ^ (c0 << 13); z[4] = (c3 >>> 20) ^ (c1 << 13) ^ (c0 >>> 51); z[5] = (c2 << 13) ^ (c1 >>> 51); z[6] = (c3 << 13) ^ (c2 >>> 51); // assert (c3 >>> 51) == 0; }
protected static void implSquare(long[] x, long[] zz) { Interleave.expand64To128(x[0], zz, 0); Interleave.expand64To128(x[1], zz, 2); } }
public static void sqrt(long[] x, long[] z) { long[] odd = Nat320.create64(); long u0, u1; u0 = Interleave.unshuffle(x[0]); u1 = Interleave.unshuffle(x[1]); long e0 = (u0 & 0x00000000FFFFFFFFL) | (u1 << 32); odd[0] = (u0 >>> 32) | (u1 & 0xFFFFFFFF00000000L); u0 = Interleave.unshuffle(x[2]); u1 = Interleave.unshuffle(x[3]); long e1 = (u0 & 0x00000000FFFFFFFFL) | (u1 << 32); odd[1] = (u0 >>> 32) | (u1 & 0xFFFFFFFF00000000L); u0 = Interleave.unshuffle(x[4]); long e2 = (u0 & 0x00000000FFFFFFFFL); odd[2] = (u0 >>> 32); multiply(odd, ROOT_Z, z); z[0] ^= e0; z[1] ^= e1; z[2] ^= e2; }
public static void square(long[] x, long[] z) { long[] t = new long[4]; Interleave.expand64To128(x[0], t, 0); Interleave.expand64To128(x[1], t, 2); long z0 = t[0], z1 = t[1], z2 = t[2], z3 = t[3]; z1 ^= z3 ^ (z3 << 1) ^ (z3 << 2) ^ (z3 << 7); z2 ^= (z3 >>> 63) ^ (z3 >>> 62) ^ (z3 >>> 57); z0 ^= z2 ^ (z2 << 1) ^ (z2 << 2) ^ (z2 << 7); z1 ^= (z2 >>> 63) ^ (z2 >>> 62) ^ (z2 >>> 57); z[0] = z0; z[1] = z1; }
public static void sqrt(long[] x, long[] z) { long[] odd = Nat192.create64(); long u0, u1; u0 = Interleave.unshuffle(x[0]); u1 = Interleave.unshuffle(x[1]); long e0 = (u0 & 0x00000000FFFFFFFFL) | (u1 << 32); odd[0] = (u0 >>> 32) | (u1 & 0xFFFFFFFF00000000L); u0 = Interleave.unshuffle(x[2]); long e1 = (u0 & 0x00000000FFFFFFFFL); odd[1] = (u0 >>> 32); multiply(odd, ROOT_Z, z); z[0] ^= e0; z[1] ^= e1; }
public static void square(long[] x, long[] z) { long[] t = new long[SIZE << 1]; for (int i = 0; i < SIZE; ++i) { Interleave.expand64To128(x[i], t, i << 1); } int j = SIZE << 1; while (--j >= SIZE) { long n = t[j]; t[j - SIZE ] ^= n ^ (n << 2) ^ (n << 5) ^ (n << 8); t[j - SIZE + 1] ^= (n >>> 62) ^ (n >>> 59) ^ (n >>> 56); } copy(t, z); }
public static void sqrt(long[] x, long[] z) { long[] odd = Nat192.create64(); long u0, u1; u0 = Interleave.unshuffle(x[0]); u1 = Interleave.unshuffle(x[1]); long e0 = (u0 & 0x00000000FFFFFFFFL) | (u1 << 32); odd[0] = (u0 >>> 32) | (u1 & 0xFFFFFFFF00000000L); u0 = Interleave.unshuffle(x[2]); long e1 = (u0 & 0x00000000FFFFFFFFL); odd[1] = (u0 >>> 32); multiply(odd, ROOT_Z, z); z[0] ^= e0; z[1] ^= e1; }
public static void square(long[] x, long[] z) { long[] t = new long[SIZE << 1]; for (int i = 0; i < SIZE; ++i) { Interleave.expand64To128(x[i], t, i << 1); } int j = SIZE << 1; while (--j >= SIZE) { long n = t[j]; t[j - SIZE ] ^= n ^ (n << 2) ^ (n << 5) ^ (n << 10); t[j - SIZE + 1] ^= (n >>> 62) ^ (n >>> 59) ^ (n >>> 54); } copy(t, z); }