亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? biginteger.cs

?? JAVA實現的RSA公鑰加密方法
?? CS
?? 第 1 頁 / 共 5 頁
字號:
			if(leftOver != 0)         // length not multiples of 4
				dataLength++;

			if(dataLength > maxLength || inLen > inData.Length)
				throw(new ArithmeticException("Byte overflow in constructor."));


			data = new uint[maxLength];

			for(int i = inLen - 1, j = 0; i >= 3; i -= 4, j++)
			{
				data[j] = (uint)((inData[i-3] << 24) + (inData[i-2] << 16) +
					(inData[i-1] <<  8) + inData[i]);
			}

			if(leftOver == 1)
				data[dataLength-1] = (uint)inData[0];
			else if(leftOver == 2)
				data[dataLength-1] = (uint)((inData[0] << 8) + inData[1]);
			else if(leftOver == 3)
				data[dataLength-1] = (uint)((inData[0] << 16) + (inData[1] << 8) + inData[2]);


			if(dataLength == 0)
				dataLength = 1;

			while(dataLength > 1 && data[dataLength-1] == 0)
				dataLength--;

			//Console.WriteLine("Len = " + dataLength);
		}


		//***********************************************************************
		// Constructor (Default value provided by an array of unsigned integers)
		//*********************************************************************

		public BigInteger(uint[] inData)
		{
			dataLength = inData.Length;

			if(dataLength > maxLength)
				throw(new ArithmeticException("Byte overflow in constructor."));

			data = new uint[maxLength];

			for(int i = dataLength - 1, j = 0; i >= 0; i--, j++)
				data[j] = inData[i];

			while(dataLength > 1 && data[dataLength-1] == 0)
				dataLength--;

			//Console.WriteLine("Len = " + dataLength);
		}


		//***********************************************************************
		// Overloading of the typecast operator.
		// For BigInteger bi = 10;
		//***********************************************************************

		public static implicit operator BigInteger(long value)
		{
			return (new BigInteger(value));
		}

		public static implicit operator BigInteger(ulong value)
		{
			return (new BigInteger(value));
		}

		public static implicit operator BigInteger(int value)
		{
			return (new BigInteger((long)value));
		}

		public static implicit operator BigInteger(uint value)
		{
			return (new BigInteger((ulong)value));
		}


		//***********************************************************************
		// Overloading of addition operator
		//***********************************************************************

		public static BigInteger operator +(BigInteger bi1, BigInteger bi2)
		{
			BigInteger result = new BigInteger();

			result.dataLength = (bi1.dataLength > bi2.dataLength) ? bi1.dataLength : bi2.dataLength;

			long carry = 0;
			for(int i = 0; i < result.dataLength; i++)
			{
				long sum = (long)bi1.data[i] + (long)bi2.data[i] + carry;
				carry  = sum >> 32;
				result.data[i] = (uint)(sum & 0xFFFFFFFF);
			}

			if(carry != 0 && result.dataLength < maxLength)
			{
				result.data[result.dataLength] = (uint)(carry);
				result.dataLength++;
			}

			while(result.dataLength > 1 && result.data[result.dataLength-1] == 0)
				result.dataLength--;


			// overflow check
			int lastPos = maxLength - 1;
			if((bi1.data[lastPos] & 0x80000000) == (bi2.data[lastPos] & 0x80000000) &&
				(result.data[lastPos] & 0x80000000) != (bi1.data[lastPos] & 0x80000000))
			{
				throw (new ArithmeticException());
			}

			return result;
		}


		//***********************************************************************
		// Overloading of the unary ++ operator
		//***********************************************************************

		public static BigInteger operator ++(BigInteger bi1)
		{
			BigInteger result = new BigInteger(bi1);

			long val, carry = 1;
			int index = 0;

			while(carry != 0 && index < maxLength)
			{
				val = (long)(result.data[index]);
				val++;

				result.data[index] = (uint)(val & 0xFFFFFFFF);
				carry = val >> 32;

				index++;
			}

			if(index > result.dataLength)
				result.dataLength = index;
			else
			{
				while(result.dataLength > 1 && result.data[result.dataLength-1] == 0)
					result.dataLength--;
			}

			// overflow check
			int lastPos = maxLength - 1;

			// overflow if initial value was +ve but ++ caused a sign
			// change to negative.

			if((bi1.data[lastPos] & 0x80000000) == 0 &&
				(result.data[lastPos] & 0x80000000) != (bi1.data[lastPos] & 0x80000000))
			{
				throw (new ArithmeticException("Overflow in ++."));
			}
			return result;
		}


		//***********************************************************************
		// Overloading of subtraction operator
		//***********************************************************************

		public static BigInteger operator -(BigInteger bi1, BigInteger bi2)
		{
			BigInteger result = new BigInteger();

			result.dataLength = (bi1.dataLength > bi2.dataLength) ? bi1.dataLength : bi2.dataLength;

			long carryIn = 0;
			for(int i = 0; i < result.dataLength; i++)
			{
				long diff;

				diff = (long)bi1.data[i] - (long)bi2.data[i] - carryIn;
				result.data[i] = (uint)(diff & 0xFFFFFFFF);

				if(diff < 0)
					carryIn = 1;
				else
					carryIn = 0;
			}

			// roll over to negative
			if(carryIn != 0)
			{
				for(int i = result.dataLength; i < maxLength; i++)
					result.data[i] = 0xFFFFFFFF;
				result.dataLength = maxLength;
			}

			// fixed in v1.03 to give correct datalength for a - (-b)
			while(result.dataLength > 1 && result.data[result.dataLength-1] == 0)
				result.dataLength--;

			// overflow check

			int lastPos = maxLength - 1;
			if((bi1.data[lastPos] & 0x80000000) != (bi2.data[lastPos] & 0x80000000) &&
				(result.data[lastPos] & 0x80000000) != (bi1.data[lastPos] & 0x80000000))
			{
				throw (new ArithmeticException());
			}

			return result;
		}


		//***********************************************************************
		// Overloading of the unary -- operator
		//***********************************************************************

		public static BigInteger operator --(BigInteger bi1)
		{
			BigInteger result = new BigInteger(bi1);

			long val;
			bool carryIn = true;
			int index = 0;

			while(carryIn && index < maxLength)
			{
				val = (long)(result.data[index]);
				val--;

				result.data[index] = (uint)(val & 0xFFFFFFFF);

				if(val >= 0)
					carryIn = false;

				index++;
			}

			if(index > result.dataLength)
				result.dataLength = index;

			while(result.dataLength > 1 && result.data[result.dataLength-1] == 0)
				result.dataLength--;

			// overflow check
			int lastPos = maxLength - 1;

			// overflow if initial value was -ve but -- caused a sign
			// change to positive.

			if((bi1.data[lastPos] & 0x80000000) != 0 &&
				(result.data[lastPos] & 0x80000000) != (bi1.data[lastPos] & 0x80000000))
			{
				throw (new ArithmeticException("Underflow in --."));
			}

			return result;
		}


		//***********************************************************************
		// Overloading of multiplication operator
		//***********************************************************************

		public static BigInteger operator *(BigInteger bi1, BigInteger bi2)
		{
			int lastPos = maxLength-1;
			bool bi1Neg = false, bi2Neg = false;

			// take the absolute value of the inputs
			try
			{
				if((bi1.data[lastPos] & 0x80000000) != 0)     // bi1 negative
				{
					bi1Neg = true; bi1 = -bi1;
				}
				if((bi2.data[lastPos] & 0x80000000) != 0)     // bi2 negative
				{
					bi2Neg = true; bi2 = -bi2;
				}
			}
			catch(Exception) {}

			BigInteger result = new BigInteger();

			// multiply the absolute values
			try
			{
				for(int i = 0; i < bi1.dataLength; i++)
				{
					if(bi1.data[i] == 0)    continue;

					ulong mcarry = 0;
					for(int j = 0, k = i; j < bi2.dataLength; j++, k++)
					{
						// k = i + j
						ulong val = ((ulong)bi1.data[i] * (ulong)bi2.data[j]) +
							(ulong)result.data[k] + mcarry;

						result.data[k] = (uint)(val & 0xFFFFFFFF);
						mcarry = (val >> 32);
					}

					if(mcarry != 0)
						result.data[i+bi2.dataLength] = (uint)mcarry;
				}
			}
			catch(Exception)
			{
				throw(new ArithmeticException("Multiplication overflow."));
			}


			result.dataLength = bi1.dataLength + bi2.dataLength;
			if(result.dataLength > maxLength)
				result.dataLength = maxLength;

			while(result.dataLength > 1 && result.data[result.dataLength-1] == 0)
				result.dataLength--;

			// overflow check (result is -ve)
			if((result.data[lastPos] & 0x80000000) != 0)
			{
				if(bi1Neg != bi2Neg && result.data[lastPos] == 0x80000000)    // different sign
				{
					// handle the special case where multiplication produces
					// a max negative number in 2's complement.

					if(result.dataLength == 1)
						return result;
					else
					{
						bool isMaxNeg = true;
						for(int i = 0; i < result.dataLength - 1 && isMaxNeg; i++)
						{
							if(result.data[i] != 0)
								isMaxNeg = false;
						}

						if(isMaxNeg)
							return result;
					}
				}

				throw(new ArithmeticException("Multiplication overflow."));
			}

			// if input has different signs, then result is -ve
			if(bi1Neg != bi2Neg)
				return -result;

			return result;
		}



		//***********************************************************************
		// Overloading of unary << operators
		//***********************************************************************

		public static BigInteger operator <<(BigInteger bi1, int shiftVal)
		{
			BigInteger result = new BigInteger(bi1);
			result.dataLength = shiftLeft(result.data, shiftVal);

			return result;
		}


		// least significant bits at lower part of buffer

		private static int shiftLeft(uint[] buffer, int shiftVal)
		{
			int shiftAmount = 32;
			int bufLen = buffer.Length;

			while(bufLen > 1 && buffer[bufLen-1] == 0)
				bufLen--;

			for(int count = shiftVal; count > 0;)
			{
				if(count < shiftAmount)
					shiftAmount = count;

				//Console.WriteLine("shiftAmount = {0}", shiftAmount);

				ulong carry = 0;
				for(int i = 0; i < bufLen; i++)
				{
					ulong val = ((ulong)buffer[i]) << shiftAmount;
					val |= carry;

					buffer[i] = (uint)(val & 0xFFFFFFFF);
					carry = val >> 32;
				}

				if(carry != 0)
				{
					if(bufLen + 1 <= buffer.Length)
					{
						buffer[bufLen] = (uint)carry;
						bufLen++;
					}
				}
				count -= shiftAmount;
			}
			return bufLen;
		}


		//***********************************************************************
		// Overloading of unary >> operators
		//***********************************************************************

		public static BigInteger operator >>(BigInteger bi1, int shiftVal)
		{
			BigInteger result = new BigInteger(bi1);
			result.dataLength = shiftRight(result.data, shiftVal);


			if((bi1.data[maxLength-1] & 0x80000000) != 0) // negative
			{
				for(int i = maxLength - 1; i >= result.dataLength; i--)
					result.data[i] = 0xFFFFFFFF;

				uint mask = 0x80000000;
				for(int i = 0; i < 32; i++)
				{
					if((result.data[result.dataLength-1] & mask) != 0)
						break;

					result.data[result.dataLength-1] |= mask;
					mask >>= 1;
				}
				result.dataLength = maxLength;
			}

			return result;
		}


		private static int shiftRight(uint[] buffer, int shiftVal)
		{
			int shiftAmount = 32;
			int invShift = 0;
			int bufLen = buffer.Length;

			while(bufLen > 1 && buffer[bufLen-1] == 0)
				bufLen--;

			//Console.WriteLine("bufLen = " + bufLen + " buffer.Length = " + buffer.Length);

			for(int count = shiftVal; count > 0;)
			{
				if(count < shiftAmount)
				{
					shiftAmount = count;
					invShift = 32 - shiftAmount;
				}

				//Console.WriteLine("shiftAmount = {0}", shiftAmount);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品一区二区三区电影天堂| 欧美日韩五月天| 欧美日韩久久久| 中文字幕乱码一区二区免费| 免费看欧美美女黄的网站| 日本久久一区二区| 国产午夜精品福利| 激情五月婷婷综合| 制服丝袜中文字幕亚洲| 一区二区三区毛片| 97久久精品人人澡人人爽| 久久精品亚洲一区二区三区浴池| 免费欧美在线视频| 欧美精品精品一区| 首页国产欧美久久| 欧洲人成人精品| 亚洲精品视频在线看| www.99精品| 亚洲国产高清在线观看视频| 国产一区中文字幕| 久久无码av三级| 国模少妇一区二区三区| 欧美电视剧在线看免费| 青娱乐精品在线视频| 欧美一区二区三区影视| 日本亚洲天堂网| 欧美一区二区在线免费观看| 肉丝袜脚交视频一区二区| 欧美剧情片在线观看| 日韩电影在线免费观看| 日韩精品专区在线影院重磅| 免费久久精品视频| 亚洲精品一区二区三区99| 国产一区二区三区av电影 | 欧美中文字幕一区二区三区亚洲| 国产精品久久久久久户外露出 | 黄色资源网久久资源365| 欧美大片在线观看| 国产精品一卡二卡| 中文字幕av一区二区三区高| av中文字幕不卡| 亚洲激情五月婷婷| 91精品国产91久久久久久最新毛片| 日韩精品免费专区| 精品国产伦一区二区三区免费| 国产一区欧美二区| 综合中文字幕亚洲| 欧美日韩精品一区二区在线播放| 日本不卡一区二区| 国产欧美一区二区精品秋霞影院| 成人精品视频一区二区三区| 一片黄亚洲嫩模| 欧美一区二区三区在线看| 国产精品亚洲午夜一区二区三区 | 26uuu国产一区二区三区 | 久久se精品一区精品二区| 国产日本欧美一区二区| 日本大香伊一区二区三区| 日本aⅴ精品一区二区三区| 国产丝袜在线精品| 欧美体内she精高潮| 久久国产日韩欧美精品| 国产精品久线观看视频| 欧美视频完全免费看| 国产精品1区2区3区| 亚洲乱码国产乱码精品精小说 | 中文字幕在线视频一区| 制服视频三区第一页精品| 成人h动漫精品一区二区| 丝袜美腿亚洲一区二区图片| 中文字幕av不卡| 欧美一区二区三区色| av激情亚洲男人天堂| 久久9热精品视频| 亚洲一区二区影院| 中文字幕av一区二区三区免费看| 欧美精品丝袜中出| 日本精品免费观看高清观看| 久久福利资源站| 亚洲国产综合视频在线观看| 国产女人aaa级久久久级| 欧美一级电影网站| 欧美午夜理伦三级在线观看| 成人污视频在线观看| 麻豆精品视频在线观看视频| 亚洲午夜电影在线| 国产精品毛片久久久久久| 精品福利一二区| 91精品国产综合久久久久| 欧美在线免费播放| 91麻豆123| 国产高清精品在线| 狠狠色狠狠色综合| 另类小说一区二区三区| 五月综合激情日本mⅴ| 亚洲制服欧美中文字幕中文字幕| 中文字幕中文字幕在线一区| 久久久久久免费毛片精品| 日韩视频免费观看高清完整版在线观看 | 欧美亚洲日本一区| 91一区二区三区在线观看| 国产91精品露脸国语对白| 国内一区二区在线| 极品销魂美女一区二区三区| 三级在线观看一区二区| 午夜av电影一区| 天天亚洲美女在线视频| 日韩精品午夜视频| 奇米色一区二区| 精油按摩中文字幕久久| 青青草国产精品亚洲专区无| 青娱乐精品在线视频| 久久精品99国产国产精| 国内成+人亚洲+欧美+综合在线| 久久精品国产久精国产爱| 久久av资源站| 国产激情偷乱视频一区二区三区| 精品一区二区三区影院在线午夜 | 91在线观看下载| 色呦呦日韩精品| 欧美三级蜜桃2在线观看| 欧美午夜精品免费| 欧美一区二区三区成人| 欧美va日韩va| 日本一区二区视频在线| 中文字幕在线观看一区| 夜夜爽夜夜爽精品视频| 日韩福利电影在线观看| 国产精品主播直播| 色哟哟在线观看一区二区三区| 欧美日韩精品系列| 337p日本欧洲亚洲大胆精品| 国产精品初高中害羞小美女文| 亚洲人成在线播放网站岛国| 五月天久久比比资源色| 激情综合一区二区三区| 99视频国产精品| 欧美男人的天堂一二区| 久久嫩草精品久久久精品| 亚洲女同一区二区| 蜜桃一区二区三区在线观看| 国产成人夜色高潮福利影视| 色视频欧美一区二区三区| 91精品国产手机| 国产精品成人一区二区艾草 | 亚洲影视在线播放| 美国十次综合导航| 99在线精品免费| 91精品啪在线观看国产60岁| 中文av一区二区| 青青草精品视频| 色8久久精品久久久久久蜜| 日韩美女一区二区三区四区| 亚洲日本乱码在线观看| 久久www免费人成看片高清| 一本久久精品一区二区| 精品成人私密视频| 亚洲国产精品综合小说图片区| 国产美女精品人人做人人爽| 在线观看免费视频综合| 久久久一区二区三区| 爽好久久久欧美精品| 91免费视频观看| 久久综合九色综合97婷婷| 亚洲电影在线免费观看| 99麻豆久久久国产精品免费| 精品国产乱码久久久久久夜甘婷婷| 亚洲视频在线一区观看| 国产成人精品一区二| 欧美顶级少妇做爰| 亚洲女人的天堂| 丁香婷婷综合网| 日韩精品一区二区在线| 亚洲成av人影院| 91色乱码一区二区三区| 国产拍欧美日韩视频二区| 奇米影视在线99精品| 欧美日韩三级一区二区| 夜夜揉揉日日人人青青一国产精品| 成人精品免费网站| 国产精品网曝门| 国内成人自拍视频| 精品国产伦一区二区三区观看体验 | 一区二区三区日韩欧美| 成人激情黄色小说| 久久一区二区三区四区| 卡一卡二国产精品| 欧美一区二区视频在线观看| 亚洲国产精品尤物yw在线观看| 国产精品99久久久久| 久久久亚洲精品一区二区三区| 免费三级欧美电影| 91精品国产综合久久精品| 奇米在线7777在线精品 | 91久久免费观看| 亚洲黄色免费电影| 欧美做爰猛烈大尺度电影无法无天| 亚洲精品国产视频| 欧美午夜电影网| 日本视频在线一区|