1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.asn1.der;
19
20 import java.io.ByteArrayOutputStream;
21 import java.io.IOException;
22 import java.util.Enumeration;
23 import java.util.Vector;
24
25
26 public class DERSequence implements DEREncodable
27 {
28 private Vector v = new Vector();
29
30 public void add( DEREncodable obj )
31 {
32 v.addElement( obj );
33 }
34
35 public Enumeration getObjects()
36 {
37 return v.elements();
38 }
39
40 public DEREncodable get( int i )
41 {
42 return (DEREncodable)v.elementAt( i );
43 }
44
45 public int size()
46 {
47 return v.size();
48 }
49
50 /***
51 * As DER requires the constructed, definite-length model to
52 * be used for structured types, this varies slightly from the
53 * ASN.1 descriptions given. Rather than just outputing SEQUENCE,
54 * we also have to specify CONSTRUCTED, and the objects length.
55 */
56 public void encode( ASN1OutputStream out )
57 throws IOException
58 {
59 ByteArrayOutputStream baos = new ByteArrayOutputStream();
60 ASN1OutputStream aos = new ASN1OutputStream( baos );
61
62 Enumeration e = getObjects();
63
64 while ( e.hasMoreElements() )
65 {
66 aos.writeObject( e.nextElement() );
67 }
68
69 aos.close();
70
71 byte[] bytes = baos.toByteArray();
72
73 out.writeEncoded( DERObject.SEQUENCE | DERObject.CONSTRUCTED, bytes );
74 }
75 }
76