439 lines
13 KiB
C#
439 lines
13 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto;
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Math;
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.X509.Store;
|
|
using Cpp2IlInjected;
|
|
|
|
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.X509
|
|
{
|
|
// Token: 0x0200131B RID: 4891
|
|
[Token(Token = "0x200131B")]
|
|
[StructLayout(3)]
|
|
public class AttributeCertificateHolder : IX509Selector, ICloneable
|
|
{
|
|
// Token: 0x06007A80 RID: 31360 RVA: 0x00197398 File Offset: 0x00195598
|
|
[Token(Token = "0x6007A80")]
|
|
[Address(RVA = "0x2024AE0", Offset = "0x20234E0", VA = "0x182024AE0")]
|
|
internal AttributeCertificateHolder(Asn1Sequence seq)
|
|
{
|
|
Holder instance = Holder.GetInstance(seq);
|
|
this.holder = instance;
|
|
}
|
|
|
|
// Token: 0x06007A81 RID: 31361 RVA: 0x001973BC File Offset: 0x001955BC
|
|
[Token(Token = "0x6007A81")]
|
|
[Address(RVA = "0x2024B10", Offset = "0x2023510", VA = "0x182024B10")]
|
|
public AttributeCertificateHolder(X509Name issuerName, BigInteger serialNumber)
|
|
{
|
|
GeneralNames generalNames = this.GenerateGeneralNames(issuerName);
|
|
DerInteger derInteger = new DerInteger(serialNumber);
|
|
Holder holder = new Holder(new IssuerSerial(generalNames, derInteger));
|
|
this.holder = holder;
|
|
}
|
|
|
|
// Token: 0x06007A82 RID: 31362 RVA: 0x001973F4 File Offset: 0x001955F4
|
|
[Token(Token = "0x6007A82")]
|
|
[Address(RVA = "0x2024980", Offset = "0x2023380", VA = "0x182024980")]
|
|
public AttributeCertificateHolder(X509Certificate cert)
|
|
{
|
|
X509Name issuerX509Principal = PrincipalUtilities.GetIssuerX509Principal(cert);
|
|
GeneralNames generalNames = this.GenerateGeneralNames(issuerX509Principal);
|
|
int version = cert.Version;
|
|
DerInteger derInteger;
|
|
Holder holder = new Holder(new IssuerSerial(generalNames, derInteger));
|
|
this.holder = holder;
|
|
}
|
|
|
|
// Token: 0x06007A83 RID: 31363 RVA: 0x0019743C File Offset: 0x0019563C
|
|
[Token(Token = "0x6007A83")]
|
|
[Address(RVA = "0x2024900", Offset = "0x2023300", VA = "0x182024900")]
|
|
public AttributeCertificateHolder(X509Name principal)
|
|
{
|
|
Holder holder = new Holder(this.GenerateGeneralNames(principal));
|
|
this.holder = holder;
|
|
}
|
|
|
|
// Token: 0x06007A84 RID: 31364 RVA: 0x00197464 File Offset: 0x00195664
|
|
[Token(Token = "0x6007A84")]
|
|
[Address(RVA = "0x2024BE0", Offset = "0x20235E0", VA = "0x182024BE0")]
|
|
public AttributeCertificateHolder(int digestedObjectType, string digestAlgorithm, string otherObjectTypeID, byte[] objectDigest)
|
|
{
|
|
int num = 0;
|
|
base.FieldGetter(num, digestAlgorithm, otherObjectTypeID);
|
|
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(new DerObjectIdentifier(digestAlgorithm));
|
|
byte[] array;
|
|
Holder holder = new Holder(new ObjectDigestInfo(digestedObjectType, otherObjectTypeID, algorithmIdentifier, array));
|
|
this.holder = holder;
|
|
}
|
|
|
|
// Token: 0x170013F4 RID: 5108
|
|
// (get) Token: 0x06007A85 RID: 31365 RVA: 0x001974A0 File Offset: 0x001956A0
|
|
[Token(Token = "0x170013F4")]
|
|
public int DigestedObjectType
|
|
{
|
|
[Token(Token = "0x6007A85")]
|
|
[Address(RVA = "0x2024D50", Offset = "0x2023750", VA = "0x182024D50")]
|
|
get
|
|
{
|
|
ObjectDigestInfo objectDigestInfo = this.holder.objectDigestInfo;
|
|
if (objectDigestInfo == 0)
|
|
{
|
|
return -1;
|
|
}
|
|
return objectDigestInfo.digestedObjectType.Value.IntValue;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170013F5 RID: 5109
|
|
// (get) Token: 0x06007A86 RID: 31366 RVA: 0x001974D8 File Offset: 0x001956D8
|
|
[Token(Token = "0x170013F5")]
|
|
public string DigestAlgorithm
|
|
{
|
|
[Token(Token = "0x6007A86")]
|
|
[Address(RVA = "0x2024D00", Offset = "0x2023700", VA = "0x182024D00")]
|
|
get
|
|
{
|
|
ObjectDigestInfo objectDigestInfo = this.holder.objectDigestInfo;
|
|
if (objectDigestInfo == 0)
|
|
{
|
|
}
|
|
Asn1Object asn1Object = objectDigestInfo.digestAlgorithm.ToAsn1Object();
|
|
throw new NullReferenceException();
|
|
}
|
|
}
|
|
|
|
// Token: 0x06007A87 RID: 31367 RVA: 0x00197508 File Offset: 0x00195708
|
|
[Token(Token = "0x6007A87")]
|
|
[Address(RVA = "0x2023F20", Offset = "0x2022920", VA = "0x182023F20")]
|
|
public byte[] GetObjectDigest()
|
|
{
|
|
ObjectDigestInfo objectDigestInfo = this.holder.objectDigestInfo;
|
|
if (objectDigestInfo == 0)
|
|
{
|
|
}
|
|
Asn1Object asn1Object = objectDigestInfo.objectDigest.ToAsn1Object();
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x170013F6 RID: 5110
|
|
// (get) Token: 0x06007A88 RID: 31368 RVA: 0x00197538 File Offset: 0x00195738
|
|
[Token(Token = "0x170013F6")]
|
|
public string OtherObjectTypeID
|
|
{
|
|
[Token(Token = "0x6007A88")]
|
|
[Address(RVA = "0x2024DA0", Offset = "0x20237A0", VA = "0x182024DA0")]
|
|
get
|
|
{
|
|
ObjectDigestInfo objectDigestInfo = this.holder.objectDigestInfo;
|
|
if (objectDigestInfo == 0)
|
|
{
|
|
}
|
|
return objectDigestInfo.otherObjectTypeID.identifier;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06007A89 RID: 31369 RVA: 0x00197568 File Offset: 0x00195768
|
|
[Token(Token = "0x6007A89")]
|
|
[Address(RVA = "0x2023CA0", Offset = "0x20226A0", VA = "0x182023CA0")]
|
|
private GeneralNames GenerateGeneralNames(X509Name principal)
|
|
{
|
|
return new GeneralNames(new GeneralName(principal));
|
|
}
|
|
|
|
// Token: 0x06007A8A RID: 31370 RVA: 0x00197580 File Offset: 0x00195780
|
|
[Token(Token = "0x6007A8A")]
|
|
[Address(RVA = "0x20247B0", Offset = "0x20231B0", VA = "0x1820247B0")]
|
|
private bool MatchesDN(X509Name subject, GeneralNames targets)
|
|
{
|
|
GeneralName[] names = targets.GetNames();
|
|
int num = 0;
|
|
int length = names.Length;
|
|
if (num != length)
|
|
{
|
|
GeneralName generalName = names[num];
|
|
if (generalName.tag == 4)
|
|
{
|
|
if (!X509Name.GetInstance(generalName.obj).Equivalent(subject))
|
|
{
|
|
}
|
|
return true;
|
|
}
|
|
num++;
|
|
}
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x06007A8B RID: 31371 RVA: 0x001975D4 File Offset: 0x001957D4
|
|
[Token(Token = "0x6007A8B")]
|
|
[Address(RVA = "0x2023D90", Offset = "0x2022790", VA = "0x182023D90")]
|
|
private object[] GetNames(GeneralName[] names)
|
|
{
|
|
int num = 0;
|
|
int length = names.Length;
|
|
if (num != length)
|
|
{
|
|
GeneralName generalName = names[num];
|
|
num++;
|
|
}
|
|
object[] array = new object[num];
|
|
int length2 = names.Length;
|
|
if (num != length2)
|
|
{
|
|
GeneralName generalName2 = names[num];
|
|
if (generalName2.tag == 4)
|
|
{
|
|
num++;
|
|
X509Name instance = X509Name.GetInstance(generalName2.obj);
|
|
throw new ArrayTypeMismatchException();
|
|
}
|
|
num++;
|
|
}
|
|
return array;
|
|
}
|
|
|
|
// Token: 0x06007A8C RID: 31372 RVA: 0x00197650 File Offset: 0x00195850
|
|
[Token(Token = "0x6007A8C")]
|
|
[Address(RVA = "0x2023F60", Offset = "0x2022960", VA = "0x182023F60")]
|
|
private X509Name[] GetPrincipals(GeneralNames names)
|
|
{
|
|
GeneralName[] names2 = names.GetNames();
|
|
int num = 0;
|
|
int num2 = 0;
|
|
int num3 = 0;
|
|
int length = names2.Length;
|
|
if (num3 != length)
|
|
{
|
|
GeneralName generalName = names2[num2];
|
|
num2++;
|
|
}
|
|
object[] array = new object[num];
|
|
int num4 = 0;
|
|
int num5 = 0;
|
|
int num6 = 0;
|
|
int length2 = names2.Length;
|
|
if (num6 != length2)
|
|
{
|
|
GeneralName generalName2 = names2[num5];
|
|
if (generalName2.tag == 4)
|
|
{
|
|
num4++;
|
|
X509Name instance = X509Name.GetInstance(generalName2.obj);
|
|
throw new ArrayTypeMismatchException();
|
|
}
|
|
num5++;
|
|
}
|
|
int num7 = 0;
|
|
int num8 = 0;
|
|
int num9 = 0;
|
|
int length3 = array.Length;
|
|
if (num9 != length3)
|
|
{
|
|
if (array[num8] == 0)
|
|
{
|
|
}
|
|
num8++;
|
|
}
|
|
X509Name[] array2 = new X509Name[num7];
|
|
int num10 = 0;
|
|
int num11 = 0;
|
|
int num12 = 0;
|
|
int length4 = array.Length;
|
|
if (num12 != length4)
|
|
{
|
|
object obj = array[num11];
|
|
if (obj != 0 && obj != 0)
|
|
{
|
|
num10++;
|
|
throw new ArrayTypeMismatchException();
|
|
}
|
|
num11++;
|
|
}
|
|
return array2;
|
|
}
|
|
|
|
// Token: 0x06007A8D RID: 31373 RVA: 0x00197774 File Offset: 0x00195974
|
|
[Token(Token = "0x6007A8D")]
|
|
[Address(RVA = "0x2023D10", Offset = "0x2022710", VA = "0x182023D10")]
|
|
public X509Name[] GetEntityNames()
|
|
{
|
|
GeneralNames entityName = this.holder.entityName;
|
|
if (entityName == 0)
|
|
{
|
|
}
|
|
return this.GetPrincipals(entityName);
|
|
}
|
|
|
|
// Token: 0x06007A8E RID: 31374 RVA: 0x001977A0 File Offset: 0x001959A0
|
|
[Token(Token = "0x6007A8E")]
|
|
[Address(RVA = "0x2023D50", Offset = "0x2022750", VA = "0x182023D50")]
|
|
public X509Name[] GetIssuer()
|
|
{
|
|
IssuerSerial baseCertificateID = this.holder.baseCertificateID;
|
|
if (baseCertificateID == 0)
|
|
{
|
|
}
|
|
GeneralNames issuer = baseCertificateID.issuer;
|
|
return this.GetPrincipals(issuer);
|
|
}
|
|
|
|
// Token: 0x170013F7 RID: 5111
|
|
// (get) Token: 0x06007A8F RID: 31375 RVA: 0x001977D4 File Offset: 0x001959D4
|
|
[Token(Token = "0x170013F7")]
|
|
public BigInteger SerialNumber
|
|
{
|
|
[Token(Token = "0x6007A8F")]
|
|
[Address(RVA = "0x2024DE0", Offset = "0x20237E0", VA = "0x182024DE0")]
|
|
get
|
|
{
|
|
IssuerSerial baseCertificateID = this.holder.baseCertificateID;
|
|
if (baseCertificateID == 0)
|
|
{
|
|
}
|
|
return baseCertificateID.serial.Value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06007A90 RID: 31376 RVA: 0x00197804 File Offset: 0x00195A04
|
|
[Token(Token = "0x6007A90")]
|
|
[Address(RVA = "0x2023AB0", Offset = "0x20224B0", VA = "0x182023AB0", Slot = "5")]
|
|
public object Clone()
|
|
{
|
|
Asn1Object asn1Object;
|
|
do
|
|
{
|
|
asn1Object = this.holder.ToAsn1Object();
|
|
if (asn1Object == 0)
|
|
{
|
|
}
|
|
}
|
|
while (asn1Object == 0);
|
|
Holder instance = Holder.GetInstance(asn1Object);
|
|
AttributeCertificateHolder attributeCertificateHolder;
|
|
attributeCertificateHolder.holder = instance;
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x06007A91 RID: 31377 RVA: 0x0019783C File Offset: 0x00195A3C
|
|
[Token(Token = "0x6007A91")]
|
|
[Address(RVA = "0x20242C0", Offset = "0x2022CC0", VA = "0x1820242C0")]
|
|
public bool Match(X509Certificate x509Cert)
|
|
{
|
|
Holder holder = this.holder;
|
|
IssuerSerial baseCertificateID = holder.baseCertificateID;
|
|
if (baseCertificateID == 0)
|
|
{
|
|
if (holder.entityName != baseCertificateID)
|
|
{
|
|
X509Name subjectX509Principal = PrincipalUtilities.GetSubjectX509Principal(x509Cert);
|
|
GeneralNames entityName = this.holder.entityName;
|
|
if (this.MatchesDN(subjectX509Principal, entityName))
|
|
{
|
|
}
|
|
}
|
|
if (this.holder.objectDigestInfo != (ulong)0L)
|
|
{
|
|
ObjectDigestInfo objectDigestInfo = this.holder.objectDigestInfo;
|
|
if (objectDigestInfo == 0)
|
|
{
|
|
}
|
|
Asn1Object asn1Object = objectDigestInfo.digestAlgorithm.ToAsn1Object();
|
|
ObjectDigestInfo objectDigestInfo2 = this.holder.objectDigestInfo;
|
|
if (objectDigestInfo2 == 0)
|
|
{
|
|
goto IL_A6;
|
|
}
|
|
if (objectDigestInfo2.digestedObjectType.Value.IntValue == 0)
|
|
{
|
|
SubjectPublicKeyInfo subjectPublicKeyInfo;
|
|
int length = subjectPublicKeyInfo.GetEncoded().Length;
|
|
goto IL_A6;
|
|
}
|
|
IL_DF:
|
|
bool flag;
|
|
while (!flag)
|
|
{
|
|
}
|
|
goto IL_E4;
|
|
IL_A6:
|
|
IDigest digest;
|
|
byte[] array = DigestUtilities.DoFinal(digest);
|
|
ObjectDigestInfo objectDigestInfo3 = this.holder.objectDigestInfo;
|
|
byte[] octets;
|
|
if (objectDigestInfo3 != 0)
|
|
{
|
|
octets = objectDigestInfo3.objectDigest.GetOctets();
|
|
}
|
|
flag = Arrays.AreEqual(array, octets);
|
|
if (!flag)
|
|
{
|
|
goto IL_DF;
|
|
}
|
|
}
|
|
}
|
|
IL_E4:
|
|
BigInteger value = baseCertificateID.serial.Value;
|
|
if (x509Cert.Version != 0)
|
|
{
|
|
X509Name issuerX509Principal = PrincipalUtilities.GetIssuerX509Principal(x509Cert);
|
|
GeneralNames issuer = this.holder.baseCertificateID.issuer;
|
|
bool flag2 = this.MatchesDN(issuerX509Principal, issuer);
|
|
}
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x06007A92 RID: 31378 RVA: 0x00197A04 File Offset: 0x00195C04
|
|
[Token(Token = "0x6007A92")]
|
|
[Address(RVA = "0x2023B90", Offset = "0x2022590", VA = "0x182023B90", Slot = "0")]
|
|
public override bool Equals(object obj)
|
|
{
|
|
while (obj != this)
|
|
{
|
|
if (obj != 0 && obj != 0)
|
|
{
|
|
if (obj == 0)
|
|
{
|
|
continue;
|
|
}
|
|
Asn1Object asn1Object = this.holder.ToAsn1Object();
|
|
}
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// Token: 0x06007A93 RID: 31379 RVA: 0x00197A3C File Offset: 0x00195C3C
|
|
[Token(Token = "0x6007A93")]
|
|
[Address(RVA = "0x528AC0", Offset = "0x5274C0", VA = "0x180528AC0", Slot = "2")]
|
|
public override int GetHashCode()
|
|
{
|
|
Asn1Object asn1Object = this.holder.ToAsn1Object();
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x06007A94 RID: 31380 RVA: 0x00197A5C File Offset: 0x00195C5C
|
|
[Token(Token = "0x6007A94")]
|
|
[Address(RVA = "0x20246D0", Offset = "0x20230D0", VA = "0x1820246D0", Slot = "4")]
|
|
public bool Match(object obj)
|
|
{
|
|
while (obj != 0 && obj != 0)
|
|
{
|
|
if (obj != 0)
|
|
{
|
|
bool flag;
|
|
return flag;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x04005833 RID: 22579
|
|
[global::Cpp2IlInjected.FieldOffset(Offset = "0x10")]
|
|
[Token(Token = "0x4005833")]
|
|
internal readonly Holder holder;
|
|
}
|
|
}
|