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 Boris V. Kuznetsov 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.java.security; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SecureRandom; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security; 307d71a13aa0cb794f14152b36b3873bf8ca595cdcBrian Carlstromimport junit.framework.TestCase; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.RandomImpl; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>SecureRandom</code> constructor and methods 35f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SecureRandomTest extends TestCase { 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SRProvider 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider p; 43f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see TestCase#setUp() 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void setUp() throws Exception { 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.setUp(); 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project p = new SRProvider(); 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Security.insertProviderAt(p, 1); 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see TestCase#tearDown() 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void tearDown() throws Exception { 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.tearDown(); 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Security.removeProvider(p.getName()); 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testNext() { 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MySecureRandom sr = new MySecureRandom(); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (sr.nextElement(1) != 1 || sr.nextElement(2) != 3 || sr.nextElement(3) != 7) { 64f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes fail("next failed"); 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Class under test for void setSeed(long) 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testSetSeedlong() { 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom sr = new SecureRandom(); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sr.setSeed(12345); 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!RandomImpl.runEngineSetSeed) { 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("setSeed failed"); 76f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testNextBytes() { 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b = new byte[5]; 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom sr = new SecureRandom(); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sr.nextBytes(b); 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < b.length; i++) { 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (b[i] != (byte)(i + 0xF1)) { 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("nextBytes failed"); 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 88f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sr.nextBytes(null); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("expected exception"); 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Class under test for void SecureRandom() 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testSecureRandom() { 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom sr = new SecureRandom(); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!sr.getAlgorithm().equals("someRandom") || 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sr.getProvider()!= p) { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("incorrect SecureRandom implementation" + p.getName()); 105f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Class under test for void SecureRandom(byte[]) 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testSecureRandombyteArray() { 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b = {1,2,3}; 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new SecureRandom(b); 114f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!RandomImpl.runEngineSetSeed) { 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No setSeed"); 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 118f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 119f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Class under test for SecureRandom getInstance(String) 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testGetInstanceString() { 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom sr = null; 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 128f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sr = SecureRandom.getInstance("someRandom"); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(e.toString()); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (sr.getProvider() != p || !"someRandom".equals(sr.getAlgorithm())) { 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("getInstance failed"); 134f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Class under test for SecureRandom getInstance(String, String) 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testGetInstanceStringString() throws Exception { 141f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes SecureRandom sr = SecureRandom.getInstance("someRandom", "SRProvider"); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (sr.getProvider() != p || !"someRandom".equals(sr.getAlgorithm())) { 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("getInstance failed"); 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 145f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom r = SecureRandom.getInstance("anotherRandom", "SRProvider"); 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("expected NoSuchAlgorithmException"); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchProviderException e) { 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 158f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom r = SecureRandom.getInstance("someRandom", "UnknownProvider"); 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("expected NoSuchProviderException"); 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchProviderException e) { 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 171f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom r = SecureRandom.getInstance("someRandom", (String)null); 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("expected IllegalArgumentException"); 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchProviderException e) { 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 184f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom r = SecureRandom.getInstance(null, "SRProvider"); 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("expected NullPointerException"); 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchProviderException e) { 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Class under test for SecureRandom getInstance(String, Provider) 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testGetInstanceStringProvider() throws Exception { 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider p = new SRProvider(); 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom sr = SecureRandom.getInstance("someRandom", p); 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (sr.getProvider() != p || !"someRandom".equals(sr.getAlgorithm())) { 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("getInstance failed"); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 208f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom r = SecureRandom.getInstance("unknownRandom", p); 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("expected NoSuchAlgorithmException"); 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 220f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom r = SecureRandom.getInstance(null, p); 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("expected NullPointerException"); 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom r = SecureRandom.getInstance("anyRandom", (Provider)null); 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("expected IllegalArgumentException"); 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("unexpected: " + e); 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 242f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Class under test for void setSeed(byte[]) 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testSetSeedbyteArray() { 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b = {1,2,3}; 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom sr = new SecureRandom(); 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sr.setSeed(b); 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!RandomImpl.runEngineSetSeed) { 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("setSeed failed"); 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 256f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testGetSeed() { 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b = SecureRandom.getSeed(4); 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if( b.length != 4) { 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("getSeed failed"); 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testGenerateSeed() { 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecureRandom sr = new SecureRandom(); 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b = sr.generateSeed(4); 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < b.length; i++) { 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (b[i] != (byte)i) { 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("generateSeed failed"); 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 275f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 276f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 277f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public class SRProvider extends Provider { 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public SRProvider() { 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super("SRProvider", 1.0, "SRProvider for testing"); 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project put("SecureRandom.someRandom", 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "org.apache.harmony.security.tests.support.RandomImpl"); 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 285f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class MySecureRandom extends SecureRandom { 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public MySecureRandom(){ 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(); 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 290f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int nextElement(int numBits) { 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return super.next(numBits); 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 296