BraintreeEncryption.Library.BouncyCastle.Math.BigInteger.ExtEuclid C# (CSharp) Method

ExtEuclid() private static method

private static ExtEuclid ( BigInteger a, BigInteger b, BigInteger u1Out, BigInteger u2Out ) : BigInteger
a BigInteger
b BigInteger
u1Out BigInteger
u2Out BigInteger
return BigInteger
		private static BigInteger ExtEuclid(
			BigInteger	a,
			BigInteger	b,
			BigInteger	u1Out,
			BigInteger	u2Out)
		{
			BigInteger u1 = One;
			BigInteger u3 = a;
			BigInteger v1 = Zero;
			BigInteger v3 = b;

			while (v3.sign > 0)
			{
				BigInteger[] q = u3.DivideAndRemainder(v3);

				BigInteger tmp = v1.Multiply(q[0]);
				BigInteger tn = u1.Subtract(tmp);
				u1 = v1;
				v1 = tn;

				u3 = v3;
				v3 = q[1];
			}

			if (u1Out != null)
			{
				u1Out.sign = u1.sign;
				u1Out.magnitude = u1.magnitude;
			}

			if (u2Out != null)
			{
				BigInteger tmp = u1.Multiply(a);
				tmp = u3.Subtract(tmp);
				BigInteger res = tmp.Divide(b);
				u2Out.sign = res.sign;
				u2Out.magnitude = res.magnitude;
			}

			return u3;
		}