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 Boris V. Kuznetsov
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes*/
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage java.security;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.tests.support.RandomImpl;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests for <code>SecureRandom</code> constructor and methods
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class SecureRandomTest extends TestCase {
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * SRProvider
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	Provider p;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @see TestCase#setUp()
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void setUp() throws Exception {
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		super.setUp();
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		p = new SRProvider();
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Security.insertProviderAt(p, 1);
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @see TestCase#tearDown()
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void tearDown() throws Exception {
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		super.tearDown();
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Security.removeProvider(p.getName());
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testNext() {
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		SecureRandom sr = new SecureRandom();
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (sr.next(1) != 1 || sr.next(2) != 3 || sr.next(3) != 7) {
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("next failed");
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Class under test for void setSeed(long)
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testSetSeedlong() {
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		SecureRandom sr = new SecureRandom();
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		sr.setSeed(12345);
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (!RandomImpl.runEngineSetSeed) {
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("setSeed failed");
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testNextBytes() {
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		byte[] b = new byte[5];
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		SecureRandom sr = new SecureRandom();
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		sr.nextBytes(b);
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < b.length; i++) {
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if (b[i] != (byte)(i + 0xF1)) {
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				fail("nextBytes failed");
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Class under test for void SecureRandom()
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testSecureRandom() {
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		SecureRandom sr = new SecureRandom();
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (!sr.getAlgorithm().equals("someRandom")  ||
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				sr.getProvider()!= p) {
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("incorrect SecureRandom implementation" + p.getName());
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Class under test for void SecureRandom(byte[])
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testSecureRandombyteArray() {
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		byte[] b = {1,2,3};
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		new SecureRandom(b);
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (!RandomImpl.runEngineSetSeed) {
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("No setSeed");
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Class under test for SecureRandom getInstance(String)
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testGetInstanceString() {
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		SecureRandom sr = null;
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			sr = SecureRandom.getInstance("someRandom");
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (NoSuchAlgorithmException e) {
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail(e.toString());
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (sr.getProvider() != p || !"someRandom".equals(sr.getAlgorithm())) {
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("getInstance failed");
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Class under test for SecureRandom getInstance(String, String)
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testGetInstanceStringString() throws Exception {
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		SecureRandom sr = SecureRandom.getInstance("someRandom", "SRProvider");
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (sr.getProvider() != p || !"someRandom".equals(sr.getAlgorithm())) {
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("getInstance failed");
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Class under test for SecureRandom getInstance(String, Provider)
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testGetInstanceStringProvider() throws Exception {
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Provider p = new SRProvider();
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SecureRandom sr = SecureRandom.getInstance("someRandom", p);
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (sr.getProvider() != p || !"someRandom".equals(sr.getAlgorithm())) {
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("getInstance failed");
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Class under test for void setSeed(byte[])
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testSetSeedbyteArray() {
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		byte[] b = {1,2,3};
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		SecureRandom sr = new SecureRandom();
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		sr.setSeed(b);
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (!RandomImpl.runEngineSetSeed) {
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("setSeed failed");
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testGetSeed() {
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		byte[] b = SecureRandom.getSeed(4);
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if( b.length != 4) {
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("getSeed failed");
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public final void testGenerateSeed() {
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		SecureRandom sr = new SecureRandom();
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		byte[] b = sr.generateSeed(4);
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < b.length; i++) {
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if (b[i] != (byte)i) {
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				fail("generateSeed failed");
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	class SRProvider extends Provider {
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public SRProvider() {
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            super("SRProvider", 1.0, "SRProvider for testing");
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            put("SecureRandom.someRandom",
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "org.apache.harmony.security.tests.support.RandomImpl");
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
180