Lidgren.Network.NetBigInteger.Multiply C# (CSharp) Method

Multiply() public method

public Multiply ( NetBigInteger val ) : NetBigInteger
val NetBigInteger
return NetBigInteger
        public NetBigInteger Multiply(
			NetBigInteger val)
        {
            if (m_sign == 0 || val.m_sign == 0)
                return Zero;

            if (val.QuickPow2Check()) // val is power of two
            {
                NetBigInteger result = ShiftLeft(val.Abs().BitLength - 1);
                return val.m_sign > 0 ? result : result.Negate();
            }

            if (QuickPow2Check()) // this is power of two
            {
                NetBigInteger result = val.ShiftLeft(Abs().BitLength - 1);
                return m_sign > 0 ? result : result.Negate();
            }

            int maxBitLength = BitLength + val.BitLength;
            int resLength = (maxBitLength + BitsPerInt - 1) / BitsPerInt;

            int[] res = new int[resLength];

            if (val == this)
            {
                Square(res, m_magnitude);
            }
            else
            {
                Multiply(res, m_magnitude, val.m_magnitude);
            }

            return new NetBigInteger(m_sign * val.m_sign, res, true);
        }

Same methods

NetBigInteger::Multiply ( int x, int y, int z ) : int[]

Usage Example

Exemplo n.º 1
0
		/// <summary>
		/// Computes the client session value
		/// </summary>
		public static byte[] ComputeClientSessionValue(byte[] serverPublicEphemeral, byte[] xdata,  byte[] udata, byte[] clientPrivateEphemeral)
		{
			// (B - kg^x) ^ (a + ux)   (mod N)
			var B = new NetBigInteger(NetUtility.ToHexString(serverPublicEphemeral), 16);
			var x = new NetBigInteger(NetUtility.ToHexString(xdata), 16);
			var u = new NetBigInteger(NetUtility.ToHexString(udata), 16);
			var a = new NetBigInteger(NetUtility.ToHexString(clientPrivateEphemeral), 16);

			var bx = g.ModPow(x, N);
			var btmp = B.Add(N.Multiply(k)).Subtract(bx.Multiply(k)).Mod(N);
			return btmp.ModPow(x.Multiply(u).Add(a), N).ToByteArrayUnsigned();
		}
All Usage Examples Of Lidgren.Network.NetBigInteger::Multiply