1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @author Vladimir N. Molotkov 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @version $Revision$ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.security.tests.java.security; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.NotSerializableException; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectStreamException; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyRep; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 31229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class KeyRepTest extends TestCase { 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 34e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom private static final Set<String> keyFactoryAlgorithms = Security.getAlgorithms("KeyFactory"); 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static { 36e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom assertFalse(keyFactoryAlgorithms.isEmpty()); 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testKeyRep01() { 40e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom assertNotNull(new KeyRep(KeyRep.Type.SECRET, "", "", new byte[] {})); 41e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom assertNotNull(new KeyRep(KeyRep.Type.PUBLIC, "", "", new byte[] {})); 42e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom assertNotNull(new KeyRep(KeyRep.Type.PRIVATE, "", "", new byte[] {})); 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testKeyRep02() { 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new KeyRep(null, "", "", new byte[] {}); 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException has not been thrown (type)"); 49e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NullPointerException expected) { 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new KeyRep(KeyRep.Type.SECRET, null, "", new byte[] {}); 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException has not been thrown (alg)"); 54e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NullPointerException expected) { 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new KeyRep(KeyRep.Type.PRIVATE, "", null, new byte[] {}); 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException has not been thrown (format)"); 59e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NullPointerException expected) { 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new KeyRep(KeyRep.Type.PUBLIC, "", "", null); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException has not been thrown (encoding)"); 64e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NullPointerException expected) { 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom public final void testReadResolve01() throws Exception { 69e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom KeyRepChild kr = new KeyRepChild(KeyRep.Type.SECRET, "", "", new byte[] {}); 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr.readResolve(); 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NotSerializableException has not been thrown (no format)"); 73e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NotSerializableException expected) { 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr = new KeyRepChild(KeyRep.Type.SECRET, "", "X.509", new byte[] {}); 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr.readResolve(); 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NotSerializableException has not been thrown (unacceptable format)"); 80e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NotSerializableException expected) { 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr = new KeyRepChild(KeyRep.Type.SECRET, "", "RAW", new byte[] {}); 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr.readResolve(); 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NotSerializableException has not been thrown (empty key)"); 87e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NotSerializableException expected) { 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 91e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom public final void testReadResolve02() throws Exception { 92e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom KeyRepChild kr = new KeyRepChild(KeyRep.Type.PUBLIC, "", "", new byte[] {}); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr.readResolve(); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NotSerializableException has not been thrown (no format)"); 96e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NotSerializableException expected) { 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr = new KeyRepChild(KeyRep.Type.PUBLIC, "", "RAW", new byte[] {}); 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr.readResolve(); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NotSerializableException has not been thrown (unacceptable format)"); 103e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NotSerializableException expected) { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 106e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom kr = new KeyRepChild(KeyRep.Type.PUBLIC, "bla-bla", "X.509", new byte[] {}); 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr.readResolve(); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NotSerializableException has not been thrown (unknown KeyFactory algorithm)"); 110e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NotSerializableException expected) { 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 114e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom public final void testReadResolve03() throws Exception { 115e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom KeyRepChild kr = new KeyRepChild(KeyRep.Type.PRIVATE, "", "", new byte[] {}); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr.readResolve(); 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NotSerializableException has not been thrown (no format)"); 119e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NotSerializableException expected) { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr = new KeyRepChild(KeyRep.Type.PRIVATE, "", "RAW", new byte[] {}); 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr.readResolve(); 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NotSerializableException has not been thrown (unacceptable format)"); 126e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NotSerializableException expected) { 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 129e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom kr = new KeyRepChild(KeyRep.Type.PRIVATE, "bla-bla", "PKCS#8", new byte[] {}); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr.readResolve(); 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NotSerializableException has not been thrown (unknown KeyFactory algorithm)"); 133e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NotSerializableException expected) { 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 137e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom public final void testReadResolve04() throws Exception { 138e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom for (String algorithm : keyFactoryAlgorithms) { 139e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom KeyRepChild kr = new KeyRepChild(KeyRep.Type.PUBLIC, algorithm, "X.509", 140e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom new byte[] { 1, 2, 3 }); 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr.readResolve(); 143e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom fail("NotSerializableException has not been thrown (no format) " + algorithm); 144e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NotSerializableException expected) { 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 149e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom public final void testReadResolve05() throws Exception { 150e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom for (String algorithm : keyFactoryAlgorithms) { 151e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom KeyRepChild kr = new KeyRepChild(KeyRep.Type.PRIVATE, algorithm, "PKCS#8", 152e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom new byte[] { 1, 2, 3 }); 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kr.readResolve(); 155e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom fail("NotSerializableException has not been thrown (no format) " + algorithm); 156e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom } catch (NotSerializableException expected) { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class KeyRepChild extends KeyRep { 162e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom public KeyRepChild(KeyRep.Type type, String algorithm, String format, byte[] encoded) { 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(type, algorithm, format, encoded); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 166e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom // Overriden to make public for testing 167e390842aabb31c195bbbe53686029cd6634d9466Brian Carlstrom @Override public Object readResolve() throws ObjectStreamException { 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return super.readResolve(); 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 172