• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.bouncycastle.asn1;
2 
3 import java.io.IOException;
4 import java.util.Enumeration;
5 
6 /**
7  * Note: this class is for processing DER/DL encoded sequences only.
8  */
9 class LazyEncodedSequence
10     extends ASN1Sequence
11 {
12     private byte[] encoded;
13 
LazyEncodedSequence( byte[] encoded)14     LazyEncodedSequence(
15         byte[] encoded)
16         throws IOException
17     {
18         this.encoded = encoded;
19     }
20 
parse()21     private void parse()
22     {
23         Enumeration en = new LazyConstructionEnumeration(encoded);
24 
25         while (en.hasMoreElements())
26         {
27             seq.addElement(en.nextElement());
28         }
29 
30         encoded = null;
31     }
32 
getObjectAt(int index)33     public synchronized ASN1Encodable getObjectAt(int index)
34     {
35         if (encoded != null)
36         {
37             parse();
38         }
39 
40         return super.getObjectAt(index);
41     }
42 
getObjects()43     public synchronized Enumeration getObjects()
44     {
45         if (encoded == null)
46         {
47             return super.getObjects();
48         }
49 
50         return new LazyConstructionEnumeration(encoded);
51     }
52 
size()53     public synchronized int size()
54     {
55         if (encoded != null)
56         {
57             parse();
58         }
59 
60         return super.size();
61     }
62 
toDERObject()63     ASN1Primitive toDERObject()
64     {
65         if (encoded != null)
66         {
67             parse();
68         }
69 
70         return super.toDERObject();
71     }
72 
toDLObject()73     ASN1Primitive toDLObject()
74     {
75         if (encoded != null)
76         {
77             parse();
78         }
79 
80         return super.toDLObject();
81     }
82 
encodedLength()83     int encodedLength()
84         throws IOException
85     {
86         if (encoded != null)
87         {
88             return 1 + StreamUtil.calculateBodyLength(encoded.length) + encoded.length;
89         }
90         else
91         {
92             return super.toDLObject().encodedLength();
93         }
94     }
95 
encode( ASN1OutputStream out)96     void encode(
97         ASN1OutputStream out)
98         throws IOException
99     {
100         if (encoded != null)
101         {
102             out.writeEncoded(BERTags.SEQUENCE | BERTags.CONSTRUCTED, encoded);
103         }
104         else
105         {
106             super.toDLObject().encode(out);
107         }
108     }
109 }
110