View Javadoc

1   /*
2    *   Copyright 2005 The Apache Software Foundation
3    *
4    *   Licensed under the Apache License, Version 2.0 (the "License");
5    *   you may not use this file except in compliance with the License.
6    *   You may obtain a copy of the License at
7    *
8    *       http://www.apache.org/licenses/LICENSE-2.0
9    *
10   *   Unless required by applicable law or agreed to in writing, software
11   *   distributed under the License is distributed on an "AS IS" BASIS,
12   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *   See the License for the specific language governing permissions and
14   *   limitations under the License.
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