Esempio n. 1
0
			public static Class15.Class28 smethod_11(Class15.Class28 class28_0, int int_0)
			{
				if (int_0 == 0)
				{
					return new Class15.Class28(class28_0);
				}
				int num = int_0 >> 5;
				int num2 = int_0 & 31;
				Class15.Class28 @class = new Class15.Class28((Class15.Class28.Enum5)1, class28_0.uint_0 - (uint)num + 1u);
				uint num3 = (uint)(@class.uint_1.Length - 1);
				if (num2 != 0)
				{
					uint num4 = 0u;
					while (num3-- > 0u)
					{
						uint num5 = class28_0.uint_1[(int)(checked((IntPtr)(unchecked((ulong)num3 + (ulong)((long)num)))))];
						@class.uint_1[(int)((UIntPtr)num3)] = (num5 >> int_0 | num4);
						num4 = num5 << 32 - int_0;
					}
				}
				else
				{
					while (num3-- > 0u)
					{
						@class.uint_1[(int)((UIntPtr)num3)] = class28_0.uint_1[(int)(checked((IntPtr)(unchecked((ulong)num3 + (ulong)((long)num)))))];
					}
				}
				@class.method_5();
				return @class;
			}
Esempio n. 2
0
			public static Class15.Class28 smethod_12(Class15.Class28 class28_0, uint uint_0)
			{
				Class15.Class28 @class = new Class15.Class28((Class15.Class28.Enum5)1, class28_0.uint_0 + 1u);
				uint num = 0u;
				ulong num2 = 0uL;
				do
				{
					num2 += (ulong)class28_0.uint_1[(int)((UIntPtr)num)] * (ulong)uint_0;
					@class.uint_1[(int)((UIntPtr)num)] = (uint)num2;
					num2 >>= 32;
				}
				while ((num += 1u) < class28_0.uint_0);
				@class.uint_1[(int)((UIntPtr)num)] = (uint)num2;
				@class.method_5();
				return @class;
			}
Esempio n. 3
0
			public static Class15.Class28[] smethod_9(Class15.Class28 class28_0, Class15.Class28 class28_1)
			{
				if (Class15.Class28.Class30.smethod_4(class28_0, class28_1) == (Class15.Class28.Enum5)(-1))
				{
					return new Class15.Class28[]
					{
						0,
						new Class15.Class28(class28_0)
					};
				}
				class28_0.method_5();
				class28_1.method_5();
				if (class28_1.uint_0 == 1u)
				{
					return Class15.Class28.Class30.smethod_8(class28_0, class28_1.uint_1[0]);
				}
				uint num = class28_0.uint_0 + 1u;
				int num2 = (int)(class28_1.uint_0 + 1u);
				uint num3 = 2147483648u;
				uint num4 = class28_1.uint_1[(int)((UIntPtr)(class28_1.uint_0 - 1u))];
				int num5 = 0;
				int num6 = (int)(class28_0.uint_0 - class28_1.uint_0);
				while (num3 != 0u && (num4 & num3) == 0u)
				{
					num5++;
					num3 >>= 1;
				}
				Class15.Class28 @class = new Class15.Class28((Class15.Class28.Enum5)1, class28_0.uint_0 - class28_1.uint_0 + 1u);
				Class15.Class28 class2 = class28_0 << num5;
				uint[] uint_ = class2.uint_1;
				class28_1 <<= num5;
				int i = (int)(num - class28_1.uint_0);
				int num7 = (int)(num - 1u);
				uint num8 = class28_1.uint_1[(int)((UIntPtr)(class28_1.uint_0 - 1u))];
				ulong num9 = (ulong)class28_1.uint_1[(int)((UIntPtr)(class28_1.uint_0 - 2u))];
				while (i > 0)
				{
					ulong num10 = ((ulong)uint_[num7] << 32) + (ulong)uint_[num7 - 1];
					ulong num11 = num10 / (ulong)num8;
					ulong num12 = num10 % (ulong)num8;
					do
					{
						if (num11 != 4294967296uL)
						{
							if (num11 * num9 <= (num12 << 32) + (ulong)uint_[num7 - 2])
							{
								break;
							}
						}
						num11 -= 1uL;
						num12 += (ulong)num8;
					}
					while (num12 < 4294967296uL);
					IL_17B:
					uint num13 = 0u;
					int num14 = num7 - num2 + 1;
					ulong num15 = 0uL;
					uint num16 = (uint)num11;
					do
					{
						num15 += (ulong)class28_1.uint_1[(int)((UIntPtr)num13)] * (ulong)num16;
						uint num17 = uint_[num14];
						uint_[num14] -= (uint)num15;
						num15 >>= 32;
						if (uint_[num14] > num17)
						{
							num15 += 1uL;
						}
						num13 += 1u;
						num14++;
					}
					while ((ulong)num13 < (ulong)((long)num2));
					num14 = num7 - num2 + 1;
					num13 = 0u;
					if (num15 != 0uL)
					{
						num16 -= 1u;
						ulong num18 = 0uL;
						do
						{
							num18 = (ulong)uint_[num14] + (ulong)class28_1.uint_1[(int)((UIntPtr)num13)] + num18;
							uint_[num14] = (uint)num18;
							num18 >>= 32;
							num13 += 1u;
							num14++;
						}
						while ((ulong)num13 < (ulong)((long)num2));
					}
					@class.uint_1[num6--] = num16;
					num7--;
					i--;
					continue;
					goto IL_17B;
				}
				@class.method_5();
				class2.method_5();
				Class15.Class28[] array = new Class15.Class28[]
				{
					@class,
					class2
				};
				if (num5 != 0)
				{
					Class15.Class28[] array2;
					(array2 = array)[1] = array2[1] >> num5;
				}
				return array;
			}
Esempio n. 4
0
			public static Class15.Class28 smethod_10(Class15.Class28 class28_0, int int_0)
			{
				if (int_0 == 0)
				{
					return new Class15.Class28(class28_0, class28_0.uint_0 + 1u);
				}
				int num = int_0 >> 5;
				int_0 &= 31;
				Class15.Class28 @class = new Class15.Class28((Class15.Class28.Enum5)1, class28_0.uint_0 + 1u + (uint)num);
				uint num2 = 0u;
				uint uint_ = class28_0.uint_0;
				if (int_0 != 0)
				{
					uint num3 = 0u;
					while (num2 < uint_)
					{
						uint num4 = class28_0.uint_1[(int)((UIntPtr)num2)];
						@class.uint_1[(int)(checked((IntPtr)(unchecked((ulong)num2 + (ulong)((long)num)))))] = (num4 << int_0 | num3);
						num3 = num4 >> 32 - int_0;
						num2 += 1u;
					}
					@class.uint_1[(int)(checked((IntPtr)(unchecked((ulong)num2 + (ulong)((long)num)))))] = num3;
				}
				else
				{
					while (num2 < uint_)
					{
						@class.uint_1[(int)(checked((IntPtr)(unchecked((ulong)num2 + (ulong)((long)num)))))] = class28_0.uint_1[(int)((UIntPtr)num2)];
						num2 += 1u;
					}
				}
				@class.method_5();
				return @class;
			}
Esempio n. 5
0
			public static Class15.Class28 smethod_1(Class15.Class28 class28_0, Class15.Class28 class28_1)
			{
				Class15.Class28 @class = new Class15.Class28((Class15.Class28.Enum5)1, class28_0.uint_0);
				uint[] uint_ = @class.uint_1;
				uint[] uint_2 = class28_0.uint_1;
				uint[] uint_3 = class28_1.uint_1;
				uint num = 0u;
				uint num2 = 0u;
				do
				{
					uint num3 = uint_3[(int)((UIntPtr)num)];
					if ((num3 += num2) < num2 | (uint_[(int)((UIntPtr)num)] = uint_2[(int)((UIntPtr)num)] - num3) > ~num3)
					{
						num2 = 1u;
					}
					else
					{
						num2 = 0u;
					}
				}
				while ((num += 1u) < class28_1.uint_0);
				if (num != class28_0.uint_0)
				{
					if (num2 == 1u)
					{
						do
						{
							uint_[(int)((UIntPtr)num)] = uint_2[(int)((UIntPtr)num)] - 1u;
						}
						while (uint_2[(int)((UIntPtr)(num++))] == 0u && num < class28_0.uint_0);
						if (num == class28_0.uint_0)
						{
							goto IL_C8;
						}
					}
					do
					{
						uint_[(int)((UIntPtr)num)] = uint_2[(int)((UIntPtr)num)];
					}
					while ((num += 1u) < class28_0.uint_0);
				}
				IL_C8:
				@class.method_5();
				return @class;
			}
Esempio n. 6
0
			public static Class15.Class28[] smethod_8(Class15.Class28 class28_0, uint uint_0)
			{
				Class15.Class28 @class = new Class15.Class28((Class15.Class28.Enum5)1, class28_0.uint_0);
				ulong num = 0uL;
				uint uint_ = class28_0.uint_0;
				while (uint_-- > 0u)
				{
					num <<= 32;
					num |= (ulong)class28_0.uint_1[(int)((UIntPtr)uint_)];
					@class.uint_1[(int)((UIntPtr)uint_)] = (uint)(num / (ulong)uint_0);
					num %= (ulong)uint_0;
				}
				@class.method_5();
				Class15.Class28 class2 = (uint)num;
				return new Class15.Class28[]
				{
					@class,
					class2
				};
			}
Esempio n. 7
0
			public Class15.Class28 method_3(Class15.Class28 class28_2, Class15.Class28 class28_3)
			{
				Class15.Class28 @class = new Class15.Class28(1u);
				if (class28_3 == 0u)
				{
					return @class;
				}
				Class15.Class28 class2 = class28_2;
				if (class28_3.method_1(0))
				{
					@class = class28_2;
				}
				for (int i = 1; i < class28_3.method_0(); i++)
				{
					class2 = this.method_1(class2, class2);
					if (class28_3.method_1(i))
					{
						@class = this.method_1(class2, @class);
					}
				}
				return @class;
			}
Esempio n. 8
0
		public override void ImportParameters(RSAParameters parameters)
		{
			this.class28_0 = new Class15.Class28(parameters.Modulus);
			this.class28_1 = new Class15.Class28(parameters.Exponent);
			this.class28_2 = ((!object.ReferenceEquals(parameters.P, null)) ? new Class15.Class28(parameters.P) : null);
			this.class28_3 = ((!object.ReferenceEquals(parameters.Q, null)) ? new Class15.Class28(parameters.Q) : null);
			this.class28_4 = ((!object.ReferenceEquals(parameters.DP, null)) ? new Class15.Class28(parameters.DP) : null);
			this.class28_5 = ((!object.ReferenceEquals(parameters.DQ, null)) ? new Class15.Class28(parameters.DQ) : null);
			this.class28_6 = ((!object.ReferenceEquals(parameters.InverseQ, null)) ? new Class15.Class28(parameters.InverseQ) : null);
			this.class28_7 = ((!object.ReferenceEquals(parameters.D, null)) ? new Class15.Class28(parameters.D) : null);
		}
Esempio n. 9
0
			public Class29(Class15.Class28 class28_2)
			{
				this.class28_0 = class28_2;
				uint num = this.class28_0.uint_0 << 1;
				this.class28_1 = new Class15.Class28((Class15.Class28.Enum5)1, num + 1u);
				this.class28_1.uint_1[(int)((UIntPtr)num)] = 1u;
				this.class28_1 /= this.class28_0;
			}
Esempio n. 10
0
			public void method_0(Class15.Class28 class28_2)
			{
				Class15.Class28 @class = this.class28_0;
				uint uint_ = @class.uint_0;
				uint num = uint_ + 1u;
				uint num2 = uint_ - 1u;
				if (class28_2.uint_0 < uint_)
				{
					return;
				}
				if ((long)class28_2.uint_1.Length < (long)((ulong)class28_2.uint_0))
				{
					throw new IndexOutOfRangeException("x out of range");
				}
				Class15.Class28 class2 = new Class15.Class28((Class15.Class28.Enum5)1, class28_2.uint_0 - num2 + this.class28_1.uint_0);
				Class15.Class28.Class30.smethod_13(class28_2.uint_1, num2, class28_2.uint_0 - num2, this.class28_1.uint_1, 0u, this.class28_1.uint_0, class2.uint_1, 0u);
				uint uint_2 = (class28_2.uint_0 > num) ? num : class28_2.uint_0;
				class28_2.uint_0 = uint_2;
				class28_2.method_5();
				Class15.Class28 class3 = new Class15.Class28((Class15.Class28.Enum5)1, num);
				Class15.Class28.Class30.smethod_14(class2.uint_1, (int)num, (int)(class2.uint_0 - num), @class.uint_1, 0, (int)@class.uint_0, class3.uint_1, 0, (int)num);
				class3.method_5();
				if (class3 <= class28_2)
				{
					Class15.Class28.Class30.smethod_2(class28_2, class3);
				}
				else
				{
					Class15.Class28 class4 = new Class15.Class28((Class15.Class28.Enum5)1, num + 1u);
					class4.uint_1[(int)((UIntPtr)num)] = 1u;
					Class15.Class28.Class30.smethod_2(class4, class3);
					Class15.Class28.Class30.smethod_3(class28_2, class4);
				}
				while (class28_2 >= @class)
				{
					Class15.Class28.Class30.smethod_2(class28_2, @class);
				}
			}
Esempio n. 11
0
		private bool method_15(XmlReader xmlReader_0, string string_0, string string_1, ref Class15.Class28 class28_8)
		{
			if (string.Compare(string_0, string_1, true) != 0)
			{
				return false;
			}
			string s = xmlReader_0.ReadString();
			byte[] array = Convert.FromBase64String(s);
			Class15.Class28 @class = new Class15.Class28(array);
			class28_8 = @class;
			return true;
		}
Esempio n. 12
0
		protected override void Dispose(bool disposing)
		{
			this.class28_0 = (this.class28_1 = (this.class28_2 = (this.class28_3 = (this.class28_4 = (this.class28_5 = (this.class28_6 = (this.class28_7 = null)))))));
		}
Esempio n. 13
0
		public byte[] method_1(byte[] byte_2)
		{
			if (byte_2.Length != this.int_2)
			{
				throw new ArgumentException("input.Length does not match keylen");
			}
			if (object.ReferenceEquals(this.class28_7, null))
			{
				throw new ArgumentException("no private key set!");
			}
			Class15.Class28 @class = new Class15.Class28(byte_2);
			if (@class >= this.class28_0)
			{
				throw new ArgumentException("input exceeds modulus");
			}
			@class = @class.method_7(this.class28_7, this.class28_0);
			byte[] byte_3 = @class.method_2();
			return this.method_13(byte_3, this.int_2);
		}
Esempio n. 14
0
			public static Class15.Class28 smethod_18(Class15.Class28 class28_0, Class15.Class28 class28_1)
			{
				if (class28_1.uint_0 == 1u)
				{
					return Class15.Class28.Class30.smethod_17(class28_0, class28_1.uint_1[0]);
				}
				Class15.Class28[] array = new Class15.Class28[]
				{
					0,
					1
				};
				Class15.Class28[] array2 = new Class15.Class28[2];
				Class15.Class28[] array3 = new Class15.Class28[]
				{
					0,
					0
				};
				int num = 0;
				Class15.Class28 class28_2 = class28_1;
				Class15.Class28 @class = class28_0;
				Class15.Class28.Class29 class2 = new Class15.Class28.Class29(class28_1);
				while (@class != 0u)
				{
					if (num > 1)
					{
						Class15.Class28 class3 = class2.method_2(array[0], array[1] * array2[0]);
						array[0] = array[1];
						array[1] = class3;
					}
					Class15.Class28[] array4 = Class15.Class28.Class30.smethod_9(class28_2, @class);
					array2[0] = array2[1];
					array2[1] = array4[0];
					array3[0] = array3[1];
					array3[1] = array4[1];
					class28_2 = @class;
					@class = array4[1];
					num++;
				}
				if (array3[0] != 1u)
				{
					throw new ArithmeticException("No inverse!");
				}
				return class2.method_2(array[0], array[1] * array2[0]);
			}
Esempio n. 15
0
			public static Class15.Class28 smethod_0(Class15.Class28 class28_0, Class15.Class28 class28_1)
			{
				uint num = 0u;
				uint[] uint_;
				uint uint_2;
				uint[] uint_3;
				uint uint_4;
				if (class28_0.uint_0 < class28_1.uint_0)
				{
					uint_ = class28_1.uint_1;
					uint_2 = class28_1.uint_0;
					uint_3 = class28_0.uint_1;
					uint_4 = class28_0.uint_0;
				}
				else
				{
					uint_ = class28_0.uint_1;
					uint_2 = class28_0.uint_0;
					uint_3 = class28_1.uint_1;
					uint_4 = class28_1.uint_0;
				}
				Class15.Class28 @class = new Class15.Class28((Class15.Class28.Enum5)1, uint_2 + 1u);
				uint[] uint_5 = @class.uint_1;
				ulong num2 = 0uL;
				do
				{
					num2 = (ulong)uint_[(int)((UIntPtr)num)] + (ulong)uint_3[(int)((UIntPtr)num)] + num2;
					uint_5[(int)((UIntPtr)num)] = (uint)num2;
					num2 >>= 32;
				}
				while ((num += 1u) < uint_4);
				bool flag;
				if (flag = (num2 != 0uL))
				{
					if (num < uint_2)
					{
						do
						{
							flag = ((uint_5[(int)((UIntPtr)num)] = uint_[(int)((UIntPtr)num)] + 1u) == 0u);
						}
						while ((num += 1u) < uint_2 && flag);
					}
					if (flag)
					{
						uint_5[(int)((UIntPtr)num)] = 1u;
						@class.uint_0 = num + 1u;
						return @class;
					}
				}
				if (num < uint_2)
				{
					do
					{
						uint_5[(int)((UIntPtr)num)] = uint_[(int)((UIntPtr)num)];
					}
					while ((num += 1u) < uint_2);
				}
				@class.method_5();
				return @class;
			}
Esempio n. 16
0
		public static Class15.Class28 operator *(Class15.Class28 class28_0, Class15.Class28 class28_1)
		{
			if (class28_0 == 0u || class28_1 == 0u)
			{
				return 0;
			}
			if ((long)class28_0.uint_1.Length < (long)((ulong)class28_0.uint_0))
			{
				throw new IndexOutOfRangeException("bi1 out of range");
			}
			if ((long)class28_1.uint_1.Length < (long)((ulong)class28_1.uint_0))
			{
				throw new IndexOutOfRangeException("bi2 out of range");
			}
			Class15.Class28 @class = new Class15.Class28((Class15.Class28.Enum5)1, class28_0.uint_0 + class28_1.uint_0);
			Class15.Class28.Class30.smethod_13(class28_0.uint_1, 0u, class28_0.uint_0, class28_1.uint_1, 0u, class28_1.uint_0, @class.uint_1, 0u);
			@class.method_5();
			return @class;
		}
Esempio n. 17
0
		public override void FromXmlString(string xmlString)
		{
			StringReader input = new StringReader(xmlString);
			XmlTextReader xmlTextReader = new XmlTextReader(input);
			this.class28_0 = (this.class28_1 = (this.class28_2 = (this.class28_3 = (this.class28_4 = (this.class28_5 = (this.class28_6 = (this.class28_7 = null)))))));
			while (true)
			{
				XmlNodeType xmlNodeType = xmlTextReader.MoveToContent();
				XmlNodeType xmlNodeType2 = xmlNodeType;
				switch (xmlNodeType2)
				{
				case XmlNodeType.None:
					return;
				case XmlNodeType.Element:
				{
					string name = xmlTextReader.Name;
					if (!this.method_15(xmlTextReader, name, "Modulus", ref this.class28_0) && !this.method_15(xmlTextReader, name, "Exponent", ref this.class28_1) && !this.method_15(xmlTextReader, name, "P", ref this.class28_2) && !this.method_15(xmlTextReader, name, "Q", ref this.class28_3) && !this.method_15(xmlTextReader, name, "DP", ref this.class28_4) && !this.method_15(xmlTextReader, name, "DQ", ref this.class28_5) && !this.method_15(xmlTextReader, name, "InverseQ", ref this.class28_6) && !this.method_15(xmlTextReader, name, "D", ref this.class28_7))
					{
						xmlTextReader.ReadString();
					}
					break;
				}
				default:
					if (xmlNodeType2 != XmlNodeType.EndElement)
					{
						goto Block_9;
					}
					xmlTextReader.ReadEndElement();
					break;
				}
			}
			Block_9:
			throw new ArgumentException();
		}