package org.bouncycastle.asn1.test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1Enumerated;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.ASN1OutputStream;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.BERSequence;
import org.bouncycastle.asn1.DERBitString;
import org.bouncycastle.asn1.DERIA5String;
import org.bouncycastle.asn1.misc.CAST5CBCParameters;
import org.bouncycastle.asn1.misc.IDEACBCPar;
import org.bouncycastle.asn1.misc.NetscapeCertType;
import org.bouncycastle.asn1.misc.NetscapeRevocationURL;
import org.bouncycastle.asn1.misc.VerisignCzagExtension;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.encoders.Base64;
import org.bouncycastle.util.test.SimpleTest;
public class MiscTest
extends SimpleTest
{
public void ()
throws Exception
{
DERBitString s1 = new DERBitString(new byte[0], 0);
ASN1Primitive.fromByteArray(s1.getEncoded());
ASN1Primitive.fromByteArray(new BERSequence(s1).getEncoded());
try
{
ASN1Primitive obj = ASN1Primitive.fromByteArray(Arrays.concatenate(s1.getEncoded(), new byte[1]));
fail("no exception");
}
catch (IOException e)
{
if (!"Extra data detected in stream".equals(e.getMessage()))
{
fail("wrong exception");
}
}
}
public void derIntegerTest()
throws Exception
{
try
{
new ASN1Integer(new byte[] { 0, 0, 0, 1});
}
catch (IllegalArgumentException e)
{
isTrue("wrong exc", "malformed integer".equals(e.getMessage()));
}
try
{
new ASN1Integer(new byte[] {(byte)0xff, (byte)0x80, 0, 1});
}
catch (IllegalArgumentException e)
{
isTrue("wrong exc", "malformed integer".equals(e.getMessage()));
}
try
{
new ASN1Enumerated(new byte[] { 0, 0, 0, 1});
}
catch (IllegalArgumentException e)
{
isTrue("wrong exc", "malformed enumerated".equals(e.getMessage()));
}
try
{
new ASN1Enumerated(new byte[] {(byte)0xff, (byte)0x80, 0, 1});
}
catch (IllegalArgumentException e)
{
isTrue("wrong exc", "malformed enumerated".equals(e.getMessage()));
}
}
public void performTest()
throws Exception
{
byte[] testIv = { 1, 2, 3, 4, 5, 6, 7, 8 };
ASN1Encodable[] values = {
new CAST5CBCParameters(testIv, 128),
new NetscapeCertType(NetscapeCertType.smime),
new VerisignCzagExtension(new DERIA5String("hello")),
new IDEACBCPar(testIv),
new NetscapeRevocationURL(new DERIA5String("http://test"))
};
byte[] data = Base64.decode("MA4ECAECAwQFBgcIAgIAgAMCBSAWBWhlbGxvMAoECAECAwQFBgcIFgtodHRwOi8vdGVzdA==");
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
ASN1OutputStream aOut = new ASN1OutputStream(bOut);
for (int i = 0; i != values.length; i++)
{
aOut.writeObject(values[i]);
}
if (!areEqual(bOut.toByteArray(), data))
{
fail("Failed data check");
}
ASN1InputStream aIn = new ASN1InputStream(bOut.toByteArray());
for (int i = 0; i != values.length; i++)
{
ASN1Primitive o = aIn.readObject();
if (!values[i].equals(o))
{
fail("Failed equality test for " + o);
}
if (o.hashCode() != values[i].hashCode())
{
fail("Failed hashCode test for " + o);
}
}
shouldFailOnExtraData();
derIntegerTest();
}
public String getName()
{
return "Misc";
}
public static void main(
String[] args)
{
runTest(new MiscTest());
}
}