Files
Apr2020-Cpp2Il-Dump/Assembly-CSharp/BestHTTP/SecureProtocol/Org/BouncyCastle/Crypto/Tls/DtlsReliableHandshake.cs
T
niko 8fc35183db a
2026-04-11 22:19:20 +02:00

590 lines
17 KiB
C#

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;
}
}
}