using System; using System.Collections; using System.Runtime.CompilerServices; using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines; using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; using Cpp2IlInjected; namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests { // Token: 0x02001DDE RID: 7646 [Token(Token = "0x2001DDE")] public class SkeinEngine : IMemoable { // Token: 0x0600BFA5 RID: 49061 RVA: 0x002B1F30 File Offset: 0x002B0130 [Token(Token = "0x600BFA5")] [Address(RVA = "0x2912500", Offset = "0x2911500", VA = "0x182912500")] static SkeinEngine() { ulong[] array = new ulong[4]; RuntimeHelpers.InitializeArray(array, fieldof(.FCDDAA37B8499E00EB7B606D8540AA64DE5AE4D4).FieldHandle); SkeinEngine.InitialState(256, 128, array); RuntimeHelpers.InitializeArray(new ulong[4], fieldof(.3C3704DB6466D48DD40FE189070F1896D1D45C8B).FieldHandle); RuntimeHelpers.InitializeArray(new ulong[4], fieldof(.FD9088D5287E3E3A6699200CB6E5DE3E9FDEDD9F).FieldHandle); ulong[] array2 = new ulong[4]; RuntimeHelpers.InitializeArray(array2, fieldof(.0B1E7265E67D2458D8EB536A4B36380A5BF6E731).FieldHandle); SkeinEngine.InitialState(256, 256, array2); ulong[] array3 = new ulong[8]; RuntimeHelpers.InitializeArray(array3, fieldof(.DA7CFA4F9698F5D02C5D90A5858F65EE43B4D564).FieldHandle); SkeinEngine.InitialState(512, 128, array3); ulong[] array4 = new ulong[8]; RuntimeHelpers.InitializeArray(array4, fieldof(.959C1F7BD85779AAF7AA136A20A9C399A5019AEC).FieldHandle); SkeinEngine.InitialState(512, 160, array4); ulong[] array5 = new ulong[8]; RuntimeHelpers.InitializeArray(array5, fieldof(.5318DA9ACB77B4E0953DA6BF6B04DF138D74EA1E).FieldHandle); SkeinEngine.InitialState(512, 224, array5); ulong[] array6 = new ulong[8]; RuntimeHelpers.InitializeArray(array6, fieldof(.F0AEF81E2E3EC0843206EBA7D65BCD1AF83DE7C9).FieldHandle); SkeinEngine.InitialState(512, 384, array6); ulong[] array7 = new ulong[8]; RuntimeHelpers.InitializeArray(array7, fieldof(.118FE9754A9699004D478E4BF686021154D96EAD).FieldHandle); SkeinEngine.InitialState(512, 512, array7); } // Token: 0x0600BFA6 RID: 49062 RVA: 0x002B2064 File Offset: 0x002B0264 [Token(Token = "0x600BFA6")] [Address(RVA = "0x2911DB0", Offset = "0x2910DB0", VA = "0x182911DB0")] private static void InitialState(int blockSize, int outputSize, ulong[] state) { IDictionary initial_STATES = SkeinEngine.INITIAL_STATES; int num = 0; if (num < state) { num += num; num++; } } // Token: 0x0600BFA7 RID: 49063 RVA: 0x002B208C File Offset: 0x002B028C [Token(Token = "0x600BFA7")] [Address(RVA = "0x29124F0", Offset = "0x29114F0", VA = "0x1829124F0")] private static int VariantIdentifier(int blockSizeBytes, int outputSizeBytes) { return outputSizeBytes; } // Token: 0x0600BFA8 RID: 49064 RVA: 0x002B209C File Offset: 0x002B029C [Token(Token = "0x600BFA8")] [Address(RVA = "0x2912770", Offset = "0x2911770", VA = "0x182912770")] public SkeinEngine(int blockSizeBits, int outputSizeBits) { /* An exception occurred when decompiling this method (0600BFA8) ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests.SkeinEngine::.ctor(System.Int32,System.Int32) ---> System.Exception: Basic block has to end with unconditional control flow. { IL_A7: stloc:ArgumentException(var_12_B7, newobj:ArgumentException(ArgumentException::.ctor, call:string(string::Concat, ldstr:string[exp:object]("Output size must be a multiple of 8 bits. :"), ldloc:int32[exp:object](outputSizeBits)))) } 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: 0x0600BFA9 RID: 49065 RVA: 0x002B2164 File Offset: 0x002B0364 [Token(Token = "0x600BFA9")] [Address(RVA = "0x2912960", Offset = "0x2911960", VA = "0x182912960")] public SkeinEngine(SkeinEngine engine) { bool isPartialBlockOkay = engine.threefish.IsPartialBlockOkay; this.CopyIn(engine); } // Token: 0x0600BFAA RID: 49066 RVA: 0x002B218C File Offset: 0x002B038C [Token(Token = "0x600BFAA")] [Address(RVA = "0x2910A80", Offset = "0x290FA80", VA = "0x182910A80")] private void CopyIn(SkeinEngine engine) { SkeinEngine.UBI ubi = this.ubi; SkeinEngine.UBI ubi2 = engine.ubi; byte[] currentBlock = ubi2.currentBlock; byte[] currentBlock2 = ubi.currentBlock; byte[] array = Arrays.Clone(currentBlock, currentBlock2); ulong[] message = ubi.message; ubi.currentBlock = array; int currentOffset = ubi2.currentOffset; ubi.currentOffset = currentOffset; ulong[] array2 = Arrays.Clone(ubi2.message, message); ubi.message = array2; SkeinEngine.UbiTweak tweak = ubi.tweak; SkeinEngine.UbiTweak tweak2 = ubi2.tweak; ulong[] tweak3 = tweak2.tweak; ulong[] tweak4 = tweak.tweak; ulong[] array3 = Arrays.Clone(tweak3, tweak4); tweak.tweak = array3; bool extendedPosition = tweak2.extendedPosition; tweak.extendedPosition = extendedPosition; ulong[] array4 = engine.chain; ulong[] array5 = this.chain; ulong[] array6 = Arrays.Clone(array4, array5); ulong[] array7 = this.initialState; this.chain = array6; ulong[] array8 = Arrays.Clone(engine.initialState, array7); byte[] array9 = this.key; this.initialState = array8; byte[] array10 = Arrays.Clone(engine.key, array9); SkeinEngine.Parameter[] array11 = this.preMessageParameters; this.key = array10; SkeinEngine.Parameter[] array12 = SkeinEngine.Clone(engine.preMessageParameters, array11); SkeinEngine.Parameter[] array13 = this.postMessageParameters; this.preMessageParameters = array12; SkeinEngine.Parameter[] array14 = SkeinEngine.Clone(engine.postMessageParameters, array13); this.postMessageParameters = array14; } // Token: 0x0600BFAB RID: 49067 RVA: 0x002B22E4 File Offset: 0x002B04E4 [Token(Token = "0x600BFAB")] [Address(RVA = "0x29109E0", Offset = "0x290F9E0", VA = "0x1829109E0")] private static SkeinEngine.Parameter[] Clone(SkeinEngine.Parameter[] data, SkeinEngine.Parameter[] existing) { if (data != 0) { if (existing != 0) { int length = data.Length; if (existing.Length == length) { goto IL_24; } } SkeinEngine.Parameter[] array = new SkeinEngine.Parameter[data.Length]; IL_24: int length2 = array.Length; int num = 0; int num2 = 0; Array.Copy(data, num2, array, num, length2); return array; } throw new NullReferenceException(); } // Token: 0x0600BFAC RID: 49068 RVA: 0x002B2338 File Offset: 0x002B0538 [Token(Token = "0x600BFAC")] [Address(RVA = "0x2910C90", Offset = "0x290FC90", VA = "0x182910C90", Slot = "4")] public IMemoable Copy() { bool isPartialBlockOkay = this.threefish.IsPartialBlockOkay; SkeinEngine skeinEngine; skeinEngine.CopyIn(this); throw new NullReferenceException(); } // Token: 0x0600BFAD RID: 49069 RVA: 0x002B2360 File Offset: 0x002B0560 [Token(Token = "0x600BFAD")] [Address(RVA = "0x29121A0", Offset = "0x29111A0", VA = "0x1829121A0", Slot = "5")] public void Reset(IMemoable other) { /* An exception occurred when decompiling this method (0600BFAD) ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests.SkeinEngine::Reset(BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.IMemoable) ---> System.Exception: Basic block has to end with unconditional control flow. { IL_2D: stloc:MemoableResetException(var_4_37, newobj:MemoableResetException(MemoableResetException::.ctor, ldstr:string("Incompatible parameters in provided SkeinEngine."))) } 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.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: 0x17001DC3 RID: 7619 // (get) Token: 0x0600BFAE RID: 49070 RVA: 0x002B23A8 File Offset: 0x002B05A8 [Token(Token = "0x17001DC3")] public int OutputSize { [Token(Token = "0x600BFAE")] [Address(RVA = "0x411540", Offset = "0x410540", VA = "0x180411540")] get { return this.outputSizeBytes; } } // Token: 0x17001DC4 RID: 7620 // (get) Token: 0x0600BFAF RID: 49071 RVA: 0x002B23BC File Offset: 0x002B05BC [Token(Token = "0x17001DC4")] public int BlockSize { [Token(Token = "0x600BFAF")] [Address(RVA = "0x4DAE40", Offset = "0x4D9E40", VA = "0x1804DAE40")] get { string algorithmName = ((IBlockCipher)this.threefish).AlgorithmName; throw new NullReferenceException(); } } // Token: 0x0600BFB0 RID: 49072 RVA: 0x002B23DC File Offset: 0x002B05DC [Token(Token = "0x600BFB0")] [Address(RVA = "0x2911CF0", Offset = "0x2910CF0", VA = "0x182911CF0")] public void Init(SkeinParameters parameters) { int num = 0; this.chain = num; this.key = num; this.preMessageParameters = num; this.postMessageParameters = num; if (parameters != 0) { byte[] array = parameters.GetKey(); IDictionary parameters2 = parameters.parameters; this.InitParams(parameters2); } this.CreateInitialState(); this.UbiInit(48); } // Token: 0x0600BFB1 RID: 49073 RVA: 0x002B2434 File Offset: 0x002B0634 [Token(Token = "0x600BFB1")] [Address(RVA = "0x29118F0", Offset = "0x29108F0", VA = "0x1829118F0")] private void InitParams(IDictionary parameters) { int num; int num3; do { IList list = Platform.CreateArrayList(); IList list2 = Platform.CreateArrayList(); num = 0; if (num < parameters) { num += num; num++; } int num2 = 0; if (list2 == 0) { goto IL_8C; } if (num < num2) { num += num; num++; } num3 = num; num += num; num++; if (num == 0) { num += 19; num++; num += 19; num += 19; } } while (num == 0); if (num3 != 0) { SkeinEngine.Parameter parameter; parameter.type = num3; parameter.value = num; } IL_8C: SkeinEngine.Parameter[] array = new SkeinEngine.Parameter[0]; SkeinEngine.Parameter[] array2 = new SkeinEngine.Parameter[array]; } // Token: 0x0600BFB2 RID: 49074 RVA: 0x002B24EC File Offset: 0x002B06EC [Token(Token = "0x600BFB2")] [Address(RVA = "0x2910D30", Offset = "0x290FD30", VA = "0x182910D30")] private void CreateInitialState() { bool isPartialBlockOkay; int num2; do { ThreefishEngine threefishEngine = this.threefish; IDictionary initial_STATES = SkeinEngine.INITIAL_STATES; isPartialBlockOkay = threefishEngine.IsPartialBlockOkay; int num = this.outputSizeBytes; num2 = 0; if (!isPartialBlockOkay) { } } while (!isPartialBlockOkay); if (this.key == num2 && isPartialBlockOkay) { ulong[] array; this.chain = array; } bool isPartialBlockOkay2 = this.threefish.IsPartialBlockOkay; ulong[] array2 = new ulong[0]; byte[] array3 = this.key; this.chain = array2; int length; int num5; if (array3 != 0) { int num3 = 0; this.UbiInit(num3); SkeinEngine.UBI ubi = this.ubi; ulong[] array4 = this.chain; int num4 = 0; length = array3.Length; ubi.Update(array3, num4, length, array4); SkeinEngine.UBI ubi2 = this.ubi; ulong[] array5 = this.chain; num5 = 0; ubi2.DoFinal(array5); } byte[] array6 = new byte[32]; int num6 = 0; SkeinEngine.Configuration configuration; configuration.bytes = array6; configuration.FieldGetter(num6, num5, length); byte[] bytes = configuration.bytes; byte[] bytes2 = configuration.bytes; byte[] bytes3 = configuration.bytes; byte[] bytes4 = configuration.bytes; byte[] bytes5 = configuration.bytes; configuration.bytes[0] = (byte)num2; byte[] bytes6 = configuration.bytes; this.UbiInit(4); SkeinEngine.UBI ubi3 = this.ubi; ulong[] array7 = this.chain; int num7 = 0; int length2 = bytes6.Length; ubi3.Update(bytes6, num7, length2, array7); SkeinEngine.UBI ubi4 = this.ubi; ulong[] array8 = this.chain; ubi4.DoFinal(array8); SkeinEngine.Parameter[] array9 = this.preMessageParameters; if (array9 != 0 && num2 < array9.Length) { SkeinEngine.Parameter parameter = array9[num2]; SkeinEngine.UBI ubi5 = this.ubi; byte[] value = parameter.value; int type = parameter.type; SkeinEngine.UbiTweak tweak = ubi5.tweak; tweak.tweak[0] = (ulong)num2; tweak.tweak[1] = (ulong)num2; ulong[] tweak2 = tweak.tweak; tweak.extendedPosition = num2 != 0; ubi5.tweak.tweak[1] = (ulong)type; ubi5.currentOffset = num2; SkeinEngine.UBI ubi6 = this.ubi; ulong[] array10 = this.chain; int num8 = 0; int length3 = value.Length; ubi6.Update(value, num8, length3, array10); SkeinEngine.UBI ubi7 = this.ubi; ulong[] array11 = this.chain; int num9 = ubi7.currentOffset; int length4 = ubi7.currentBlock.Length; if (num9 < length4) { num9++; } ulong[] tweak3 = ubi7.tweak.tweak; ubi7.ProcessBlock(array11); SkeinEngine.Parameter[] array12 = this.preMessageParameters; num2++; } ulong[] array13 = Arrays.Clone(this.chain); this.initialState = array13; } // Token: 0x0600BFB3 RID: 49075 RVA: 0x002B2798 File Offset: 0x002B0998 [Token(Token = "0x600BFB3")] [Address(RVA = "0x2912150", Offset = "0x2911150", VA = "0x182912150")] public void Reset() { ulong[] array = this.chain; int length = array.Length; int num = 0; ulong[] array2 = this.initialState; int num2 = 0; Array.Copy(array2, num2, array, num, length); this.UbiInit(48); } // Token: 0x0600BFB4 RID: 49076 RVA: 0x002B27D8 File Offset: 0x002B09D8 [Token(Token = "0x600BFB4")] [Address(RVA = "0x29122C0", Offset = "0x29112C0", VA = "0x1829122C0")] private void UbiComplete(int type, byte[] value) { this.UbiInit(type); SkeinEngine.UBI ubi = this.ubi; ulong[] array = this.chain; int num = 0; int length = value.Length; ubi.Update(value, num, length, array); SkeinEngine.UBI ubi2 = this.ubi; ulong[] array2 = this.chain; ubi2.DoFinal(array2); } // Token: 0x0600BFB5 RID: 49077 RVA: 0x002B282C File Offset: 0x002B0A2C [Token(Token = "0x600BFB5")] [Address(RVA = "0x2912360", Offset = "0x2911360", VA = "0x182912360")] private void UbiInit(int type) { SkeinEngine.UBI ubi = this.ubi; ubi.tweak.Reset(); ubi.tweak.tweak[1] = (ulong)type; ubi.currentOffset = (int)((ulong)0L); } // Token: 0x0600BFB6 RID: 49078 RVA: 0x002B286C File Offset: 0x002B0A6C [Token(Token = "0x600BFB6")] [Address(RVA = "0x2912330", Offset = "0x2911330", VA = "0x182912330")] private void UbiFinal() { SkeinEngine.UBI ubi = this.ubi; ulong[] array = this.chain; ubi.DoFinal(array); } // Token: 0x0600BFB7 RID: 49079 RVA: 0x002B2894 File Offset: 0x002B0A94 [Token(Token = "0x600BFB7")] [Address(RVA = "0x2910970", Offset = "0x290F970", VA = "0x182910970")] private void CheckInitialised() { /* An exception occurred when decompiling this method (0600BFB7) ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests.SkeinEngine::CheckInitialised() ---> System.Exception: Basic block has to end with unconditional control flow. { IL_0C: stloc:ArgumentException(var_0_16, newobj:ArgumentException(ArgumentException::.ctor, ldstr:string("Skein engine is not initialised."))) } 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: 0x0600BFB8 RID: 49080 RVA: 0x002B28B8 File Offset: 0x002B0AB8 [Token(Token = "0x600BFB8")] [Address(RVA = "0x29124A0", Offset = "0x29114A0", VA = "0x1829124A0")] public void Update(byte inByte) { this.singleByte[0] = inByte; byte[] array = this.singleByte; int num = 0; this.Update(array, num, 1); } // Token: 0x0600BFB9 RID: 49081 RVA: 0x002B28EC File Offset: 0x002B0AEC [Token(Token = "0x600BFB9")] [Address(RVA = "0x29123F0", Offset = "0x29113F0", VA = "0x1829123F0")] public void Update(byte[] inBytes, int inOff, int len) { /* An exception occurred when decompiling this method (0600BFB9) ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests.SkeinEngine::Update(System.Byte[],System.Int32,System.Int32) ---> System.Exception: Basic block has to end with unconditional control flow. { IL_1D: stloc:ArgumentException(var_3_27, newobj:ArgumentException(ArgumentException::.ctor, ldstr:string("Skein engine is not initialised."))) } 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: 0x0600BFBA RID: 49082 RVA: 0x002B2920 File Offset: 0x002B0B20 [Token(Token = "0x600BFBA")] [Address(RVA = "0x29113A0", Offset = "0x29103A0", VA = "0x1829113A0")] public int DoFinal(byte[] outBytes, int outOff) { /* An exception occurred when decompiling this method (0600BFBA) ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Int32 BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests.SkeinEngine::DoFinal(System.Byte[],System.Int32) ---> System.Exception: Basic block has to end with unconditional control flow. { IL_243: stloc:ArgumentException(var_37_24D, newobj:ArgumentException(ArgumentException::.ctor, ldstr:string("Skein engine is not initialised."))) } 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: 0x0600BFBB RID: 49083 RVA: 0x002B2B7C File Offset: 0x002B0D7C [Token(Token = "0x600BFBB")] [Address(RVA = "0x2911EF0", Offset = "0x2910EF0", VA = "0x182911EF0")] private void Output(ulong outputSequence, byte[] outBytes, int outOff, int outputBytes) { byte[] array = new byte[8]; int num = 0; ThreefishEngine.WordToBytes(outputSequence, array, num); ulong[] array2 = new ulong[this.chain.Length]; this.UbiInit(63); SkeinEngine.UBI ubi = this.ubi; int length = array.Length; int num2 = 0; ubi.Update(array, num2, length, array2); this.ubi.DoFinal(array2); int num3 = 0; array2 += array2; if (array2 > 0) { int num4; if (num4 != 8) { ulong num5 = array2[num3]; int num6 = 0; ThreefishEngine.WordToBytes(num5, array, num6); } ThreefishEngine.WordToBytes(array2[num3], outBytes, outOff); num3++; } } // Token: 0x04007901 RID: 30977 [Token(Token = "0x4007901")] public const int SKEIN_256 = 256; // Token: 0x04007902 RID: 30978 [Token(Token = "0x4007902")] public const int SKEIN_512 = 512; // Token: 0x04007903 RID: 30979 [Token(Token = "0x4007903")] public const int SKEIN_1024 = 1024; // Token: 0x04007904 RID: 30980 [Token(Token = "0x4007904")] private const int PARAM_TYPE_KEY = 0; // Token: 0x04007905 RID: 30981 [Token(Token = "0x4007905")] private const int PARAM_TYPE_CONFIG = 4; // Token: 0x04007906 RID: 30982 [Token(Token = "0x4007906")] private const int PARAM_TYPE_MESSAGE = 48; // Token: 0x04007907 RID: 30983 [Token(Token = "0x4007907")] private const int PARAM_TYPE_OUTPUT = 63; // Token: 0x04007908 RID: 30984 [Token(Token = "0x4007908")] private static readonly IDictionary INITIAL_STATES = Platform.CreateHashtable(); // Token: 0x04007909 RID: 30985 [FieldOffset(Offset = "0x10")] [Token(Token = "0x4007909")] private readonly ThreefishEngine threefish; // Token: 0x0400790A RID: 30986 [FieldOffset(Offset = "0x18")] [Token(Token = "0x400790A")] private readonly int outputSizeBytes; // Token: 0x0400790B RID: 30987 [FieldOffset(Offset = "0x20")] [Token(Token = "0x400790B")] private ulong[] chain; // Token: 0x0400790C RID: 30988 [FieldOffset(Offset = "0x28")] [Token(Token = "0x400790C")] private ulong[] initialState; // Token: 0x0400790D RID: 30989 [FieldOffset(Offset = "0x30")] [Token(Token = "0x400790D")] private byte[] key; // Token: 0x0400790E RID: 30990 [FieldOffset(Offset = "0x38")] [Token(Token = "0x400790E")] private SkeinEngine.Parameter[] preMessageParameters; // Token: 0x0400790F RID: 30991 [FieldOffset(Offset = "0x40")] [Token(Token = "0x400790F")] private SkeinEngine.Parameter[] postMessageParameters; // Token: 0x04007910 RID: 30992 [FieldOffset(Offset = "0x48")] [Token(Token = "0x4007910")] private readonly SkeinEngine.UBI ubi; // Token: 0x04007911 RID: 30993 [FieldOffset(Offset = "0x50")] [Token(Token = "0x4007911")] private readonly byte[] singleByte; // Token: 0x02001DDF RID: 7647 [Token(Token = "0x2001DDF")] private class Configuration { // Token: 0x0600BFBC RID: 49084 RVA: 0x002B2C24 File Offset: 0x002B0E24 [Token(Token = "0x600BFBC")] [Address(RVA = "0x28FDFA0", Offset = "0x28FCFA0", VA = "0x1828FDFA0")] public Configuration(long outputSizeBits) { byte[] array = new byte[32]; this.bytes = array; base..ctor(); byte[] array2 = this.bytes; byte[] array3 = this.bytes; byte[] array4 = this.bytes; byte[] array5 = this.bytes; byte[] array6 = this.bytes; byte[] array7 = this.bytes; byte[] array8 = this.bytes; ThreefishEngine.WordToBytes((ulong)outputSizeBits, array8, 8); } // Token: 0x17001DC5 RID: 7621 // (get) Token: 0x0600BFBD RID: 49085 RVA: 0x002B2C8C File Offset: 0x002B0E8C [Token(Token = "0x17001DC5")] public byte[] Bytes { [Token(Token = "0x600BFBD")] [Address(RVA = "0x411530", Offset = "0x410530", VA = "0x180411530")] get { return this.bytes; } } // Token: 0x04007912 RID: 30994 [FieldOffset(Offset = "0x10")] [Token(Token = "0x4007912")] private byte[] bytes; } // Token: 0x02001DE0 RID: 7648 [Token(Token = "0x2001DE0")] public class Parameter { // Token: 0x0600BFBE RID: 49086 RVA: 0x002B2CA0 File Offset: 0x002B0EA0 [Token(Token = "0x600BFBE")] [Address(RVA = "0x49A4C0", Offset = "0x4994C0", VA = "0x18049A4C0")] public Parameter(int type, byte[] value) { this.type = type; this.value = value; } // Token: 0x17001DC6 RID: 7622 // (get) Token: 0x0600BFBF RID: 49087 RVA: 0x002B2CC4 File Offset: 0x002B0EC4 [Token(Token = "0x17001DC6")] public int Type { [Token(Token = "0x600BFBF")] [Address(RVA = "0x40F000", Offset = "0x40E000", VA = "0x18040F000")] get { return this.type; } } // Token: 0x17001DC7 RID: 7623 // (get) Token: 0x0600BFC0 RID: 49088 RVA: 0x002B2CD8 File Offset: 0x002B0ED8 [Token(Token = "0x17001DC7")] public byte[] Value { [Token(Token = "0x600BFC0")] [Address(RVA = "0x4157B0", Offset = "0x4147B0", VA = "0x1804157B0")] get { return this.value; } } // Token: 0x04007913 RID: 30995 [FieldOffset(Offset = "0x10")] [Token(Token = "0x4007913")] private int type; // Token: 0x04007914 RID: 30996 [FieldOffset(Offset = "0x18")] [Token(Token = "0x4007914")] private byte[] value; } // Token: 0x02001DE1 RID: 7649 [Token(Token = "0x2001DE1")] private class UbiTweak { // Token: 0x0600BFC1 RID: 49089 RVA: 0x002B2CEC File Offset: 0x002B0EEC [Token(Token = "0x600BFC1")] [Address(RVA = "0x29136E0", Offset = "0x29126E0", VA = "0x1829136E0")] public UbiTweak() { ulong[] array = new ulong[2]; this.tweak = array; base..ctor(); this.Reset(); } // Token: 0x0600BFC2 RID: 49090 RVA: 0x002B2D14 File Offset: 0x002B0F14 [Token(Token = "0x600BFC2")] [Address(RVA = "0x2913360", Offset = "0x2912360", VA = "0x182913360")] public void Reset(SkeinEngine.UbiTweak tweak) { ulong[] array = this.tweak; ulong[] array2 = Arrays.Clone(tweak.tweak, array); this.tweak = array2; bool flag = tweak.extendedPosition; this.extendedPosition = flag; } // Token: 0x0600BFC3 RID: 49091 RVA: 0x002B2D50 File Offset: 0x002B0F50 [Token(Token = "0x600BFC3")] [Address(RVA = "0x29132D0", Offset = "0x29122D0", VA = "0x1829132D0")] public void Reset() { ulong[] array = this.tweak; int num = 0; array[0] = (ulong)num; this.tweak[1] = (ulong)num; ulong[] array2 = this.tweak; this.extendedPosition = num != 0; } // Token: 0x17001DC8 RID: 7624 // (get) Token: 0x0600BFC4 RID: 49092 RVA: 0x002B2D90 File Offset: 0x002B0F90 // (set) Token: 0x0600BFC5 RID: 49093 RVA: 0x002B2DB0 File Offset: 0x002B0FB0 [Token(Token = "0x17001DC8")] public uint Type { [Token(Token = "0x600BFC4")] [Address(RVA = "0x29137C0", Offset = "0x29127C0", VA = "0x1829137C0")] get { ulong num = this.tweak[1]; throw new NullReferenceException(); } [Token(Token = "0x600BFC5")] [Address(RVA = "0x29138E0", Offset = "0x29128E0", VA = "0x1829138E0")] set { this.tweak[1] = (ulong)value; } } // Token: 0x17001DC9 RID: 7625 // (get) Token: 0x0600BFC6 RID: 49094 RVA: 0x002B2DD0 File Offset: 0x002B0FD0 // (set) Token: 0x0600BFC7 RID: 49095 RVA: 0x002B2DEC File Offset: 0x002B0FEC [Token(Token = "0x17001DC9")] public bool First { [Token(Token = "0x600BFC6")] [Address(RVA = "0x2913780", Offset = "0x2912780", VA = "0x182913780")] get { ulong[] array = this.tweak; throw new NullReferenceException(); } [Token(Token = "0x600BFC7")] [Address(RVA = "0x2913870", Offset = "0x2912870", VA = "0x182913870")] set { ulong[] array = this.tweak; if (!value) { return; } } } // Token: 0x17001DCA RID: 7626 // (get) Token: 0x0600BFC8 RID: 49096 RVA: 0x002B2E0C File Offset: 0x002B100C // (set) Token: 0x0600BFC9 RID: 49097 RVA: 0x002B2E28 File Offset: 0x002B1028 [Token(Token = "0x17001DCA")] public bool Final { [Token(Token = "0x600BFC8")] [Address(RVA = "0x2913740", Offset = "0x2912740", VA = "0x182913740")] get { ulong[] array = this.tweak; throw new IndexOutOfRangeException(); } [Token(Token = "0x600BFC9")] [Address(RVA = "0x2913800", Offset = "0x2912800", VA = "0x182913800")] set { ulong[] array = this.tweak; if (!value) { return; } } } // Token: 0x0600BFCA RID: 49098 RVA: 0x002B2E48 File Offset: 0x002B1048 [Token(Token = "0x600BFCA")] [Address(RVA = "0x2913030", Offset = "0x2912030", VA = "0x182913030")] public void AdvancePosition(int advance) { if (!this.extendedPosition) { this.tweak[0] = (ulong)advance; ulong num; if ((ulong)advance > num) { this.extendedPosition = true; } return; } ulong[] array = new ulong[3]; ulong num2 = this.tweak[0]; array[0] = num2; ulong num3 = this.tweak[0]; array[1] = num3; ulong num4 = this.tweak[1]; array[2] = num4; int num5 = 0; int length = array.Length; if (num5 < length) { num5++; } ulong[] array2 = this.tweak; ulong num6 = array[1]; array2[0] = num6; ulong[] array3 = this.tweak; ulong num7 = array[2]; array3[1] = num7; } // Token: 0x0600BFCB RID: 49099 RVA: 0x002B2F14 File Offset: 0x002B1114 [Token(Token = "0x600BFCB")] [Address(RVA = "0x411530", Offset = "0x410530", VA = "0x180411530")] public ulong[] GetWords() { return this.tweak; } // Token: 0x0600BFCC RID: 49100 RVA: 0x002B2F28 File Offset: 0x002B1128 [Token(Token = "0x600BFCC")] [Address(RVA = "0x2913400", Offset = "0x2912400", VA = "0x182913400", Slot = "3")] public override string ToString() { object[] array = new object[5]; ulong num = this.tweak[1]; if (num != (ulong)0L) { } array[0] = num; if (" first: " != 0) { } array[1] = " first: "; ulong[] array2 = this.tweak; string text; if (text != 0) { } array[2] = text; if (", final: " != 0) { } array[3] = ", final: "; ulong[] array3 = this.tweak; string text2; if (text2 != 0) { } array[4] = text2; return string.Concat(array); } // Token: 0x04007915 RID: 30997 [Token(Token = "0x4007915")] private const ulong LOW_RANGE = 18446744069414584320UL; // Token: 0x04007916 RID: 30998 [Token(Token = "0x4007916")] private const ulong T1_FINAL = 9223372036854775808UL; // Token: 0x04007917 RID: 30999 [Token(Token = "0x4007917")] private const ulong T1_FIRST = 4611686018427387904UL; // Token: 0x04007918 RID: 31000 [FieldOffset(Offset = "0x10")] [Token(Token = "0x4007918")] private ulong[] tweak; // Token: 0x04007919 RID: 31001 [FieldOffset(Offset = "0x18")] [Token(Token = "0x4007919")] private bool extendedPosition; } // Token: 0x02001DE2 RID: 7650 [Token(Token = "0x2001DE2")] private class UBI { // Token: 0x0600BFCD RID: 49101 RVA: 0x002B2FB8 File Offset: 0x002B11B8 [Token(Token = "0x600BFCD")] [Address(RVA = "0x2912F40", Offset = "0x2911F40", VA = "0x182912F40")] public UBI(SkeinEngine engine, int blockSize) { SkeinEngine.UbiTweak ubiTweak = new SkeinEngine.UbiTweak(); ulong[] array = new ulong[2]; ubiTweak.tweak = array; ubiTweak.Reset(); this.tweak = ubiTweak; base..ctor(); this.engine = engine; byte[] array2 = new byte[blockSize]; this.currentBlock = array2; int length = array2.Length; ulong[] array3 = new ulong[blockSize]; this.message = array3; } // Token: 0x0600BFCE RID: 49102 RVA: 0x002B3020 File Offset: 0x002B1220 [Token(Token = "0x600BFCE")] [Address(RVA = "0x2912C10", Offset = "0x2911C10", VA = "0x182912C10")] public void Reset(SkeinEngine.UBI ubi) { byte[] array = ubi.currentBlock; byte[] array2 = this.currentBlock; byte[] array3 = Arrays.Clone(array, array2); ulong[] array4 = this.message; this.currentBlock = array3; int num = ubi.currentOffset; this.currentOffset = num; ulong[] array5 = Arrays.Clone(ubi.message, array4); this.message = array5; SkeinEngine.UbiTweak ubiTweak = this.tweak; SkeinEngine.UbiTweak ubiTweak2 = ubi.tweak; ulong[] array6 = ubiTweak2.tweak; ulong[] array7 = ubiTweak.tweak; ulong[] array8 = Arrays.Clone(array6, array7); ubiTweak.tweak = array8; bool extendedPosition = ubiTweak2.extendedPosition; ubiTweak.extendedPosition = extendedPosition; } // Token: 0x0600BFCF RID: 49103 RVA: 0x002B30C8 File Offset: 0x002B12C8 [Token(Token = "0x600BFCF")] [Address(RVA = "0x2912D30", Offset = "0x2911D30", VA = "0x182912D30")] public void Reset(int type) { this.tweak.Reset(); this.tweak.tweak[1] = (ulong)type; this.currentOffset = (int)((ulong)0L); } // Token: 0x0600BFD0 RID: 49104 RVA: 0x002B3104 File Offset: 0x002B1304 [Token(Token = "0x600BFD0")] [Address(RVA = "0x2912DC0", Offset = "0x2911DC0", VA = "0x182912DC0")] public void Update(byte[] value, int offset, int len, ulong[] output) { int num = 0; if (len > 0) { byte[] array = this.currentBlock; int num2 = this.currentOffset; if (num2 == array.Length) { ulong[] array2 = this.tweak.tweak; this.currentOffset = (int)((ulong)0L); } int num3 = array.Length; num3 -= num2; int num4 = Math.Min(len, num3); int num5 = this.currentOffset; byte[] array3 = this.currentBlock; Array.Copy(value, 0, array3, num5, num4); SkeinEngine.UbiTweak ubiTweak = this.tweak; num += num4; ubiTweak.AdvancePosition(num4); } } // Token: 0x0600BFD1 RID: 49105 RVA: 0x002B3194 File Offset: 0x002B1394 [Token(Token = "0x600BFD1")] [Address(RVA = "0x2912A70", Offset = "0x2911A70", VA = "0x182912A70")] private void ProcessBlock(ulong[] output) { SkeinEngine skeinEngine = this.engine; SkeinEngine.UbiTweak ubiTweak = this.tweak; ThreefishEngine threefish = skeinEngine.threefish; ulong[] array = ubiTweak.tweak; int num = 0; ulong[] chain = skeinEngine.chain; threefish.Init(16777216 != 0, chain, array); ulong[] array2 = this.message; ulong[] array3; if (num < array2.Length) { ulong num2 = ThreefishEngine.BytesToWord(this.currentBlock, 16777216); num++; array2[0] = num2; array3 = this.message; } int num3 = this.engine.threefish.ProcessBlock(array3, output); int length = output.Length; if (num < length) { ulong num4 = this.message[num]; num++; } } // Token: 0x0600BFD2 RID: 49106 RVA: 0x002B3254 File Offset: 0x002B1454 [Token(Token = "0x600BFD2")] [Address(RVA = "0x29129D0", Offset = "0x29119D0", VA = "0x1829129D0")] public void DoFinal(ulong[] output) { byte[] array = this.currentBlock; int num = this.currentOffset; if (num < array.Length) { num++; byte[] array2 = this.currentBlock; } ulong[] array3 = this.tweak.tweak; this.ProcessBlock(output); } // Token: 0x0400791A RID: 31002 [FieldOffset(Offset = "0x10")] [Token(Token = "0x400791A")] private readonly SkeinEngine.UbiTweak tweak; // Token: 0x0400791B RID: 31003 [FieldOffset(Offset = "0x18")] [Token(Token = "0x400791B")] private readonly SkeinEngine engine; // Token: 0x0400791C RID: 31004 [FieldOffset(Offset = "0x20")] [Token(Token = "0x400791C")] private byte[] currentBlock; // Token: 0x0400791D RID: 31005 [FieldOffset(Offset = "0x28")] [Token(Token = "0x400791D")] private int currentOffset; // Token: 0x0400791E RID: 31006 [FieldOffset(Offset = "0x30")] [Token(Token = "0x400791E")] private ulong[] message; } } }