using System; using System.Collections; using System.IO; using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; using Cpp2IlInjected; using Hjg.Pngcs; namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Tls { // Token: 0x02001B29 RID: 6953 [Token(Token = "0x2001B29")] internal class DtlsReliableHandshake { // Token: 0x0600AD01 RID: 44289 RVA: 0x0025A6F4 File Offset: 0x002588F4 [Token(Token = "0x600AD01")] [Address(RVA = "0x18B80A0", Offset = "0x18B6EA0", VA = "0x1818B80A0")] internal DtlsReliableHandshake(TlsContext context, DtlsRecordLayer transport) { IDictionary dictionary = Platform.CreateHashtable(); this.mCurrentInboundFlight = dictionary; IList list = Platform.CreateArrayList(); this.mOutboundFlight = list; this.mSending = true; base..ctor(); this.mRecordLayer = transport; DeferredHash deferredHash = new DeferredHash(); this.mHandshakeHash = deferredHash; throw new NullReferenceException(); } // Token: 0x0600AD02 RID: 44290 RVA: 0x0025A748 File Offset: 0x00258948 [Token(Token = "0x600AD02")] [Address(RVA = "0x18B6D20", Offset = "0x18B5B20", VA = "0x1818B6D20")] internal void NotifyHelloComplete() { TlsHandshakeHash tlsHandshakeHash = this.mHandshakeHash; } // Token: 0x17001B69 RID: 7017 // (get) Token: 0x0600AD03 RID: 44291 RVA: 0x0025A764 File Offset: 0x00258964 [Token(Token = "0x17001B69")] internal TlsHandshakeHash HandshakeHash { [Token(Token = "0x600AD03")] [Address(RVA = "0x3F5F40", Offset = "0x3F4D40", VA = "0x1803F5F40")] get { return this.mHandshakeHash; } } // Token: 0x0600AD04 RID: 44292 RVA: 0x0025A778 File Offset: 0x00258978 [Token(Token = "0x600AD04")] [Address(RVA = "0x18B6DB0", Offset = "0x18B5BB0", VA = "0x1818B6DB0")] internal TlsHandshakeHash PrepareToFinish() { return this.mHandshakeHash; } // Token: 0x0600AD05 RID: 44293 RVA: 0x0025A794 File Offset: 0x00258994 [Token(Token = "0x600AD05")] [Address(RVA = "0x18B7B10", Offset = "0x18B6910", VA = "0x1818B7B10")] internal void SendMessage(byte msg_type, byte[] body) { TlsUtilities.CheckUint24(body.Length); if (!this.mSending) { this.CheckInboundFlight(); IList list = this.mOutboundFlight; this.mSending = true; } int num = this.mMessageSeq; int num2 = num + 1; this.mMessageSeq = num2; DtlsReliableHandshake.Message message; message.mMessageSeq = num; message.mMsgType = msg_type; message.mBody = body; IList list2 = this.mOutboundFlight; this.WriteMessage(message); DtlsReliableHandshake.Message message2 = this.UpdateHandshakeMessagesDigest(message); } // Token: 0x0600AD06 RID: 44294 RVA: 0x0025A810 File Offset: 0x00258A10 [Token(Token = "0x600AD06")] [Address(RVA = "0x18B71C0", Offset = "0x18B5FC0", VA = "0x1818B71C0")] internal byte[] ReceiveMessageBody(byte msg_type) { DtlsReliableHandshake.Message message; do { message = this.ReceiveMessage(); } while (message.mMsgType != msg_type); return message.mBody; } // Token: 0x0600AD07 RID: 44295 RVA: 0x0025A83C File Offset: 0x00258A3C [Token(Token = "0x600AD07")] [Address(RVA = "0x18B7240", Offset = "0x18B6040", VA = "0x1818B7240")] internal DtlsReliableHandshake.Message ReceiveMessage() { if (this.mSending) { this.mSending = false; IDictionary dictionary = Platform.CreateHashtable(); DtlsReliableHandshake.ResetAll(this.mCurrentInboundFlight); IDictionary dictionary2 = this.mCurrentInboundFlight; this.mPreviousInboundFlight = dictionary2; this.mCurrentInboundFlight = dictionary; } int num = 0; IDictionary dictionary3 = this.mCurrentInboundFlight; int num2 = this.mNextReceiveSeq; if (num2 != 0) { int num3 = 0; if (num2 == 0) { throw new NullReferenceException(); } if (num3 == 0) { this.mPreviousInboundFlight = num; int num4 = this.mNextReceiveSeq; int num5 = num4 + 1; this.mNextReceiveSeq = num5; DtlsReliableHandshake.Message message; message.mMessageSeq = num4; DtlsReliableHandshake.Message message2 = this.UpdateHandshakeMessagesDigest(message); if (message2 != 0) { return message2; } } } this.mRecordLayer.ResetWriteEpoch(); if (num != 0) { } byte[] array = new byte[0]; int sendLimit = this.mRecordLayer.GetSendLimit(); DtlsRecordLayer dtlsRecordLayer = this.mRecordLayer; bool flag; while (!flag) { } this.ResendOutboundFlight(); throw new NullReferenceException(); } // Token: 0x0600AD08 RID: 44296 RVA: 0x0025A93C File Offset: 0x00258B3C [Token(Token = "0x600AD08")] [Address(RVA = "0x18B6B00", Offset = "0x18B5900", VA = "0x1818B6B00")] internal void Finish() { int num = 0; if ((this.mSending ? 1 : 0) != num) { DtlsReliableHandshake.ResetAll(this.mCurrentInboundFlight); IDictionary dictionary = this.mCurrentInboundFlight; this.mPreviousInboundFlight = dictionary; this.mCurrentInboundFlight = num; if (dictionary == 0) { goto IL_3C; } DtlsReliableHandshake.Retransmit retransmit; retransmit.mOuter = this; } this.CheckInboundFlight(); IL_3C: int receiveLimit = ((DatagramTransport)this.mRecordLayer).GetReceiveLimit(); } // Token: 0x0600AD09 RID: 44297 RVA: 0x0025A998 File Offset: 0x00258B98 [Token(Token = "0x600AD09")] [Address(RVA = "0x18B7AC0", Offset = "0x18B68C0", VA = "0x1818B7AC0")] internal void ResetHandshakeMessagesDigest() { TlsHandshakeHash tlsHandshakeHash = this.mHandshakeHash; throw new NullReferenceException(); } // Token: 0x0600AD0A RID: 44298 RVA: 0x0025A9B4 File Offset: 0x00258BB4 [Token(Token = "0x600AD0A")] [Address(RVA = "0x18B66B0", Offset = "0x18B54B0", VA = "0x1818B66B0")] private int BackOff(int timeoutMillis) { int num; return num; } // Token: 0x0600AD0B RID: 44299 RVA: 0x0025A9C4 File Offset: 0x00258BC4 [Token(Token = "0x600AD0B")] [Address(RVA = "0x18B6980", Offset = "0x18B5780", VA = "0x1818B6980")] private void CheckInboundFlight() { int num; do { num = 0; IDictionary dictionary = this.mCurrentInboundFlight; num += num; num++; num++; num += 19; if (num != 0) { } } while (num != 0); } // Token: 0x0600AD0C RID: 44300 RVA: 0x0025A9FC File Offset: 0x00258BFC [Token(Token = "0x600AD0C")] [Address(RVA = "0x18B6BA0", Offset = "0x18B59A0", VA = "0x1818B6BA0")] private DtlsReliableHandshake.Message GetPendingMessage() { int num; do { num = this.mNextReceiveSeq; IDictionary dictionary = this.mCurrentInboundFlight; if (num == 0) { goto IL_49; } } while (num == 0); if (num == 0) { int num2 = this.mNextReceiveSeq; int num3 = num2 + 1; this.mNextReceiveSeq = num3; DtlsReliableHandshake.Message message; message.mMessageSeq = num2; message.mMsgType = (byte)num; return this.UpdateHandshakeMessagesDigest(message); } IL_49: throw new NullReferenceException(); } // Token: 0x0600AD0D RID: 44301 RVA: 0x0025AA5C File Offset: 0x00258C5C [Token(Token = "0x600AD0D")] [Address(RVA = "0x18B6D70", Offset = "0x18B5B70", VA = "0x1818B6D70")] private void PrepareInboundFlight(IDictionary nextFlight) { DtlsReliableHandshake.ResetAll(this.mCurrentInboundFlight); IDictionary dictionary = this.mCurrentInboundFlight; this.mPreviousInboundFlight = dictionary; this.mCurrentInboundFlight = nextFlight; } // Token: 0x0600AD0E RID: 44302 RVA: 0x0025AA8C File Offset: 0x00258C8C [Token(Token = "0x600AD0E")] [Address(RVA = "0x18B6E10", Offset = "0x18B5C10", VA = "0x1818B6E10")] private bool ProcessRecord(int windowSize, int epoch, byte[] buf, int off, int len) { int num = TlsUtilities.ReadUint24(buf, windowSize); int num2 = TlsUtilities.ReadUint24(buf, windowSize); int num3 = TlsUtilities.ReadUint24(buf, windowSize); int num4 = this.mNextReceiveSeq; byte b; if ((int)b >= num4 || (this.mPreviousInboundFlight != 0 && num4 != 0)) { IDictionary dictionary = this.mCurrentInboundFlight; if (num4 == 0) { DtlsReassembler dtlsReassembler = new DtlsReassembler(b, num2); } } if (DtlsReliableHandshake.CheckAll(this.mPreviousInboundFlight)) { this.ResendOutboundFlight(); DtlsReliableHandshake.ResetAll(this.mPreviousInboundFlight); } throw new NullReferenceException(); } // Token: 0x0600AD0F RID: 44303 RVA: 0x0025AB10 File Offset: 0x00258D10 [Token(Token = "0x600AD0F")] [Address(RVA = "0x18B75F0", Offset = "0x18B63F0", VA = "0x1818B75F0")] private void ResendOutboundFlight() { int num; do { DtlsRecordLayer dtlsRecordLayer = this.mRecordLayer; IList list = this.mOutboundFlight; num = 0; num += num; num++; IList list2 = this.mOutboundFlight; uint num2; if (num < (int)num2) { num += num; num++; } if (num == 0) { num += num; num++; num += 19; num += num; num += 19; } } while (num == 0); this.WriteMessage(num); IList list3 = this.mOutboundFlight; num++; } // Token: 0x0600AD10 RID: 44304 RVA: 0x0025AB84 File Offset: 0x00258D84 [Token(Token = "0x600AD10")] [Address(RVA = "0x18B7C40", Offset = "0x18B6A40", VA = "0x1818B7C40")] private DtlsReliableHandshake.Message UpdateHandshakeMessagesDigest(DtlsReliableHandshake.Message message) { byte[] mBody = message.mBody; byte[] array = new byte[12]; byte mMsgType = message.mMsgType; int num = 0; TlsUtilities.WriteUint8(mMsgType, array, num); TlsUtilities.WriteUint24(mBody.Length, array, 1); PngHelperInternal.WriteInt2tobytes(message.mMessageSeq, array, 4); TlsUtilities.WriteUint24(0, array, 6); TlsUtilities.WriteUint24(mBody.Length, array, 9); TlsHandshakeHash tlsHandshakeHash = this.mHandshakeHash; int length = array.Length; TlsHandshakeHash tlsHandshakeHash2 = this.mHandshakeHash; int length2 = mBody.Length; return message; } // Token: 0x0600AD11 RID: 44305 RVA: 0x0025AC0C File Offset: 0x00258E0C [Token(Token = "0x600AD11")] [Address(RVA = "0x18B7F70", Offset = "0x18B6D70", VA = "0x1818B7F70")] private void WriteMessage(DtlsReliableHandshake.Message message) { int receiveLimit = this.mRecordLayer.GetReceiveLimit(); byte[] mBody = message.mBody; int num = 0; int num2 = mBody.Length; num2 -= num; int num3; this.WriteHandshakeFragment(message, num, num3); num += num3; } // Token: 0x0600AD12 RID: 44306 RVA: 0x0025AC50 File Offset: 0x00258E50 [Token(Token = "0x600AD12")] [Address(RVA = "0x18B7DB0", Offset = "0x18B6BB0", VA = "0x1818B7DB0")] private void WriteHandshakeFragment(DtlsReliableHandshake.Message message, int fragment_offset, int fragment_length) { DtlsReliableHandshake.RecordLayerBuffer recordLayerBuffer; TlsUtilities.WriteUint8(message.mMsgType, recordLayerBuffer); TlsUtilities.WriteUint24(message.mBody.Length, recordLayerBuffer); int num = message.mMessageSeq; TlsUtilities.WriteUint16(num, recordLayerBuffer); TlsUtilities.WriteUint24(fragment_offset, recordLayerBuffer); TlsUtilities.WriteUint24(fragment_length, recordLayerBuffer); int num2 = recordLayerBuffer.ReadByte(); DtlsRecordLayer dtlsRecordLayer = this.mRecordLayer; bool canWrite = recordLayerBuffer.CanWrite; } // Token: 0x0600AD13 RID: 44307 RVA: 0x0025ACB8 File Offset: 0x00258EB8 [Token(Token = "0x600AD13")] [Address(RVA = "0x18B6710", Offset = "0x18B5510", VA = "0x1818B6710")] private static bool CheckAll(IDictionary inboundFlight) { int num; do { num = 0; int num2 = 0; if (num2 == 0) { } if (num2 != 0) { } } while (num != 0); if (num != -1) { } return true; } // Token: 0x0600AD14 RID: 44308 RVA: 0x0025ACF8 File Offset: 0x00258EF8 [Token(Token = "0x600AD14")] [Address(RVA = "0x18B77F0", Offset = "0x18B65F0", VA = "0x1818B77F0")] private static void ResetAll(IDictionary inboundFlight) { int num; do { num = 0; num += num; num++; num++; num += 19; ulong num2; num = (int)((ulong)num + num2); if (num == 0 || num == 0) { goto IL_47; } DtlsReassembler.Range range; range.mStart = num; if (range != 0) { } } while (num != 0); return; IL_47: throw new NullReferenceException(); } // Token: 0x04006E94 RID: 28308 [Token(Token = "0x4006E94")] private const int MaxReceiveAhead = 16; // Token: 0x04006E95 RID: 28309 [Token(Token = "0x4006E95")] private const int MessageHeaderLength = 12; // Token: 0x04006E96 RID: 28310 [FieldOffset(Offset = "0x10")] [Token(Token = "0x4006E96")] private readonly DtlsRecordLayer mRecordLayer; // Token: 0x04006E97 RID: 28311 [FieldOffset(Offset = "0x18")] [Token(Token = "0x4006E97")] private TlsHandshakeHash mHandshakeHash; // Token: 0x04006E98 RID: 28312 [FieldOffset(Offset = "0x20")] [Token(Token = "0x4006E98")] private IDictionary mCurrentInboundFlight; // Token: 0x04006E99 RID: 28313 [FieldOffset(Offset = "0x28")] [Token(Token = "0x4006E99")] private IDictionary mPreviousInboundFlight; // Token: 0x04006E9A RID: 28314 [FieldOffset(Offset = "0x30")] [Token(Token = "0x4006E9A")] private IList mOutboundFlight; // Token: 0x04006E9B RID: 28315 [FieldOffset(Offset = "0x38")] [Token(Token = "0x4006E9B")] private bool mSending; // Token: 0x04006E9C RID: 28316 [FieldOffset(Offset = "0x3C")] [Token(Token = "0x4006E9C")] private int mMessageSeq; // Token: 0x04006E9D RID: 28317 [FieldOffset(Offset = "0x40")] [Token(Token = "0x4006E9D")] private int mNextReceiveSeq; // Token: 0x02001B2A RID: 6954 [Token(Token = "0x2001B2A")] internal class Message { // Token: 0x0600AD15 RID: 44309 RVA: 0x0025AD58 File Offset: 0x00258F58 [Token(Token = "0x600AD15")] [Address(RVA = "0x18BB860", Offset = "0x18BA660", VA = "0x1818BB860")] internal Message(int message_seq, byte msg_type, byte[] body) { this.mMessageSeq = message_seq; this.mMsgType = msg_type; this.mBody = body; } // Token: 0x17001B6A RID: 7018 // (get) Token: 0x0600AD16 RID: 44310 RVA: 0x0025AD80 File Offset: 0x00258F80 [Token(Token = "0x17001B6A")] public int Seq { [Token(Token = "0x600AD16")] [Address(RVA = "0x3FA560", Offset = "0x3F9360", VA = "0x1803FA560")] get { return this.mMessageSeq; } } // Token: 0x17001B6B RID: 7019 // (get) Token: 0x0600AD17 RID: 44311 RVA: 0x0025AD94 File Offset: 0x00258F94 [Token(Token = "0x17001B6B")] public byte Type { [Token(Token = "0x600AD17")] [Address(RVA = "0x40B710", Offset = "0x40A510", VA = "0x18040B710")] get { return this.mMsgType; } } // Token: 0x17001B6C RID: 7020 // (get) Token: 0x0600AD18 RID: 44312 RVA: 0x0025ADA8 File Offset: 0x00258FA8 [Token(Token = "0x17001B6C")] public byte[] Body { [Token(Token = "0x600AD18")] [Address(RVA = "0x3F5F40", Offset = "0x3F4D40", VA = "0x1803F5F40")] get { return this.mBody; } } // Token: 0x04006E9E RID: 28318 [FieldOffset(Offset = "0x10")] [Token(Token = "0x4006E9E")] private readonly int mMessageSeq; // Token: 0x04006E9F RID: 28319 [FieldOffset(Offset = "0x14")] [Token(Token = "0x4006E9F")] private readonly byte mMsgType; // Token: 0x04006EA0 RID: 28320 [FieldOffset(Offset = "0x18")] [Token(Token = "0x4006EA0")] private readonly byte[] mBody; } // Token: 0x02001B2B RID: 6955 [Token(Token = "0x2001B2B")] internal class RecordLayerBuffer : MemoryStream { // Token: 0x0600AD19 RID: 44313 RVA: 0x0025ADBC File Offset: 0x00258FBC [Token(Token = "0x600AD19")] [Address(RVA = "0x18BD170", Offset = "0x18BBF70", VA = "0x1818BD170")] internal RecordLayerBuffer(int size) : base(size) { } // Token: 0x0600AD1A RID: 44314 RVA: 0x0025ADD0 File Offset: 0x00258FD0 [Token(Token = "0x600AD1A")] [Address(RVA = "0x18BD0B0", Offset = "0x18BBEB0", VA = "0x1818BD0B0")] internal void SendToRecordLayer(DtlsRecordLayer recordLayer) { bool canWrite = this.CanWrite; } } // Token: 0x02001B2C RID: 6956 [Token(Token = "0x2001B2C")] internal class Retransmit : DtlsHandshakeRetransmit { // Token: 0x0600AD1B RID: 44315 RVA: 0x0025ADEC File Offset: 0x00258FEC [Token(Token = "0x600AD1B")] [Address(RVA = "0x3FFB80", Offset = "0x3FE980", VA = "0x1803FFB80")] internal Retransmit(DtlsReliableHandshake outer) { this.mOuter = outer; } // Token: 0x0600AD1C RID: 44316 RVA: 0x0025AE08 File Offset: 0x00259008 [Token(Token = "0x600AD1C")] [Address(RVA = "0x18BE330", Offset = "0x18BD130", VA = "0x1818BE330", Slot = "4")] public void ReceivedHandshakeRecord(int epoch, byte[] buf, int off, int len) { DtlsReliableHandshake dtlsReliableHandshake = this.mOuter; } // Token: 0x04006EA1 RID: 28321 [FieldOffset(Offset = "0x10")] [Token(Token = "0x4006EA1")] private readonly DtlsReliableHandshake mOuter; } } }