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

187 lines
7.8 KiB
C#

using System;
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: 0x02001C8F RID: 7311
[Token(Token = "0x2001C8F")]
public class Gost3410Signer : IDsaExt, IDsa
{
// Token: 0x17001C81 RID: 7297
// (get) Token: 0x0600B4F2 RID: 46322 RVA: 0x00270F80 File Offset: 0x0026F180
[Token(Token = "0x17001C81")]
public virtual string AlgorithmName
{
[Token(Token = "0x600B4F2")]
[Address(RVA = "0x235BFE0", Offset = "0x235AFE0", VA = "0x18235BFE0", Slot = "9")]
get
{
return "GOST3410";
}
}
// Token: 0x0600B4F3 RID: 46323 RVA: 0x00270F94 File Offset: 0x0026F194
[Token(Token = "0x600B4F3")]
[Address(RVA = "0x235B9C0", Offset = "0x235A9C0", VA = "0x18235B9C0", Slot = "10")]
public virtual void Init(bool forSigning, ICipherParameters parameters)
{
/*
An exception occurred when decompiling this method (0600B4F3)
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: 0x17001C82 RID: 7298
// (get) Token: 0x0600B4F4 RID: 46324 RVA: 0x0027100C File Offset: 0x0026F20C
[Token(Token = "0x17001C82")]
public virtual BigInteger Order
{
[Token(Token = "0x600B4F4")]
[Address(RVA = "0x5EF6E0", Offset = "0x5EE6E0", VA = "0x1805EF6E0", Slot = "11")]
get
{
return this.key.parameters.q;
}
}
// Token: 0x0600B4F5 RID: 46325 RVA: 0x00271030 File Offset: 0x0026F230
[Token(Token = "0x600B4F5")]
[Address(RVA = "0x235B660", Offset = "0x235A660", VA = "0x18235B660", 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: 0x0600B4F6 RID: 46326 RVA: 0x00271160 File Offset: 0x0026F360
[Token(Token = "0x600B4F6")]
[Address(RVA = "0x235BC50", Offset = "0x235AC50", VA = "0x18235BC50", 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: 0x0600B4F7 RID: 46327 RVA: 0x002712C4 File Offset: 0x0026F4C4
[Token(Token = "0x600B4F7")]
[Address(RVA = "0x412370", Offset = "0x411370", VA = "0x180412370")]
public Gost3410Signer()
{
}
// Token: 0x0400727C RID: 29308
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x400727C")]
private Gost3410KeyParameters key;
// Token: 0x0400727D RID: 29309
[FieldOffset(Offset = "0x18")]
[Token(Token = "0x400727D")]
private SecureRandom random;
}
}