Files
2026-04-10 22:50:51 +02:00

1767 lines
57 KiB
C#

using System;
using Cpp2IlInjected;
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines
{
// Token: 0x02001CB1 RID: 7345
[Token(Token = "0x2001CB1")]
public class ThreefishEngine : IBlockCipher
{
// Token: 0x0600B914 RID: 47380 RVA: 0x00295204 File Offset: 0x00293404
[Token(Token = "0x600B914")]
[Address(RVA = "0x1E0C9D0", Offset = "0x1E0B7D0", VA = "0x181E0C9D0")]
static ThreefishEngine()
{
int[] array = new int[ThreefishEngine.MOD9.Length];
int num = 0;
ThreefishEngine.MOD3 = array;
int[] mod = ThreefishEngine.MOD9;
if (num < mod.Length)
{
int[] mod2 = ThreefishEngine.MOD17;
ulong num2;
num2 += num2;
long num3 = (long)(num2 * (ulong)((uint)17));
num = (int)((long)num - num3);
int[] mod3 = ThreefishEngine.MOD9;
ulong num4;
num4 += num4;
num = (int)((ulong)num - num4);
int[] mod4 = ThreefishEngine.MOD5;
ulong num5;
num5 += num5;
num = (int)((ulong)num - num5);
int[] mod5 = ThreefishEngine.MOD3;
num++;
int[] mod6 = ThreefishEngine.MOD9;
}
}
// Token: 0x0600B915 RID: 47381 RVA: 0x002952C8 File Offset: 0x002934C8
[Token(Token = "0x600B915")]
[Address(RVA = "0x1E0CC50", Offset = "0x1E0BA50", VA = "0x181E0CC50")]
public ThreefishEngine(int blocksizeBits)
{
/*
An exception occurred when decompiling this method (0600B915)
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines.ThreefishEngine::.ctor(System.Int32)
---> System.Exception: Basic block has to end with unconditional control flow.
{
IL_A8:
stloc:ArgumentException(var_12_B2, newobj:ArgumentException(ArgumentException::.ctor, ldstr:string("Invalid blocksize - Threefish is defined with block size of 256, 512, or 1024 bits")))
}
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1852
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1878
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1878
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1846
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 355
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
--- End of inner exception stack trace ---
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1663
*/;
}
// Token: 0x0600B916 RID: 47382 RVA: 0x00295388 File Offset: 0x00293588
[Token(Token = "0x600B916")]
[Address(RVA = "0x1E0BB10", Offset = "0x1E0A910", VA = "0x181E0BB10", Slot = "10")]
public virtual void Init(bool forEncryption, ICipherParameters parameters)
{
/*
An exception occurred when decompiling this method (0600B916)
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines.ThreefishEngine::Init(System.Boolean,BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.ICipherParameters)
---> System.Exception: Basic block has to end with unconditional control flow.
{
IL_E2:
stloc:ArgumentException(var_18_F8, newobj:ArgumentException(ArgumentException::.ctor, call:string(string::Concat, ldstr:string[exp:object]("Threefish key must be same size as block ("), ldloc:ArgumentException[exp:object](var_17), ldstr:string[exp:object](" bytes)"))))
stloc:ArgumentException(var_21_110, newobj:ArgumentException(ArgumentException::.ctor, call:string(string::Concat, ldstr:string[exp:object]("Threefish tweak must be "), ldloc:int32[exp:object](var_20), ldstr:string[exp:object](" bytes"))))
}
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1852
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1878
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1878
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1846
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 355
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
--- End of inner exception stack trace ---
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1663
*/;
}
// Token: 0x0600B917 RID: 47383 RVA: 0x002954A8 File Offset: 0x002936A8
[Token(Token = "0x600B917")]
[Address(RVA = "0x1E0BAC0", Offset = "0x1E0A8C0", VA = "0x181E0BAC0")]
internal void Init(bool forEncryption, ulong[] key, ulong[] tweak)
{
this.forEncryption = forEncryption;
if (key != 0)
{
this.SetKey(key);
}
if (tweak != 0)
{
this.SetTweak(tweak);
}
}
// Token: 0x0600B918 RID: 47384 RVA: 0x002954D4 File Offset: 0x002936D4
[Token(Token = "0x600B918")]
[Address(RVA = "0x1E0C430", Offset = "0x1E0B230", VA = "0x181E0C430")]
private void SetKey(ulong[] key)
{
int num;
do
{
num = this.blocksizeWords;
}
while (key.Length != num);
ulong[] array = this.kw;
int num2 = 0;
if (num > 0)
{
ulong num3 = key[num2];
array[0] = num3;
ulong[] array2 = this.kw;
num2++;
int num4 = this.blocksizeWords;
}
int num5 = 0;
array[0] = (ulong)2004413935125273122L;
int num6 = this.blocksizeWords;
ulong[] array3 = this.kw;
int num7 = num6 + 1;
Array.Copy(array3, num5, array3, num7, num6);
}
// Token: 0x0600B919 RID: 47385 RVA: 0x00295564 File Offset: 0x00293764
[Token(Token = "0x600B919")]
[Address(RVA = "0x1E0C5B0", Offset = "0x1E0B3B0", VA = "0x181E0C5B0")]
private void SetTweak(ulong[] tweak)
{
while (tweak.Length != 2)
{
}
ulong[] array = this.t;
ulong num = tweak[0];
array[0] = num;
ulong[] array2 = this.t;
ulong num2 = tweak[1];
array2[1] = num2;
ulong[] array3 = this.t;
int length = array3.Length;
ulong num3 = array3[1];
array3[2] = num3;
ulong[] array4 = this.t;
int length2 = array4.Length;
ulong num4 = array4[0];
array4[3] = num4;
ulong[] array5 = this.t;
int length3 = array5.Length;
ulong num5 = array5[1];
array5[4] = num5;
}
// Token: 0x17001CF8 RID: 7416
// (get) Token: 0x0600B91A RID: 47386 RVA: 0x00295620 File Offset: 0x00293820
[Token(Token = "0x17001CF8")]
public virtual string AlgorithmName
{
[Token(Token = "0x600B91A")]
[Address(RVA = "0x1E0CDC0", Offset = "0x1E0BBC0", VA = "0x181E0CDC0", Slot = "11")]
get
{
int num = this.blocksizeBytes;
return "Threefish-" + num;
}
}
// Token: 0x17001CF9 RID: 7417
// (get) Token: 0x0600B91B RID: 47387 RVA: 0x00295640 File Offset: 0x00293840
[Token(Token = "0x17001CF9")]
public virtual bool IsPartialBlockOkay
{
[Token(Token = "0x600B91B")]
[Address(RVA = "0x403930", Offset = "0x402730", VA = "0x180403930", Slot = "12")]
get
{
}
}
// Token: 0x0600B91C RID: 47388 RVA: 0x00295650 File Offset: 0x00293850
[Token(Token = "0x600B91C")]
[Address(RVA = "0x3FA560", Offset = "0x3F9360", VA = "0x1803FA560", Slot = "13")]
public virtual int GetBlockSize()
{
return this.blocksizeBytes;
}
// Token: 0x0600B91D RID: 47389 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x600B91D")]
[Address(RVA = "0x402080", Offset = "0x400E80", VA = "0x180402080", Slot = "14")]
public virtual void Reset()
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x0600B91E RID: 47390 RVA: 0x00295664 File Offset: 0x00293864
[Token(Token = "0x600B91E")]
[Address(RVA = "0x1E0C100", Offset = "0x1E0AF00", VA = "0x181E0C100", Slot = "15")]
public virtual int ProcessBlock(byte[] inBytes, int inOff, byte[] outBytes, int outOff)
{
/*
An exception occurred when decompiling this method (0600B91E)
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Int32 BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines.ThreefishEngine::ProcessBlock(System.Byte[],System.Int32,System.Byte[],System.Int32)
---> System.Exception: Basic block has to end with unconditional control flow.
{
IL_A9:
stloc:DataLengthException(var_10_B3, newobj:DataLengthException(DataLengthException::.ctor, ldstr:string("Input buffer too short")))
}
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1852
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1878
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1878
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1846
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 355
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
--- End of inner exception stack trace ---
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1663
*/;
}
// Token: 0x0600B91F RID: 47391 RVA: 0x00295728 File Offset: 0x00293928
[Token(Token = "0x600B91F")]
[Address(RVA = "0x1E0BF70", Offset = "0x1E0AD70", VA = "0x181E0BF70")]
internal int ProcessBlock(ulong[] inWords, ulong[] outWords)
{
/*
An exception occurred when decompiling this method (0600B91F)
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Int32 BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines.ThreefishEngine::ProcessBlock(System.UInt64[],System.UInt64[])
---> System.Exception: Basic block has to end with unconditional control flow.
{
IL_5D:
stloc:DataLengthException(var_4_67, newobj:DataLengthException(DataLengthException::.ctor, ldstr:string("Output buffer too short")))
}
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1852
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1878
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1878
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1846
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 355
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
--- End of inner exception stack trace ---
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1663
*/;
}
// Token: 0x0600B920 RID: 47392 RVA: 0x002957A0 File Offset: 0x002939A0
[Token(Token = "0x600B920")]
[Address(RVA = "0x1E0B8C0", Offset = "0x1E0A6C0", VA = "0x181E0B8C0")]
internal static ulong BytesToWord(byte[] bytes, int off)
{
int length = bytes.Length;
int num = off + 1;
throw new NullReferenceException();
}
// Token: 0x0600B921 RID: 47393 RVA: 0x002957C0 File Offset: 0x002939C0
[Token(Token = "0x600B921")]
[Address(RVA = "0x1E0C7F0", Offset = "0x1E0B5F0", VA = "0x181E0C7F0")]
internal static void WordToBytes(ulong word, byte[] bytes, int off)
{
int num = bytes.Length;
int num2 = off + 1;
num = off + 6;
}
// Token: 0x0600B922 RID: 47394 RVA: 0x002957E4 File Offset: 0x002939E4
[Token(Token = "0x600B922")]
[Address(RVA = "0x1E0C410", Offset = "0x1E0B210", VA = "0x181E0C410")]
private static ulong RotlXor(ulong x, int n, ulong xor)
{
return x;
}
// Token: 0x0600B923 RID: 47395 RVA: 0x002957F4 File Offset: 0x002939F4
[Token(Token = "0x600B923")]
[Address(RVA = "0x1E0C9B0", Offset = "0x1E0B7B0", VA = "0x181E0C9B0")]
private static ulong XorRotr(ulong x, int n, ulong xor)
{
return x;
}
// Token: 0x04007541 RID: 30017
[Token(Token = "0x4007541")]
public const int BLOCKSIZE_256 = 256;
// Token: 0x04007542 RID: 30018
[Token(Token = "0x4007542")]
public const int BLOCKSIZE_512 = 512;
// Token: 0x04007543 RID: 30019
[Token(Token = "0x4007543")]
public const int BLOCKSIZE_1024 = 1024;
// Token: 0x04007544 RID: 30020
[Token(Token = "0x4007544")]
private const int TWEAK_SIZE_BYTES = 16;
// Token: 0x04007545 RID: 30021
[Token(Token = "0x4007545")]
private const int TWEAK_SIZE_WORDS = 2;
// Token: 0x04007546 RID: 30022
[Token(Token = "0x4007546")]
private const int ROUNDS_256 = 72;
// Token: 0x04007547 RID: 30023
[Token(Token = "0x4007547")]
private const int ROUNDS_512 = 72;
// Token: 0x04007548 RID: 30024
[Token(Token = "0x4007548")]
private const int ROUNDS_1024 = 80;
// Token: 0x04007549 RID: 30025
[Token(Token = "0x4007549")]
private const int MAX_ROUNDS = 80;
// Token: 0x0400754A RID: 30026
[Token(Token = "0x400754A")]
private const ulong C_240 = 2004413935125273122UL;
// Token: 0x0400754B RID: 30027
[Token(Token = "0x400754B")]
private static readonly int[] MOD9 = new int[80];
// Token: 0x0400754C RID: 30028
[Token(Token = "0x400754C")]
private static readonly int[] MOD17 = new int[ThreefishEngine.MOD9.Length];
// Token: 0x0400754D RID: 30029
[Token(Token = "0x400754D")]
private static readonly int[] MOD5 = new int[ThreefishEngine.MOD9.Length];
// Token: 0x0400754E RID: 30030
[Token(Token = "0x400754E")]
private static readonly int[] MOD3;
// Token: 0x0400754F RID: 30031
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x400754F")]
private readonly int blocksizeBytes;
// Token: 0x04007550 RID: 30032
[FieldOffset(Offset = "0x14")]
[Token(Token = "0x4007550")]
private readonly int blocksizeWords;
// Token: 0x04007551 RID: 30033
[FieldOffset(Offset = "0x18")]
[Token(Token = "0x4007551")]
private readonly ulong[] currentBlock;
// Token: 0x04007552 RID: 30034
[FieldOffset(Offset = "0x20")]
[Token(Token = "0x4007552")]
private readonly ulong[] t;
// Token: 0x04007553 RID: 30035
[FieldOffset(Offset = "0x28")]
[Token(Token = "0x4007553")]
private readonly ulong[] kw;
// Token: 0x04007554 RID: 30036
[FieldOffset(Offset = "0x30")]
[Token(Token = "0x4007554")]
private readonly ThreefishEngine.ThreefishCipher cipher;
// Token: 0x04007555 RID: 30037
[FieldOffset(Offset = "0x38")]
[Token(Token = "0x4007555")]
private bool forEncryption;
// Token: 0x02001CB2 RID: 7346
[Token(Token = "0x2001CB2")]
private abstract class ThreefishCipher
{
// Token: 0x0600B924 RID: 47396 RVA: 0x00295804 File Offset: 0x00293A04
[Token(Token = "0x600B924")]
[Address(RVA = "0x579630", Offset = "0x578430", VA = "0x180579630")]
protected ThreefishCipher(ulong[] kw, ulong[] t)
{
this.kw = kw;
this.t = t;
}
// Token: 0x0600B925 RID: 47397
[Token(Token = "0x600B925")]
[Address(Slot = "4")]
internal abstract void EncryptBlock(ulong[] block, ulong[] outWords);
// Token: 0x0600B926 RID: 47398
[Token(Token = "0x600B926")]
[Address(Slot = "5")]
internal abstract void DecryptBlock(ulong[] block, ulong[] outWords);
// Token: 0x04007556 RID: 30038
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x4007556")]
protected readonly ulong[] t;
// Token: 0x04007557 RID: 30039
[FieldOffset(Offset = "0x18")]
[Token(Token = "0x4007557")]
protected readonly ulong[] kw;
}
// Token: 0x02001CB3 RID: 7347
[Token(Token = "0x2001CB3")]
private sealed class Threefish256Cipher : ThreefishEngine.ThreefishCipher
{
// Token: 0x0600B927 RID: 47399 RVA: 0x00295828 File Offset: 0x00293A28
[Token(Token = "0x600B927")]
[Address(RVA = "0x579630", Offset = "0x578430", VA = "0x180579630")]
public Threefish256Cipher(ulong[] kw, ulong[] t)
{
this.kw = kw;
this.t = t;
}
// Token: 0x0600B928 RID: 47400 RVA: 0x0029584C File Offset: 0x00293A4C
[Token(Token = "0x600B928")]
[Address(RVA = "0x1A36330", Offset = "0x1A35130", VA = "0x181A36330", Slot = "4")]
internal override void EncryptBlock(ulong[] block, ulong[] outWords)
{
ulong[] kw;
ulong[] t;
int[] mod;
int[] mod2;
do
{
kw = this.kw;
t = this.t;
mod = ThreefishEngine.MOD5;
mod2 = ThreefishEngine.MOD3;
}
while (kw.Length != 9 || t.Length != 5);
int length = block.Length;
ulong num = block[1];
ulong num2 = block[2];
ulong num3 = t[0];
ulong num4 = block[3];
num += num3;
ulong num5 = t[1];
num2 += num5;
uint num7;
int num6 = mod[(int)num7];
int num8 = mod2[(int)num7];
ulong num9 = ThreefishEngine.RotlXor(num, 14, (ulong)num6);
num = num9;
num = ThreefishEngine.RotlXor(num, 16, (ulong)num6);
ulong num10;
num = num10;
ulong num11 = ThreefishEngine.RotlXor(num, 5, num);
num = num11;
ulong num12 = ThreefishEngine.RotlXor(num, 37, num);
int length2 = kw.Length;
int num13 = num6 + 1;
int length3 = t.Length;
num6 += 2;
ulong num14 = kw[num6];
int num15 = num8 + 1;
ulong num16 = t[num15];
ulong num17 = kw[num15];
num17 += (ulong)num7;
num11 += num17;
ulong num18 = t[num8];
num12 += num18;
ulong num19 = kw[num6];
num = num12;
num19 += num12;
ulong num20 = ThreefishEngine.RotlXor(num, 25, num19);
num16 += num14;
num16 += num11;
num19 = num16;
ulong num21 = ThreefishEngine.RotlXor(num11, 33, num19);
num19 += num21;
num11 = num21;
ulong num22 = ThreefishEngine.RotlXor(num11, 46, num19);
num16 += num20;
num19 = num16;
num11 = num20;
num14 = num22;
ulong num23 = ThreefishEngine.RotlXor(num11, 12, num19);
num19 += num23;
num11 = num23;
ulong num24 = ThreefishEngine.RotlXor(num11, 58, num19);
num16 += num14;
num19 = num16;
num11 = num14;
num20 = num24;
ulong num25 = ThreefishEngine.RotlXor(num11, 22, num19);
num19 += num25;
num11 = num25;
ulong num26 = ThreefishEngine.RotlXor(num11, 32, num19);
int num27 = 0;
num11 = num20;
num19 = num14;
ulong num28 = ThreefishEngine.RotlXor(num11, 32, num19);
int length4 = kw.Length;
int num29 = num6 + 1;
num16 = num28;
num27 = (int)((ulong)num27 + num19);
int length5 = t.Length;
num29 = num8;
num16 += (ulong)num8;
num29 += 2;
num19 += num14;
ulong num30 = kw[num8];
num7 += (uint)2;
num30 += (ulong)num7;
num26 += (ulong)1L;
num30 += num26;
if (num7 < (uint)18)
{
}
}
// Token: 0x0600B929 RID: 47401 RVA: 0x00295AE0 File Offset: 0x00293CE0
[Token(Token = "0x600B929")]
[Address(RVA = "0x1A35C40", Offset = "0x1A34A40", VA = "0x181A35C40", Slot = "5")]
internal override void DecryptBlock(ulong[] block, ulong[] state)
{
ulong[] kw;
ulong[] t;
int[] mod;
int[] mod2;
do
{
kw = this.kw;
t = this.t;
mod = ThreefishEngine.MOD5;
mod2 = ThreefishEngine.MOD3;
}
while (kw.Length != 9 || t.Length != 5);
int length = block.Length;
ulong num = block[0];
ulong num2 = block[1];
ulong num3 = block[2];
ulong num4 = block[3];
uint num6;
int num5 = mod[(int)num6];
int num7 = mod2[(int)num6];
int num8 = num5 + 1;
int length2 = kw.Length;
int num9 = num7 + 1;
int length3 = t.Length;
ulong num10 = t[num9];
num2 -= num10;
ulong num11 = t[(int)num10];
num3 -= num11;
num4 -= (ulong)num6;
ulong num12 = num4 - 1UL;
ulong num13 = ThreefishEngine.XorRotr(num12, 32, num);
num = num3;
num12 = num2;
num4 = num13;
num -= num13;
ulong num14 = ThreefishEngine.XorRotr(num12, 32, num);
num12 = num14;
num3 -= num14;
ulong num15 = ThreefishEngine.XorRotr(num12, 58, num);
num = num3;
num12 = num4;
num2 = num15;
num -= num15;
ulong num16 = ThreefishEngine.XorRotr(num12, 22, num);
num12 = num16;
num3 -= num16;
ulong num17 = ThreefishEngine.XorRotr(num12, 46, num);
num = num3;
num12 = num2;
num4 = num17;
num -= num17;
ulong num18 = ThreefishEngine.XorRotr(num12, 12, num);
num12 = num18;
num3 -= num18;
ulong num19 = ThreefishEngine.XorRotr(num12, 25, num);
num = num3;
num12 = num4;
ulong num20 = ThreefishEngine.XorRotr(num12, 33, num);
int length4 = kw.Length;
int num21 = num5 + 1;
ulong num22 = kw[num21];
int length5 = t.Length;
ulong num23 = t[num7];
int num24 = num7 + 1;
ulong num25 = t[num24];
num25 += num20;
num3 -= num25;
ulong num26 = kw[num5];
num26 += num19;
num -= num26;
ulong num27 = ThreefishEngine.XorRotr(num20, 5, num);
num19 -= num23;
num = num3;
num20 = num19;
num2 = num27;
num -= num27;
ulong num28 = ThreefishEngine.XorRotr(num20, 37, num);
num20 = num28;
num3 -= num28;
ulong num29 = ThreefishEngine.XorRotr(num20, 23, num);
num = num3;
num20 = num2;
num23 = num29;
num -= num29;
ulong num30 = ThreefishEngine.XorRotr(num20, 40, num);
num20 = num30;
num3 -= num30;
ulong num31 = ThreefishEngine.XorRotr(num20, 52, num);
num = num3;
num20 = num23;
num2 = num31;
num -= num31;
ulong num32 = ThreefishEngine.XorRotr(num20, 57, num);
num20 = num32;
num3 -= num32;
ulong num33 = ThreefishEngine.XorRotr(num20, 14, num);
num = num3;
num20 = num2;
num19 = num33;
num -= num33;
ulong num34 = ThreefishEngine.XorRotr(num20, 16, num);
num3 -= num34;
num23 = num34;
int length6 = kw.Length;
int length7 = t.Length;
ulong num35 = kw[1];
ulong num36 = t[0];
ulong num37 = kw[2];
ulong num38 = t[1];
ulong num39 = kw[3];
num19 -= num36;
num19 -= num35;
num3 -= num38;
num3 -= num37;
num23 -= num39;
}
// Token: 0x04007558 RID: 30040
[Token(Token = "0x4007558")]
private const int ROTATION_0_0 = 14;
// Token: 0x04007559 RID: 30041
[Token(Token = "0x4007559")]
private const int ROTATION_0_1 = 16;
// Token: 0x0400755A RID: 30042
[Token(Token = "0x400755A")]
private const int ROTATION_1_0 = 52;
// Token: 0x0400755B RID: 30043
[Token(Token = "0x400755B")]
private const int ROTATION_1_1 = 57;
// Token: 0x0400755C RID: 30044
[Token(Token = "0x400755C")]
private const int ROTATION_2_0 = 23;
// Token: 0x0400755D RID: 30045
[Token(Token = "0x400755D")]
private const int ROTATION_2_1 = 40;
// Token: 0x0400755E RID: 30046
[Token(Token = "0x400755E")]
private const int ROTATION_3_0 = 5;
// Token: 0x0400755F RID: 30047
[Token(Token = "0x400755F")]
private const int ROTATION_3_1 = 37;
// Token: 0x04007560 RID: 30048
[Token(Token = "0x4007560")]
private const int ROTATION_4_0 = 25;
// Token: 0x04007561 RID: 30049
[Token(Token = "0x4007561")]
private const int ROTATION_4_1 = 33;
// Token: 0x04007562 RID: 30050
[Token(Token = "0x4007562")]
private const int ROTATION_5_0 = 46;
// Token: 0x04007563 RID: 30051
[Token(Token = "0x4007563")]
private const int ROTATION_5_1 = 12;
// Token: 0x04007564 RID: 30052
[Token(Token = "0x4007564")]
private const int ROTATION_6_0 = 58;
// Token: 0x04007565 RID: 30053
[Token(Token = "0x4007565")]
private const int ROTATION_6_1 = 22;
// Token: 0x04007566 RID: 30054
[Token(Token = "0x4007566")]
private const int ROTATION_7_0 = 32;
// Token: 0x04007567 RID: 30055
[Token(Token = "0x4007567")]
private const int ROTATION_7_1 = 32;
}
// Token: 0x02001CB4 RID: 7348
[Token(Token = "0x2001CB4")]
private sealed class Threefish512Cipher : ThreefishEngine.ThreefishCipher
{
// Token: 0x0600B92A RID: 47402 RVA: 0x00295E20 File Offset: 0x00294020
[Token(Token = "0x600B92A")]
[Address(RVA = "0x579630", Offset = "0x578430", VA = "0x180579630")]
internal Threefish512Cipher(ulong[] kw, ulong[] t)
{
this.kw = kw;
this.t = t;
}
// Token: 0x0600B92B RID: 47403 RVA: 0x00295E44 File Offset: 0x00294044
[Token(Token = "0x600B92B")]
[Address(RVA = "0x1A375F0", Offset = "0x1A363F0", VA = "0x181A375F0", Slot = "4")]
internal override void EncryptBlock(ulong[] block, ulong[] outWords)
{
ulong[] t;
ulong[] kw;
int[] mod;
int[] mod2;
do
{
t = this.t;
kw = this.kw;
mod = ThreefishEngine.MOD9;
mod2 = ThreefishEngine.MOD3;
}
while (kw.Length != 17 || t.Length != 5);
int length = block.Length;
ulong num = block[1];
ulong num2 = block[2];
ulong num3 = block[3];
ulong num4 = block[5];
ulong num5 = block[6];
ulong num6 = t[0];
ulong num7 = block[7];
num4 += num6;
ulong num8 = t[1];
num5 += num8;
uint num10;
int num9 = mod[(int)num10];
int num11 = mod2[(int)num10];
ulong num12 = ThreefishEngine.RotlXor(num, 46, block);
num = num3;
ulong num13 = ThreefishEngine.RotlXor(num, 36, num);
num = num4;
num2 = num13;
ulong num14 = ThreefishEngine.RotlXor(num, 19, num);
num = num4;
ulong num15 = ThreefishEngine.RotlXor(num7, 37, num);
num5 = num15;
num7 = num12;
num = num15;
ulong num16 = ThreefishEngine.RotlXor(num7, 33, num);
num7 = num5;
num12 = num16;
ulong num17 = ThreefishEngine.RotlXor(num7, 27, num);
num = num3;
ulong num18 = ThreefishEngine.RotlXor(num7, 14, num);
num7 = num2;
ulong num19 = ThreefishEngine.RotlXor(num7, 42, block);
num5 = num19;
num7 = num12;
ulong num20 = ThreefishEngine.RotlXor(num7, 17, num19);
num19 = num;
num7 = num5;
num12 = num20;
ulong num21 = ThreefishEngine.RotlXor(num7, 49, num19);
num19 = num3;
num2 = num21;
ulong num22 = ThreefishEngine.RotlXor(num7, 36, num19);
num19 = num15;
ulong num23 = ThreefishEngine.RotlXor(num17, 39, num19);
num5 = num23;
num17 = num12;
num19 = num23;
ulong num24 = ThreefishEngine.RotlXor(num17, 44, num19);
num19 = num12;
num17 = num5;
num = num24;
ulong num25 = ThreefishEngine.RotlXor(num17, 9, num19);
num19 = num25;
num3 = ThreefishEngine.RotlXor(num17, 54, num19);
num17 = num2;
num19 += num2;
num5 = ThreefishEngine.RotlXor(num17, 56, num19);
int length2 = kw.Length;
int num26 = num9 + 1;
ulong num27 = kw[num26];
ulong num28 = kw[num26];
int length3 = t.Length;
ulong num29 = kw[num26];
num3 += num29;
ulong num30 = kw[(int)num29];
int num31 = num11 + 1;
ulong num32 = t[num31];
ulong num33 = kw[num31];
num33 += (ulong)num10;
ulong num34 = kw[num9];
num34 += num12;
num34 += num;
ulong num35 = ThreefishEngine.RotlXor(num, 39, num34);
num27 += num5;
num = num5;
num34 = num27;
num12 = num35;
ulong num36 = ThreefishEngine.RotlXor(num, 30, num34);
num19 += num28;
num19 += num3;
num = num3;
num34 = num19;
ulong num37 = ThreefishEngine.RotlXor(num, 34, num34);
num30 += num32;
num28 = num37;
num34 = num30;
ulong num38 = ThreefishEngine.RotlXor(num25, 24, num34);
num5 = num38;
num25 = num12;
num34 = num38;
ulong num39 = ThreefishEngine.RotlXor(num25, 13, num34);
num19 += num5;
num34 = num19;
num25 = num5;
num12 = num39;
ulong num40 = ThreefishEngine.RotlXor(num25, 50, num34);
num30 += num28;
num34 = num30;
num25 = num28;
num32 = num40;
num28 = ThreefishEngine.RotlXor(num25, 10, num34);
ulong num41 = ThreefishEngine.RotlXor(num36, 17, num34);
num5 = num41;
num36 = num12;
num34 = num41;
num12 = ThreefishEngine.RotlXor(num36, 25, num34);
num34 = num19;
num36 = num5;
ulong num42 = ThreefishEngine.RotlXor(num36, 29, num34);
num36 = num28;
num34 = num30;
ulong num43 = ThreefishEngine.RotlXor(num36, 39, num34);
num38 += num32;
num36 = num32;
num34 = num38;
num28 = num43;
ulong num44 = ThreefishEngine.RotlXor(num36, 43, num34);
num5 = num44;
num36 = num12;
num34 = num44;
ulong num45 = ThreefishEngine.RotlXor(num36, 8, num34);
num34 = num12;
num36 = num5;
ulong num46 = ThreefishEngine.RotlXor(num36, 35, num34);
num36 = num28;
num34 = num5;
num38 = ThreefishEngine.RotlXor(num36, 56, num34);
num34 = num41;
ulong num47 = ThreefishEngine.RotlXor(num42, 22, num34);
int length4 = kw.Length;
ulong num48 = kw[num26];
num48 += num12;
ulong num49 = kw[num26];
num49 += num5;
ulong num50 = kw[num26];
num41 += num50;
int num51 = num11 + 1;
int length5 = t.Length;
ulong num52 = t[num51];
num38 += num52;
num11 += 2;
num9 += 8;
ulong num53 = kw[num9];
num53 += (ulong)num10;
num10 += (uint)2;
num46 += (ulong)1L;
num53 += num46;
if (num10 < (uint)18)
{
}
}
// Token: 0x0600B92C RID: 47404 RVA: 0x002962E0 File Offset: 0x002944E0
[Token(Token = "0x600B92C")]
[Address(RVA = "0x1A369B0", Offset = "0x1A357B0", VA = "0x181A369B0", Slot = "5")]
internal override void DecryptBlock(ulong[] block, ulong[] state)
{
ulong[] t;
ulong[] kw;
int[] array;
int[] mod;
do
{
t = this.t;
kw = this.kw;
array = ThreefishEngine.MOD9;
mod = ThreefishEngine.MOD3;
}
while (kw.Length != 17 || t.Length != 5);
int length = block.Length;
ulong num = block[0];
ulong num2 = block[1];
ulong num3 = block[2];
ulong num4 = block[3];
ulong num5 = block[4];
ulong num6 = block[5];
ulong num7 = block[6];
ulong num8 = block[7];
uint num10;
int num9 = array[(int)num10];
int num11 = mod[(int)num10];
int num12 = num9 + 1;
int length2 = kw.Length;
int length3 = t.Length;
int num13 = num11 + 1;
ulong num14 = t[num13];
num6 -= num14;
ulong num15;
num15 -= (ulong)num10;
ulong num16 = t[mod];
num7 -= num16;
ulong num17 = ThreefishEngine.XorRotr(num2, 8, num7);
num7 -= num17;
num7 = num;
num2 = num17;
ulong num18 = ThreefishEngine.XorRotr(num8, 35, num7);
num -= num18;
num7 = num3;
num6 = num18;
ulong num19 = ThreefishEngine.XorRotr(num6, 56, num7);
num3 -= num19;
num7 = num19;
ulong num20 = ThreefishEngine.XorRotr(num4, 22, num7);
num5 -= num20;
num7 = num5;
num4 = num2;
num3 = num20;
ulong num21 = ThreefishEngine.XorRotr(num4, 25, num7);
num5 -= num21;
num4 = num3;
num2 = num21;
ulong num22 = ThreefishEngine.XorRotr(num4, 29, num7);
num7 = num;
num4 = num7;
num = num22;
ulong num23 = ThreefishEngine.XorRotr(num4, 39, num7);
num -= num23;
num4 = num6;
num7 = num23;
num = ThreefishEngine.XorRotr(num4, 43, num3);
num4 = num2;
num3 -= num;
ulong num24 = ThreefishEngine.XorRotr(num4, 13, num3);
num3 = num5;
num4 = num;
num6 = num24;
num5 = ThreefishEngine.XorRotr(num4, 50, num3);
num4 = num7;
ulong num25 = ThreefishEngine.XorRotr(num4, 10, num7);
num4 = num;
num2 = num25;
num7 -= num25;
ulong num26 = ThreefishEngine.XorRotr(num4, 17, num);
num -= num26;
num4 = num6;
num = num26;
ulong num27 = ThreefishEngine.XorRotr(num4, 39, num);
num = num3;
num4 = num;
ulong num28 = ThreefishEngine.XorRotr(num4, 30, num);
num = num5;
num4 = num2;
ulong num29 = ThreefishEngine.XorRotr(num4, 34, num);
num = num7;
num4 = num5;
num2 = num29;
ulong num30 = ThreefishEngine.XorRotr(num4, 24, num);
int length4 = kw.Length;
num5 = num30;
ulong num31 = kw[num9];
int num32 = num9 + 1;
num31 += num27;
num -= num31;
ulong num33 = kw[(int)num30];
num3 -= num33;
ulong num34 = kw[(int)num33];
ulong num35 = kw[(int)num34];
num35 += num2;
num5 -= num35;
ulong num36 = kw[(int)num35];
int length5 = t.Length;
ulong num37 = t[num11];
num11++;
ulong num38 = t[num11];
num38 += num5;
ulong num39 = kw[(int)num5];
num7 -= num38;
ulong num40 = ThreefishEngine.XorRotr(num27, 44, num7);
num7 -= num40;
num5 -= num39;
num7 = num;
num27 = num5;
num2 = num40;
ulong num41 = ThreefishEngine.XorRotr(num27, 9, num7);
num7 = num3;
num5 = num41;
num -= num41;
ulong num42 = ThreefishEngine.XorRotr(num29, 54, num7);
num3 -= num42;
num7 = num42;
ulong num43 = ThreefishEngine.XorRotr(num28, 56, num7);
num5 -= num43;
num7 = num5;
num28 = num2;
num39 = num43;
ulong num44 = ThreefishEngine.XorRotr(num28, 17, num7);
num28 = num39;
num2 = num44;
num5 -= num44;
ulong num45 = ThreefishEngine.XorRotr(num28, 49, num7);
num7 = num;
num28 = num7;
num3 = num45;
ulong num46 = ThreefishEngine.XorRotr(num28, 36, num7);
num28 = num5;
num7 = num46;
num -= num46;
ulong num47 = ThreefishEngine.XorRotr(num28, 39, num3);
num3 -= num47;
num28 = num2;
num39 = num47;
ulong num48 = ThreefishEngine.XorRotr(num28, 33, num3);
num3 -= num48;
num2 = num48;
num3 = num5;
num28 = num39;
ulong num49 = ThreefishEngine.XorRotr(num28, 27, num3);
num28 = num7;
num3 = num49;
num5 -= num49;
ulong num50 = ThreefishEngine.XorRotr(num28, 14, num3);
num7 -= num50;
num3 = num;
num28 = num3;
ulong num51 = ThreefishEngine.XorRotr(num28, 42, num3);
num -= num51;
num3 = num;
num28 = num2;
num7 = num51;
ulong num52 = ThreefishEngine.XorRotr(num28, 46, num3);
num28 = num7;
num -= num52;
ulong num53 = ThreefishEngine.XorRotr(num28, 36, num3);
num3 = num5;
num28 = num7;
num3 -= num53;
ulong num54 = ThreefishEngine.XorRotr(num28, 19, num3);
num3 = num7;
num28 = num3;
num3 = num54;
num5 -= num54;
ulong num55 = ThreefishEngine.XorRotr(num28, 37, num3);
num7 -= num55;
num3 = num5;
int length6 = kw.Length;
ulong num56 = kw[1];
ulong num57 = kw[2];
ulong num58 = kw[3];
ulong num59 = kw[4];
ulong num60 = kw[5];
int length7 = t.Length;
ulong num61 = t[0];
ulong num62 = kw[6];
ulong num63 = t[1];
ulong num64 = kw[7];
num5 -= num59;
num3 -= num61;
num7 -= num63;
num7 -= num62;
array -= num64;
}
// Token: 0x04007568 RID: 30056
[Token(Token = "0x4007568")]
private const int ROTATION_0_0 = 46;
// Token: 0x04007569 RID: 30057
[Token(Token = "0x4007569")]
private const int ROTATION_0_1 = 36;
// Token: 0x0400756A RID: 30058
[Token(Token = "0x400756A")]
private const int ROTATION_0_2 = 19;
// Token: 0x0400756B RID: 30059
[Token(Token = "0x400756B")]
private const int ROTATION_0_3 = 37;
// Token: 0x0400756C RID: 30060
[Token(Token = "0x400756C")]
private const int ROTATION_1_0 = 33;
// Token: 0x0400756D RID: 30061
[Token(Token = "0x400756D")]
private const int ROTATION_1_1 = 27;
// Token: 0x0400756E RID: 30062
[Token(Token = "0x400756E")]
private const int ROTATION_1_2 = 14;
// Token: 0x0400756F RID: 30063
[Token(Token = "0x400756F")]
private const int ROTATION_1_3 = 42;
// Token: 0x04007570 RID: 30064
[Token(Token = "0x4007570")]
private const int ROTATION_2_0 = 17;
// Token: 0x04007571 RID: 30065
[Token(Token = "0x4007571")]
private const int ROTATION_2_1 = 49;
// Token: 0x04007572 RID: 30066
[Token(Token = "0x4007572")]
private const int ROTATION_2_2 = 36;
// Token: 0x04007573 RID: 30067
[Token(Token = "0x4007573")]
private const int ROTATION_2_3 = 39;
// Token: 0x04007574 RID: 30068
[Token(Token = "0x4007574")]
private const int ROTATION_3_0 = 44;
// Token: 0x04007575 RID: 30069
[Token(Token = "0x4007575")]
private const int ROTATION_3_1 = 9;
// Token: 0x04007576 RID: 30070
[Token(Token = "0x4007576")]
private const int ROTATION_3_2 = 54;
// Token: 0x04007577 RID: 30071
[Token(Token = "0x4007577")]
private const int ROTATION_3_3 = 56;
// Token: 0x04007578 RID: 30072
[Token(Token = "0x4007578")]
private const int ROTATION_4_0 = 39;
// Token: 0x04007579 RID: 30073
[Token(Token = "0x4007579")]
private const int ROTATION_4_1 = 30;
// Token: 0x0400757A RID: 30074
[Token(Token = "0x400757A")]
private const int ROTATION_4_2 = 34;
// Token: 0x0400757B RID: 30075
[Token(Token = "0x400757B")]
private const int ROTATION_4_3 = 24;
// Token: 0x0400757C RID: 30076
[Token(Token = "0x400757C")]
private const int ROTATION_5_0 = 13;
// Token: 0x0400757D RID: 30077
[Token(Token = "0x400757D")]
private const int ROTATION_5_1 = 50;
// Token: 0x0400757E RID: 30078
[Token(Token = "0x400757E")]
private const int ROTATION_5_2 = 10;
// Token: 0x0400757F RID: 30079
[Token(Token = "0x400757F")]
private const int ROTATION_5_3 = 17;
// Token: 0x04007580 RID: 30080
[Token(Token = "0x4007580")]
private const int ROTATION_6_0 = 25;
// Token: 0x04007581 RID: 30081
[Token(Token = "0x4007581")]
private const int ROTATION_6_1 = 29;
// Token: 0x04007582 RID: 30082
[Token(Token = "0x4007582")]
private const int ROTATION_6_2 = 39;
// Token: 0x04007583 RID: 30083
[Token(Token = "0x4007583")]
private const int ROTATION_6_3 = 43;
// Token: 0x04007584 RID: 30084
[Token(Token = "0x4007584")]
private const int ROTATION_7_0 = 8;
// Token: 0x04007585 RID: 30085
[Token(Token = "0x4007585")]
private const int ROTATION_7_1 = 35;
// Token: 0x04007586 RID: 30086
[Token(Token = "0x4007586")]
private const int ROTATION_7_2 = 56;
// Token: 0x04007587 RID: 30087
[Token(Token = "0x4007587")]
private const int ROTATION_7_3 = 22;
}
// Token: 0x02001CB5 RID: 7349
[Token(Token = "0x2001CB5")]
private sealed class Threefish1024Cipher : ThreefishEngine.ThreefishCipher
{
// Token: 0x0600B92D RID: 47405 RVA: 0x0029685C File Offset: 0x00294A5C
[Token(Token = "0x600B92D")]
[Address(RVA = "0x1E0B8B0", Offset = "0x1E0A6B0", VA = "0x181E0B8B0")]
public Threefish1024Cipher(ulong[] kw, ulong[] t)
: base(kw, t)
{
}
// Token: 0x0600B92E RID: 47406 RVA: 0x00296874 File Offset: 0x00294A74
[Token(Token = "0x600B92E")]
[Address(RVA = "0x1E0A400", Offset = "0x1E09200", VA = "0x181E0A400", Slot = "4")]
internal override void EncryptBlock(ulong[] block, ulong[] outWords)
{
ulong[] array;
ulong[] array2;
int[] array3;
int[] array4;
do
{
array = this.kw;
array2 = this.t;
array3 = ThreefishEngine.MOD17;
array4 = ThreefishEngine.MOD3;
}
while (array.Length != 33 || array2.Length != 5);
ulong num = array2[0];
ulong num2 = array2[1];
array4 += num2;
uint num4;
int num3 = array3[(int)num4];
int num5 = array4[(int)num4];
array += typeof(ThreefishEngine).TypeHandle;
array4 += this;
array += this;
array4 += array4;
array3 += array4;
int length = array.Length;
int num6 = num3 + 1;
int length2 = array2.Length;
int num7 = num5 + 1;
num3 += 15;
array3 += num4;
ulong num8 = array[num3];
num8 += this;
ulong num9 = array[num6];
array3 += num9;
array3 += this;
ulong num10 = array[array4];
array4 += num10;
array4 += this;
ulong num11 = array[this];
array4 += num11;
array4 += array4;
ulong num12 = array[this];
ulong num13 = array[this];
array += num12;
num13 += array4;
ulong num14 = array[this];
array2 += array3;
array += this;
num13 += this;
array4 += array4;
ulong num15 = array[num6];
ulong num16 = array[array4];
num16 += array3;
ulong num17 = array[array4];
num17 += array4;
ulong num18 = array[this];
ulong num19 = array[this];
num19 += num8;
ulong num20 = array[this];
ulong num21 = array[this];
num21 += this;
num5++;
int length3 = array2.Length;
num5 += 2;
ulong num22 = array2[num5];
num4 += (uint)1;
num4 += array3;
num4 += (uint)2;
}
// Token: 0x0600B92F RID: 47407 RVA: 0x00296A30 File Offset: 0x00294C30
[Token(Token = "0x600B92F")]
[Address(RVA = "0x1E08CB0", Offset = "0x1E07AB0", VA = "0x181E08CB0", Slot = "5")]
internal override void DecryptBlock(ulong[] block, ulong[] state)
{
ulong[] t;
ulong[] kw;
int[] mod;
int[] mod2;
do
{
t = this.t;
kw = this.kw;
mod = ThreefishEngine.MOD17;
mod2 = ThreefishEngine.MOD3;
}
while (kw.Length != 33 || t.Length != 5);
int length = block.Length;
ulong num = block[1];
ulong num2 = block[2];
ulong num3 = block[3];
ulong num4 = block[5];
ulong num5 = block[6];
ulong num6 = block[7];
ulong num7 = block[8];
ulong num8 = block[9];
ulong num9 = block[10];
ulong num10 = block[11];
ulong num11 = block[12];
ulong num12 = block[13];
ulong num13 = block[14];
ulong num14 = block[15];
uint num16;
int num15 = mod[(int)num16];
int num17 = mod2[(int)num16];
int num18 = num15 + 1;
num17++;
ulong num19 = t[num17];
num17 += 2;
ulong num20 = t[num17];
num13 -= num20;
num14 -= (ulong)num16;
num2 -= num10;
num13 = num12;
num5 -= num13;
num14 = num8;
num8 = num7;
num13 -= num8;
num5 = num8;
num8 = num9;
num7 -= num5;
num7 = num8;
num8 = num11;
num9 -= num7;
num13 = num8;
num11 -= num13;
num11 = num13;
num2 -= num5;
num5 -= num5;
num8 = num14;
num11 -= num8;
num5 = num10;
num11 = num13;
num7 = num11;
num7 -= num5;
num13 -= num7;
num13 = num9;
num9 -= num13;
num7 = num13;
num10 = num7;
num2 -= num10;
num5 -= num5;
num14 = num8;
num9 = num11;
num5 = num9;
num11 -= num5;
num9 = num13;
num7 = num9;
num13 -= num7;
num9 = num7;
num13 = num9;
num7 -= num13;
num5 = num13;
num9 = num14;
int length2 = kw.Length;
ulong num21 = kw[num15];
num21 += num5;
int num22 = num15 + 1;
ulong num23 = kw[num22];
num23 += num5;
num2 -= num23;
ulong num24 = kw[(int)num23];
ulong num25 = kw[(int)num24];
num5 -= num25;
ulong num26 = kw[(int)num25];
num7 -= num26;
ulong num27 = kw[(int)num26];
num9 -= num27;
ulong num28 = kw[(int)num27];
num28 += num10;
num11 -= num28;
int length3 = t.Length;
num17++;
ulong num29 = t[num17];
num15 += 15;
num29 += num9;
num13 -= num29;
num9 -= (ulong)num16;
num2 -= num9;
num5 -= num10;
num13 -= num5;
num5 = num9;
num7 -= num5;
num9 = num5;
num9 -= num9;
num25 = num9;
num11 -= num25;
num9 = num5;
num11 = num9;
num2 -= num9;
num2 = num5;
num5 -= num2;
num5 = num13;
num13 -= num5;
num5 = num9;
num7 -= num5;
num13 = num9;
num9 -= num13;
num9 = num5;
num2 -= num9;
num5 -= num5;
num9 = num11;
num11 = num9;
num9 = num11;
num9 -= num11;
num5 = num9;
num9 = num13;
num11 -= num5;
num5 = num9;
num9 = num7;
num13 -= num5;
num11 = num9;
num7 -= num11;
num9 = num5;
num2 -= num9;
num5 -= num11;
num11 = num9;
num2 = num9;
num7 -= num11;
num11 = num5;
num13 -= num2;
num5 = num9;
num5 -= num11;
num11 -= num9;
while (num16 >= (uint)1)
{
}
ulong num30 = kw[1];
ulong num31 = kw[2];
ulong num32 = kw[3];
ulong num33 = kw[4];
ulong num34 = kw[5];
ulong num35 = kw[6];
ulong num36 = kw[7];
ulong num37 = kw[8];
ulong num38 = kw[9];
ulong num39 = kw[10];
ulong num40 = kw[11];
ulong num41 = kw[12];
ulong num42 = kw[13];
int length4 = t.Length;
ulong num43 = t[0];
ulong num44 = kw[14];
ulong num45 = t[1];
ulong num46 = kw[15];
num13 -= num45;
num13 -= num44;
num2 -= num46;
}
// Token: 0x04007588 RID: 30088
[Token(Token = "0x4007588")]
private const int ROTATION_0_0 = 24;
// Token: 0x04007589 RID: 30089
[Token(Token = "0x4007589")]
private const int ROTATION_0_1 = 13;
// Token: 0x0400758A RID: 30090
[Token(Token = "0x400758A")]
private const int ROTATION_0_2 = 8;
// Token: 0x0400758B RID: 30091
[Token(Token = "0x400758B")]
private const int ROTATION_0_3 = 47;
// Token: 0x0400758C RID: 30092
[Token(Token = "0x400758C")]
private const int ROTATION_0_4 = 8;
// Token: 0x0400758D RID: 30093
[Token(Token = "0x400758D")]
private const int ROTATION_0_5 = 17;
// Token: 0x0400758E RID: 30094
[Token(Token = "0x400758E")]
private const int ROTATION_0_6 = 22;
// Token: 0x0400758F RID: 30095
[Token(Token = "0x400758F")]
private const int ROTATION_0_7 = 37;
// Token: 0x04007590 RID: 30096
[Token(Token = "0x4007590")]
private const int ROTATION_1_0 = 38;
// Token: 0x04007591 RID: 30097
[Token(Token = "0x4007591")]
private const int ROTATION_1_1 = 19;
// Token: 0x04007592 RID: 30098
[Token(Token = "0x4007592")]
private const int ROTATION_1_2 = 10;
// Token: 0x04007593 RID: 30099
[Token(Token = "0x4007593")]
private const int ROTATION_1_3 = 55;
// Token: 0x04007594 RID: 30100
[Token(Token = "0x4007594")]
private const int ROTATION_1_4 = 49;
// Token: 0x04007595 RID: 30101
[Token(Token = "0x4007595")]
private const int ROTATION_1_5 = 18;
// Token: 0x04007596 RID: 30102
[Token(Token = "0x4007596")]
private const int ROTATION_1_6 = 23;
// Token: 0x04007597 RID: 30103
[Token(Token = "0x4007597")]
private const int ROTATION_1_7 = 52;
// Token: 0x04007598 RID: 30104
[Token(Token = "0x4007598")]
private const int ROTATION_2_0 = 33;
// Token: 0x04007599 RID: 30105
[Token(Token = "0x4007599")]
private const int ROTATION_2_1 = 4;
// Token: 0x0400759A RID: 30106
[Token(Token = "0x400759A")]
private const int ROTATION_2_2 = 51;
// Token: 0x0400759B RID: 30107
[Token(Token = "0x400759B")]
private const int ROTATION_2_3 = 13;
// Token: 0x0400759C RID: 30108
[Token(Token = "0x400759C")]
private const int ROTATION_2_4 = 34;
// Token: 0x0400759D RID: 30109
[Token(Token = "0x400759D")]
private const int ROTATION_2_5 = 41;
// Token: 0x0400759E RID: 30110
[Token(Token = "0x400759E")]
private const int ROTATION_2_6 = 59;
// Token: 0x0400759F RID: 30111
[Token(Token = "0x400759F")]
private const int ROTATION_2_7 = 17;
// Token: 0x040075A0 RID: 30112
[Token(Token = "0x40075A0")]
private const int ROTATION_3_0 = 5;
// Token: 0x040075A1 RID: 30113
[Token(Token = "0x40075A1")]
private const int ROTATION_3_1 = 20;
// Token: 0x040075A2 RID: 30114
[Token(Token = "0x40075A2")]
private const int ROTATION_3_2 = 48;
// Token: 0x040075A3 RID: 30115
[Token(Token = "0x40075A3")]
private const int ROTATION_3_3 = 41;
// Token: 0x040075A4 RID: 30116
[Token(Token = "0x40075A4")]
private const int ROTATION_3_4 = 47;
// Token: 0x040075A5 RID: 30117
[Token(Token = "0x40075A5")]
private const int ROTATION_3_5 = 28;
// Token: 0x040075A6 RID: 30118
[Token(Token = "0x40075A6")]
private const int ROTATION_3_6 = 16;
// Token: 0x040075A7 RID: 30119
[Token(Token = "0x40075A7")]
private const int ROTATION_3_7 = 25;
// Token: 0x040075A8 RID: 30120
[Token(Token = "0x40075A8")]
private const int ROTATION_4_0 = 41;
// Token: 0x040075A9 RID: 30121
[Token(Token = "0x40075A9")]
private const int ROTATION_4_1 = 9;
// Token: 0x040075AA RID: 30122
[Token(Token = "0x40075AA")]
private const int ROTATION_4_2 = 37;
// Token: 0x040075AB RID: 30123
[Token(Token = "0x40075AB")]
private const int ROTATION_4_3 = 31;
// Token: 0x040075AC RID: 30124
[Token(Token = "0x40075AC")]
private const int ROTATION_4_4 = 12;
// Token: 0x040075AD RID: 30125
[Token(Token = "0x40075AD")]
private const int ROTATION_4_5 = 47;
// Token: 0x040075AE RID: 30126
[Token(Token = "0x40075AE")]
private const int ROTATION_4_6 = 44;
// Token: 0x040075AF RID: 30127
[Token(Token = "0x40075AF")]
private const int ROTATION_4_7 = 30;
// Token: 0x040075B0 RID: 30128
[Token(Token = "0x40075B0")]
private const int ROTATION_5_0 = 16;
// Token: 0x040075B1 RID: 30129
[Token(Token = "0x40075B1")]
private const int ROTATION_5_1 = 34;
// Token: 0x040075B2 RID: 30130
[Token(Token = "0x40075B2")]
private const int ROTATION_5_2 = 56;
// Token: 0x040075B3 RID: 30131
[Token(Token = "0x40075B3")]
private const int ROTATION_5_3 = 51;
// Token: 0x040075B4 RID: 30132
[Token(Token = "0x40075B4")]
private const int ROTATION_5_4 = 4;
// Token: 0x040075B5 RID: 30133
[Token(Token = "0x40075B5")]
private const int ROTATION_5_5 = 53;
// Token: 0x040075B6 RID: 30134
[Token(Token = "0x40075B6")]
private const int ROTATION_5_6 = 42;
// Token: 0x040075B7 RID: 30135
[Token(Token = "0x40075B7")]
private const int ROTATION_5_7 = 41;
// Token: 0x040075B8 RID: 30136
[Token(Token = "0x40075B8")]
private const int ROTATION_6_0 = 31;
// Token: 0x040075B9 RID: 30137
[Token(Token = "0x40075B9")]
private const int ROTATION_6_1 = 44;
// Token: 0x040075BA RID: 30138
[Token(Token = "0x40075BA")]
private const int ROTATION_6_2 = 47;
// Token: 0x040075BB RID: 30139
[Token(Token = "0x40075BB")]
private const int ROTATION_6_3 = 46;
// Token: 0x040075BC RID: 30140
[Token(Token = "0x40075BC")]
private const int ROTATION_6_4 = 19;
// Token: 0x040075BD RID: 30141
[Token(Token = "0x40075BD")]
private const int ROTATION_6_5 = 42;
// Token: 0x040075BE RID: 30142
[Token(Token = "0x40075BE")]
private const int ROTATION_6_6 = 44;
// Token: 0x040075BF RID: 30143
[Token(Token = "0x40075BF")]
private const int ROTATION_6_7 = 25;
// Token: 0x040075C0 RID: 30144
[Token(Token = "0x40075C0")]
private const int ROTATION_7_0 = 9;
// Token: 0x040075C1 RID: 30145
[Token(Token = "0x40075C1")]
private const int ROTATION_7_1 = 48;
// Token: 0x040075C2 RID: 30146
[Token(Token = "0x40075C2")]
private const int ROTATION_7_2 = 35;
// Token: 0x040075C3 RID: 30147
[Token(Token = "0x40075C3")]
private const int ROTATION_7_3 = 52;
// Token: 0x040075C4 RID: 30148
[Token(Token = "0x40075C4")]
private const int ROTATION_7_4 = 23;
// Token: 0x040075C5 RID: 30149
[Token(Token = "0x40075C5")]
private const int ROTATION_7_5 = 31;
// Token: 0x040075C6 RID: 30150
[Token(Token = "0x40075C6")]
private const int ROTATION_7_6 = 37;
// Token: 0x040075C7 RID: 30151
[Token(Token = "0x40075C7")]
private const int ROTATION_7_7 = 20;
}
}
}