1c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrompackage org.bouncycastle.asn1;
2c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
3c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport java.io.IOException;
44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.util.Enumeration;
5c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromclass LazyConstructionEnumeration
7c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    implements Enumeration
8c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom{
9c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    private ASN1InputStream aIn;
10c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    private Object          nextObj;
11c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public LazyConstructionEnumeration(byte[] encoded)
13c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
14c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        aIn = new ASN1InputStream(encoded, true);
15c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        nextObj = readObject();
16c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
17c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
18c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    public boolean hasMoreElements()
19c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
20c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        return nextObj != null;
21c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
22c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
23c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    public Object nextElement()
24c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
25c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        Object o = nextObj;
26c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
27c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        nextObj = readObject();
28c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
29c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        return o;
30c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
31c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
32c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    private Object readObject()
33c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
34c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        try
35c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        {
36c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom            return aIn.readObject();
37c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        }
38c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        catch (IOException e)
39c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        {
40c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom            throw new ASN1ParsingException("malformed DER construction: " + e, e);
41c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        }
42c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
43c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom}
44