001 package org.apache.commons.ssl.asn1;
002
003 import java.io.ByteArrayOutputStream;
004 import java.io.IOException;
005 import java.util.Enumeration;
006
007 /** @deprecated use DERSet */
008 public class DERConstructedSet
009 extends ASN1Set {
010 public DERConstructedSet() {
011 }
012
013 /** @param obj - a single object that makes up the set. */
014 public DERConstructedSet(
015 DEREncodable obj) {
016 this.addObject(obj);
017 }
018
019 /** @param v - a vector of objects making up the set. */
020 public DERConstructedSet(
021 DEREncodableVector v) {
022 for (int i = 0; i != v.size(); i++) {
023 this.addObject(v.get(i));
024 }
025 }
026
027 public void addObject(
028 DEREncodable obj) {
029 super.addObject(obj);
030 }
031
032 public int getSize() {
033 return size();
034 }
035
036 /*
037 * A note on the implementation:
038 * <p>
039 * As DER requires the constructed, definite-length model to
040 * be used for structured types, this varies slightly from the
041 * ASN.1 descriptions given. Rather than just outputing SET,
042 * we also have to specify CONSTRUCTED, and the objects length.
043 */
044 void encode(
045 DEROutputStream out)
046 throws IOException {
047 ByteArrayOutputStream bOut = new ByteArrayOutputStream();
048 DEROutputStream dOut = new DEROutputStream(bOut);
049 Enumeration e = this.getObjects();
050
051 while (e.hasMoreElements()) {
052 Object obj = e.nextElement();
053
054 dOut.writeObject(obj);
055 }
056
057 dOut.close();
058
059 byte[] bytes = bOut.toByteArray();
060
061 out.writeEncoded(SET | CONSTRUCTED, bytes);
062 }
063 }