Exemplo n.º 1
0
        /// <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();
            }
        }