aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/core/src/test/java/org/spongycastle/asn1/test/LDSSecurityObjectUnitTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/core/src/test/java/org/spongycastle/asn1/test/LDSSecurityObjectUnitTest.java')
-rw-r--r--libraries/spongycastle/core/src/test/java/org/spongycastle/asn1/test/LDSSecurityObjectUnitTest.java214
1 files changed, 214 insertions, 0 deletions
diff --git a/libraries/spongycastle/core/src/test/java/org/spongycastle/asn1/test/LDSSecurityObjectUnitTest.java b/libraries/spongycastle/core/src/test/java/org/spongycastle/asn1/test/LDSSecurityObjectUnitTest.java
new file mode 100644
index 000000000..0cbb44763
--- /dev/null
+++ b/libraries/spongycastle/core/src/test/java/org/spongycastle/asn1/test/LDSSecurityObjectUnitTest.java
@@ -0,0 +1,214 @@
+package org.spongycastle.asn1.test;
+
+import java.io.IOException;
+import java.util.Random;
+
+import org.spongycastle.asn1.ASN1EncodableVector;
+import org.spongycastle.asn1.ASN1InputStream;
+import org.spongycastle.asn1.ASN1Sequence;
+import org.spongycastle.asn1.DEROctetString;
+import org.spongycastle.asn1.DERSequence;
+import org.spongycastle.asn1.icao.DataGroupHash;
+import org.spongycastle.asn1.icao.LDSSecurityObject;
+import org.spongycastle.asn1.icao.LDSVersionInfo;
+import org.spongycastle.asn1.x509.AlgorithmIdentifier;
+import org.spongycastle.util.test.SimpleTest;
+
+public class LDSSecurityObjectUnitTest
+ extends SimpleTest
+{
+ public String getName()
+ {
+ return "LDSSecurityObject";
+ }
+
+ private byte[] generateHash()
+ {
+ Random rand = new Random();
+ byte[] bytes = new byte[20];
+
+ for (int i = 0; i != bytes.length; i++)
+ {
+ bytes[i] = (byte)rand.nextInt();
+ }
+
+ return bytes;
+ }
+
+ public void performTest()
+ throws Exception
+ {
+ AlgorithmIdentifier algoId = new AlgorithmIdentifier("1.3.14.3.2.26");
+ DataGroupHash[] datas = new DataGroupHash[2];
+
+ datas[0] = new DataGroupHash(1, new DEROctetString(generateHash()));
+ datas[1] = new DataGroupHash(2, new DEROctetString(generateHash()));
+
+ LDSSecurityObject so = new LDSSecurityObject(algoId, datas);
+
+ checkConstruction(so, algoId, datas);
+
+ LDSVersionInfo versionInfo = new LDSVersionInfo("Hello", "world");
+
+ so = new LDSSecurityObject(algoId, datas, versionInfo);
+
+ checkConstruction(so, algoId, datas, versionInfo);
+
+ try
+ {
+ LDSSecurityObject.getInstance(null);
+ }
+ catch (Exception e)
+ {
+ fail("getInstance() failed to handle null.");
+ }
+
+ try
+ {
+ LDSSecurityObject.getInstance(new Object());
+
+ fail("getInstance() failed to detect bad object.");
+ }
+ catch (IllegalArgumentException e)
+ {
+ // expected
+ }
+
+ try
+ {
+ ASN1EncodableVector v = new ASN1EncodableVector();
+
+ LDSSecurityObject.getInstance(new DERSequence(v));
+
+ fail("constructor failed to detect empty sequence.");
+ }
+ catch (IllegalArgumentException e)
+ {
+ // expected
+ }
+
+ try
+ {
+ new LDSSecurityObject(algoId, new DataGroupHash[1]);
+
+ fail("constructor failed to detect small DataGroupHash array.");
+ }
+ catch (IllegalArgumentException e)
+ {
+ // expected
+ }
+
+ try
+ {
+ new LDSSecurityObject(algoId, new DataGroupHash[LDSSecurityObject.ub_DataGroups + 1]);
+
+ fail("constructor failed to out of bounds DataGroupHash array.");
+ }
+ catch (IllegalArgumentException e)
+ {
+ // expected
+ }
+ }
+
+ private void checkConstruction(
+ LDSSecurityObject so,
+ AlgorithmIdentifier digestAlgorithmIdentifier,
+ DataGroupHash[] datagroupHash)
+ throws IOException
+ {
+ checkStatement(so, digestAlgorithmIdentifier, datagroupHash, null);
+
+ so = LDSSecurityObject.getInstance(so);
+
+ checkStatement(so, digestAlgorithmIdentifier, datagroupHash, null);
+
+ ASN1InputStream aIn = new ASN1InputStream(so.toASN1Object().getEncoded());
+
+ ASN1Sequence seq = (ASN1Sequence)aIn.readObject();
+
+ so = LDSSecurityObject.getInstance(seq);
+
+ checkStatement(so, digestAlgorithmIdentifier, datagroupHash, null);
+ }
+
+ private void checkConstruction(
+ LDSSecurityObject so,
+ AlgorithmIdentifier digestAlgorithmIdentifier,
+ DataGroupHash[] datagroupHash,
+ LDSVersionInfo versionInfo)
+ throws IOException
+ {
+ if (so.getVersion() != 1)
+ {
+ fail("version number not 1");
+ }
+
+ checkStatement(so, digestAlgorithmIdentifier, datagroupHash, versionInfo);
+
+ so = LDSSecurityObject.getInstance(so);
+
+ checkStatement(so, digestAlgorithmIdentifier, datagroupHash, versionInfo);
+
+ ASN1InputStream aIn = new ASN1InputStream(so.toASN1Object().getEncoded());
+
+ ASN1Sequence seq = (ASN1Sequence)aIn.readObject();
+
+ so = LDSSecurityObject.getInstance(seq);
+
+ checkStatement(so, digestAlgorithmIdentifier, datagroupHash, versionInfo);
+ }
+
+ private void checkStatement(
+ LDSSecurityObject so,
+ AlgorithmIdentifier digestAlgorithmIdentifier,
+ DataGroupHash[] datagroupHash,
+ LDSVersionInfo versionInfo)
+ {
+ if (digestAlgorithmIdentifier != null)
+ {
+ if (!so.getDigestAlgorithmIdentifier().equals(digestAlgorithmIdentifier))
+ {
+ fail("ids don't match.");
+ }
+ }
+ else if (so.getDigestAlgorithmIdentifier() != null)
+ {
+ fail("digest algorithm Id found when none expected.");
+ }
+
+ if (datagroupHash != null)
+ {
+ DataGroupHash[] datas = so.getDatagroupHash();
+
+ for (int i = 0; i != datas.length; i++)
+ {
+ if (!datagroupHash[i].equals(datas[i]))
+ {
+ fail("name registration authorities don't match.");
+ }
+ }
+ }
+ else if (so.getDatagroupHash() != null)
+ {
+ fail("data hash groups found when none expected.");
+ }
+
+ if (versionInfo != null)
+ {
+ if (!versionInfo.equals(so.getVersionInfo()))
+ {
+ fail("versionInfo doesn't match");
+ }
+ }
+ else if (so.getVersionInfo() != null)
+ {
+ fail("version info found when none expected.");
+ }
+ }
+
+ public static void main(
+ String[] args)
+ {
+ runTest(new LDSSecurityObjectUnitTest());
+ }
+}