using System; using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; using Cpp2IlInjected; namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines { // Token: 0x02001C8B RID: 7307 [Token(Token = "0x2001C8B")] public class ChaChaEngine : Salsa20Engine { // Token: 0x0600B750 RID: 46928 RVA: 0x00288474 File Offset: 0x00286674 [Token(Token = "0x600B750")] [Address(RVA = "0x1DC4B40", Offset = "0x1DC3940", VA = "0x181DC4B40")] public ChaChaEngine() { } // Token: 0x0600B751 RID: 46929 RVA: 0x00288488 File Offset: 0x00286688 [Token(Token = "0x600B751")] [Address(RVA = "0x1DC4AE0", Offset = "0x1DC38E0", VA = "0x181DC4AE0")] public ChaChaEngine(int rounds) : base(rounds) { } // Token: 0x17001CC5 RID: 7365 // (get) Token: 0x0600B752 RID: 46930 RVA: 0x0028849C File Offset: 0x0028669C [Token(Token = "0x17001CC5")] public override string AlgorithmName { [Token(Token = "0x600B752")] [Address(RVA = "0x1DC4BA0", Offset = "0x1DC39A0", VA = "0x181DC4BA0", Slot = "11")] get { int rounds = this.rounds; return "ChaCha" + rounds; } } // Token: 0x0600B753 RID: 46931 RVA: 0x002884BC File Offset: 0x002866BC [Token(Token = "0x600B753")] [Address(RVA = "0x1DC3F80", Offset = "0x1DC2D80", VA = "0x181DC3F80", Slot = "13")] protected override void AdvanceCounter() { if (this.engineState.Length == 12) { uint[] engineState = this.engineState; } } // Token: 0x0600B754 RID: 46932 RVA: 0x002884E8 File Offset: 0x002866E8 [Token(Token = "0x600B754")] [Address(RVA = "0x1DC4950", Offset = "0x1DC3750", VA = "0x181DC4950", Slot = "16")] protected override void ResetCounter() { uint[] engineState = this.engineState; int num = 0; engineState[6] = (uint)num; engineState[6] = (uint)num; } // Token: 0x0600B755 RID: 46933 RVA: 0x00288514 File Offset: 0x00286714 [Token(Token = "0x600B755")] [Address(RVA = "0x1DC49B0", Offset = "0x1DC37B0", VA = "0x181DC49B0", Slot = "17")] protected override void SetKey(byte[] keyBytes, byte[] ivBytes) { if (keyBytes != 0) { int length = keyBytes.Length; uint[] engineState = this.engineState; int num = 0; base.PackTauOrSigma(length, engineState, num); uint[] engineState2 = this.engineState; int num2 = 0; ulong num3; Pack.LE_To_UInt32(keyBytes, num2, engineState2, 4, (int)num3); int length2 = keyBytes.Length; uint[] engineState3 = this.engineState; ulong num4; Pack.LE_To_UInt32(keyBytes, length2, engineState3, 8, (int)num4); } uint[] engineState4 = this.engineState; int num5 = 0; uint num6; ulong num7; Pack.LE_To_UInt32(ivBytes, num5, engineState4, (int)num6, (int)num7); } // Token: 0x0600B756 RID: 46934 RVA: 0x00288598 File Offset: 0x00286798 [Token(Token = "0x600B756")] [Address(RVA = "0x1DC3D30", Offset = "0x1DC2B30", VA = "0x181DC3D30", Slot = "18")] protected override void GenerateKeyStream(byte[] output) { uint[] x = this.x; uint[] engineState = this.engineState; ChaChaEngine.ChachaCore(this.rounds, engineState, x); uint[] x2 = this.x; int num = 0; Pack.UInt32_To_LE(x2, output, num); } // Token: 0x0600B757 RID: 46935 RVA: 0x002885D4 File Offset: 0x002867D4 [Token(Token = "0x600B757")] [Address(RVA = "0x1DC3FE0", Offset = "0x1DC2DE0", VA = "0x181DC3FE0")] internal static void ChachaCore(int rounds, uint[] input, uint[] x) { while (input.Length != 16 || rounds != 1) { } uint num = input[2]; uint num2 = input[6]; uint num3 = input[5]; uint num4 = input[6]; uint num5 = input[0]; uint num6 = input[0]; uint num7 = input[2]; uint num8 = input[4]; uint num9 = input[3]; uint num10 = input[4]; uint num11 = input[3]; uint num12 = input[7]; uint num13 = input[1]; uint num14 = input[5]; uint num15 = input[7]; uint num16 = input[1]; if (rounds > 0) { int num17 = rounds - 1; num17++; num5 += num7; num10 += num5; num5 += num5; num10 += num5; num4 = num10; num8 = num5; num8 += num5; num6 += num5; num8 = num5; num10 = num5; num8 += num10; num6 = num8; num5 = num8; num14 += num5; num13 += num14; num14 += num14; num12 = num14; num13 = num14; num5 = num14; num3 += num5; num16 += num3; num5 = num3; num3 += num5; num5 += num6; num16 = num3; num5 = num3; num14 += num5; num5 += num14; num15 = num14; num14 += num15; num6 += num13; num3 += num14; num6 += num14; num3 += num14; num13 += num16; num10 += num14; num13 += num14; num10 += num14; num15 = num10; num8 += num14; num5 = num14; num14 = num8; num16 += num14; num14 = num5; num5 = num14; num8 += num14; num14 = num8; num7 = num14; } uint num18 = input[0]; num5 += num18; uint num19 = input[0]; num19 += num6; uint num20 = input[1]; num20 += num13; uint num21 = input[1]; num21 += num16; uint num22 = input[2]; num22 += num7; uint num23 = input[4]; num23 += num10; uint num24 = input[4]; num24 += num8; uint num25 = input[5]; num25 += num14; uint num26 = input[5]; num26 += num3; uint num27 = input[6]; num27 += num4; uint num28 = input[7]; num28 += num12; uint num29 = input[7]; num29 += num15; } } }