resolve darcs stupidity
[org.ibex.core.git] / src / org / bouncycastle / asn1 / DERSet.java
index 2d2caf4..c08fa5a 100644 (file)
@@ -1,24 +1,69 @@
 package org.bouncycastle.asn1;
 
 import java.io.*;
+import java.util.*;
 
 /**
- * DER Set with a single object.
+ * A DER encoded set object
  */
 public class DERSet
-    extends DERConstructedSet
+    extends ASN1Set
 {
     /**
-     * @param sequence the sequence making up the set
+     * create an empty set
+     */
+    public DERSet()
+    {
+    }
+
+    /**
+     * @param obj - a single object that makes up the set.
      */
     public DERSet(
-        DEREncodable   sequence)
+        DEREncodable   obj)
     {
-        this.addObject(sequence);
+        this.addObject(obj);
     }
 
-    public DERObject getSequence()
+    /**
+     * @param v - a vector of objects making up the set.
+     */
+    public DERSet(
+        DEREncodableVector   v)
     {
-        return (DERObject)this.getObjectAt(0);
+        for (int i = 0; i != v.size(); i++)
+        {
+            this.addObject(v.get(i));
+        }
+    }
+
+    /*
+     * A note on the implementation:
+     * <p>
+     * As DER requires the constructed, definite-length model to
+     * be used for structured types, this varies slightly from the
+     * ASN.1 descriptions given. Rather than just outputing SET,
+     * we also have to specify CONSTRUCTED, and the objects length.
+     */
+    void encode(
+        DEROutputStream out)
+        throws IOException
+    {
+        ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
+        DEROutputStream         dOut = new DEROutputStream(bOut);
+        Enumeration             e = this.getObjects();
+
+        while (e.hasMoreElements())
+        {
+            Object    obj = e.nextElement();
+
+            dOut.writeObject(obj);
+        }
+
+        dOut.close();
+
+        byte[]  bytes = bOut.toByteArray();
+
+        out.writeEncoded(SET | CONSTRUCTED, bytes);
     }
 }