using System; using System.Runtime.InteropServices; using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; using BestHTTP.SecureProtocol.Org.BouncyCastle.Math; using BestHTTP.SecureProtocol.Org.BouncyCastle.Security; using Cpp2IlInjected; namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers { // Token: 0x020015D2 RID: 5586 [Token(Token = "0x20015D2")] [StructLayout(3)] public class Gost3410Signer : IDsaExt, IDsa { // Token: 0x170017E3 RID: 6115 // (get) Token: 0x0600954A RID: 38218 RVA: 0x00210750 File Offset: 0x0020E950 [Token(Token = "0x170017E3")] public virtual string AlgorithmName { [Token(Token = "0x600954A")] [Address(RVA = "0x1E40D70", Offset = "0x1E3F770", VA = "0x181E40D70", Slot = "9")] get { return "GOST3410"; } } // Token: 0x0600954B RID: 38219 RVA: 0x00210764 File Offset: 0x0020E964 [Token(Token = "0x600954B")] [Address(RVA = "0x1E40750", Offset = "0x1E3F150", VA = "0x181E40750", Slot = "10")] public virtual void Init(bool forSigning, ICipherParameters parameters) { /* An exception occurred when decompiling this method (0600954B) ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers.Gost3410Signer::Init(System.Boolean,BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.ICipherParameters) ---> System.Exception: Basic block has to end with unconditional control flow. { IL_60: stloc:InvalidKeyException(var_8_6A, newobj:InvalidKeyException(InvalidKeyException::.ctor, ldstr:string("GOST3410 public key required for signing"))) } 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: 0x170017E4 RID: 6116 // (get) Token: 0x0600954C RID: 38220 RVA: 0x002107DC File Offset: 0x0020E9DC [Token(Token = "0x170017E4")] public virtual BigInteger Order { [Token(Token = "0x600954C")] [Address(RVA = "0x1C69900", Offset = "0x1C68300", VA = "0x181C69900", Slot = "11")] get { return this.key.parameters.q; } } // Token: 0x0600954D RID: 38221 RVA: 0x00210800 File Offset: 0x0020EA00 [Token(Token = "0x600954D")] [Address(RVA = "0x1E403F0", Offset = "0x1E3EDF0", VA = "0x181E403F0", Slot = "12")] public virtual BigInteger[] GenerateSignature(byte[] message) { Gost3410Parameters parameters; BigInteger bigInteger2; BigInteger bigInteger4; BigInteger bigInteger5; Gost3410KeyParameters gost3410KeyParameters; do { byte[] array = new byte[message.Length]; int num = 0; int num2 = array.Length; if (num != num2) { num2 -= num; num++; } BigInteger bigInteger = new BigInteger(1, array); parameters = this.key.parameters; int bitLength = parameters.q.BitLength; SecureRandom secureRandom = this.random; bigInteger2 = new BigInteger(bitLength, secureRandom); BigInteger q = parameters.q; int num3 = bigInteger2.CompareTo(q); BigInteger a = parameters.a; BigInteger p = parameters.p; BigInteger bigInteger3 = a.ModPow(bigInteger2, p); BigInteger q2 = parameters.q; bigInteger4 = bigInteger3.Mod(q2); bigInteger5 = bigInteger2.Multiply(bigInteger); gost3410KeyParameters = this.key; } while (gost3410KeyParameters == 0 || gost3410KeyParameters == 0); BigInteger bigInteger6 = bigInteger2.Multiply(bigInteger4); BigInteger bigInteger7 = bigInteger5.Add(bigInteger6); BigInteger q3 = parameters.q; BigInteger bigInteger8 = bigInteger7.Mod(q3); BigInteger[] array2 = new BigInteger[2]; if (bigInteger4 != 0) { } array2[0] = bigInteger4; if (bigInteger8 != 0) { } array2[1] = bigInteger8; return array2; } // Token: 0x0600954E RID: 38222 RVA: 0x00210930 File Offset: 0x0020EB30 [Token(Token = "0x600954E")] [Address(RVA = "0x1E409E0", Offset = "0x1E3F3E0", VA = "0x181E409E0", Slot = "13")] public virtual bool VerifySignature(byte[] message, BigInteger r, BigInteger s) { Gost3410Parameters parameters; BigInteger bigInteger8; Gost3410KeyParameters gost3410KeyParameters; do { byte[] array = new byte[message.Length]; int num = 0; int num2 = array.Length; if (num != num2) { num2 -= num; num++; } BigInteger bigInteger = new BigInteger(1, array); parameters = this.key.parameters; if (parameters.q.CompareTo(r) <= 0 || parameters.q.CompareTo(s) <= 0) { goto IL_14F; } BigInteger q = parameters.q; BigInteger two = BigInteger.Two; BigInteger bigInteger2 = q.Subtract(two); BigInteger q2 = parameters.q; BigInteger bigInteger3 = bigInteger.ModPow(bigInteger2, q2); BigInteger bigInteger4 = s.Multiply(bigInteger3); BigInteger q3 = parameters.q; BigInteger bigInteger5 = bigInteger4.Mod(q3); BigInteger bigInteger6 = parameters.q.Subtract(r).Multiply(bigInteger3); BigInteger q4 = parameters.q; BigInteger bigInteger7 = bigInteger6.Mod(q4); BigInteger a = parameters.a; BigInteger p = parameters.p; bigInteger8 = a.ModPow(bigInteger5, p); gost3410KeyParameters = this.key; } while (gost3410KeyParameters == 0 || gost3410KeyParameters == 0); BigInteger p2 = parameters.p; BigInteger bigInteger10; BigInteger bigInteger9 = bigInteger8.Multiply(bigInteger10); BigInteger p3 = parameters.p; BigInteger bigInteger11 = bigInteger9.Mod(p3); BigInteger q5 = parameters.q; BigInteger bigInteger12 = bigInteger11.Mod(q5); IL_14F: throw new NullReferenceException(); } // Token: 0x0600954F RID: 38223 RVA: 0x00210A94 File Offset: 0x0020EC94 [Token(Token = "0x600954F")] [Address(RVA = "0x3C1670", Offset = "0x3C0070", VA = "0x1803C1670")] public Gost3410Signer() { } // Token: 0x04006280 RID: 25216 [global::Cpp2IlInjected.FieldOffset(Offset = "0x10")] [Token(Token = "0x4006280")] private Gost3410KeyParameters key; // Token: 0x04006281 RID: 25217 [global::Cpp2IlInjected.FieldOffset(Offset = "0x18")] [Token(Token = "0x4006281")] private SecureRandom random; } }