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: 0x02001BBB RID: 7099 [Token(Token = "0x2001BBB")] public class SM2Signer : ISigner { // Token: 0x0600B192 RID: 45458 RVA: 0x0026A7D8 File Offset: 0x002689D8 [Token(Token = "0x600B192")] [Address(RVA = "0x18A3310", Offset = "0x18A2110", VA = "0x1818A3310")] public SM2Signer() { RandomDsaKCalculator randomDsaKCalculator = new RandomDsaKCalculator(); this.kCalculator = randomDsaKCalculator; SM3Digest sm3Digest = new SM3Digest(); this.digest = sm3Digest; base..ctor(); this.encoding = typeof(StandardDsaEncoding).TypeHandle; } // Token: 0x0600B193 RID: 45459 RVA: 0x0026A810 File Offset: 0x00268A10 [Token(Token = "0x600B193")] [Address(RVA = "0x18A33C0", Offset = "0x18A21C0", VA = "0x1818A33C0")] public SM2Signer(IDsaEncoding encoding) { RandomDsaKCalculator randomDsaKCalculator = new RandomDsaKCalculator(); this.kCalculator = randomDsaKCalculator; SM3Digest sm3Digest = new SM3Digest(); this.digest = sm3Digest; base..ctor(); this.encoding = encoding; } // Token: 0x17001BEE RID: 7150 // (get) Token: 0x0600B194 RID: 45460 RVA: 0x0026A844 File Offset: 0x00268A44 [Token(Token = "0x17001BEE")] public virtual string AlgorithmName { [Token(Token = "0x600B194")] [Address(RVA = "0x18A3450", Offset = "0x18A2250", VA = "0x1818A3450", Slot = "11")] get { return "SM2Sign"; } } // Token: 0x0600B195 RID: 45461 RVA: 0x0026A858 File Offset: 0x00268A58 [Token(Token = "0x600B195")] [Address(RVA = "0x18A2900", Offset = "0x18A1700", VA = "0x1818A2900", 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: 0x0600B196 RID: 45462 RVA: 0x0026A984 File Offset: 0x00268B84 [Token(Token = "0x600B196")] [Address(RVA = "0x18A2F40", Offset = "0x18A1D40", VA = "0x1818A2F40", Slot = "13")] public virtual void Update(byte b) { this.digest.Update(b); } // Token: 0x0600B197 RID: 45463 RVA: 0x0026A9A4 File Offset: 0x00268BA4 [Token(Token = "0x600B197")] [Address(RVA = "0x18A2050", Offset = "0x18A0E50", VA = "0x1818A2050", Slot = "14")] public virtual void BlockUpdate(byte[] buf, int off, int len) { this.digest.BlockUpdate(buf, off, len); } // Token: 0x0600B198 RID: 45464 RVA: 0x0026A9C8 File Offset: 0x00268BC8 [Token(Token = "0x600B198")] [Address(RVA = "0x18A2F60", Offset = "0x18A1D60", VA = "0x1818A2F60", Slot = "15")] public virtual bool VerifySignature(byte[] signature) { IDsaEncoding dsaEncoding = this.encoding; byte[] seed = this.ecParams.seed; bool flag; return flag; } // Token: 0x0600B199 RID: 45465 RVA: 0x0026AA0C File Offset: 0x00268C0C [Token(Token = "0x600B199")] [Address(RVA = "0x18A2EE0", Offset = "0x18A1CE0", VA = "0x1818A2EE0", 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: 0x0600B19A RID: 45466 RVA: 0x0026AA54 File Offset: 0x00268C54 [Token(Token = "0x600B19A")] [Address(RVA = "0x18A2130", Offset = "0x18A0F30", VA = "0x1818A2130", 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: 0x0600B19B RID: 45467 RVA: 0x0026AB68 File Offset: 0x00268D68 [Token(Token = "0x600B19B")] [Address(RVA = "0x18A3050", Offset = "0x18A1E50", VA = "0x1818A3050")] 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: 0x0600B19C RID: 45468 RVA: 0x0026AC20 File Offset: 0x00268E20 [Token(Token = "0x600B19C")] [Address(RVA = "0x18A2690", Offset = "0x18A1490", VA = "0x1818A2690")] 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: 0x0600B19D RID: 45469 RVA: 0x0026ACF0 File Offset: 0x00268EF0 [Token(Token = "0x600B19D")] [Address(RVA = "0x18A1FA0", Offset = "0x18A0DA0", VA = "0x1818A1FA0")] private void AddUserID(IDigest digest, byte[] userID) { int length = userID.Length; } // Token: 0x0600B19E RID: 45470 RVA: 0x0026AD0C File Offset: 0x00268F0C [Token(Token = "0x600B19E")] [Address(RVA = "0x18A1F10", Offset = "0x18A0D10", VA = "0x1818A1F10")] private void AddFieldElement(IDigest digest, ECFieldElement v) { } // Token: 0x0600B19F RID: 45471 RVA: 0x0026AD20 File Offset: 0x00268F20 [Token(Token = "0x600B19F")] [Address(RVA = "0x18A2080", Offset = "0x18A0E80", VA = "0x1818A2080", Slot = "18")] protected virtual BigInteger CalculateE(byte[] message) { return new BigInteger(1, message); } // Token: 0x0600B1A0 RID: 45472 RVA: 0x0026AD34 File Offset: 0x00268F34 [Token(Token = "0x600B1A0")] [Address(RVA = "0x18A20E0", Offset = "0x18A0EE0", VA = "0x1818A20E0", Slot = "19")] protected virtual ECMultiplier CreateBasePointMultiplier() { /* An exception occurred when decompiling this method (0600B1A0) 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 1660 */; } // Token: 0x0400711B RID: 28955 [FieldOffset(Offset = "0x10")] [Token(Token = "0x400711B")] private readonly IDsaKCalculator kCalculator; // Token: 0x0400711C RID: 28956 [FieldOffset(Offset = "0x18")] [Token(Token = "0x400711C")] private readonly SM3Digest digest; // Token: 0x0400711D RID: 28957 [FieldOffset(Offset = "0x20")] [Token(Token = "0x400711D")] private readonly IDsaEncoding encoding; // Token: 0x0400711E RID: 28958 [FieldOffset(Offset = "0x28")] [Token(Token = "0x400711E")] private ECDomainParameters ecParams; // Token: 0x0400711F RID: 28959 [FieldOffset(Offset = "0x30")] [Token(Token = "0x400711F")] private ECPoint pubPoint; // Token: 0x04007120 RID: 28960 [FieldOffset(Offset = "0x38")] [Token(Token = "0x4007120")] private ECKeyParameters ecKey; // Token: 0x04007121 RID: 28961 [FieldOffset(Offset = "0x40")] [Token(Token = "0x4007121")] private byte[] z; } }