Exemplo n.º 1
0
        public static Secp256k1FieldElement GetYCoordinate(Secp256k1FieldElement x, bool yIsEven)
        {
            var a = Secp256k1Constants.A;
            var b = Secp256k1Constants.B;

            // y^2 == x^3 + a*x + b
            var left = x.Pow(3) + a * x + b;

            var leftField  = new Secp256k1FieldElement(left.Num);
            var candidateY = leftField.Sqrt();

            Secp256k1FieldElement even;
            Secp256k1FieldElement odd;

            if (candidateY.Num % 2 == 0)
            {
                even = candidateY;
                odd  = new Secp256k1FieldElement(Secp256k1Constants.P - candidateY.Num);
            }
            else
            {
                even = new Secp256k1FieldElement(Secp256k1Constants.P - candidateY.Num);
                odd  = candidateY;
            }

            if (yIsEven)
            {
                return(even);
            }
            else
            {
                return(odd);
            }
        }
Exemplo n.º 2
0
 public Secp256k1Point(Secp256k1FieldElement x, Secp256k1FieldElement y) : base(Secp256k1Constants.A, Secp256k1Constants.B, x, y)
 {
 }