public static bool secp256k1_ge_set_xquad(Ge r, Fe x) { r.X = x.Clone(); var fe1 = new Fe(); Field.Sqr(fe1, x); var fe2 = new Fe(); Field.Mul(fe2, x, fe1); r.Infinity = false; var fe3 = new Fe(); Field.SetInt(fe3, 7U); Field.Add(fe3, fe2); return(Field.Sqrt(r.Y, fe3)); }
public static void secp256k1_gej_double_var(GeJ r, GeJ a, Fe rzr) { r.Infinity = a.Infinity; if (r.Infinity) { if (rzr == null) { return; } Field.SetInt(rzr, 1U); } else { if (rzr != null) { rzr = a.Y.Clone(); Field.NormalizeWeak(rzr); Field.MulInt(rzr, 2U); } Field.Mul(r.Z, a.Z, a.Y); Field.MulInt(r.Z, 2U); var fe1 = new Fe(); Field.Sqr(fe1, a.X); Field.MulInt(fe1, 3U); var fe2 = new Fe(); Field.Sqr(fe2, fe1); var fe3 = new Fe(); Field.Sqr(fe3, a.Y); Field.MulInt(fe3, 2U); var fe4 = new Fe(); Field.Sqr(fe4, fe3); Field.MulInt(fe4, 2U); Field.Mul(fe3, fe3, a.X); r.X = fe3.Clone(); Field.MulInt(r.X, 4U); Field.Negate(r.X, r.X, 4U); Field.Add(r.X, fe2); Field.Negate(fe2, fe2, 1U); Field.MulInt(fe3, 6U); Field.Add(fe3, fe2); Field.Mul(r.Y, fe1, fe3); Field.Negate(fe2, fe4, 2U); Field.Add(r.Y, fe2); } }
public static void secp256k1_gej_add_ge_var(GeJ r, GeJ a, Ge b, Fe rzr) { if (a.Infinity) { Group.secp256k1_gej_set_ge(r, b); } else if (b.Infinity) { if (rzr != null) { Field.SetInt(rzr, 1U); } r = a.Clone(); } else { r.Infinity = false; var fe1 = new Fe(); Field.Sqr(fe1, a.Z); var fe2 = a.X.Clone(); Field.NormalizeWeak(fe2); var fe3 = new Fe(); Field.Mul(fe3, b.X, fe1); var fe4 = a.Y.Clone(); Field.NormalizeWeak(fe4); var fe5 = new Fe(); Field.Mul(fe5, b.Y, fe1); Field.Mul(fe5, fe5, a.Z); var fe6 = new Fe(); Field.Negate(fe6, fe2, 1U); Field.Add(fe6, fe3); var fe7 = new Fe(); Field.Negate(fe7, fe4, 1U); Field.Add(fe7, fe5); if (Field.NormalizesToZeroVar(fe6)) { if (Field.NormalizesToZeroVar(fe7)) { Group.secp256k1_gej_double_var(r, a, rzr); } else { if (rzr != null) { Field.SetInt(rzr, 0U); } r.Infinity = true; } } else { var fe8 = new Fe(); Field.Sqr(fe8, fe7); var fe9 = new Fe(); Field.Sqr(fe9, fe6); var fe10 = new Fe(); Field.Mul(fe10, fe6, fe9); if (rzr != null) { rzr = fe6.Clone(); } Field.Mul(r.Z, a.Z, fe6); var fe11 = new Fe(); Field.Mul(fe11, fe2, fe9); r.X = fe11.Clone(); Field.MulInt(r.X, 2U); Field.Add(r.X, fe10); Field.Negate(r.X, r.X, 3U); Field.Add(r.X, fe8); Field.Negate(r.Y, r.X, 5U); Field.Add(r.Y, fe11); Field.Mul(r.Y, r.Y, fe7); Field.Mul(fe10, fe10, fe4); Field.Negate(fe10, fe10, 1U); Field.Add(r.Y, fe10); } } }