SequenceTest.java revision 561ee011997c6c2f1befbfaa9d5f0a99771c1d63
1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes* @author Stepan M. Mishura 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes*/ 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.security.tests.asn1.der; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.ArrayList; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.List; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.asn1.ASN1Boolean; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.asn1.ASN1Exception; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.asn1.ASN1Integer; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.asn1.ASN1Sequence; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.asn1.ASN1SequenceOf; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.asn1.ASN1Type; 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.asn1.BerInputStream; 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.asn1.DerInputStream; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.asn1.DerOutputStream; 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * ASN.1 DER test for Sequence type 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @see http://asn1.elibel.tm.fr/en/standards/index.htm 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class SequenceTest extends TestCase { 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static void main(String[] args) { 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes junit.textui.TestRunner.run(SequenceTest.class); 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static ASN1SequenceOf sequenceOf = new ASN1SequenceOf(ASN1Boolean 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getInstance()); 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static ArrayList defaultList; 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static ASN1Sequence sequence; 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static Object[][] testcases; 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() throws Exception { 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.setUp(); 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // sequence ::= SEQUENCE { 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // boolean BOOLEAN, DEFAULT true 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // list SEQUENCE OF BOOLEAN, DEFAULT list(false) 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // } 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes defaultList = new ArrayList(); 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes defaultList.add(Boolean.FALSE); 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sequence = new ASN1Sequence(new ASN1Type[] { ASN1Boolean.getInstance(), 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sequenceOf }) { 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setDefault(Boolean.TRUE, 0); 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setDefault(defaultList, 1); 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected Object getDecodedObject(BerInputStream in) 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException { 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object[] values = (Object[]) in.content; 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new AppClass((Boolean) values[0], (List) values[1]); 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void getValues(Object object, Object[] values) { 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AppClass obj = (AppClass) object; 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values[0] = obj.ok; 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values[1] = obj.list; 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test Cases 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes testcases = new Object[][] { 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // format: object to encode / byte array 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // sequence : all values are default 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { new AppClass(Boolean.TRUE, defaultList), 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new byte[] { 0x30, 0x00 } }, 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // sequence : true, default 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { new AppClass(Boolean.FALSE, defaultList), 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new byte[] { 0x30, 0x03, 0x01, 0x01, 0x00 } }, 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // sequence = default, empty sequence 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { new AppClass(Boolean.TRUE, new ArrayList()), 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new byte[] { 0x30, 0x02, 0x30, 0x00 } }, 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // sequence = false, empty sequence 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { new AppClass(Boolean.FALSE, new ArrayList()), 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new byte[] { 0x30, 0x05, 0x01, 0x01, 0x00, 0x30, 0x00 } }, 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //TODO add testcase for another ASN.1 type` 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Application class 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class AppClass { 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Boolean ok; 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public List list; 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public AppClass(Boolean ok, List list) { 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.ok = ok; 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.list = list; 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean equals(Object o) { 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (o instanceof AppClass) { 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AppClass obj = (AppClass) o; 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ok.equals(obj.ok) && list.equals(obj.list); 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecode_Valid() throws IOException { 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < testcases.length; i++) { 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes DerInputStream in = new DerInputStream((byte[]) testcases[i][1]); 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Test case: " + i, testcases[i][0], sequence 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .decode(in)); 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ASN1Exception e) { 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Test case: " + i + "\n" + e.getMessage()); 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //FIXME need testcase for decoding invalid encodings 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncode() throws IOException { 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < testcases.length; i++) { 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes DerOutputStream out = new DerOutputStream(sequence, testcases[i][0]); 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Test case: " + i, Arrays.equals( 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte[]) testcases[i][1], out.encoded)); 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testVerify() throws IOException { 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ASN1Sequence seqVerify = new ASN1Sequence(new ASN1Type[] { 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ASN1Boolean.getInstance(), sequenceOf }) { 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setDefault(Boolean.TRUE, 0); 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setDefault(defaultList, 1); 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected Object getDecodedObject(BerInputStream in) 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException { 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new IOException( 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Method getDecodedObject MUST not be invoked"); 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < testcases.length; i++) { 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes DerInputStream in = new DerInputStream((byte[]) testcases[i][1]); 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.setVerify(); 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes seqVerify.decode(in); 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests encoding default fields 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncodeDefault() throws IOException { 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Boolean as default 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ASN1Sequence s = new ASN1Sequence(new ASN1Type[] { ASN1Boolean 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getInstance() }) { 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setDefault(Boolean.TRUE, 0); 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void getValues(Object object, Object[] values) { 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values = (Object[]) object; 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] expectedArray = new byte[] { 0x30, 0x00 }; 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] encoded = s.encode(new Object[] { Boolean.TRUE }); 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Encoded boolean:", Arrays.equals(expectedArray, encoded)); 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Integer as default 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s = new ASN1Sequence(new ASN1Type[] { ASN1Integer.getInstance() }) { 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setDefault(new byte[] { 0x01 }, 0); 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void getValues(Object object, Object[] values) { 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values = (Object[]) object; 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoded = s.encode(new Object[] { new byte[] { 0x01 } }); 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Encoded integer:", Arrays.equals(expectedArray, encoded)); 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests encoding optional fields 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncodeOptional() throws IOException { 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test not optional 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ASN1Sequence s = new ASN1Sequence(new ASN1Type[] { ASN1Boolean 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getInstance() }) { 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void getValues(Object object, Object[] values) { 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values[0] = ((Object[]) object)[0]; 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.encode(new Object[] { null }); 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No expected RuntimeException"); 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (RuntimeException e) { 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test optional 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s = new ASN1Sequence(new ASN1Type[] { ASN1Boolean.getInstance() }) { 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setOptional(0); 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void getValues(Object object, Object[] values) { 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values[0] = ((Object[]) object)[0]; 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] expectedArray = new byte[] { 0x30, 0x00 }; 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] encoded = s.encode(new Object[] { null }); 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Encoded boolean:", Arrays.equals(expectedArray, encoded)); 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}