diff options
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.java | 115 |
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()); + } +} |