388 lines
16 KiB
C#
388 lines
16 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Runtime.InteropServices;
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs;
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
|
|
using Cpp2IlInjected;
|
|
|
|
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes
|
|
{
|
|
// Token: 0x02001656 RID: 5718
|
|
[Token(Token = "0x2001656")]
|
|
[StructLayout(3)]
|
|
public class CcmBlockCipher : IAeadBlockCipher
|
|
{
|
|
// Token: 0x0600984D RID: 38989 RVA: 0x0021BE64 File Offset: 0x0021A064
|
|
[Token(Token = "0x600984D")]
|
|
[Address(RVA = "0x20E7090", Offset = "0x20E5A90", VA = "0x1820E7090")]
|
|
public CcmBlockCipher(IBlockCipher cipher)
|
|
{
|
|
MemoryStream memoryStream = new MemoryStream();
|
|
this.associatedText = memoryStream;
|
|
MemoryStream memoryStream2 = new MemoryStream();
|
|
this.data = memoryStream2;
|
|
base..ctor();
|
|
this.cipher = cipher;
|
|
byte[] array = new byte[CcmBlockCipher.BlockSize];
|
|
this.macBlock = array;
|
|
}
|
|
|
|
// Token: 0x0600984E RID: 38990 RVA: 0x0021BEC4 File Offset: 0x0021A0C4
|
|
[Token(Token = "0x600984E")]
|
|
[Address(RVA = "0x3C39A0", Offset = "0x3C23A0", VA = "0x1803C39A0", Slot = "17")]
|
|
public virtual IBlockCipher GetUnderlyingCipher()
|
|
{
|
|
return this.cipher;
|
|
}
|
|
|
|
// Token: 0x0600984F RID: 38991 RVA: 0x0021BED8 File Offset: 0x0021A0D8
|
|
[Token(Token = "0x600984F")]
|
|
[Address(RVA = "0x20E6330", Offset = "0x20E4D30", VA = "0x1820E6330", Slot = "18")]
|
|
public virtual void Init(bool forEncryption, ICipherParameters parameters)
|
|
{
|
|
/*
|
|
An exception occurred when decompiling this method (0600984F)
|
|
|
|
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.CcmBlockCipher::Init(System.Boolean,BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.ICipherParameters)
|
|
|
|
---> System.Exception: Basic block has to end with unconditional control flow.
|
|
{
|
|
IL_78:
|
|
stloc:ArgumentException(var_11_82, newobj:ArgumentException(ArgumentException::.ctor, ldstr:string("invalid parameters passed to CCM")))
|
|
}
|
|
|
|
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: 0x17001876 RID: 6262
|
|
// (get) Token: 0x06009850 RID: 38992 RVA: 0x0021BF68 File Offset: 0x0021A168
|
|
[Token(Token = "0x17001876")]
|
|
public virtual string AlgorithmName
|
|
{
|
|
[Token(Token = "0x6009850")]
|
|
[Address(RVA = "0x20E7220", Offset = "0x20E5C20", VA = "0x1820E7220", Slot = "19")]
|
|
get
|
|
{
|
|
IBlockCipher blockCipher = this.cipher;
|
|
return 0 + "/CCM";
|
|
}
|
|
}
|
|
|
|
// Token: 0x06009851 RID: 38993 RVA: 0x0021BF90 File Offset: 0x0021A190
|
|
[Token(Token = "0x6009851")]
|
|
[Address(RVA = "0x20E61B0", Offset = "0x20E4BB0", VA = "0x1820E61B0", Slot = "20")]
|
|
public virtual int GetBlockSize()
|
|
{
|
|
IBlockCipher blockCipher = this.cipher;
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x06009852 RID: 38994 RVA: 0x0021BFAC File Offset: 0x0021A1AC
|
|
[Token(Token = "0x6009852")]
|
|
[Address(RVA = "0x20E65C0", Offset = "0x20E4FC0", VA = "0x1820E65C0", Slot = "21")]
|
|
public virtual void ProcessAadByte(byte input)
|
|
{
|
|
((IDisposable)this.associatedText).Dispose();
|
|
}
|
|
|
|
// Token: 0x06009853 RID: 38995 RVA: 0x0021BFCC File Offset: 0x0021A1CC
|
|
[Token(Token = "0x6009853")]
|
|
[Address(RVA = "0x20E65F0", Offset = "0x20E4FF0", VA = "0x1820E65F0", Slot = "22")]
|
|
public virtual void ProcessAadBytes(byte[] inBytes, int inOff, int len)
|
|
{
|
|
int num = this.associatedText.Read(inBytes, inOff, len);
|
|
}
|
|
|
|
// Token: 0x06009854 RID: 38996 RVA: 0x0021BFF0 File Offset: 0x0021A1F0
|
|
[Token(Token = "0x6009854")]
|
|
[Address(RVA = "0x20E6620", Offset = "0x20E5020", VA = "0x1820E6620", Slot = "23")]
|
|
public virtual int ProcessByte(byte input, byte[] outBytes, int outOff)
|
|
{
|
|
MemoryStream memoryStream = this.data;
|
|
return 0;
|
|
}
|
|
|
|
// Token: 0x06009855 RID: 38997 RVA: 0x0021C00C File Offset: 0x0021A20C
|
|
[Token(Token = "0x6009855")]
|
|
[Address(RVA = "0x20E6650", Offset = "0x20E5050", VA = "0x1820E6650", Slot = "24")]
|
|
public virtual int ProcessBytes(byte[] inBytes, int inOff, int inLen, byte[] outBytes, int outOff)
|
|
{
|
|
Check.DataLength(inBytes, inOff, inOff, "Input buffer too short");
|
|
int num = this.data.ReadByte();
|
|
return 0;
|
|
}
|
|
|
|
// Token: 0x06009856 RID: 38998 RVA: 0x0021C03C File Offset: 0x0021A23C
|
|
[Token(Token = "0x6009856")]
|
|
[Address(RVA = "0x20E60A0", Offset = "0x20E4AA0", VA = "0x1820E60A0", Slot = "25")]
|
|
public virtual int DoFinal(byte[] outBytes, int outOff)
|
|
{
|
|
MemoryStream memoryStream = this.data;
|
|
long length = this.data.Length;
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x06009857 RID: 38999 RVA: 0x0021C064 File Offset: 0x0021A264
|
|
[Token(Token = "0x6009857")]
|
|
[Address(RVA = "0x20E6FD0", Offset = "0x20E59D0", VA = "0x1820E6FD0", Slot = "26")]
|
|
public virtual void Reset()
|
|
{
|
|
IBlockCipher blockCipher = this.cipher;
|
|
MemoryStream memoryStream = this.associatedText;
|
|
((IDisposable)this.data).Dispose();
|
|
}
|
|
|
|
// Token: 0x06009858 RID: 39000 RVA: 0x0021C090 File Offset: 0x0021A290
|
|
[Token(Token = "0x6009858")]
|
|
[Address(RVA = "0x20E6200", Offset = "0x20E4C00", VA = "0x1820E6200", Slot = "27")]
|
|
public virtual byte[] GetMac()
|
|
{
|
|
byte[] array = this.macBlock;
|
|
int num = this.macSize;
|
|
int num2 = 0;
|
|
return Arrays.CopyOfRange(array, num2, num);
|
|
}
|
|
|
|
// Token: 0x06009859 RID: 39001 RVA: 0x0021C0B8 File Offset: 0x0021A2B8
|
|
[Token(Token = "0x6009859")]
|
|
[Address(RVA = "0x3F8880", Offset = "0x3F7280", VA = "0x1803F8880", Slot = "28")]
|
|
public virtual int GetUpdateOutputSize(int len)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
// Token: 0x0600985A RID: 39002 RVA: 0x0021C0C8 File Offset: 0x0021A2C8
|
|
[Token(Token = "0x600985A")]
|
|
[Address(RVA = "0x20E6270", Offset = "0x20E4C70", VA = "0x1820E6270", Slot = "29")]
|
|
public virtual int GetOutputSize(int len)
|
|
{
|
|
bool flag = this.data.CanWrite;
|
|
int num = this.macSize;
|
|
flag = (flag ? 1 : 0) + len != 0;
|
|
if (!this.forEncryption)
|
|
{
|
|
if ((flag ? 1 : 0) < num)
|
|
{
|
|
return 0;
|
|
}
|
|
flag = (flag ? 1 : 0) - num != 0;
|
|
}
|
|
flag = (flag ? 1 : 0) + num != 0;
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x0600985B RID: 39003 RVA: 0x0021C108 File Offset: 0x0021A308
|
|
[Token(Token = "0x600985B")]
|
|
[Address(RVA = "0x20E6EE0", Offset = "0x20E58E0", VA = "0x1820E6EE0", Slot = "30")]
|
|
public virtual byte[] ProcessPacket(byte[] input, int inOff, int inLen)
|
|
{
|
|
int num = this.macSize;
|
|
if (!this.forEncryption)
|
|
{
|
|
}
|
|
byte[] array = new byte[input];
|
|
byte[] array2 = this.ProcessPacket(input, inOff, inLen);
|
|
return array;
|
|
}
|
|
|
|
// Token: 0x0600985C RID: 39004 RVA: 0x0021C144 File Offset: 0x0021A344
|
|
[Token(Token = "0x600985C")]
|
|
[Address(RVA = "0x20E66F0", Offset = "0x20E50F0", VA = "0x1820E66F0", Slot = "31")]
|
|
public virtual int ProcessPacket(byte[] input, int inOff, int inLen, byte[] output, int outOff)
|
|
{
|
|
/*
|
|
An exception occurred when decompiling this method (0600985C)
|
|
|
|
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Int32 BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Modes.CcmBlockCipher::ProcessPacket(System.Byte[],System.Int32,System.Int32,System.Byte[],System.Int32)
|
|
|
|
---> System.Exception: Basic block has to end with unconditional control flow.
|
|
{
|
|
IL_11D:
|
|
stloc:InvalidCipherTextException(var_24_127, newobj:InvalidCipherTextException(InvalidCipherTextException::.ctor, ldstr:string("mac check in CCM failed")))
|
|
}
|
|
|
|
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: 0x0600985D RID: 39005 RVA: 0x0021C27C File Offset: 0x0021A47C
|
|
[Token(Token = "0x600985D")]
|
|
[Address(RVA = "0x20E5B90", Offset = "0x20E4590", VA = "0x1820E5B90")]
|
|
private int CalculateMac(byte[] data, int dataOff, int dataLen, byte[] macBlock)
|
|
{
|
|
int num;
|
|
CbcBlockCipherMac cbcBlockCipherMac = new CbcBlockCipherMac(this.cipher, dataOff, num);
|
|
num = 0;
|
|
byte[] array = new byte[16];
|
|
bool flag = this.associatedText.CanWrite;
|
|
byte[] array2 = this.initialAssociatedText;
|
|
if (array2 == 0)
|
|
{
|
|
}
|
|
int length = array2.Length;
|
|
flag = (flag ? 1 : 0) + length != 0;
|
|
if (flag > false)
|
|
{
|
|
}
|
|
uint num2;
|
|
flag = (flag ? 1U : 0U) - num2 != 0U;
|
|
flag = flag - typeof(IMac).TypeHandle != null;
|
|
array[0] = (flag ? 1 : 0);
|
|
byte[] array3 = this.nonce;
|
|
uint num3;
|
|
array[0] = (byte)num3;
|
|
byte[] array4 = this.nonce;
|
|
int length2 = array4.Length;
|
|
int num4 = 0;
|
|
uint num5;
|
|
Array.Copy(array4, num4, array, (int)num5, length2);
|
|
if (dataLen > 0)
|
|
{
|
|
int num6 = array.Length;
|
|
num6 -= (int)num5;
|
|
num5 += (uint)1;
|
|
}
|
|
int length3 = array.Length;
|
|
bool flag2 = this.associatedText.CanWrite;
|
|
byte[] array5 = this.initialAssociatedText;
|
|
int num7 = 0;
|
|
if (array5 == 0)
|
|
{
|
|
}
|
|
flag2 = (flag2 ? 1 : 0) + num7 != 0;
|
|
if (flag2 > false)
|
|
{
|
|
bool canWrite = this.associatedText.CanWrite;
|
|
if (this.initialAssociatedText == 0)
|
|
{
|
|
}
|
|
byte[] array6 = this.initialAssociatedText;
|
|
if (array6 != 0)
|
|
{
|
|
int length4 = array6.Length;
|
|
}
|
|
long length5 = this.associatedText.Length;
|
|
MemoryStream memoryStream = this.associatedText;
|
|
MemoryStream memoryStream2 = this.associatedText;
|
|
long length6 = memoryStream2.Length;
|
|
int num8 = 0;
|
|
if (memoryStream2 < 0)
|
|
{
|
|
}
|
|
uint num9;
|
|
if (length6 < (long)num9)
|
|
{
|
|
num9 = (uint)((long)num9 - length6);
|
|
if (num8 < cbcBlockCipherMac)
|
|
{
|
|
num8 += num8;
|
|
num8++;
|
|
}
|
|
while (num8 != cbcBlockCipherMac)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
int num10 = 0;
|
|
num10 += 3;
|
|
num10 += 19;
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x0600985E RID: 39006 RVA: 0x0021C40C File Offset: 0x0021A60C
|
|
[Token(Token = "0x600985E")]
|
|
[Address(RVA = "0x20E6160", Offset = "0x20E4B60", VA = "0x1820E6160")]
|
|
private int GetAssociatedTextLength()
|
|
{
|
|
bool flag = this.associatedText.CanWrite;
|
|
byte[] array = this.initialAssociatedText;
|
|
if (array == 0)
|
|
{
|
|
flag = flag + array != null;
|
|
}
|
|
int length = array.Length;
|
|
flag = (flag ? 1 : 0) + length != 0;
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x0600985F RID: 39007 RVA: 0x0021C444 File Offset: 0x0021A644
|
|
[Token(Token = "0x600985F")]
|
|
[Address(RVA = "0x20E62E0", Offset = "0x20E4CE0", VA = "0x1820E62E0")]
|
|
private bool HasAssociatedText()
|
|
{
|
|
bool flag = this.associatedText.CanWrite;
|
|
byte[] array = this.initialAssociatedText;
|
|
if (array == 0)
|
|
{
|
|
flag = flag + array != null;
|
|
return flag > false;
|
|
}
|
|
int length = array.Length;
|
|
flag = (flag ? 1 : 0) + length != 0;
|
|
return flag > false;
|
|
}
|
|
|
|
// Token: 0x04006411 RID: 25617
|
|
[Token(Token = "0x4006411")]
|
|
private static readonly int BlockSize;
|
|
|
|
// Token: 0x04006412 RID: 25618
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x10")]
|
|
[Token(Token = "0x4006412")]
|
|
private readonly IBlockCipher cipher;
|
|
|
|
// Token: 0x04006413 RID: 25619
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x18")]
|
|
[Token(Token = "0x4006413")]
|
|
private readonly byte[] macBlock;
|
|
|
|
// Token: 0x04006414 RID: 25620
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x20")]
|
|
[Token(Token = "0x4006414")]
|
|
private bool forEncryption;
|
|
|
|
// Token: 0x04006415 RID: 25621
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x28")]
|
|
[Token(Token = "0x4006415")]
|
|
private byte[] nonce;
|
|
|
|
// Token: 0x04006416 RID: 25622
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x30")]
|
|
[Token(Token = "0x4006416")]
|
|
private byte[] initialAssociatedText;
|
|
|
|
// Token: 0x04006417 RID: 25623
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x38")]
|
|
[Token(Token = "0x4006417")]
|
|
private int macSize;
|
|
|
|
// Token: 0x04006418 RID: 25624
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x40")]
|
|
[Token(Token = "0x4006418")]
|
|
private ICipherParameters keyParam;
|
|
|
|
// Token: 0x04006419 RID: 25625
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x48")]
|
|
[Token(Token = "0x4006419")]
|
|
private readonly MemoryStream associatedText;
|
|
|
|
// Token: 0x0400641A RID: 25626
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x50")]
|
|
[Token(Token = "0x400641A")]
|
|
private readonly MemoryStream data;
|
|
}
|
|
}
|