public DerExternal(
			Asn1EncodableVector vector)
        {
            int offset = 0;
            Asn1Object enc = GetObjFromVector(vector, offset);
            if (enc is DerObjectIdentifier)
            {
                directReference = (DerObjectIdentifier)enc;
                offset++;
                enc = GetObjFromVector(vector, offset);
            }
            if (enc is DerInteger)
            {
                indirectReference = (DerInteger) enc;
                offset++;
                enc = GetObjFromVector(vector, offset);
            }
            if (!(enc is DerTaggedObject))
            {
                dataValueDescriptor = (Asn1Object) enc;
                offset++;
                enc = GetObjFromVector(vector, offset);
            }
            if (!(enc is DerTaggedObject))
            {
                throw new InvalidOperationException(
                    "No tagged object found in vector. Structure doesn't seem to be of type External");
            }

            if (vector.Count != offset + 1)
                throw new ArgumentException("input vector too large", "vector");

            if (!(enc is DerTaggedObject))
                throw new ArgumentException("No tagged object found in vector. Structure doesn't seem to be of type External", "vector");

            DerTaggedObject obj = (DerTaggedObject)enc;

            // Use property accessor to include check on value
            Encoding = obj.TagNo;

            if (encoding < 0 || encoding > 2)
                throw new InvalidOperationException("invalid encoding value");

            externalContent = obj.GetObject();
        }
 /**
 * Creates a new instance of DerExternal.
 * See X.690 for more informations about the meaning of these parameters
 * @param directReference The direct reference or <code>null</code> if not set.
 * @param indirectReference The indirect reference or <code>null</code> if not set.
 * @param dataValueDescriptor The data value descriptor or <code>null</code> if not set.
 * @param encoding The encoding to be used for the external data
 * @param externalData The external data
 */
 public DerExternal(DerObjectIdentifier directReference, DerInteger indirectReference, Asn1Object dataValueDescriptor, int encoding, Asn1Object externalData)
 {
     DirectReference = directReference;
     IndirectReference = indirectReference;
     DataValueDescriptor = dataValueDescriptor;
     Encoding = encoding;
     ExternalContent = externalData.ToAsn1Object();
 }
 /**
 * Creates a new instance of DerExternal
 * See X.690 for more informations about the meaning of these parameters
 * @param directReference The direct reference or <code>null</code> if not set.
 * @param indirectReference The indirect reference or <code>null</code> if not set.
 * @param dataValueDescriptor The data value descriptor or <code>null</code> if not set.
 * @param externalData The external data in its encoded form.
 */
 public DerExternal(DerObjectIdentifier directReference, DerInteger indirectReference, Asn1Object dataValueDescriptor, DerTaggedObject externalData)
     : this(directReference, indirectReference, dataValueDescriptor, externalData.TagNo, externalData.ToAsn1Object())
 {
 }