org.bouncycastle.asn1.LazyEncodedSequence Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bc-fips Show documentation
Show all versions of bc-fips Show documentation
The FIPS 140-3 Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms certified to FIPS 140-3 level 1. This jar contains JCE provider and low-level API for the BC-FJA version 2.0.0, FIPS Certificate #4743. Please see certificate for certified platform details.
/***************************************************************/
/****** DO NOT EDIT THIS CLASS bc-java SOURCE FILE ******/
/***************************************************************/
package org.bouncycastle.asn1;
import java.io.IOException;
import java.util.Enumeration;
/**
* Note: this class is for processing DER/DL encoded sequences only.
*/
class LazyEncodedSequence
extends ASN1Sequence
{
private byte[] encoded;
LazyEncodedSequence(
byte[] encoded)
throws IOException
{
this.encoded = encoded;
}
private void parse()
{
Enumeration en = new LazyConstructionEnumeration(encoded);
while (en.hasMoreElements())
{
seq.addElement(en.nextElement());
}
encoded = null;
}
public synchronized ASN1Encodable getObjectAt(int index)
{
if (encoded != null)
{
parse();
}
return super.getObjectAt(index);
}
public synchronized Enumeration getObjects()
{
if (encoded == null)
{
return super.getObjects();
}
return new LazyConstructionEnumeration(encoded);
}
public synchronized int size()
{
if (encoded != null)
{
parse();
}
return super.size();
}
ASN1Primitive toDERObject()
{
if (encoded != null)
{
parse();
}
return super.toDERObject();
}
ASN1Primitive toDLObject()
{
if (encoded != null)
{
parse();
}
return super.toDLObject();
}
int encodedLength()
throws IOException
{
if (encoded != null)
{
return 1 + StreamUtil.calculateBodyLength(encoded.length) + encoded.length;
}
else
{
return super.toDLObject().encodedLength();
}
}
void encode(
ASN1OutputStream out)
throws IOException
{
if (encoded != null)
{
out.writeEncoded(BERTags.SEQUENCE | BERTags.CONSTRUCTED, encoded);
}
else
{
super.toDLObject().encode(out);
}
}
}