Files
27Aug2021-Cpp2IL-Dump/Assembly-CSharp/BestHTTP/SecureProtocol/Org/BouncyCastle/Crypto/Agreement/SM2KeyExchange.cs
T
niko c12fbe3fc6 m
2026-04-12 16:51:38 +02:00

339 lines
13 KiB
C#

using System;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Utilities;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Math;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
using Cpp2IlInjected;
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement
{
// Token: 0x02001DED RID: 7661
[Token(Token = "0x2001DED")]
public class SM2KeyExchange
{
// Token: 0x0600C01E RID: 49182 RVA: 0x002B55D8 File Offset: 0x002B37D8
[Token(Token = "0x600C01E")]
[Address(RVA = "0x25AF290", Offset = "0x25AE290", VA = "0x1825AF290")]
public SM2KeyExchange()
{
SM3Digest sm3Digest = new SM3Digest();
base..ctor();
this.mDigest = sm3Digest;
}
// Token: 0x0600C01F RID: 49183 RVA: 0x002B55F8 File Offset: 0x002B37F8
[Token(Token = "0x600C01F")]
[Address(RVA = "0x493D90", Offset = "0x492D90", VA = "0x180493D90")]
public SM2KeyExchange(IDigest digest)
{
this.mDigest = digest;
}
// Token: 0x0600C020 RID: 49184 RVA: 0x002B5614 File Offset: 0x002B3814
[Token(Token = "0x600C020")]
[Address(RVA = "0x25AE8C0", Offset = "0x25AD8C0", VA = "0x1825AE8C0", Slot = "4")]
public virtual void Init(ICipherParameters privParam)
{
while (privParam != 0)
{
if ((privParam != 0 || privParam != 0) && privParam != 0 && privParam != 0)
{
if (privParam == 0)
{
}
if (privParam != 0 && privParam != 0 && privParam != 0)
{
break;
}
}
}
int num = 0;
byte[] array = new byte[0];
this.mUserID = array;
string text = num.ToString();
this.mInitiator = text != null;
int num2;
this.mStaticKey = num2;
TypeCode typeCode = num.GetTypeCode();
this.mEphemeralKey = typeCode;
ECDomainParameters parameters = this.mStaticKey.parameters;
this.mECParams = parameters;
string text2;
this.mStaticPubPoint = text2;
ECDomainParameters ecdomainParameters = this.mECParams;
bool flag;
this.mEphemeralPubPoint = flag;
string text3 = ecdomainParameters.curve.ToString();
this.mW = text3;
}
// Token: 0x0600C021 RID: 49185 RVA: 0x002B56DC File Offset: 0x002B38DC
[Token(Token = "0x600C021")]
[Address(RVA = "0x25AE100", Offset = "0x25AD100", VA = "0x1825AE100", Slot = "5")]
public virtual byte[] CalculateKey(int kLen, ICipherParameters pubParam)
{
while (pubParam != 0)
{
if ((pubParam != 0 || pubParam != 0) && pubParam != 0 && pubParam != 0)
{
if (pubParam == 0)
{
}
if (pubParam != 0 && pubParam != 0 && pubParam != 0)
{
break;
}
}
}
int num = 0;
byte[] array = new byte[0];
ECPoint ecpoint = this.mStaticPubPoint;
byte[] array2 = this.mUserID;
IDigest digest = this.mDigest;
byte[] z = this.GetZ(digest, array2, ecpoint);
IDigest digest2 = this.mDigest;
string text = num.ToString();
byte[] z2 = this.GetZ(digest2, array, ecpoint);
if (!this.mInitiator)
{
}
throw new NullReferenceException();
}
// Token: 0x0600C022 RID: 49186 RVA: 0x002B577C File Offset: 0x002B397C
[Token(Token = "0x600C022")]
[Address(RVA = "0x25ADA40", Offset = "0x25ACA40", VA = "0x1825ADA40", Slot = "6")]
public virtual byte[][] CalculateKeyWithConfirmation(int kLen, byte[] confirmationTag, ICipherParameters pubParam)
{
/*
An exception occurred when decompiling this method (0600C022)
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Byte[][] BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement.SM2KeyExchange::CalculateKeyWithConfirmation(System.Int32,System.Byte[],BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.ICipherParameters)
---> System.Exception: Basic block has to end with unconditional control flow.
{
IL_139:
stloc:ArgumentException(var_32_143, newobj:ArgumentException(ArgumentException::.ctor, ldstr:string("if initiating, confirmationTag must be set")))
}
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: 0x0600C023 RID: 49187 RVA: 0x002B58D0 File Offset: 0x002B3AD0
[Token(Token = "0x600C023")]
[Address(RVA = "0x25AE400", Offset = "0x25AD400", VA = "0x1825AE400", Slot = "7")]
protected virtual ECPoint CalculateU(SM2KeyExchangePublicParameters otherPub)
{
ECDomainParameters parameters = this.mStaticKey.parameters;
ECCurve curve = parameters.curve;
string text = otherPub.ToString();
ECCurve curve2 = parameters.curve;
ECPoint q = otherPub.StaticPublicKey.q;
ECPoint ecpoint = ECAlgorithms.CleanPoint(curve2, q);
string text2 = this.mEphemeralPubPoint.CurveCoordinateSystem.ToString();
string text3 = ecpoint.CurveCoordinateSystem.ToString();
ECPrivateKeyParameters ecprivateKeyParameters = this.mStaticKey;
ECPrivateKeyParameters ecprivateKeyParameters2 = this.mEphemeralKey;
BigInteger d = ecprivateKeyParameters.d;
BigInteger d2 = ecprivateKeyParameters2.d;
BigInteger bigInteger2;
BigInteger bigInteger = bigInteger2.Multiply(d2);
BigInteger bigInteger3 = d.Add(bigInteger);
BigInteger bigInteger4 = this.mECParams.h.Multiply(bigInteger3);
BigInteger n = this.mECParams.n;
BigInteger bigInteger5 = bigInteger4.Mod(n);
BigInteger bigInteger7;
BigInteger bigInteger6 = bigInteger5.Multiply(bigInteger7);
BigInteger n2 = this.mECParams.n;
BigInteger bigInteger8 = bigInteger6.Mod(n2);
ECPoint ecpoint2;
bool flag = ECAlgorithms.SumOfTwoMultiplies(ecpoint2, bigInteger5, ecpoint, bigInteger8).SatisfiesCurveEquation();
throw new NullReferenceException();
}
// Token: 0x0600C024 RID: 49188 RVA: 0x002B59D8 File Offset: 0x002B3BD8
[Token(Token = "0x600C024")]
[Address(RVA = "0x25AEBD0", Offset = "0x25ADBD0", VA = "0x1825AEBD0", Slot = "8")]
protected virtual byte[] Kdf(ECPoint u, byte[] za, byte[] zb, int klen)
{
IDigest digest = this.mDigest;
int num;
byte[] array = new byte[num];
byte[] array2 = new byte[num];
int num2 = 0;
if (array2 != 0)
{
int curveCoordinateSystem = u.CurveCoordinateSystem;
IDigest digest2 = this.mDigest;
ECFieldElement affineXCoord = u.AffineXCoord;
this.AddFieldElement(digest2, affineXCoord);
IDigest digest3 = this.mDigest;
int length = za.Length;
IDigest digest4 = this.mDigest;
int length2 = zb.Length;
}
if (num2 < array2.Length)
{
if (array2 == 0)
{
int curveCoordinateSystem2 = u.CurveCoordinateSystem;
IDigest digest5 = this.mDigest;
ECFieldElement affineXCoord2 = u.AffineXCoord;
this.AddFieldElement(digest5, affineXCoord2);
IDigest digest6 = this.mDigest;
int length3 = za.Length;
IDigest digest7 = this.mDigest;
int length4 = zb.Length;
}
num2++;
int num3 = 0;
Pack.UInt32_To_BE((uint)num2, array, num3);
IDigest digest8 = this.mDigest;
IDigest digest9 = this.mDigest;
int num4 = array2.Length;
num4 -= num2;
int num5 = 0;
int num6;
Array.Copy(array, num5, array2, num2, num6);
num2 += num6;
}
return array2;
}
// Token: 0x0600C025 RID: 49189 RVA: 0x002B5AEC File Offset: 0x002B3CEC
[Token(Token = "0x600C025")]
[Address(RVA = "0x25AEFC0", Offset = "0x25ADFC0", VA = "0x1825AEFC0")]
private BigInteger Reduce(BigInteger x)
{
BigInteger one = BigInteger.One;
int num = this.mW;
BigInteger bigInteger = one.ShiftLeft(num);
BigInteger one2 = BigInteger.One;
BigInteger bigInteger2 = bigInteger.Subtract(one2);
BigInteger bigInteger3 = x.And(bigInteger2);
int num2 = this.mW;
return bigInteger3.SetBit(num2);
}
// Token: 0x0600C026 RID: 49190 RVA: 0x002B5B40 File Offset: 0x002B3D40
[Token(Token = "0x600C026")]
[Address(RVA = "0x25AF090", Offset = "0x25AE090", VA = "0x1825AF090")]
private byte[] S1(IDigest digest, ECPoint u, byte[] inner)
{
ECFieldElement affineXCoord = u.AffineXCoord;
this.AddFieldElement(digest, affineXCoord);
int length = inner.Length;
return DigestUtilities.DoFinal(digest);
}
// Token: 0x0600C027 RID: 49191 RVA: 0x002B5B70 File Offset: 0x002B3D70
[Token(Token = "0x600C027")]
[Address(RVA = "0x25AD880", Offset = "0x25AC880", VA = "0x1825AD880")]
private byte[] CalculateInnerHash(IDigest digest, ECPoint u, byte[] za, byte[] zb, ECPoint p1, ECPoint p2)
{
int curveCoordinateSystem = u.CurveCoordinateSystem;
int length = za.Length;
return DigestUtilities.DoFinal(digest);
}
// Token: 0x0600C028 RID: 49192 RVA: 0x002B5B9C File Offset: 0x002B3D9C
[Token(Token = "0x600C028")]
[Address(RVA = "0x25AF190", Offset = "0x25AE190", VA = "0x1825AF190")]
private byte[] S2(IDigest digest, ECPoint u, byte[] inner)
{
ECFieldElement affineXCoord = u.AffineXCoord;
this.AddFieldElement(digest, affineXCoord);
int length = inner.Length;
return DigestUtilities.DoFinal(digest);
}
// Token: 0x0600C029 RID: 49193 RVA: 0x002B5BCC File Offset: 0x002B3DCC
[Token(Token = "0x600C029")]
[Address(RVA = "0x25AE660", Offset = "0x25AD660", VA = "0x1825AE660")]
private byte[] GetZ(IDigest digest, byte[] userID, ECPoint pubPoint)
{
int length = userID.Length;
IFiniteField field = this.mECParams.curve.Field;
ECFieldElement a = this.mECParams.curve.A;
this.AddFieldElement(digest, a);
int curveCoordinateSystem = this.mECParams.g.CurveCoordinateSystem;
ECFieldElement affineXCoord = this.mECParams.g.AffineXCoord;
this.AddFieldElement(digest, affineXCoord);
int curveCoordinateSystem2 = pubPoint.CurveCoordinateSystem;
ECFieldElement affineXCoord2 = pubPoint.AffineXCoord;
this.AddFieldElement(digest, affineXCoord2);
return DigestUtilities.DoFinal(digest);
}
// Token: 0x0600C02A RID: 49194 RVA: 0x002B5C5C File Offset: 0x002B3E5C
[Token(Token = "0x600C02A")]
[Address(RVA = "0x25AD7D0", Offset = "0x25AC7D0", VA = "0x1825AD7D0")]
private void AddUserID(IDigest digest, byte[] userID)
{
int length = userID.Length;
}
// Token: 0x0600C02B RID: 49195 RVA: 0x002B5C78 File Offset: 0x002B3E78
[Token(Token = "0x600C02B")]
[Address(RVA = "0x25AD740", Offset = "0x25AC740", VA = "0x1825AD740")]
private void AddFieldElement(IDigest digest, ECFieldElement v)
{
}
// Token: 0x04007984 RID: 31108
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x4007984")]
private readonly IDigest mDigest;
// Token: 0x04007985 RID: 31109
[FieldOffset(Offset = "0x18")]
[Token(Token = "0x4007985")]
private byte[] mUserID;
// Token: 0x04007986 RID: 31110
[FieldOffset(Offset = "0x20")]
[Token(Token = "0x4007986")]
private ECPrivateKeyParameters mStaticKey;
// Token: 0x04007987 RID: 31111
[FieldOffset(Offset = "0x28")]
[Token(Token = "0x4007987")]
private ECPoint mStaticPubPoint;
// Token: 0x04007988 RID: 31112
[FieldOffset(Offset = "0x30")]
[Token(Token = "0x4007988")]
private ECPoint mEphemeralPubPoint;
// Token: 0x04007989 RID: 31113
[FieldOffset(Offset = "0x38")]
[Token(Token = "0x4007989")]
private ECDomainParameters mECParams;
// Token: 0x0400798A RID: 31114
[FieldOffset(Offset = "0x40")]
[Token(Token = "0x400798A")]
private int mW;
// Token: 0x0400798B RID: 31115
[FieldOffset(Offset = "0x48")]
[Token(Token = "0x400798B")]
private ECPrivateKeyParameters mEphemeralKey;
// Token: 0x0400798C RID: 31116
[FieldOffset(Offset = "0x50")]
[Token(Token = "0x400798C")]
private bool mInitiator;
}
}