189 lines
7.9 KiB
C#
189 lines
7.9 KiB
C#
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;
|
|
}
|
|
}
|