1d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Rootpackage org.bouncycastle.math.raw; 2d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root 3d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root 4d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Rootpublic abstract class Nat384 5d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root{ 6d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root public static void mul(int[] x, int[] y, int[] zz) 7d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root { 8d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root Nat192.mul(x, y, zz); 9d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root Nat192.mul(x, 6, y, 6, zz, 12); 10d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root 11d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root int c18 = Nat192.addToEachOther(zz, 6, zz, 12); 12d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root int c12 = c18 + Nat192.addTo(zz, 0, zz, 6, 0); 13d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root c18 += Nat192.addTo(zz, 18, zz, 12, c12); 14d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root 15d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root int[] dx = Nat192.create(), dy = Nat192.create(); 16d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root boolean neg = Nat192.diff(x, 6, x, 0, dx, 0) != Nat192.diff(y, 6, y, 0, dy, 0); 17d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root 18d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root int[] tt = Nat192.createExt(); 19d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root Nat192.mul(dx, dy, tt); 20d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root 21d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root c18 += neg ? Nat.addTo(12, tt, 0, zz, 6) : Nat.subFrom(12, tt, 0, zz, 6); 22d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root Nat.addWordAt(24, c18, zz, 18); 23d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root } 24d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root 25d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root public static void square(int[] x, int[] zz) 26d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root { 27d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root Nat192.square(x, zz); 28d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root Nat192.square(x, 6, zz, 12); 29d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root 30d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root int c18 = Nat192.addToEachOther(zz, 6, zz, 12); 31d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root int c12 = c18 + Nat192.addTo(zz, 0, zz, 6, 0); 32d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root c18 += Nat192.addTo(zz, 18, zz, 12, c12); 33d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root 34d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root int[] dx = Nat192.create(); 35d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root Nat192.diff(x, 6, x, 0, dx, 0); 36d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root 37d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root int[] tt = Nat192.createExt(); 38d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root Nat192.square(dx, tt); 39d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root 40d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root c18 += Nat.subFrom(12, tt, 0, zz, 6); 41d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root Nat.addWordAt(24, c18, zz, 18); 42d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root } 43d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root} 44