Org.BouncyCastle.Math.EC.F2mCurve.DecompressPoint C# (CSharp) Method

DecompressPoint() protected method

protected DecompressPoint ( int yTilde, BigInteger X1 ) : ECPoint
yTilde int
X1 BigInteger
return ECPoint
		protected internal override ECPoint DecompressPoint(
			int			yTilde,
			BigInteger	X1)
		{
			ECFieldElement xp = FromBigInteger(X1);
			ECFieldElement yp = null;
			if (xp.ToBigInteger().SignValue == 0)
			{
				yp = (F2mFieldElement)b;
				for (int i = 0; i < m - 1; i++)
				{
					yp = yp.Square();
				}
			}
			else
			{
				ECFieldElement beta = xp.Add(a).Add(
					b.Multiply(xp.Square().Invert()));
				ECFieldElement z = solveQuadradicEquation(beta);

				if (z == null)
					throw new ArithmeticException("Invalid point compression");

				int zBit = z.ToBigInteger().TestBit(0) ? 1 : 0;
				if (zBit != yTilde)
				{
					z = z.Add(FromBigInteger(BigInteger.One));
				}

				yp = xp.Multiply(z);
			}

			return new F2mPoint(this, xp, yp, true);
		}