using System; using System.Runtime.InteropServices; using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; using Cpp2IlInjected; namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators { // Token: 0x02001687 RID: 5767 [Token(Token = "0x2001687")] [StructLayout(3)] internal class DHParametersHelper { // Token: 0x06009A46 RID: 39494 RVA: 0x00225E18 File Offset: 0x00224018 [Token(Token = "0x6009A46")] [Address(RVA = "0x1F4EAA0", Offset = "0x1F4D4A0", VA = "0x181F4EAA0")] private static BigInteger[] ConstructBigPrimeProducts(int[] primeProducts) { BigInteger[] array = new BigInteger[primeProducts.Length]; int num = 0; if (num < array.Length) { BigInteger bigInteger = BigInteger.ValueOf((long)primeProducts[num]); throw new ArrayTypeMismatchException(); } return array; } // Token: 0x06009A47 RID: 39495 RVA: 0x00225E64 File Offset: 0x00224064 [Token(Token = "0x6009A47")] [Address(RVA = "0x1F4EBA0", Offset = "0x1F4D5A0", VA = "0x181F4EBA0")] internal static BigInteger[] GenerateSafePrimes(int size, int certainty, SecureRandom random) { BigInteger bigInteger9; BigInteger bigInteger11; ulong num10; do { int num = size - 1; if (size > 32) { int num2 = 0; int num3; BigInteger bigInteger = new BigInteger(certainty, num3, random); num3 = 0; int[][] array = DHParametersHelper.primeLists; BigInteger bigInteger6; if (num2 < array.Length) { BigInteger[] bigPrimeProducts = DHParametersHelper.BigPrimeProducts; BigInteger bigInteger3; BigInteger bigInteger2 = bigInteger.Remainder(bigInteger3); int num4 = 0; int intValue = bigInteger2.IntValue; if (num2 == 0 && size != 2) { BigInteger bigInteger4 = BigInteger.ValueOf((long)size); BigInteger bigInteger5 = bigInteger.Add(bigInteger4); int[] array2 = DHParametersHelper.primeProducts; } int[][] array3 = DHParametersHelper.primeLists; if (num4 != 0 && num4 != random) { num2++; num2++; } BigInteger six = DHParametersHelper.Six; bigInteger6 = bigInteger.Add(six); } uint num5; ulong num6; if (bigInteger6.BitLength != num || !bigInteger6.RabinMillerTest((int)num5, random, num6 != 0UL)) { continue; } BigInteger bigInteger7 = bigInteger6.ShiftLeft(1); BigInteger one = BigInteger.One; BigInteger bigInteger8 = bigInteger7.Add(one); ulong num7; ulong num8; if (!bigInteger8.RabinMillerTest(certainty, random, num7 != 0UL) || (certainty > 2 && !bigInteger6.RabinMillerTest(certainty, random, num8 != 0UL))) { continue; } int nafWeight = WNafUtilities.GetNafWeight(bigInteger8); BigInteger[] array4 = new BigInteger[2]; } bigInteger9 = new BigInteger(certainty, 2, random); BigInteger bigInteger10 = bigInteger9.ShiftLeft(1); BigInteger one2 = BigInteger.One; bigInteger11 = bigInteger10.Add(one2); ulong num9; if (!bigInteger11.IsProbablePrime(certainty, num9 != 0UL)) { break; } while (certainty <= 2) { } } while (bigInteger9.IsProbablePrime(certainty, num10 != 0UL)); uint num11; BigInteger bigInteger12 = new BigInteger(certainty, (int)num11, random); bigInteger12.nBitLength = bigInteger11; if (bigInteger12 != 0) { } return bigInteger12; } // Token: 0x06009A48 RID: 39496 RVA: 0x00225FE0 File Offset: 0x002241E0 [Token(Token = "0x6009A48")] [Address(RVA = "0x1F4F1B0", Offset = "0x1F4DBB0", VA = "0x181F4F1B0")] internal static BigInteger SelectGenerator(BigInteger p, BigInteger q, SecureRandom random) { BigInteger two = BigInteger.Two; BigInteger bigInteger = p.Subtract(two); BigInteger bigInteger2 = BigIntegers.CreateRandomInRange(BigInteger.Two, bigInteger, random); BigInteger two2 = BigInteger.Two; BigInteger bigInteger3 = bigInteger2.ModPow(two2, p); while (bigInteger3 != 0) { } return bigInteger3; } // Token: 0x06009A49 RID: 39497 RVA: 0x00226028 File Offset: 0x00224228 [Token(Token = "0x6009A49")] [Address(RVA = "0x3C1670", Offset = "0x3C0070", VA = "0x1803C1670")] public DHParametersHelper() { } // Token: 0x06009A4A RID: 39498 RVA: 0x0022603C File Offset: 0x0022423C // Note: this type is marked as 'beforefieldinit'. [Token(Token = "0x6009A4A")] [Address(RVA = "0x1F4F2F0", Offset = "0x1F4DCF0", VA = "0x181F4F2F0")] static DHParametersHelper() { BigInteger bigInteger; DHParametersHelper.Six = bigInteger; DHParametersHelper.primeLists = BigInteger.primeLists; DHParametersHelper.primeProducts = BigInteger.primeProducts; int[] array = DHParametersHelper.primeProducts; BigInteger[] array2 = new BigInteger[array.Length]; int num = 0; if (num < array2.Length) { BigInteger bigInteger2 = BigInteger.ValueOf((long)array[num]); throw new ArrayTypeMismatchException(); } DHParametersHelper.BigPrimeProducts = array2; } // Token: 0x04006545 RID: 25925 [Token(Token = "0x4006545")] private static readonly BigInteger Six; // Token: 0x04006546 RID: 25926 [Token(Token = "0x4006546")] private static readonly int[][] primeLists; // Token: 0x04006547 RID: 25927 [Token(Token = "0x4006547")] private static readonly int[] primeProducts; // Token: 0x04006548 RID: 25928 [Token(Token = "0x4006548")] private static readonly BigInteger[] BigPrimeProducts; } }