206 lines
5.3 KiB
C#
206 lines
5.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|