using System; using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests; using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC; using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier; using BestHTTP.SecureProtocol.Org.BouncyCastle.Math.Field; using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Encoders; using Cpp2IlInjected; namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers { // Token: 0x02001C9B RID: 7323 [Token(Token = "0x2001C9B")] public class SM2Signer : ISigner { // Token: 0x0600B560 RID: 46432 RVA: 0x0027399C File Offset: 0x00271B9C [Token(Token = "0x600B560")] [Address(RVA = "0x2367170", Offset = "0x2366170", VA = "0x182367170")] public SM2Signer() { RandomDsaKCalculator randomDsaKCalculator = new RandomDsaKCalculator(); this.kCalculator = randomDsaKCalculator; SM3Digest sm3Digest = new SM3Digest(); this.digest = sm3Digest; base..ctor(); this.encoding = typeof(StandardDsaEncoding).TypeHandle; } // Token: 0x0600B561 RID: 46433 RVA: 0x002739D4 File Offset: 0x00271BD4 [Token(Token = "0x600B561")] [Address(RVA = "0x2367220", Offset = "0x2366220", VA = "0x182367220")] public SM2Signer(IDsaEncoding encoding) { RandomDsaKCalculator randomDsaKCalculator = new RandomDsaKCalculator(); this.kCalculator = randomDsaKCalculator; SM3Digest sm3Digest = new SM3Digest(); this.digest = sm3Digest; base..ctor(); this.encoding = encoding; } // Token: 0x17001C8B RID: 7307 // (get) Token: 0x0600B562 RID: 46434 RVA: 0x00273A08 File Offset: 0x00271C08 [Token(Token = "0x17001C8B")] public virtual string AlgorithmName { [Token(Token = "0x600B562")] [Address(RVA = "0x23672B0", Offset = "0x23662B0", VA = "0x1823672B0", Slot = "11")] get { return "SM2Sign"; } } // Token: 0x0600B563 RID: 46435 RVA: 0x00273A1C File Offset: 0x00271C1C [Token(Token = "0x600B563")] [Address(RVA = "0x2366760", Offset = "0x2365760", VA = "0x182366760", Slot = "12")] public virtual void Init(bool forSigning, ICipherParameters parameters) { byte[] array; ECKeyParameters eckeyParameters; for (;;) { if (parameters == 0 || parameters == 0 || (parameters != 0 && parameters != 0 && parameters != 0 && parameters != 0)) { array = Hex.Decode("31323334353637383132333435363738"); if (!forSigning) { if (parameters == 0) { } int num = 0; if (parameters == 0) { continue; } this.ecKey = parameters; this.ecParams = num; if (parameters == 0 || parameters == 0) { continue; } } int num2; if (parameters != 0) { if ((parameters == 0 && parameters == 0) || parameters == 0) { continue; } num2 = 0; this.ecParams = num2; IDsaKCalculator dsaKCalculator = this.kCalculator; } int num3 = 0; this.ecKey = num3; IDsaKCalculator dsaKCalculator2 = this.kCalculator; this.ecParams = num2; SecureRandom secureRandom = new SecureRandom(); ECDomainParameters ecdomainParameters = this.ecParams; eckeyParameters = this.ecKey; if (eckeyParameters != 0 && eckeyParameters != 0) { break; } } } this.pubPoint = eckeyParameters; SM3Digest sm3Digest = this.digest; byte[] array2 = this.GetZ(array); this.z = array2; SM3Digest sm3Digest2 = this.digest; int length = array2.Length; int num4 = 0; sm3Digest2.BlockUpdate(array2, num4, length); } // Token: 0x0600B564 RID: 46436 RVA: 0x00273B48 File Offset: 0x00271D48 [Token(Token = "0x600B564")] [Address(RVA = "0x2366DA0", Offset = "0x2365DA0", VA = "0x182366DA0", Slot = "13")] public virtual void Update(byte b) { this.digest.Update(b); } // Token: 0x0600B565 RID: 46437 RVA: 0x00273B68 File Offset: 0x00271D68 [Token(Token = "0x600B565")] [Address(RVA = "0x2365EB0", Offset = "0x2364EB0", VA = "0x182365EB0", Slot = "14")] public virtual void BlockUpdate(byte[] buf, int off, int len) { this.digest.BlockUpdate(buf, off, len); } // Token: 0x0600B566 RID: 46438 RVA: 0x00273B8C File Offset: 0x00271D8C [Token(Token = "0x600B566")] [Address(RVA = "0x2366DC0", Offset = "0x2365DC0", VA = "0x182366DC0", Slot = "15")] public virtual bool VerifySignature(byte[] signature) { IDsaEncoding dsaEncoding = this.encoding; byte[] seed = this.ecParams.seed; bool flag; return flag; } // Token: 0x0600B567 RID: 46439 RVA: 0x00273BD0 File Offset: 0x00271DD0 [Token(Token = "0x600B567")] [Address(RVA = "0x2366D40", Offset = "0x2365D40", VA = "0x182366D40", Slot = "16")] public virtual void Reset() { if (this.z != (ulong)0L) { SM3Digest sm3Digest = this.digest; byte[] array = this.z; SM3Digest sm3Digest2 = this.digest; int length = array.Length; int num = 0; sm3Digest2.BlockUpdate(array, num, length); } } // Token: 0x0600B568 RID: 46440 RVA: 0x00273C18 File Offset: 0x00271E18 [Token(Token = "0x600B568")] [Address(RVA = "0x2365F90", Offset = "0x2364F90", VA = "0x182365F90", Slot = "17")] public virtual byte[] GenerateSignature() { for (;;) { byte[] array = DigestUtilities.DoFinal(this.digest); BigInteger n = this.ecParams.n; ECKeyParameters eckeyParameters = this.ecKey; if ("{il2cpp array field local3->}" == typeof(ECPrivateKeyParameters).TypeHandle) { } if (eckeyParameters != 0) { int num = 0; if (eckeyParameters != 0) { int num2 = 0; IDsaKCalculator dsaKCalculator = this.kCalculator; if (num2 < num) { num2 += num2; num2++; } ECDomainParameters ecdomainParameters = this.ecParams; int num3 = 0; uint num4; if (num3 < (int)num4) { num3 += num3; num3++; } char c; string text = c.ToString(); BigInteger bigInteger2; BigInteger bigInteger = bigInteger2.Mod(n); while (bigInteger.sign == 0) { } if (bigInteger.Add(num2) == 0) { BigInteger one = BigInteger.One; BigInteger bigInteger4; BigInteger bigInteger3 = bigInteger4.ModInverse(n); BigInteger bigInteger5 = bigInteger.Multiply(n); BigInteger bigInteger7; BigInteger bigInteger6 = bigInteger7.Mod(n); if (bigInteger3.Multiply(bigInteger6).Mod(n).sign != 0) { break; } } } } } IDsaEncoding dsaEncoding = this.encoding; ECDomainParameters ecdomainParameters2 = this.ecParams; throw new NullReferenceException(); } // Token: 0x0600B569 RID: 46441 RVA: 0x00273D2C File Offset: 0x00271F2C [Token(Token = "0x600B569")] [Address(RVA = "0x2366EB0", Offset = "0x2365EB0", VA = "0x182366EB0")] private bool VerifySignature(BigInteger r, BigInteger s) { BigInteger n = this.ecParams.n; BigInteger one = BigInteger.One; int num = r.CompareTo(one); int num2 = r.CompareTo(n); BigInteger one2 = BigInteger.One; int num3 = s.CompareTo(one2); int num4 = s.CompareTo(n); byte[] array = DigestUtilities.DoFinal(this.digest); byte[] array2 = this.GenerateSignature(); BigInteger bigInteger = r.Add(s); int num5 = 0; BigInteger bigInteger2 = bigInteger.Mod(n); if (bigInteger2.sign != 0) { bool flag = ECAlgorithms.SumOfTwoMultiplies(this.ecParams.g, s, num5, bigInteger2).IsNormalized(); bool flag2; if (!flag2) { sbyte b; string text = b.ToString(); BigInteger bigInteger4; BigInteger bigInteger3 = bigInteger4.Mod(n); } } throw new NullReferenceException(); } // Token: 0x0600B56A RID: 46442 RVA: 0x00273DE4 File Offset: 0x00271FE4 [Token(Token = "0x600B56A")] [Address(RVA = "0x23664F0", Offset = "0x23654F0", VA = "0x1823664F0")] private byte[] GetZ(byte[] userID) { SM3Digest sm3Digest = this.digest; int length = userID.Length; IFiniteField field = this.ecParams.curve.Field; ECDomainParameters ecdomainParameters = this.ecParams; SM3Digest sm3Digest2 = this.digest; ECFieldElement a = ecdomainParameters.curve.A; this.AddFieldElement(sm3Digest2, a); int curveCoordinateSystem = this.ecParams.g.CurveCoordinateSystem; ECDomainParameters ecdomainParameters2 = this.ecParams; SM3Digest sm3Digest3 = this.digest; ECFieldElement affineXCoord = ecdomainParameters2.g.AffineXCoord; this.AddFieldElement(sm3Digest3, affineXCoord); int curveCoordinateSystem2 = this.pubPoint.CurveCoordinateSystem; ECPoint ecpoint = this.pubPoint; SM3Digest sm3Digest4 = this.digest; ECFieldElement affineXCoord2 = ecpoint.AffineXCoord; this.AddFieldElement(sm3Digest4, affineXCoord2); return DigestUtilities.DoFinal(this.digest); } // Token: 0x0600B56B RID: 46443 RVA: 0x00273EB4 File Offset: 0x002720B4 [Token(Token = "0x600B56B")] [Address(RVA = "0x2365E00", Offset = "0x2364E00", VA = "0x182365E00")] private void AddUserID(IDigest digest, byte[] userID) { int length = userID.Length; } // Token: 0x0600B56C RID: 46444 RVA: 0x00273ED0 File Offset: 0x002720D0 [Token(Token = "0x600B56C")] [Address(RVA = "0x2365D70", Offset = "0x2364D70", VA = "0x182365D70")] private void AddFieldElement(IDigest digest, ECFieldElement v) { } // Token: 0x0600B56D RID: 46445 RVA: 0x00273EE4 File Offset: 0x002720E4 [Token(Token = "0x600B56D")] [Address(RVA = "0x2365EE0", Offset = "0x2364EE0", VA = "0x182365EE0", Slot = "18")] protected virtual BigInteger CalculateE(byte[] message) { return new BigInteger(1, message); } // Token: 0x0600B56E RID: 46446 RVA: 0x00273EF8 File Offset: 0x002720F8 [Token(Token = "0x600B56E")] [Address(RVA = "0x2365F40", Offset = "0x2364F40", VA = "0x182365F40", Slot = "19")] protected virtual ECMultiplier CreateBasePointMultiplier() { /* An exception occurred when decompiling this method (0600B56E) ICSharpCode.Decompiler.DecompilerException: Error decompiling BestHTTP.SecureProtocol.Org.BouncyCastle.Math.EC.Multiplier.ECMultiplier BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers.SM2Signer::CreateBasePointMultiplier() ---> System.Exception: Basic block has to end with unconditional control flow. { Block_0: stloc:FixedPointCombMultiplier(var_0_05, newobj:FixedPointCombMultiplier(FixedPointCombMultiplier::.ctor)) } 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: 0x040072D4 RID: 29396 [FieldOffset(Offset = "0x10")] [Token(Token = "0x40072D4")] private readonly IDsaKCalculator kCalculator; // Token: 0x040072D5 RID: 29397 [FieldOffset(Offset = "0x18")] [Token(Token = "0x40072D5")] private readonly SM3Digest digest; // Token: 0x040072D6 RID: 29398 [FieldOffset(Offset = "0x20")] [Token(Token = "0x40072D6")] private readonly IDsaEncoding encoding; // Token: 0x040072D7 RID: 29399 [FieldOffset(Offset = "0x28")] [Token(Token = "0x40072D7")] private ECDomainParameters ecParams; // Token: 0x040072D8 RID: 29400 [FieldOffset(Offset = "0x30")] [Token(Token = "0x40072D8")] private ECPoint pubPoint; // Token: 0x040072D9 RID: 29401 [FieldOffset(Offset = "0x38")] [Token(Token = "0x40072D9")] private ECKeyParameters ecKey; // Token: 0x040072DA RID: 29402 [FieldOffset(Offset = "0x40")] [Token(Token = "0x40072DA")] private byte[] z; } }