package org.bouncycastle.tsp;
import java.io.IOException;
import java.math.BigInteger;
import junit.framework.TestCase;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.tsp.TSTInfo;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.encoders.Hex;
public class TimeStampTokenInfoUnitTest
extends TestCase
{
private static final byte[] tstInfo1 = Hex.decode(
"303e02010106022a033021300906052b0e03021a050004140000000000000000000000000000000000000000"
+ "020118180f32303035313130313038313732315a");
private static final byte[] tstInfo2 = Hex.decode(
"304c02010106022a033021300906052b0e03021a05000414ffffffffffffffffffffffffffffffffffffffff"
+ "020117180f32303035313130313038323934355a3009020103800101810102020164");
private static final byte[] tstInfo3 = Hex.decode(
"304f02010106022a033021300906052b0e03021a050004140000000000000000000000000000000000000000"
+ "020117180f32303035313130313038343733355a30090201038001018101020101ff020164");
private static final byte[] tstInfoDudDate = Hex.decode(
"303e02010106022a033021300906052b0e03021a050004140000000000000000000000000000000000000000"
+ "020118180f32303056313130313038313732315a");
public void testTstInfo1()
throws Exception
{
TimeStampTokenInfo tstInfo = getTimeStampTokenInfo(tstInfo1);
//
// verify
//
GenTimeAccuracy accuracy = tstInfo.getGenTimeAccuracy();
assertNull(accuracy);
assertEquals(new BigInteger("24"), tstInfo.getSerialNumber());
assertEquals(1130833041000L, tstInfo.getGenTime().getTime());
assertEquals("1.2.3", tstInfo.getPolicy().getId());
assertEquals(false, tstInfo.isOrdered());
assertNull(tstInfo.getNonce());
assertEquals(TSPAlgorithms.SHA1, tstInfo.getMessageImprintAlgOID());
assertTrue(Arrays.areEqual(new byte[20], tstInfo.getMessageImprintDigest()));
assertTrue(Arrays.areEqual(tstInfo1, tstInfo.getEncoded()));
}
public void testTstInfo2()
throws Exception
{
TimeStampTokenInfo tstInfo = getTimeStampTokenInfo(tstInfo2);
//
// verify
//
GenTimeAccuracy accuracy = tstInfo.getGenTimeAccuracy();
assertEquals(3, accuracy.getSeconds());
assertEquals(1, accuracy.getMillis());
assertEquals(2, accuracy.getMicros());
assertEquals(new BigInteger("23"), tstInfo.getSerialNumber());
assertEquals(1130833785000L, tstInfo.getGenTime().getTime());
assertEquals("1.2.3", tstInfo.getPolicy().getId());
assertEquals(false, tstInfo.isOrdered());
assertEquals(tstInfo.getNonce(), BigInteger.valueOf(100));
assertTrue(Arrays.areEqual(Hex.decode("ffffffffffffffffffffffffffffffffffffffff"), tstInfo.getMessageImprintDigest()));
assertTrue(Arrays.areEqual(tstInfo2, tstInfo.getEncoded()));
}
public void testTstInfo3()
throws Exception
{
TimeStampTokenInfo tstInfo = getTimeStampTokenInfo(tstInfo3);
//
// verify
//
GenTimeAccuracy accuracy = tstInfo.getGenTimeAccuracy();
assertEquals(3, accuracy.getSeconds());
assertEquals(1, accuracy.getMillis());
assertEquals(2, accuracy.getMicros());
assertEquals(new BigInteger("23"), tstInfo.getSerialNumber());
assertEquals(1130834855000L, tstInfo.getGenTime().getTime());
assertEquals("1.2.3", tstInfo.getPolicy().getId());
assertEquals(true, tstInfo.isOrdered());
assertEquals(tstInfo.getNonce(), BigInteger.valueOf(100));
assertEquals(TSPAlgorithms.SHA1, tstInfo.getMessageImprintAlgOID());
assertTrue(Arrays.areEqual(new byte[20], tstInfo.getMessageImprintDigest()));
assertTrue(Arrays.areEqual(tstInfo3, tstInfo.getEncoded()));
}
public void testTstInfoDudDate()
throws Exception
{
try
{
getTimeStampTokenInfo(tstInfoDudDate);
fail("dud date not detected.");
}
catch (TSPException e)
{
// expected
}
}
private TimeStampTokenInfo getTimeStampTokenInfo(
byte[] tstInfo)
throws IOException, TSPException
{
ASN1InputStream aIn = new ASN1InputStream(tstInfo);
TSTInfo info = TSTInfo.getInstance(aIn.readObject());
return new TimeStampTokenInfo(info);
}
}