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; } }