using System; using System.Security.Cryptography.X509Certificates; using System.Text; using Mono.Security; using Mono.Security.Cryptography; namespace System.Security.Cryptography { /// Represents Abstract Syntax Notation One (ASN.1)-encoded data. // Token: 0x020002A4 RID: 676 public class AsnEncodedData { /// Initializes a new instance of the class. // Token: 0x060018A5 RID: 6309 RVA: 0x00054630 File Offset: 0x00052830 protected AsnEncodedData() { } /// Initializes a new instance of the class using a byte array. /// A string that represents information. /// A byte array that contains Abstract Syntax Notation One (ASN.1)-encoded data. // Token: 0x060018A6 RID: 6310 RVA: 0x00054638 File Offset: 0x00052838 public AsnEncodedData(string oid, byte[] rawData) { this._oid = new Oid(oid); this.RawData = rawData; } /// Initializes a new instance of the class using an object and a byte array. /// An object. /// A byte array that contains Abstract Syntax Notation One (ASN.1)-encoded data. // Token: 0x060018A7 RID: 6311 RVA: 0x00054654 File Offset: 0x00052854 public AsnEncodedData(Oid oid, byte[] rawData) { this.Oid = oid; this.RawData = rawData; } /// Initializes a new instance of the class using an instance of the class. /// An instance of the class. /// /// is null. // Token: 0x060018A8 RID: 6312 RVA: 0x0005466C File Offset: 0x0005286C public AsnEncodedData(AsnEncodedData asnEncodedData) { if (asnEncodedData == null) { throw new ArgumentNullException("asnEncodedData"); } if (asnEncodedData._oid != null) { this.Oid = new Oid(asnEncodedData._oid); } this.RawData = asnEncodedData._raw; } /// Initializes a new instance of the class using a byte array. /// A byte array that contains Abstract Syntax Notation One (ASN.1)-encoded data. // Token: 0x060018A9 RID: 6313 RVA: 0x000546B8 File Offset: 0x000528B8 public AsnEncodedData(byte[] rawData) { this.RawData = rawData; } /// Gets or sets the value for an object. /// An object. // Token: 0x170007BB RID: 1979 // (get) Token: 0x060018AA RID: 6314 RVA: 0x000546C8 File Offset: 0x000528C8 // (set) Token: 0x060018AB RID: 6315 RVA: 0x000546D0 File Offset: 0x000528D0 public Oid Oid { get { return this._oid; } set { if (value == null) { this._oid = null; } else { this._oid = new Oid(value); } } } /// Gets or sets the Abstract Syntax Notation One (ASN.1)-encoded data represented in a byte array. /// A byte array that represents the Abstract Syntax Notation One (ASN.1)-encoded data. /// The value is null. // Token: 0x170007BC RID: 1980 // (get) Token: 0x060018AC RID: 6316 RVA: 0x000546F0 File Offset: 0x000528F0 // (set) Token: 0x060018AD RID: 6317 RVA: 0x000546F8 File Offset: 0x000528F8 public byte[] RawData { get { return this._raw; } set { if (value == null) { throw new ArgumentNullException("RawData"); } this._raw = (byte[])value.Clone(); } } /// Copies information from an object. /// The object to base the new object on. /// /// is null. // Token: 0x060018AE RID: 6318 RVA: 0x00054728 File Offset: 0x00052928 public virtual void CopyFrom(AsnEncodedData asnEncodedData) { if (asnEncodedData == null) { throw new ArgumentNullException("asnEncodedData"); } if (asnEncodedData._oid == null) { this.Oid = null; } else { this.Oid = new Oid(asnEncodedData._oid); } this.RawData = asnEncodedData._raw; } /// Returns a formatted version of the Abstract Syntax Notation One (ASN.1)-encoded data as a string. /// A formatted string that represents the Abstract Syntax Notation One (ASN.1)-encoded data. /// true if the return string should contain carriage returns; otherwise, false. // Token: 0x060018AF RID: 6319 RVA: 0x0005477C File Offset: 0x0005297C public virtual string Format(bool multiLine) { if (this._raw == null) { return string.Empty; } if (this._oid == null) { return this.Default(multiLine); } return this.ToString(multiLine); } // Token: 0x060018B0 RID: 6320 RVA: 0x000547AC File Offset: 0x000529AC internal virtual string ToString(bool multiLine) { string value = this._oid.Value; switch (value) { case "2.5.29.19": return this.BasicConstraintsExtension(multiLine); case "2.5.29.37": return this.EnhancedKeyUsageExtension(multiLine); case "2.5.29.15": return this.KeyUsageExtension(multiLine); case "2.5.29.14": return this.SubjectKeyIdentifierExtension(multiLine); case "2.5.29.17": return this.SubjectAltName(multiLine); case "2.16.840.1.113730.1.1": return this.NetscapeCertType(multiLine); } return this.Default(multiLine); } // Token: 0x060018B1 RID: 6321 RVA: 0x00054898 File Offset: 0x00052A98 internal string Default(bool multiLine) { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < this._raw.Length; i++) { stringBuilder.Append(this._raw[i].ToString("x2")); if (i != this._raw.Length - 1) { stringBuilder.Append(" "); } } return stringBuilder.ToString(); } // Token: 0x060018B2 RID: 6322 RVA: 0x00054904 File Offset: 0x00052B04 internal string BasicConstraintsExtension(bool multiLine) { string text; try { global::System.Security.Cryptography.X509Certificates.X509BasicConstraintsExtension x509BasicConstraintsExtension = new global::System.Security.Cryptography.X509Certificates.X509BasicConstraintsExtension(this, false); text = x509BasicConstraintsExtension.ToString(multiLine); } catch { text = string.Empty; } return text; } // Token: 0x060018B3 RID: 6323 RVA: 0x0005495C File Offset: 0x00052B5C internal string EnhancedKeyUsageExtension(bool multiLine) { string text; try { global::System.Security.Cryptography.X509Certificates.X509EnhancedKeyUsageExtension x509EnhancedKeyUsageExtension = new global::System.Security.Cryptography.X509Certificates.X509EnhancedKeyUsageExtension(this, false); text = x509EnhancedKeyUsageExtension.ToString(multiLine); } catch { text = string.Empty; } return text; } // Token: 0x060018B4 RID: 6324 RVA: 0x000549B4 File Offset: 0x00052BB4 internal string KeyUsageExtension(bool multiLine) { string text; try { global::System.Security.Cryptography.X509Certificates.X509KeyUsageExtension x509KeyUsageExtension = new global::System.Security.Cryptography.X509Certificates.X509KeyUsageExtension(this, false); text = x509KeyUsageExtension.ToString(multiLine); } catch { text = string.Empty; } return text; } // Token: 0x060018B5 RID: 6325 RVA: 0x00054A0C File Offset: 0x00052C0C internal string SubjectKeyIdentifierExtension(bool multiLine) { string text; try { global::System.Security.Cryptography.X509Certificates.X509SubjectKeyIdentifierExtension x509SubjectKeyIdentifierExtension = new global::System.Security.Cryptography.X509Certificates.X509SubjectKeyIdentifierExtension(this, false); text = x509SubjectKeyIdentifierExtension.ToString(multiLine); } catch { text = string.Empty; } return text; } // Token: 0x060018B6 RID: 6326 RVA: 0x00054A64 File Offset: 0x00052C64 internal string SubjectAltName(bool multiLine) { if (this._raw.Length < 5) { return "Information Not Available"; } string text3; try { ASN1 asn = new ASN1(this._raw); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < asn.Count; i++) { ASN1 asn2 = asn[i]; byte tag = asn2.Tag; string text; string text2; if (tag != 129) { if (tag != 130) { text = string.Format("Unknown ({0})=", asn2.Tag); text2 = CryptoConvert.ToHex(asn2.Value); } else { text = "DNS Name="; text2 = Encoding.ASCII.GetString(asn2.Value); } } else { text = "RFC822 Name="; text2 = Encoding.ASCII.GetString(asn2.Value); } stringBuilder.Append(text); stringBuilder.Append(text2); if (multiLine) { stringBuilder.Append(Environment.NewLine); } else if (i < asn.Count - 1) { stringBuilder.Append(", "); } } text3 = stringBuilder.ToString(); } catch { text3 = string.Empty; } return text3; } // Token: 0x060018B7 RID: 6327 RVA: 0x00054BCC File Offset: 0x00052DCC internal string NetscapeCertType(bool multiLine) { if (this._raw.Length < 4 || this._raw[0] != 3 || this._raw[1] != 2) { return "Information Not Available"; } int num = this._raw[3] >> (int)this._raw[2] << (int)this._raw[2]; StringBuilder stringBuilder = new StringBuilder(); if ((num & 128) == 128) { stringBuilder.Append("SSL Client Authentication"); } if ((num & 64) == 64) { if (stringBuilder.Length > 0) { stringBuilder.Append(", "); } stringBuilder.Append("SSL Server Authentication"); } if ((num & 32) == 32) { if (stringBuilder.Length > 0) { stringBuilder.Append(", "); } stringBuilder.Append("SMIME"); } if ((num & 16) == 16) { if (stringBuilder.Length > 0) { stringBuilder.Append(", "); } stringBuilder.Append("Signature"); } if ((num & 8) == 8) { if (stringBuilder.Length > 0) { stringBuilder.Append(", "); } stringBuilder.Append("Unknown cert type"); } if ((num & 4) == 4) { if (stringBuilder.Length > 0) { stringBuilder.Append(", "); } stringBuilder.Append("SSL CA"); } if ((num & 2) == 2) { if (stringBuilder.Length > 0) { stringBuilder.Append(", "); } stringBuilder.Append("SMIME CA"); } if ((num & 1) == 1) { if (stringBuilder.Length > 0) { stringBuilder.Append(", "); } stringBuilder.Append("Signature CA"); } stringBuilder.AppendFormat(" ({0})", num.ToString("x2")); return stringBuilder.ToString(); } // Token: 0x0400139F RID: 5023 internal Oid _oid; // Token: 0x040013A0 RID: 5024 internal byte[] _raw; } }