using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities; using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; using Cpp2IlInjected; namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests { // Token: 0x0200170C RID: 5900 [Token(Token = "0x200170C")] [StructLayout(3)] public abstract class LongDigest : IDigest, IMemoable { // Token: 0x06009EC0 RID: 40640 RVA: 0x00249AAC File Offset: 0x00247CAC [Token(Token = "0x6009EC0")] [Address(RVA = "0x2185B60", Offset = "0x2184560", VA = "0x182185B60")] internal LongDigest() { ulong[] array = new ulong[80]; this.W = array; base..ctor(); byte[] array2 = new byte[8]; this.xBuf = array2; string algorithmName = this.AlgorithmName; } // Token: 0x06009EC1 RID: 40641 RVA: 0x00249AF0 File Offset: 0x00247CF0 [Token(Token = "0x6009EC1")] [Address(RVA = "0x2185A20", Offset = "0x2184420", VA = "0x182185A20")] internal LongDigest(LongDigest t) { ulong[] array = new ulong[80]; this.W = array; base..ctor(); byte[] array2 = new byte[t.xBuf.Length]; this.xBuf = array2; byte[] array3 = t.xBuf; int length = array3.Length; int num = 0; int num2 = 0; Array.Copy(array3, num2, array2, num, length); int num3 = t.xBufOff; this.xBufOff = num3; long num4 = t.byteCount1; this.byteCount1 = num4; long num5 = t.byteCount2; this.byteCount2 = num5; ulong h = t.H1; this.H1 = h; ulong h2 = t.H2; this.H2 = h2; ulong h3 = t.H3; this.H3 = h3; ulong h4 = t.H4; this.H4 = h4; ulong h5 = t.H5; this.H5 = h5; ulong h6 = t.H6; this.H6 = h6; ulong h7 = t.H7; this.H7 = h7; ulong h8 = t.H8; this.H8 = h8; ulong[] w = t.W; int length2 = w.Length; int num6 = 0; ulong[] w2 = this.W; int num7 = 0; Array.Copy(w, num7, w2, num6, length2); int num8 = t.wOff; this.wOff = num8; } // Token: 0x06009EC2 RID: 40642 RVA: 0x00249C4C File Offset: 0x00247E4C [Token(Token = "0x6009EC2")] [Address(RVA = "0x21847D0", Offset = "0x21831D0", VA = "0x1821847D0")] protected void CopyIn(LongDigest t) { byte[] array = t.xBuf; int length = array.Length; int num = 0; byte[] array2 = this.xBuf; int num2 = 0; Array.Copy(array, num2, array2, num, length); int num3 = t.xBufOff; this.xBufOff = num3; long num4 = t.byteCount1; this.byteCount1 = num4; long num5 = t.byteCount2; this.byteCount2 = num5; ulong h = t.H1; this.H1 = h; ulong h2 = t.H2; this.H2 = h2; ulong h3 = t.H3; this.H3 = h3; ulong h4 = t.H4; this.H4 = h4; ulong h5 = t.H5; this.H5 = h5; ulong h6 = t.H6; this.H6 = h6; ulong h7 = t.H7; this.H7 = h7; ulong h8 = t.H8; this.H8 = h8; ulong[] w = t.W; int length2 = w.Length; int num6 = 0; ulong[] w2 = this.W; int num7 = 0; Array.Copy(w, num7, w2, num6, length2); int num8 = t.wOff; this.wOff = num8; } // Token: 0x06009EC3 RID: 40643 RVA: 0x00249D74 File Offset: 0x00247F74 [Token(Token = "0x6009EC3")] [Address(RVA = "0x2185950", Offset = "0x2184350", VA = "0x182185950", Slot = "7")] public void Update(byte input) { byte[] array = this.xBuf; int num = this.xBufOff + 1; this.xBufOff = num; byte[] array2 = this.xBuf; int length = array2.Length; if (this.xBufOff == length) { int num2 = 0; this.ProcessWord(array2, num2); this.xBufOff = (int)((ulong)0L); } } // Token: 0x06009EC4 RID: 40644 RVA: 0x00249DCC File Offset: 0x00247FCC [Token(Token = "0x6009EC4")] [Address(RVA = "0x2184500", Offset = "0x2182F00", VA = "0x182184500", Slot = "8")] public void BlockUpdate(byte[] input, int inOff, int length) { int num = 0; int num2 = this.xBufOff; if (num2 != 0 && length > 0) { byte[] array = this.xBuf; int num3 = num2 + 1; this.xBufOff = num3; byte[] array2 = this.xBuf; int num4 = this.xBufOff; if (num4 == array2.Length) { ulong[] w = this.W; int num5 = this.wOff; int num6 = 0; ulong num7 = Pack.BE_To_UInt64(array2, num6); w[0] = num7; int num8 = this.wOff; num8++; this.wOff = num8; if (num8 == 16) { this.ProcessBlock(); } this.xBufOff = num; } while (num4 != 0) { } } byte[] array3 = this.xBuf; if (length > array3.Length) { ulong[] w2 = this.W; int num9 = this.wOff; ulong num10 = Pack.BE_To_UInt64(input, inOff); w2[0] = num10; int num11 = this.wOff; num11++; this.wOff = num11; if (num11 == 16) { this.ProcessBlock(); } int length2 = this.xBuf.Length; } if (length > 0) { int num12 = this.xBufOff; byte[] array4 = this.xBuf; int num13 = num12 + 1; this.xBufOff = num13; byte[] array5 = this.xBuf; int length3 = array5.Length; if (this.xBufOff == length3) { ulong[] w3 = this.W; int num14 = this.wOff; int num15 = 0; ulong num16 = Pack.BE_To_UInt64(array5, num15); w3[0] = num16; int num17 = this.wOff; num17++; this.wOff = num17; if (num17 == 16) { this.ProcessBlock(); } this.xBufOff = num; } } } // Token: 0x06009EC5 RID: 40645 RVA: 0x00249F78 File Offset: 0x00248178 [Token(Token = "0x6009EC5")] [Address(RVA = "0x21848B0", Offset = "0x21832B0", VA = "0x1821848B0")] public void Finish() { long num = this.byteCount1; long num2 = this.byteCount2; ulong num3; if (num > (long)num3) { num2 += num; this.byteCount2 = num2; this.byteCount1 = num; } int num4 = this.xBufOff; byte[] array = this.xBuf; int num5 = num4 + 1; this.xBufOff = num5; byte[] array2 = this.xBuf; int num6 = this.xBufOff; int num7 = 0; if (num6 == array2.Length) { int num8 = 0; this.ProcessWord(array2, num8); this.xBufOff = num7; } if (num7 != 0) { byte[] array3 = this.xBuf; this.xBufOff = 1; byte[] array4 = this.xBuf; if (this.xBufOff == array4.Length) { ulong[] w = this.W; int num9 = this.wOff; int num10 = 0; ulong num11 = Pack.BE_To_UInt64(array4, num10); w[0] = num11; int num12 = this.wOff; num12++; this.wOff = num12; if (num12 == 16) { this.ProcessBlock(); } this.xBufOff = num7; } while (num7 != 0) { } } if (this.wOff > 14) { this.ProcessBlock(); } this.W[14] = (ulong)num2; ulong[] w2 = this.W; this.ProcessBlock(); } // Token: 0x06009EC6 RID: 40646 RVA: 0x0024A0B0 File Offset: 0x002482B0 [Token(Token = "0x6009EC6")] [Address(RVA = "0x21857E0", Offset = "0x21841E0", VA = "0x1821857E0", Slot = "13")] public virtual void Reset() { byte[] array = this.xBuf; int num = 0; this.byteCount1 = (long)num; this.byteCount2 = (long)num; this.xBufOff = num; if (num < array.Length) { num++; byte[] array2 = this.xBuf; } this.wOff = num; ulong[] w = this.W; int length = w.Length; int num2 = 0; Array.Clear(w, num2, length); } // Token: 0x06009EC7 RID: 40647 RVA: 0x0024A118 File Offset: 0x00248318 [Token(Token = "0x6009EC7")] [Address(RVA = "0x2185750", Offset = "0x2184150", VA = "0x182185750")] internal void ProcessWord(byte[] input, int inOff) { ulong[] w = this.W; int num = this.wOff; ulong num2 = Pack.BE_To_UInt64(input, inOff); w[0] = num2; int num3 = this.wOff; num3++; this.wOff = num3; if (num3 == 16) { this.ProcessBlock(); } } // Token: 0x06009EC8 RID: 40648 RVA: 0x0024A168 File Offset: 0x00248368 [Token(Token = "0x6009EC8")] [Address(RVA = "0x21844D0", Offset = "0x2182ED0", VA = "0x1821844D0")] private void AdjustByteCounts() { long num = this.byteCount1; ulong num2; if (num > (long)num2) { this.byteCount1 = num; } } // Token: 0x06009EC9 RID: 40649 RVA: 0x0024A188 File Offset: 0x00248388 [Token(Token = "0x6009EC9")] [Address(RVA = "0x21856C0", Offset = "0x21840C0", VA = "0x1821856C0")] internal void ProcessLength(long lowW, long hiW) { if (this.wOff > 14) { this.ProcessBlock(); } this.W[14] = (ulong)hiW; this.W[15] = (ulong)lowW; } // Token: 0x06009ECA RID: 40650 RVA: 0x0024A1C8 File Offset: 0x002483C8 [Token(Token = "0x6009ECA")] [Address(RVA = "0x2184AB0", Offset = "0x21834B0", VA = "0x182184AB0")] internal void ProcessBlock() { long num = this.byteCount1; ulong num2; if (num > (long)num2) { this.byteCount1 = num; } ulong[] w = this.W; ulong[] w2 = this.W; int length = w2.Length; ulong num3 = w2[(int)num2]; uint num4; num4 += (uint)1; num3 += num3; w[0] = num3; while (num4 <= (uint)79) { } ulong num5 = this.H4; int num6 = 0; ulong num7 = this.H3; ulong num8 = this.H5; ulong num9 = this.H1; ulong num10 = this.H2; ulong num11 = this.H6; ulong num12 = this.H7; ulong num13 = this.H8; num8 = num3; int length2 = LongDigest.K.Length; int length3 = this.W.Length; num3 = num8; num8 = num11; num3 += num8; num13 += num3; num3 = num9; num13 = num10; num13 += num3; num3 = num5; num13 = num5; num3 += num5; num8 = num13; num12 += num3; num3 = num13; num13 += num12; num13 += num3; num3 = num7; num13 = num7; num3 += num7; num11 += num3; num10 += num11; num3 = num13; num5 = num13; num7 = num13; num11 += num7; num11 += num3; num6 += 3; num3 = num10; num13 = num10; num7 = num10; num3 += num7; num8 += num3; num9 += num8; num3 = num11; num8 = num13; num8 += num3; num3 = num9; num9 = num10; num7 = num9; num3 += num7; num5 += num3; num3 = num8; num8 = num11; num8 += num3; num6 += 5; num3 = num13; num8 = num13; num3 += num13; num13 = num8; num7 += num3; num3 = num8; num8 += num7; num8 += num3; num3 = num13; num8 = num13; num3 += num8; num10 += num3; num11 += num10; num3 = num8; num10 += num8; num10 += num3; num6 += 7; num3 = num11; num6 += 8; num8 = num10; num3 += num8; num8 = num10; num9 += num3; num8 += num9; num3 = num10; num8 = num10; num9 += num8; num6++; num9 += num3; int num14 = 0; ulong[] w3 = this.W; this.H5 = num8; this.H6 = num8; this.H7 = num8; Array.Clear(w3, num14, 16); } // Token: 0x06009ECB RID: 40651 RVA: 0x0024A4F0 File Offset: 0x002486F0 [Token(Token = "0x6009ECB")] [Address(RVA = "0x7062E0", Offset = "0x704CE0", VA = "0x1807062E0")] private static ulong Ch(ulong x, ulong y, ulong z) { return x; } // Token: 0x06009ECC RID: 40652 RVA: 0x0024A500 File Offset: 0x00248700 [Token(Token = "0x6009ECC")] [Address(RVA = "0x706520", Offset = "0x704F20", VA = "0x180706520")] private static ulong Maj(ulong x, ulong y, ulong z) { return y; } // Token: 0x06009ECD RID: 40653 RVA: 0x0024A510 File Offset: 0x00248710 [Token(Token = "0x6009ECD")] [Address(RVA = "0x21858D0", Offset = "0x21842D0", VA = "0x1821858D0")] private static ulong Sum0(ulong x) { return x; } // Token: 0x06009ECE RID: 40654 RVA: 0x0024A520 File Offset: 0x00248720 [Token(Token = "0x6009ECE")] [Address(RVA = "0x2185910", Offset = "0x2184310", VA = "0x182185910")] private static ulong Sum1(ulong x) { return x; } // Token: 0x06009ECF RID: 40655 RVA: 0x0024A530 File Offset: 0x00248730 [Token(Token = "0x6009ECF")] [Address(RVA = "0x2185870", Offset = "0x2184270", VA = "0x182185870")] private static ulong Sigma0(ulong x) { return x; } // Token: 0x06009ED0 RID: 40656 RVA: 0x0024A540 File Offset: 0x00248740 [Token(Token = "0x6009ED0")] [Address(RVA = "0x21858A0", Offset = "0x21842A0", VA = "0x1821858A0")] private static ulong Sigma1(ulong x) { return x; } // Token: 0x06009ED1 RID: 40657 RVA: 0x0024A550 File Offset: 0x00248750 [Token(Token = "0x6009ED1")] [Address(RVA = "0x3C1C50", Offset = "0x3C0650", VA = "0x1803C1C50", Slot = "6")] public int GetByteLength() { return this.MyByteLength; } // Token: 0x17001910 RID: 6416 // (get) Token: 0x06009ED2 RID: 40658 [Token(Token = "0x17001910")] public abstract string AlgorithmName { [Token(Token = "0x6009ED2")] [Address(Slot = "14")] get; } // Token: 0x06009ED3 RID: 40659 [Token(Token = "0x6009ED3")] [Address(Slot = "15")] public abstract int GetDigestSize(); // Token: 0x06009ED4 RID: 40660 [Token(Token = "0x6009ED4")] [Address(Slot = "16")] public abstract int DoFinal(byte[] output, int outOff); // Token: 0x06009ED5 RID: 40661 [Token(Token = "0x6009ED5")] [Address(Slot = "17")] public abstract IMemoable Copy(); // Token: 0x06009ED6 RID: 40662 [Token(Token = "0x6009ED6")] [Address(Slot = "18")] public abstract void Reset(IMemoable t); // Token: 0x06009ED7 RID: 40663 RVA: 0x0024A564 File Offset: 0x00248764 // Note: this type is marked as 'beforefieldinit'. [Token(Token = "0x6009ED7")] [Address(RVA = "0x21859C0", Offset = "0x21843C0", VA = "0x1821859C0")] static LongDigest() { ulong[] array = new ulong[80]; RuntimeHelpers.InitializeArray(array, fieldof(.90A0542282A011472F94E97CEAE59F8B3B1A3291).FieldHandle); LongDigest.K = array; } // Token: 0x0400685C RID: 26716 [global::Cpp2IlInjected.FieldOffset(Offset = "0x10")] [Token(Token = "0x400685C")] private int MyByteLength = (int)((ulong)128L); // Token: 0x0400685D RID: 26717 [global::Cpp2IlInjected.FieldOffset(Offset = "0x18")] [Token(Token = "0x400685D")] private byte[] xBuf; // Token: 0x0400685E RID: 26718 [global::Cpp2IlInjected.FieldOffset(Offset = "0x20")] [Token(Token = "0x400685E")] private int xBufOff; // Token: 0x0400685F RID: 26719 [global::Cpp2IlInjected.FieldOffset(Offset = "0x28")] [Token(Token = "0x400685F")] private long byteCount1; // Token: 0x04006860 RID: 26720 [global::Cpp2IlInjected.FieldOffset(Offset = "0x30")] [Token(Token = "0x4006860")] private long byteCount2; // Token: 0x04006861 RID: 26721 [global::Cpp2IlInjected.FieldOffset(Offset = "0x38")] [Token(Token = "0x4006861")] internal ulong H1; // Token: 0x04006862 RID: 26722 [global::Cpp2IlInjected.FieldOffset(Offset = "0x40")] [Token(Token = "0x4006862")] internal ulong H2; // Token: 0x04006863 RID: 26723 [global::Cpp2IlInjected.FieldOffset(Offset = "0x48")] [Token(Token = "0x4006863")] internal ulong H3; // Token: 0x04006864 RID: 26724 [global::Cpp2IlInjected.FieldOffset(Offset = "0x50")] [Token(Token = "0x4006864")] internal ulong H4; // Token: 0x04006865 RID: 26725 [global::Cpp2IlInjected.FieldOffset(Offset = "0x58")] [Token(Token = "0x4006865")] internal ulong H5; // Token: 0x04006866 RID: 26726 [global::Cpp2IlInjected.FieldOffset(Offset = "0x60")] [Token(Token = "0x4006866")] internal ulong H6; // Token: 0x04006867 RID: 26727 [global::Cpp2IlInjected.FieldOffset(Offset = "0x68")] [Token(Token = "0x4006867")] internal ulong H7; // Token: 0x04006868 RID: 26728 [global::Cpp2IlInjected.FieldOffset(Offset = "0x70")] [Token(Token = "0x4006868")] internal ulong H8; // Token: 0x04006869 RID: 26729 [global::Cpp2IlInjected.FieldOffset(Offset = "0x78")] [Token(Token = "0x4006869")] private ulong[] W; // Token: 0x0400686A RID: 26730 [global::Cpp2IlInjected.FieldOffset(Offset = "0x80")] [Token(Token = "0x400686A")] private int wOff; // Token: 0x0400686B RID: 26731 [Token(Token = "0x400686B")] internal static readonly ulong[] K; } }