summaryrefslogtreecommitdiffstats
path: root/bcprov/src/main/java/org/bouncycastle/asn1/test/SetTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/asn1/test/SetTest.java')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/test/SetTest.java115
1 files changed, 115 insertions, 0 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/test/SetTest.java b/bcprov/src/main/java/org/bouncycastle/asn1/test/SetTest.java
new file mode 100644
index 0000000..9e568a9
--- /dev/null
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/test/SetTest.java
@@ -0,0 +1,115 @@
+package org.bouncycastle.asn1.test;
+
+import org.bouncycastle.asn1.ASN1Boolean;
+import org.bouncycastle.asn1.ASN1EncodableVector;
+import org.bouncycastle.asn1.ASN1Integer;
+import org.bouncycastle.asn1.ASN1Set;
+import org.bouncycastle.asn1.ASN1TaggedObject;
+import org.bouncycastle.asn1.BERSet;
+import org.bouncycastle.asn1.DERBitString;
+import org.bouncycastle.asn1.DEROctetString;
+import org.bouncycastle.asn1.DERSequence;
+import org.bouncycastle.asn1.DERSet;
+import org.bouncycastle.asn1.DERTaggedObject;
+import org.bouncycastle.util.test.SimpleTest;
+
+/**
+ * Set sorting test example
+ */
+public class SetTest
+ extends SimpleTest
+{
+
+ public String getName()
+ {
+ return "Set";
+ }
+
+ private void checkedSortedSet(int attempt, ASN1Set s)
+ {
+ if (s.getObjectAt(0) instanceof ASN1Boolean
+ && s.getObjectAt(1) instanceof ASN1Integer
+ && s.getObjectAt(2) instanceof DERBitString
+ && s.getObjectAt(3) instanceof DEROctetString)
+ {
+ return;
+ }
+
+ fail("sorting failed on attempt: " + attempt);
+ }
+
+ public void performTest()
+ {
+ ASN1EncodableVector v = new ASN1EncodableVector();
+ byte[] data = new byte[10];
+
+ v.add(new DEROctetString(data));
+ v.add(new DERBitString(data));
+ v.add(new ASN1Integer(100));
+ v.add(ASN1Boolean.getInstance(true));
+
+ checkedSortedSet(0, new DERSet(v));
+
+ v = new ASN1EncodableVector();
+ v.add(new ASN1Integer(100));
+ v.add(ASN1Boolean.getInstance(true));
+ v.add(new DEROctetString(data));
+ v.add(new DERBitString(data));
+
+ checkedSortedSet(1, new DERSet(v));
+
+ v = new ASN1EncodableVector();
+ v.add(ASN1Boolean.getInstance(true));
+ v.add(new DEROctetString(data));
+ v.add(new DERBitString(data));
+ v.add(new ASN1Integer(100));
+
+
+ checkedSortedSet(2, new DERSet(v));
+
+ v = new ASN1EncodableVector();
+ v.add(new DERBitString(data));
+ v.add(new DEROctetString(data));
+ v.add(new ASN1Integer(100));
+ v.add(ASN1Boolean.getInstance(true));
+
+ checkedSortedSet(3, new DERSet(v));
+
+ v = new ASN1EncodableVector();
+ v.add(new DEROctetString(data));
+ v.add(new DERBitString(data));
+ v.add(new ASN1Integer(100));
+ v.add(ASN1Boolean.getInstance(true));
+
+ ASN1Set s = new BERSet(v);
+
+ if (!(s.getObjectAt(0) instanceof DEROctetString))
+ {
+ fail("BER set sort order changed.");
+ }
+
+ // create an implicitly tagged "set" without sorting
+ ASN1TaggedObject tag = new DERTaggedObject(false, 1, new DERSequence(v));
+ s = ASN1Set.getInstance(tag, false);
+
+ if (s.getObjectAt(0) instanceof ASN1Boolean)
+ {
+ fail("sorted when shouldn't be.");
+ }
+
+ // equality test
+ v = new ASN1EncodableVector();
+
+ v.add(ASN1Boolean.getInstance(true));
+ v.add(ASN1Boolean.getInstance(true));
+ v.add(ASN1Boolean.getInstance(true));
+
+ s = new DERSet(v);
+ }
+
+ public static void main(
+ String[] args)
+ {
+ runTest(new SetTest());
+ }
+}