437 lines
13 KiB
C#
437 lines
13 KiB
C#
using System;
|
|
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: 0x020018F8 RID: 6392
|
|
[Token(Token = "0x20018F8")]
|
|
public class AttributeCertificateHolder : IX509Selector, ICloneable
|
|
{
|
|
// Token: 0x0600965A RID: 38490 RVA: 0x001EED74 File Offset: 0x001ECF74
|
|
[Token(Token = "0x600965A")]
|
|
[Address(RVA = "0x1622F60", Offset = "0x1621D60", VA = "0x181622F60")]
|
|
internal AttributeCertificateHolder(Asn1Sequence seq)
|
|
{
|
|
Holder instance = Holder.GetInstance(seq);
|
|
this.holder = instance;
|
|
}
|
|
|
|
// Token: 0x0600965B RID: 38491 RVA: 0x001EED98 File Offset: 0x001ECF98
|
|
[Token(Token = "0x600965B")]
|
|
[Address(RVA = "0x1622F90", Offset = "0x1621D90", VA = "0x181622F90")]
|
|
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: 0x0600965C RID: 38492 RVA: 0x001EEDD0 File Offset: 0x001ECFD0
|
|
[Token(Token = "0x600965C")]
|
|
[Address(RVA = "0x1622E00", Offset = "0x1621C00", VA = "0x181622E00")]
|
|
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: 0x0600965D RID: 38493 RVA: 0x001EEE18 File Offset: 0x001ED018
|
|
[Token(Token = "0x600965D")]
|
|
[Address(RVA = "0x1622D80", Offset = "0x1621B80", VA = "0x181622D80")]
|
|
public AttributeCertificateHolder(X509Name principal)
|
|
{
|
|
Holder holder = new Holder(this.GenerateGeneralNames(principal));
|
|
this.holder = holder;
|
|
}
|
|
|
|
// Token: 0x0600965E RID: 38494 RVA: 0x001EEE40 File Offset: 0x001ED040
|
|
[Token(Token = "0x600965E")]
|
|
[Address(RVA = "0x1623060", Offset = "0x1621E60", VA = "0x181623060")]
|
|
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: 0x170017F5 RID: 6133
|
|
// (get) Token: 0x0600965F RID: 38495 RVA: 0x001EEE7C File Offset: 0x001ED07C
|
|
[Token(Token = "0x170017F5")]
|
|
public int DigestedObjectType
|
|
{
|
|
[Token(Token = "0x600965F")]
|
|
[Address(RVA = "0x16231D0", Offset = "0x1621FD0", VA = "0x1816231D0")]
|
|
get
|
|
{
|
|
ObjectDigestInfo objectDigestInfo = this.holder.objectDigestInfo;
|
|
if (objectDigestInfo == 0)
|
|
{
|
|
return -1;
|
|
}
|
|
return objectDigestInfo.digestedObjectType.Value.IntValue;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170017F6 RID: 6134
|
|
// (get) Token: 0x06009660 RID: 38496 RVA: 0x001EEEB4 File Offset: 0x001ED0B4
|
|
[Token(Token = "0x170017F6")]
|
|
public string DigestAlgorithm
|
|
{
|
|
[Token(Token = "0x6009660")]
|
|
[Address(RVA = "0x1623180", Offset = "0x1621F80", VA = "0x181623180")]
|
|
get
|
|
{
|
|
ObjectDigestInfo objectDigestInfo = this.holder.objectDigestInfo;
|
|
if (objectDigestInfo == 0)
|
|
{
|
|
}
|
|
Asn1Object asn1Object = objectDigestInfo.digestAlgorithm.ToAsn1Object();
|
|
throw new NullReferenceException();
|
|
}
|
|
}
|
|
|
|
// Token: 0x06009661 RID: 38497 RVA: 0x001EEEE4 File Offset: 0x001ED0E4
|
|
[Token(Token = "0x6009661")]
|
|
[Address(RVA = "0x16223A0", Offset = "0x16211A0", VA = "0x1816223A0")]
|
|
public byte[] GetObjectDigest()
|
|
{
|
|
ObjectDigestInfo objectDigestInfo = this.holder.objectDigestInfo;
|
|
if (objectDigestInfo == 0)
|
|
{
|
|
}
|
|
Asn1Object asn1Object = objectDigestInfo.objectDigest.ToAsn1Object();
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x170017F7 RID: 6135
|
|
// (get) Token: 0x06009662 RID: 38498 RVA: 0x001EEF14 File Offset: 0x001ED114
|
|
[Token(Token = "0x170017F7")]
|
|
public string OtherObjectTypeID
|
|
{
|
|
[Token(Token = "0x6009662")]
|
|
[Address(RVA = "0x1623220", Offset = "0x1622020", VA = "0x181623220")]
|
|
get
|
|
{
|
|
ObjectDigestInfo objectDigestInfo = this.holder.objectDigestInfo;
|
|
if (objectDigestInfo == 0)
|
|
{
|
|
}
|
|
return objectDigestInfo.otherObjectTypeID.identifier;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06009663 RID: 38499 RVA: 0x001EEF44 File Offset: 0x001ED144
|
|
[Token(Token = "0x6009663")]
|
|
[Address(RVA = "0x1622120", Offset = "0x1620F20", VA = "0x181622120")]
|
|
private GeneralNames GenerateGeneralNames(X509Name principal)
|
|
{
|
|
return new GeneralNames(new GeneralName(principal));
|
|
}
|
|
|
|
// Token: 0x06009664 RID: 38500 RVA: 0x001EEF5C File Offset: 0x001ED15C
|
|
[Token(Token = "0x6009664")]
|
|
[Address(RVA = "0x1622C30", Offset = "0x1621A30", VA = "0x181622C30")]
|
|
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: 0x06009665 RID: 38501 RVA: 0x001EEFB0 File Offset: 0x001ED1B0
|
|
[Token(Token = "0x6009665")]
|
|
[Address(RVA = "0x1622210", Offset = "0x1621010", VA = "0x181622210")]
|
|
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: 0x06009666 RID: 38502 RVA: 0x001EF02C File Offset: 0x001ED22C
|
|
[Token(Token = "0x6009666")]
|
|
[Address(RVA = "0x16223E0", Offset = "0x16211E0", VA = "0x1816223E0")]
|
|
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: 0x06009667 RID: 38503 RVA: 0x001EF150 File Offset: 0x001ED350
|
|
[Token(Token = "0x6009667")]
|
|
[Address(RVA = "0x1622190", Offset = "0x1620F90", VA = "0x181622190")]
|
|
public X509Name[] GetEntityNames()
|
|
{
|
|
GeneralNames entityName = this.holder.entityName;
|
|
if (entityName == 0)
|
|
{
|
|
}
|
|
return this.GetPrincipals(entityName);
|
|
}
|
|
|
|
// Token: 0x06009668 RID: 38504 RVA: 0x001EF17C File Offset: 0x001ED37C
|
|
[Token(Token = "0x6009668")]
|
|
[Address(RVA = "0x16221D0", Offset = "0x1620FD0", VA = "0x1816221D0")]
|
|
public X509Name[] GetIssuer()
|
|
{
|
|
IssuerSerial baseCertificateID = this.holder.baseCertificateID;
|
|
if (baseCertificateID == 0)
|
|
{
|
|
}
|
|
GeneralNames issuer = baseCertificateID.issuer;
|
|
return this.GetPrincipals(issuer);
|
|
}
|
|
|
|
// Token: 0x170017F8 RID: 6136
|
|
// (get) Token: 0x06009669 RID: 38505 RVA: 0x001EF1B0 File Offset: 0x001ED3B0
|
|
[Token(Token = "0x170017F8")]
|
|
public BigInteger SerialNumber
|
|
{
|
|
[Token(Token = "0x6009669")]
|
|
[Address(RVA = "0x1623260", Offset = "0x1622060", VA = "0x181623260")]
|
|
get
|
|
{
|
|
IssuerSerial baseCertificateID = this.holder.baseCertificateID;
|
|
if (baseCertificateID == 0)
|
|
{
|
|
}
|
|
return baseCertificateID.serial.Value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600966A RID: 38506 RVA: 0x001EF1E0 File Offset: 0x001ED3E0
|
|
[Token(Token = "0x600966A")]
|
|
[Address(RVA = "0x1621F30", Offset = "0x1620D30", VA = "0x181621F30", 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: 0x0600966B RID: 38507 RVA: 0x001EF218 File Offset: 0x001ED418
|
|
[Token(Token = "0x600966B")]
|
|
[Address(RVA = "0x1622740", Offset = "0x1621540", VA = "0x181622740")]
|
|
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: 0x0600966C RID: 38508 RVA: 0x001EF3E0 File Offset: 0x001ED5E0
|
|
[Token(Token = "0x600966C")]
|
|
[Address(RVA = "0x1622010", Offset = "0x1620E10", VA = "0x181622010", 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: 0x0600966D RID: 38509 RVA: 0x001EF418 File Offset: 0x001ED618
|
|
[Token(Token = "0x600966D")]
|
|
[Address(RVA = "0x4DA700", Offset = "0x4D9500", VA = "0x1804DA700", Slot = "2")]
|
|
public override int GetHashCode()
|
|
{
|
|
Asn1Object asn1Object = this.holder.ToAsn1Object();
|
|
throw new NullReferenceException();
|
|
}
|
|
|
|
// Token: 0x0600966E RID: 38510 RVA: 0x001EF438 File Offset: 0x001ED638
|
|
[Token(Token = "0x600966E")]
|
|
[Address(RVA = "0x1622B50", Offset = "0x1621950", VA = "0x181622B50", Slot = "4")]
|
|
public bool Match(object obj)
|
|
{
|
|
while (obj != 0 && obj != 0)
|
|
{
|
|
if (obj != 0)
|
|
{
|
|
bool flag;
|
|
return flag;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x04006676 RID: 26230
|
|
[FieldOffset(Offset = "0x10")]
|
|
[Token(Token = "0x4006676")]
|
|
internal readonly Holder holder;
|
|
}
|
|
}
|