472 lines
14 KiB
C#
472 lines
14 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Digests;
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
|
|
using Cpp2IlInjected;
|
|
|
|
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers
|
|
{
|
|
// Token: 0x020015DB RID: 5595
|
|
[Token(Token = "0x20015DB")]
|
|
[StructLayout(3)]
|
|
public class PssSigner : ISigner
|
|
{
|
|
// Token: 0x06009590 RID: 38288 RVA: 0x002125A0 File Offset: 0x002107A0
|
|
[Token(Token = "0x6009590")]
|
|
[Address(RVA = "0x1E47830", Offset = "0x1E46230", VA = "0x181E47830")]
|
|
public static PssSigner CreateRawSigner(IAsymmetricBlockCipher cipher, IDigest digest)
|
|
{
|
|
NullDigest nullDigest = new NullDigest();
|
|
PssSigner pssSigner;
|
|
pssSigner.cipher = cipher;
|
|
pssSigner.contentDigest1 = nullDigest;
|
|
pssSigner.contentDigest2 = digest;
|
|
pssSigner.mgfDigest = digest;
|
|
pssSigner.hLen = pssSigner;
|
|
pssSigner.mgfhLen = pssSigner;
|
|
pssSigner.sLen = nullDigest;
|
|
pssSigner.sSet = false;
|
|
byte[] array = new byte[nullDigest];
|
|
pssSigner.salt = array;
|
|
byte[] array2 = new byte[nullDigest];
|
|
pssSigner.mDash = array2;
|
|
pssSigner.trailer = (byte)((ulong)188L);
|
|
return pssSigner;
|
|
}
|
|
|
|
// Token: 0x06009591 RID: 38289 RVA: 0x0021261C File Offset: 0x0021081C
|
|
[Token(Token = "0x6009591")]
|
|
[Address(RVA = "0x1E47970", Offset = "0x1E46370", VA = "0x181E47970")]
|
|
public static PssSigner CreateRawSigner(IAsymmetricBlockCipher cipher, IDigest contentDigest, IDigest mgfDigest, int saltLen, byte trailer)
|
|
{
|
|
NullDigest nullDigest = new NullDigest();
|
|
PssSigner pssSigner;
|
|
pssSigner.cipher = cipher;
|
|
pssSigner.contentDigest1 = nullDigest;
|
|
pssSigner.contentDigest2 = contentDigest;
|
|
pssSigner.mgfDigest = mgfDigest;
|
|
pssSigner.hLen = pssSigner;
|
|
pssSigner.mgfhLen = pssSigner;
|
|
pssSigner.sLen = saltLen;
|
|
pssSigner.sSet = false;
|
|
byte[] array = new byte[saltLen];
|
|
pssSigner.salt = array;
|
|
byte[] array2 = new byte[saltLen];
|
|
pssSigner.mDash = array2;
|
|
pssSigner.trailer = 0;
|
|
return pssSigner;
|
|
}
|
|
|
|
// Token: 0x06009592 RID: 38290 RVA: 0x00212694 File Offset: 0x00210894
|
|
[Token(Token = "0x6009592")]
|
|
[Address(RVA = "0x1E48C40", Offset = "0x1E47640", VA = "0x181E48C40")]
|
|
public PssSigner(IAsymmetricBlockCipher cipher, IDigest digest)
|
|
{
|
|
}
|
|
|
|
// Token: 0x06009593 RID: 38291 RVA: 0x002126A8 File Offset: 0x002108A8
|
|
[Token(Token = "0x6009593")]
|
|
[Address(RVA = "0x1E48C10", Offset = "0x1E47610", VA = "0x181E48C10")]
|
|
public PssSigner(IAsymmetricBlockCipher cipher, IDigest digest, int saltLen)
|
|
{
|
|
}
|
|
|
|
// Token: 0x06009594 RID: 38292 RVA: 0x002126B8 File Offset: 0x002108B8
|
|
[Token(Token = "0x6009594")]
|
|
[Address(RVA = "0x1E48BA0", Offset = "0x1E475A0", VA = "0x181E48BA0")]
|
|
public PssSigner(IAsymmetricBlockCipher cipher, IDigest digest, byte[] salt)
|
|
{
|
|
int length = salt.Length;
|
|
}
|
|
|
|
// Token: 0x06009595 RID: 38293 RVA: 0x002126D4 File Offset: 0x002108D4
|
|
[Token(Token = "0x6009595")]
|
|
[Address(RVA = "0x1E48BE0", Offset = "0x1E475E0", VA = "0x181E48BE0")]
|
|
public PssSigner(IAsymmetricBlockCipher cipher, IDigest contentDigest, IDigest mgfDigest, int saltLen)
|
|
{
|
|
}
|
|
|
|
// Token: 0x06009596 RID: 38294 RVA: 0x002126E4 File Offset: 0x002108E4
|
|
[Token(Token = "0x6009596")]
|
|
[Address(RVA = "0x1E48B50", Offset = "0x1E47550", VA = "0x181E48B50")]
|
|
public PssSigner(IAsymmetricBlockCipher cipher, IDigest contentDigest, IDigest mgfDigest, byte[] salt)
|
|
{
|
|
}
|
|
|
|
// Token: 0x06009597 RID: 38295 RVA: 0x002126F8 File Offset: 0x002108F8
|
|
[Token(Token = "0x6009597")]
|
|
[Address(RVA = "0x1E48C10", Offset = "0x1E47610", VA = "0x181E48C10")]
|
|
public PssSigner(IAsymmetricBlockCipher cipher, IDigest digest, int saltLen, byte trailer)
|
|
{
|
|
}
|
|
|
|
// Token: 0x06009598 RID: 38296 RVA: 0x00212708 File Offset: 0x00210908
|
|
[Token(Token = "0x6009598")]
|
|
[Address(RVA = "0x1E48A60", Offset = "0x1E47460", VA = "0x181E48A60")]
|
|
public PssSigner(IAsymmetricBlockCipher cipher, IDigest contentDigest, IDigest mgfDigest, int saltLen, byte trailer)
|
|
{
|
|
this.cipher = cipher;
|
|
this.contentDigest1 = contentDigest;
|
|
this.contentDigest2 = contentDigest;
|
|
this.mgfDigest = mgfDigest;
|
|
this.sLen = 0;
|
|
this.sSet = false;
|
|
byte[] array = new byte[0];
|
|
this.salt = array;
|
|
byte[] array2 = new byte[0];
|
|
this.mDash = array2;
|
|
this.trailer = 0;
|
|
}
|
|
|
|
// Token: 0x06009599 RID: 38297 RVA: 0x00212770 File Offset: 0x00210970
|
|
[Token(Token = "0x6009599")]
|
|
[Address(RVA = "0x1E48CD0", Offset = "0x1E476D0", VA = "0x181E48CD0")]
|
|
private PssSigner(IAsymmetricBlockCipher cipher, IDigest contentDigest1, IDigest contentDigest2, IDigest mgfDigest, int saltLen, byte[] salt, byte trailer)
|
|
{
|
|
this.contentDigest1 = contentDigest1;
|
|
this.mgfDigest = 0;
|
|
this.cipher = cipher;
|
|
this.contentDigest2 = contentDigest2;
|
|
this.sLen = 0;
|
|
bool flag;
|
|
this.sSet = flag;
|
|
byte[] array = new byte[0];
|
|
this.salt = 0;
|
|
byte[] array2 = new byte[0];
|
|
this.mDash = array2;
|
|
this.trailer = 0;
|
|
}
|
|
|
|
// Token: 0x170017EA RID: 6122
|
|
// (get) Token: 0x0600959A RID: 38298 RVA: 0x002127D8 File Offset: 0x002109D8
|
|
[Token(Token = "0x170017EA")]
|
|
public virtual string AlgorithmName
|
|
{
|
|
[Token(Token = "0x600959A")]
|
|
[Address(RVA = "0x1E48DD0", Offset = "0x1E477D0", VA = "0x181E48DD0", Slot = "11")]
|
|
get
|
|
{
|
|
IDigest digest = this.mgfDigest;
|
|
return 0 + "withRSAandMGF1";
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600959B RID: 38299 RVA: 0x00212800 File Offset: 0x00210A00
|
|
[Token(Token = "0x600959B")]
|
|
[Address(RVA = "0x1E47DF0", Offset = "0x1E467F0", VA = "0x181E47DF0", Slot = "12")]
|
|
public virtual void Init(bool forSigning, ICipherParameters parameters)
|
|
{
|
|
do
|
|
{
|
|
if (parameters != 0 && parameters != 0)
|
|
{
|
|
if (parameters == 0)
|
|
{
|
|
continue;
|
|
}
|
|
this.random = parameters;
|
|
}
|
|
if (forSigning)
|
|
{
|
|
SecureRandom secureRandom = new SecureRandom();
|
|
this.random = secureRandom;
|
|
}
|
|
IAsymmetricBlockCipher asymmetricBlockCipher = this.cipher;
|
|
}
|
|
while ((parameters == 0 && parameters == 0) || parameters == 0 || parameters == 0);
|
|
int num = 0;
|
|
int num3;
|
|
int num2 = num3 - 1;
|
|
int num4 = this.sLen;
|
|
this.emBits = num2;
|
|
num += num4;
|
|
byte[] array = new byte[num];
|
|
this.block = array;
|
|
}
|
|
|
|
// Token: 0x0600959C RID: 38300 RVA: 0x00212890 File Offset: 0x00210A90
|
|
[Token(Token = "0x600959C")]
|
|
[Address(RVA = "0x1E43A90", Offset = "0x1E42490", VA = "0x181E43A90")]
|
|
private void ClearBlock(byte[] block)
|
|
{
|
|
int length = block.Length;
|
|
int num = 0;
|
|
Array.Clear(block, num, length);
|
|
}
|
|
|
|
// Token: 0x0600959D RID: 38301 RVA: 0x002128B4 File Offset: 0x00210AB4
|
|
[Token(Token = "0x600959D")]
|
|
[Address(RVA = "0x1E485B0", Offset = "0x1E46FB0", VA = "0x181E485B0", Slot = "13")]
|
|
public virtual void Update(byte input)
|
|
{
|
|
IDigest digest = this.contentDigest1;
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x0600959E RID: 38302 RVA: 0x002128D0 File Offset: 0x00210AD0
|
|
[Token(Token = "0x600959E")]
|
|
[Address(RVA = "0x1E477B0", Offset = "0x1E461B0", VA = "0x181E477B0", Slot = "14")]
|
|
public virtual void BlockUpdate(byte[] input, int inOff, int length)
|
|
{
|
|
IDigest digest = this.contentDigest1;
|
|
}
|
|
|
|
// Token: 0x0600959F RID: 38303 RVA: 0x002128EC File Offset: 0x00210AEC
|
|
[Token(Token = "0x600959F")]
|
|
[Address(RVA = "0x1E48560", Offset = "0x1E46F60", VA = "0x181E48560", Slot = "15")]
|
|
public virtual void Reset()
|
|
{
|
|
IDigest digest = this.contentDigest1;
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x060095A0 RID: 38304 RVA: 0x00212908 File Offset: 0x00210B08
|
|
[Token(Token = "0x60095A0")]
|
|
[Address(RVA = "0x1E47AB0", Offset = "0x1E464B0", VA = "0x181E47AB0", Slot = "16")]
|
|
public virtual byte[] GenerateSignature()
|
|
{
|
|
byte[] array = this.mDash;
|
|
IDigest digest = this.contentDigest1;
|
|
int length = array.Length;
|
|
if (this.sLen != 0)
|
|
{
|
|
if (!this.sSet)
|
|
{
|
|
double num = this.random.NextDouble();
|
|
}
|
|
byte[] array2 = this.mDash;
|
|
byte[] array3 = this.salt;
|
|
int length2 = array2.Length;
|
|
}
|
|
byte[] array4 = new byte[this.hLen];
|
|
byte[] array5 = this.mDash;
|
|
IDigest digest2 = this.contentDigest2;
|
|
int length3 = array5.Length;
|
|
int num2 = 0;
|
|
IDigest digest3 = this.contentDigest2;
|
|
int length4 = this.block.Length;
|
|
byte[] array6 = this.block;
|
|
byte[] array7 = this.salt;
|
|
int length5 = array6.Length;
|
|
int length6 = this.block.Length;
|
|
int num3 = 0;
|
|
int length7 = array4.Length;
|
|
int length8 = this.MaskGeneratorFunction1(array4, num3, length7, length6).Length;
|
|
byte[] array8 = this.block;
|
|
if (num2 != length8)
|
|
{
|
|
num2++;
|
|
}
|
|
int length9 = array8.Length;
|
|
int length10 = this.block.Length;
|
|
int length11 = this.block.Length;
|
|
byte b = this.trailer;
|
|
int num4 = length11 - 1;
|
|
byte[] array9 = this.block;
|
|
IAsymmetricBlockCipher asymmetricBlockCipher = this.cipher;
|
|
int length12 = array9.Length;
|
|
byte[] array10 = this.block;
|
|
int length13 = array10.Length;
|
|
int num5 = 0;
|
|
Array.Clear(array10, num5, length13);
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x060095A1 RID: 38305 RVA: 0x00212A68 File Offset: 0x00210C68
|
|
[Token(Token = "0x60095A1")]
|
|
[Address(RVA = "0x1E48610", Offset = "0x1E47010", VA = "0x181E48610", Slot = "17")]
|
|
public virtual bool VerifySignature(byte[] signature)
|
|
{
|
|
byte[] array = this.mDash;
|
|
IDigest digest = this.contentDigest1;
|
|
int length = array.Length;
|
|
IAsymmetricBlockCipher asymmetricBlockCipher = this.cipher;
|
|
int length2 = signature.Length;
|
|
int num = 0;
|
|
int length3 = this.block.Length;
|
|
byte[] array2 = this.block;
|
|
int num2 = array2.Length;
|
|
int num3 = num2 - 1;
|
|
byte b = this.trailer;
|
|
int num4 = this.hLen;
|
|
num2 -= num4;
|
|
int num5 = this.MaskGeneratorFunction1(array2, num2, num4, num2).Length;
|
|
byte[] array3 = this.block;
|
|
if (num != num5)
|
|
{
|
|
num++;
|
|
}
|
|
int length4 = array3.Length;
|
|
byte[] array4 = this.block;
|
|
int num6 = array4.Length;
|
|
num5 = num6;
|
|
int num7 = this.hLen;
|
|
num5 -= num7;
|
|
int num8 = this.sLen;
|
|
num5 -= num8;
|
|
num5 += -2;
|
|
int num9;
|
|
if (num != num5)
|
|
{
|
|
num++;
|
|
num9 = 0;
|
|
int num10 = 0;
|
|
Array.Clear(array4, num10, num6);
|
|
}
|
|
num6 -= num7;
|
|
num6 -= num8;
|
|
num9 -= num8;
|
|
num6 = num8;
|
|
int num11 = array4.Length;
|
|
num11 -= num8;
|
|
int num12 = num11 - 1;
|
|
num12 += num6;
|
|
if (num6 != num8)
|
|
{
|
|
num6++;
|
|
num12++;
|
|
}
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x060095A2 RID: 38306 RVA: 0x00212BBC File Offset: 0x00210DBC
|
|
[Token(Token = "0x60095A2")]
|
|
[Address(RVA = "0x1E44410", Offset = "0x1E42E10", VA = "0x181E44410")]
|
|
private void ItoOSP(int i, byte[] sp)
|
|
{
|
|
sp[0] = (byte)i;
|
|
sp[0] = (byte)i;
|
|
sp[0] = (byte)i;
|
|
sp[0] = (byte)i;
|
|
}
|
|
|
|
// Token: 0x060095A3 RID: 38307 RVA: 0x00212BF0 File Offset: 0x00210DF0
|
|
[Token(Token = "0x60095A3")]
|
|
[Address(RVA = "0x1E480C0", Offset = "0x1E46AC0", VA = "0x181E480C0")]
|
|
private byte[] MaskGeneratorFunction1(byte[] Z, int zOff, int zLen, int length)
|
|
{
|
|
byte[] array = new byte[0];
|
|
byte[] array2 = new byte[this.mgfhLen];
|
|
byte[] array3 = new byte[4];
|
|
IDigest digest = this.mgfDigest;
|
|
int num = 0;
|
|
int num2 = this.mgfhLen;
|
|
array3[0] = (byte)num;
|
|
array3[0] = (byte)num;
|
|
array3[0] = (byte)num;
|
|
array3[0] = (byte)num;
|
|
IDigest digest2 = this.mgfDigest;
|
|
int num3 = 0;
|
|
if (num3 < digest)
|
|
{
|
|
num3 += num3;
|
|
num3++;
|
|
}
|
|
IDigest digest3 = this.mgfDigest;
|
|
int num4 = 0;
|
|
num4 += num4;
|
|
num4++;
|
|
int num5 = 0;
|
|
IDigest digest4 = this.mgfDigest;
|
|
int num6 = 0;
|
|
if (num6 < num5)
|
|
{
|
|
num6 += num6;
|
|
num6++;
|
|
}
|
|
int num7 = this.mgfhLen * num;
|
|
num++;
|
|
int num8 = num2 * num;
|
|
array3[0] = (byte)num;
|
|
array3[0] = (byte)num;
|
|
array3[0] = (byte)num;
|
|
array3[0] = (byte)num;
|
|
IDigest digest5 = this.mgfDigest;
|
|
IDigest digest6 = this.mgfDigest;
|
|
int length2 = array3.Length;
|
|
IDigest digest7 = this.mgfDigest;
|
|
int num9 = this.mgfhLen;
|
|
int num10 = array.Length;
|
|
int num11 = 0;
|
|
int num12 = num9 * num;
|
|
num10 -= num12;
|
|
Array.Copy(array2, num11, array, num12, num10);
|
|
return array;
|
|
}
|
|
|
|
// Token: 0x040062C2 RID: 25282
|
|
[Token(Token = "0x40062C2")]
|
|
public const byte TrailerImplicit = 188;
|
|
|
|
// Token: 0x040062C3 RID: 25283
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x10")]
|
|
[Token(Token = "0x40062C3")]
|
|
private readonly IDigest contentDigest1;
|
|
|
|
// Token: 0x040062C4 RID: 25284
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x18")]
|
|
[Token(Token = "0x40062C4")]
|
|
private readonly IDigest contentDigest2;
|
|
|
|
// Token: 0x040062C5 RID: 25285
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x20")]
|
|
[Token(Token = "0x40062C5")]
|
|
private readonly IDigest mgfDigest;
|
|
|
|
// Token: 0x040062C6 RID: 25286
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x28")]
|
|
[Token(Token = "0x40062C6")]
|
|
private readonly IAsymmetricBlockCipher cipher;
|
|
|
|
// Token: 0x040062C7 RID: 25287
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x30")]
|
|
[Token(Token = "0x40062C7")]
|
|
private SecureRandom random;
|
|
|
|
// Token: 0x040062C8 RID: 25288
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x38")]
|
|
[Token(Token = "0x40062C8")]
|
|
private int hLen;
|
|
|
|
// Token: 0x040062C9 RID: 25289
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x3C")]
|
|
[Token(Token = "0x40062C9")]
|
|
private int mgfhLen;
|
|
|
|
// Token: 0x040062CA RID: 25290
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x40")]
|
|
[Token(Token = "0x40062CA")]
|
|
private int sLen;
|
|
|
|
// Token: 0x040062CB RID: 25291
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x44")]
|
|
[Token(Token = "0x40062CB")]
|
|
private bool sSet;
|
|
|
|
// Token: 0x040062CC RID: 25292
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x48")]
|
|
[Token(Token = "0x40062CC")]
|
|
private int emBits;
|
|
|
|
// Token: 0x040062CD RID: 25293
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x50")]
|
|
[Token(Token = "0x40062CD")]
|
|
private byte[] salt;
|
|
|
|
// Token: 0x040062CE RID: 25294
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x58")]
|
|
[Token(Token = "0x40062CE")]
|
|
private byte[] mDash;
|
|
|
|
// Token: 0x040062CF RID: 25295
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x60")]
|
|
[Token(Token = "0x40062CF")]
|
|
private byte[] block;
|
|
|
|
// Token: 0x040062D0 RID: 25296
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x68")]
|
|
[Token(Token = "0x40062D0")]
|
|
private byte trailer;
|
|
}
|
|
}
|