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/** 198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @author Stepan M. Mishura 208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */ 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 44e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott 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 private static ASN1SequenceOf sequenceOf = new ASN1SequenceOf(ASN1Boolean 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getInstance()); 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static ArrayList defaultList; 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static ASN1Sequence sequence; 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static Object[][] testcases; 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() throws Exception { 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.setUp(); 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // sequence ::= SEQUENCE { 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // boolean BOOLEAN, DEFAULT true 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // list SEQUENCE OF BOOLEAN, DEFAULT list(false) 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // } 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes defaultList = new ArrayList(); 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes defaultList.add(Boolean.FALSE); 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sequence = new ASN1Sequence(new ASN1Type[] { ASN1Boolean.getInstance(), 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sequenceOf }) { 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setDefault(Boolean.TRUE, 0); 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setDefault(defaultList, 1); 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected Object getDecodedObject(BerInputStream in) 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException { 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Object[] values = (Object[]) in.content; 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new AppClass((Boolean) values[0], (List) values[1]); 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void getValues(Object object, Object[] values) { 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AppClass obj = (AppClass) object; 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values[0] = obj.ok; 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values[1] = obj.list; 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test Cases 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes testcases = new Object[][] { 98e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes // format: object to encode / byte array 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // sequence : all values are default 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { new AppClass(Boolean.TRUE, defaultList), 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new byte[] { 0x30, 0x00 } }, 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // sequence : true, default 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { new AppClass(Boolean.FALSE, defaultList), 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new byte[] { 0x30, 0x03, 0x01, 0x01, 0x00 } }, 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // sequence = default, empty sequence 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { new AppClass(Boolean.TRUE, new ArrayList()), 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new byte[] { 0x30, 0x02, 0x30, 0x00 } }, 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // sequence = false, empty sequence 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { new AppClass(Boolean.FALSE, new ArrayList()), 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new byte[] { 0x30, 0x05, 0x01, 0x01, 0x00, 0x30, 0x00 } }, 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath //TODO add testcase for another ASN.1 type` 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Application class 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class AppClass { 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Boolean ok; 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public List list; 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public AppClass(Boolean ok, List list) { 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.ok = ok; 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.list = list; 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean equals(Object o) { 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (o instanceof AppClass) { 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes AppClass obj = (AppClass) o; 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ok.equals(obj.ok) && list.equals(obj.list); 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDecode_Valid() throws IOException { 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < testcases.length; i++) { 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes DerInputStream in = new DerInputStream((byte[]) testcases[i][1]); 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Test case: " + i, testcases[i][0], sequence 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .decode(in)); 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ASN1Exception e) { 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Test case: " + i + "\n" + e.getMessage()); 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //FIXME need testcase for decoding invalid encodings 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncode() throws IOException { 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < testcases.length; i++) { 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes DerOutputStream out = new DerOutputStream(sequence, testcases[i][0]); 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Test case: " + i, Arrays.equals( 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (byte[]) testcases[i][1], out.encoded)); 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testVerify() throws IOException { 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ASN1Sequence seqVerify = new ASN1Sequence(new ASN1Type[] { 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ASN1Boolean.getInstance(), sequenceOf }) { 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setDefault(Boolean.TRUE, 0); 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setDefault(defaultList, 1); 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected Object getDecodedObject(BerInputStream in) 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException { 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new IOException( 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Method getDecodedObject MUST not be invoked"); 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < testcases.length; i++) { 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes DerInputStream in = new DerInputStream((byte[]) testcases[i][1]); 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.setVerify(); 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes seqVerify.decode(in); 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 193e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Tests encoding default fields 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncodeDefault() throws IOException { 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Boolean as default 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ASN1Sequence s = new ASN1Sequence(new ASN1Type[] { ASN1Boolean 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getInstance() }) { 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setDefault(Boolean.TRUE, 0); 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void getValues(Object object, Object[] values) { 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values = (Object[]) object; 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] expectedArray = new byte[] { 0x30, 0x00 }; 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] encoded = s.encode(new Object[] { Boolean.TRUE }); 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Encoded boolean:", Arrays.equals(expectedArray, encoded)); 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Integer as default 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s = new ASN1Sequence(new ASN1Type[] { ASN1Integer.getInstance() }) { 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setDefault(new byte[] { 0x01 }, 0); 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void getValues(Object object, Object[] values) { 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values = (Object[]) object; 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes encoded = s.encode(new Object[] { new byte[] { 0x01 } }); 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Encoded integer:", Arrays.equals(expectedArray, encoded)); 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 232e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 234e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Tests encoding optional fields 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEncodeOptional() throws IOException { 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test not optional 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ASN1Sequence s = new ASN1Sequence(new ASN1Type[] { ASN1Boolean 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getInstance() }) { 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void getValues(Object object, Object[] values) { 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values[0] = ((Object[]) object)[0]; 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.encode(new Object[] { null }); 251e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes fail("No expected RuntimeException"); 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (RuntimeException e) { 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test optional 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s = new ASN1Sequence(new ASN1Type[] { ASN1Boolean.getInstance() }) { 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes setOptional(0); 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void getValues(Object object, Object[] values) { 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes values[0] = ((Object[]) object)[0]; 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] expectedArray = new byte[] { 0x30, 0x00 }; 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] encoded = s.encode(new Object[] { null }); 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Encoded boolean:", Arrays.equals(expectedArray, encoded)); 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 273e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes} 274