245 lines
5.4 KiB
C#
245 lines
5.4 KiB
C#
using System;
|
|
using System.Globalization;
|
|
using System.Text;
|
|
|
|
namespace Mono.Security.X509
|
|
{
|
|
// Token: 0x020000C1 RID: 193
|
|
internal class X509Extension
|
|
{
|
|
// Token: 0x06000A79 RID: 2681 RVA: 0x0002E9A0 File Offset: 0x0002CBA0
|
|
protected X509Extension()
|
|
{
|
|
this.extnCritical = false;
|
|
}
|
|
|
|
// Token: 0x06000A7A RID: 2682 RVA: 0x0002E9B0 File Offset: 0x0002CBB0
|
|
public X509Extension(ASN1 asn1)
|
|
{
|
|
if (asn1.Tag != 48 || asn1.Count < 2)
|
|
{
|
|
throw new ArgumentException(Locale.GetText("Invalid X.509 extension."));
|
|
}
|
|
if (asn1[0].Tag != 6)
|
|
{
|
|
throw new ArgumentException(Locale.GetText("Invalid X.509 extension."));
|
|
}
|
|
this.extnOid = ASN1Convert.ToOid(asn1[0]);
|
|
this.extnCritical = asn1[1].Tag == 1 && asn1[1].Value[0] == byte.MaxValue;
|
|
this.extnValue = asn1[asn1.Count - 1];
|
|
if (this.extnValue.Tag == 4 && this.extnValue.Length > 0 && this.extnValue.Count == 0)
|
|
{
|
|
try
|
|
{
|
|
ASN1 asn2 = new ASN1(this.extnValue.Value);
|
|
this.extnValue.Value = null;
|
|
this.extnValue.Add(asn2);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
this.Decode();
|
|
}
|
|
|
|
// Token: 0x06000A7B RID: 2683 RVA: 0x0002EAF0 File Offset: 0x0002CCF0
|
|
public X509Extension(X509Extension extension)
|
|
{
|
|
if (extension == null)
|
|
{
|
|
throw new ArgumentNullException("extension");
|
|
}
|
|
if (extension.Value == null || extension.Value.Tag != 4 || extension.Value.Count != 1)
|
|
{
|
|
throw new ArgumentException(Locale.GetText("Invalid X.509 extension."));
|
|
}
|
|
this.extnOid = extension.Oid;
|
|
this.extnCritical = extension.Critical;
|
|
this.extnValue = extension.Value;
|
|
this.Decode();
|
|
}
|
|
|
|
// Token: 0x06000A7C RID: 2684 RVA: 0x0002EB7C File Offset: 0x0002CD7C
|
|
protected virtual void Decode()
|
|
{
|
|
}
|
|
|
|
// Token: 0x06000A7D RID: 2685 RVA: 0x0002EB80 File Offset: 0x0002CD80
|
|
protected virtual void Encode()
|
|
{
|
|
}
|
|
|
|
// Token: 0x17000156 RID: 342
|
|
// (get) Token: 0x06000A7E RID: 2686 RVA: 0x0002EB84 File Offset: 0x0002CD84
|
|
public ASN1 ASN1
|
|
{
|
|
get
|
|
{
|
|
ASN1 asn = new ASN1(48);
|
|
asn.Add(ASN1Convert.FromOid(this.extnOid));
|
|
if (this.extnCritical)
|
|
{
|
|
asn.Add(new ASN1(1, new byte[] { byte.MaxValue }));
|
|
}
|
|
this.Encode();
|
|
asn.Add(this.extnValue);
|
|
return asn;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000157 RID: 343
|
|
// (get) Token: 0x06000A7F RID: 2687 RVA: 0x0002EBE8 File Offset: 0x0002CDE8
|
|
public string Oid
|
|
{
|
|
get
|
|
{
|
|
return this.extnOid;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000158 RID: 344
|
|
// (get) Token: 0x06000A80 RID: 2688 RVA: 0x0002EBF0 File Offset: 0x0002CDF0
|
|
// (set) Token: 0x06000A81 RID: 2689 RVA: 0x0002EBF8 File Offset: 0x0002CDF8
|
|
public bool Critical
|
|
{
|
|
get
|
|
{
|
|
return this.extnCritical;
|
|
}
|
|
set
|
|
{
|
|
this.extnCritical = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000159 RID: 345
|
|
// (get) Token: 0x06000A82 RID: 2690 RVA: 0x0002EC04 File Offset: 0x0002CE04
|
|
public virtual string Name
|
|
{
|
|
get
|
|
{
|
|
return this.extnOid;
|
|
}
|
|
}
|
|
|
|
// Token: 0x1700015A RID: 346
|
|
// (get) Token: 0x06000A83 RID: 2691 RVA: 0x0002EC0C File Offset: 0x0002CE0C
|
|
public ASN1 Value
|
|
{
|
|
get
|
|
{
|
|
if (this.extnValue == null)
|
|
{
|
|
this.Encode();
|
|
}
|
|
return this.extnValue;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000A84 RID: 2692 RVA: 0x0002EC28 File Offset: 0x0002CE28
|
|
public override bool Equals(object obj)
|
|
{
|
|
if (obj == null)
|
|
{
|
|
return false;
|
|
}
|
|
X509Extension x509Extension = obj as X509Extension;
|
|
if (x509Extension == null)
|
|
{
|
|
return false;
|
|
}
|
|
if (this.extnCritical != x509Extension.extnCritical)
|
|
{
|
|
return false;
|
|
}
|
|
if (this.extnOid != x509Extension.extnOid)
|
|
{
|
|
return false;
|
|
}
|
|
if (this.extnValue.Length != x509Extension.extnValue.Length)
|
|
{
|
|
return false;
|
|
}
|
|
for (int i = 0; i < this.extnValue.Length; i++)
|
|
{
|
|
if (this.extnValue[i] != x509Extension.extnValue[i])
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// Token: 0x06000A85 RID: 2693 RVA: 0x0002ECD0 File Offset: 0x0002CED0
|
|
public byte[] GetBytes()
|
|
{
|
|
return this.ASN1.GetBytes();
|
|
}
|
|
|
|
// Token: 0x06000A86 RID: 2694 RVA: 0x0002ECE0 File Offset: 0x0002CEE0
|
|
public override int GetHashCode()
|
|
{
|
|
return this.extnOid.GetHashCode();
|
|
}
|
|
|
|
// Token: 0x06000A87 RID: 2695 RVA: 0x0002ECF0 File Offset: 0x0002CEF0
|
|
private void WriteLine(StringBuilder sb, int n, int pos)
|
|
{
|
|
byte[] value = this.extnValue.Value;
|
|
int num = pos;
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
if (i < n)
|
|
{
|
|
sb.Append(value[num++].ToString("X2", CultureInfo.InvariantCulture));
|
|
sb.Append(" ");
|
|
}
|
|
else
|
|
{
|
|
sb.Append(" ");
|
|
}
|
|
}
|
|
sb.Append(" ");
|
|
num = pos;
|
|
for (int j = 0; j < n; j++)
|
|
{
|
|
byte b = value[num++];
|
|
if (b < 32)
|
|
{
|
|
sb.Append(".");
|
|
}
|
|
else
|
|
{
|
|
sb.Append(Convert.ToChar(b));
|
|
}
|
|
}
|
|
sb.Append(Environment.NewLine);
|
|
}
|
|
|
|
// Token: 0x06000A88 RID: 2696 RVA: 0x0002EDC0 File Offset: 0x0002CFC0
|
|
public override string ToString()
|
|
{
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
int num = this.extnValue.Length >> 3;
|
|
int num2 = this.extnValue.Length - (num << 3);
|
|
int num3 = 0;
|
|
for (int i = 0; i < num; i++)
|
|
{
|
|
this.WriteLine(stringBuilder, 8, num3);
|
|
num3 += 8;
|
|
}
|
|
this.WriteLine(stringBuilder, num2, num3);
|
|
return stringBuilder.ToString();
|
|
}
|
|
|
|
// Token: 0x040002BA RID: 698
|
|
protected string extnOid;
|
|
|
|
// Token: 0x040002BB RID: 699
|
|
protected bool extnCritical;
|
|
|
|
// Token: 0x040002BC RID: 700
|
|
protected ASN1 extnValue;
|
|
}
|
|
}
|