/// <summary> /// Encodes current object to a ASN.1-encoded byte array. /// </summary> /// <returns>ASN.1-encoded byte array.</returns> /// <remarks> /// Explicit notice text is always encoded as a <strong>BMPString</strong>. /// <para>Notice reference is encoded in the following sequence: attempts to encode a string as a /// <strong>VisibleString</strong> and then as a <strong>BMPString</strong> if <strong>VisibleString</strong> fails.</para> /// </remarks> public Byte[] Encode() { switch (Type) { case X509PolicyQualifierType.CpsUrl: if (String.IsNullOrEmpty(PolicyUrl.AbsoluteUri)) { throw new UninitializedObjectException(); } List <Byte> rawData = new List <Byte>(); rawData.AddRange(Asn1Utils.EncodeObjectIdentifier(new Oid("1.3.6.1.5.5.7.2.1"))); rawData.AddRange(Asn1Utils.EncodeIA5String(PolicyUrl.AbsoluteUri)); return(Asn1Utils.Encode(rawData.ToArray(), 48)); case X509PolicyQualifierType.UserNotice: List <Byte> refpart = new List <Byte>(); if (!String.IsNullOrEmpty(NoticeReference)) { refpart.AddRange(EncodeString(NoticeReference)); refpart.AddRange(Asn1Utils.Encode(new Asn1Integer(NoticeNumber).RawData, 48)); refpart = new List <Byte>(Asn1Utils.Encode(refpart.ToArray(), 48)); } if (!String.IsNullOrEmpty(NoticeText)) { refpart.AddRange(Asn1Utils.EncodeBMPString(NoticeText)); } List <Byte> oid = new List <Byte>(); oid.AddRange(Asn1Utils.EncodeObjectIdentifier(new Oid("1.3.6.1.5.5.7.2.2"))); oid.AddRange(Asn1Utils.Encode(refpart.ToArray(), 48)); return(Asn1Utils.Encode(oid.ToArray(), 48)); default: throw new UninitializedObjectException(); } }