SSLServerSocketTest.java revision 229e34b182b98e1dba15d3dc6341954986ae2b7a
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License. 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.api.javax.net.ssl; 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 21eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport org.apache.harmony.luni.util.Base64; 22eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_PortManager; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.io.ByteArrayInputStream; 26eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.io.IOException; 27eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.io.InputStream; 28eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.net.InetAddress; 29eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.security.KeyStore; 30d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughesimport java.security.SecureRandom; 31e92ca10c7620dd54c5e13fdabb6f1ff6adefd9fdBrian Carlstromimport java.util.Arrays; 32eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 33eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport javax.net.ssl.KeyManager; 34eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport javax.net.ssl.KeyManagerFactory; 35eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport javax.net.ssl.SSLContext; 36eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport javax.net.ssl.SSLServerSocket; 37eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SSLServerSocketTest extends TestCase { 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 40eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob // set to true if on Android, false if on RI 41eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob boolean useBKS = true; 42eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Additional class for SSLServerSocket constructor verification 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class mySSLServerSocket extends SSLServerSocket { 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public mySSLServerSocket() throws IOException{ 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(); 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 51eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public mySSLServerSocket(int port) throws IOException{ 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(port); 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 55eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public mySSLServerSocket(int port, int backlog) throws IOException{ 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(port, backlog); 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 59eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public mySSLServerSocket(int port, int backlog, InetAddress address) throws IOException{ 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(port, backlog, address); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 63eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String[] getSupportedCipherSuites() { 65eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return null; 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 67eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setEnabledCipherSuites(String[] suites) { 69eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 71eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String[] getEnabledCipherSuites() { 73eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return null; 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 75eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String[] getSupportedProtocols() { 77eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return null; 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 79eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String[] getEnabledProtocols() { 81eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return null; 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 83eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setEnabledProtocols(String[] protocols) { 85eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 87f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setEnableSessionCreation(boolean flag) { 89eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 91eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getEnableSessionCreation() { 93eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return false; 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setNeedClientAuth(boolean need) { 97eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 99eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getNeedClientAuth() { 101eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return false; 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 103f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getUseClientMode() { 105eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return false; 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 107eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setUseClientMode(boolean mode) { 109eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 111f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getWantClientAuth() { 113eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return false; 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setWantClientAuth(boolean mode) { 116eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 119f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 121229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#SSLServerSocket() 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testConstructor_01() { 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 125eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket ssl = new mySSLServerSocket(); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception ex) { 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception was thrown " + ex); 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 130f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 132229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#SSLServerSocket(int port) 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testConstructor_02() { 135eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket ssl; 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int portNumber = Support_PortManager.getNextPort(); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int[] port_invalid = {-1, 65536, Integer.MIN_VALUE, Integer.MAX_VALUE}; 138f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl = new mySSLServerSocket(portNumber); 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(portNumber, ssl.getLocalPort()); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception ex) { 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception was thrown " + ex); 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 145f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < port_invalid.length; i++) { 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl = new mySSLServerSocket(port_invalid[i]); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException should be thrown"); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException iae) { 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(e + " was thrown instead of IllegalArgumentException"); 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 156f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl = new mySSLServerSocket(portNumber); 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new mySSLServerSocket(portNumber); 160eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob fail("IOException Expected when opening an already opened port"); 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException ioe) { 162eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob // expected 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception ex) { 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception was thrown " + ex); 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 167f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 169229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#SSLServerSocket(int port, int backlog) 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testConstructor_03() { 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project mySSLServerSocket ssl; 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int portNumber = Support_PortManager.getNextPort(); 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int[] port_invalid = {-1, Integer.MIN_VALUE, Integer.MAX_VALUE}; 175f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl = new mySSLServerSocket(portNumber, 1); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(portNumber, ssl.getLocalPort()); 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception ex) { 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception was thrown"); 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 182f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < port_invalid.length; i++) { 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl = new mySSLServerSocket(port_invalid[i], 1); 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException should be thrown"); 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException iae) { 188eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob // expected 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(e + " was thrown instead of IllegalArgumentException"); 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 193f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project portNumber = Support_PortManager.getNextPort(); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl = new mySSLServerSocket(portNumber, 1); 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new mySSLServerSocket(portNumber, 1); 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException should be thrown"); 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException ioe) { 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 202f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 204229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#SSLServerSocket(int port, int backlog, InetAddress address) 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testConstructor_04() { 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project mySSLServerSocket ssl; 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetAddress ia = null; 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int portNumber = Support_PortManager.getNextPort(); 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int[] port_invalid = {-1, 65536, Integer.MIN_VALUE, Integer.MAX_VALUE}; 211f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl = new mySSLServerSocket(portNumber, 0, ia); 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(portNumber, ssl.getLocalPort()); 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception ex) { 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception was thrown"); 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 218f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project portNumber = Support_PortManager.getNextPort(); 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl = new mySSLServerSocket(portNumber, 0, InetAddress.getLocalHost()); 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(portNumber, ssl.getLocalPort()); 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception ex) { 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception was thrown"); 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 226f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < port_invalid.length; i++) { 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl = new mySSLServerSocket(port_invalid[i], 1, InetAddress.getLocalHost()); 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException should be thrown"); 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException iae) { 232eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob // expected 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(e + " was thrown instead of IllegalArgumentException"); 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 237f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project portNumber = Support_PortManager.getNextPort(); 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl = new mySSLServerSocket(portNumber, 0, InetAddress.getLocalHost()); 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new mySSLServerSocket(portNumber, 0, InetAddress.getLocalHost()); 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException should be thrown for"); 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException ioe) { 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 245f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 246f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 248f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws Exception 249229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getSupportedCipherSuites() 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 251eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_getSupportedCipherSuites() throws Exception { 252eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 253eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String[] res = sss.getSupportedCipherSuites(); 254eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertNotNull("NULL result", res); 255eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue("no supported cipher suites available.", res.length > 0); 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 257eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 259f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 260229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getEnabledCipherSuites() 261229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#setEnabledCipherSuites(String[] suites) 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 263eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_EnabledCipherSuites() throws Exception { 264eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 266eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnabledCipherSuites(null); 267eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } catch (IllegalArgumentException iae) { 268eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob //expected 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 270eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String[] unsupportedCipherSuites = {"unsupported"}; 271eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob try { 272eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnabledCipherSuites(unsupportedCipherSuites); 273eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } catch (IllegalArgumentException iae) { 274eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob //expected 275eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } 276eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob int count = sss.getSupportedCipherSuites().length; 277eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue("No supported cipher suites", count > 0); 278eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnabledCipherSuites(sss.getSupportedCipherSuites()); 279eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String[] res = sss.getEnabledCipherSuites(); 280eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertNotNull("NULL result", res); 281e92ca10c7620dd54c5e13fdabb6f1ff6adefd9fdBrian Carlstrom assertEquals("not all supported cipher suites were enabled", 282e92ca10c7620dd54c5e13fdabb6f1ff6adefd9fdBrian Carlstrom Arrays.asList(sss.getSupportedCipherSuites()), 283e92ca10c7620dd54c5e13fdabb6f1ff6adefd9fdBrian Carlstrom Arrays.asList(res)); 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 285f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 287f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 288229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getSupportedProtocols() 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 290eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_getSupportedProtocols() throws Exception { 291eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 292eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String[] res = sss.getSupportedCipherSuites(); 293eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertNotNull("NULL result", res); 294eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue("no supported protocols available.", res.length > 0); 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 296f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 298f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 299229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getEnabledProtocols() 300229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#setEnabledProtocols(String[] protocols) 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 302eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_EnabledProtocols() throws Exception { 303eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 305eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnabledProtocols(null); 306eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } catch (IllegalArgumentException iae) { 307eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob //expected 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 309eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String[] unsupportedProtocols = {"unsupported"}; 310eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob try { 311eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnabledProtocols(unsupportedProtocols); 312eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } catch (IllegalArgumentException iae) { 313eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob //expected 314eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } 315eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob int count = sss.getSupportedProtocols().length; 316eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue("No supported protocols", count > 0); 317eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnabledProtocols(sss.getSupportedProtocols()); 318eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String[] res = sss.getEnabledProtocols(); 319eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertNotNull("NULL result", res); 320eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue("no enabled protocols.", res.length == count); 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 322f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 324f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 325229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#setEnableSessionCreation(boolean flag) 326229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getEnableSessionCreation() 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 328eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_EnableSessionCreation() throws Exception { 329eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 330eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue(sss.getEnableSessionCreation()); 331eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnableSessionCreation(false); 332eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertFalse(sss.getEnableSessionCreation()); 333eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnableSessionCreation(true); 334eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue(sss.getEnableSessionCreation()); 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 336f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 338f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 339229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#setNeedClientAuth(boolean need) 340229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getNeedClientAuthCreation() 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 342eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_NeedClientAuth() throws Exception { 343eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 344eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setNeedClientAuth(true); 345eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue(sss.getNeedClientAuth()); 346eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setNeedClientAuth(false); 347eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertFalse(sss.getNeedClientAuth()); 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 349f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 351f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 352229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getUseClientMode() 353229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#setUseClientMode(boolean mode) 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 355eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_UseClientMode() throws Exception { 356eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 357eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setUseClientMode(false); 358eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertFalse(sss.getUseClientMode()); 359eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setUseClientMode(true); 360eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue(sss.getUseClientMode()); 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 362f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 364f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 365229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#setWantClientAuth(boolean want) 366229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getWantClientAuthCreation() 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 368eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_WantClientAuth() throws Exception { 369eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 370eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setWantClientAuth(true); 371eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue(sss.getWantClientAuth()); 372eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setWantClientAuth(false); 373eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertFalse(sss.getWantClientAuth()); 374eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } 375eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 376eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 377f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes /** 378eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob * Defines the keystore contents for the server, BKS version. Holds just a 379eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob * single self-generated key. The subject name is "Test Server". 380eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob */ 381f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes private static final String SERVER_KEYS_BKS = 382eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "AAAAAQAAABQDkebzoP1XwqyWKRCJEpn/t8dqIQAABDkEAAVteWtleQAAARpYl20nAAAAAQAFWC41" + 383eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "MDkAAAJNMIICSTCCAbKgAwIBAgIESEfU1jANBgkqhkiG9w0BAQUFADBpMQswCQYDVQQGEwJVUzET" + 384eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "MBEGA1UECBMKQ2FsaWZvcm5pYTEMMAoGA1UEBxMDTVRWMQ8wDQYDVQQKEwZHb29nbGUxEDAOBgNV" + 385eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "BAsTB0FuZHJvaWQxFDASBgNVBAMTC1Rlc3QgU2VydmVyMB4XDTA4MDYwNTExNTgxNFoXDTA4MDkw" + 386eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "MzExNTgxNFowaTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExDDAKBgNVBAcTA01U" + 387eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "VjEPMA0GA1UEChMGR29vZ2xlMRAwDgYDVQQLEwdBbmRyb2lkMRQwEgYDVQQDEwtUZXN0IFNlcnZl" + 388eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "cjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LIdKaIr9/vsTq8BZlA3R+NFWRaH4lGsTAQy" + 389eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "DPMF9ZqEDOaL6DJuu0colSBBBQ85hQTPa9m9nyJoN3pEi1hgamqOvQIWcXBk+SOpUGRZZFXwniJV" + 390eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "zDKU5nE9MYgn2B9AoiH3CSuMz6HRqgVaqtppIe1jhukMc/kHVJvlKRNy9XMCAwEAATANBgkqhkiG" + 391eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "9w0BAQUFAAOBgQC7yBmJ9O/eWDGtSH9BH0R3dh2NdST3W9hNZ8hIa8U8klhNHbUCSSktZmZkvbPU" + 392eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "hse5LI3dh6RyNDuqDrbYwcqzKbFJaq/jX9kCoeb3vgbQElMRX8D2ID1vRjxwlALFISrtaN4VpWzV" + 393eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "yeoHPW4xldeZmoVtjn8zXNzQhLuBqX2MmAAAAqwAAAAUvkUScfw9yCSmALruURNmtBai7kQAAAZx" + 394eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "4Jmijxs/l8EBaleaUru6EOPioWkUAEVWCxjM/TxbGHOi2VMsQWqRr/DZ3wsDmtQgw3QTrUK666sR" + 395eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "MBnbqdnyCyvM1J2V1xxLXPUeRBmR2CXorYGF9Dye7NkgVdfA+9g9L/0Au6Ugn+2Cj5leoIgkgApN" + 396eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "vuEcZegFlNOUPVEs3SlBgUF1BY6OBM0UBHTPwGGxFBBcetcuMRbUnu65vyDG0pslT59qpaR0TMVs" + 397eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "P+tcheEzhyjbfM32/vwhnL9dBEgM8qMt0sqF6itNOQU/F4WGkK2Cm2v4CYEyKYw325fEhzTXosck" + 398eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "MhbqmcyLab8EPceWF3dweoUT76+jEZx8lV2dapR+CmczQI43tV9btsd1xiBbBHAKvymm9Ep9bPzM" + 399eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "J0MQi+OtURL9Lxke/70/MRueqbPeUlOaGvANTmXQD2OnW7PISwJ9lpeLfTG0LcqkoqkbtLKQLYHI" + 400eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "rQfV5j0j+wmvmpMxzjN3uvNajLa4zQ8l0Eok9SFaRr2RL0gN8Q2JegfOL4pUiHPsh64WWya2NB7f" + 401eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "V+1s65eA5ospXYsShRjo046QhGTmymwXXzdzuxu8IlnTEont6P4+J+GsWk6cldGbl20hctuUKzyx" + 402eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "OptjEPOKejV60iDCYGmHbCWAzQ8h5MILV82IclzNViZmzAapeeCnexhpXhWTs+xDEYSKEiG/camt" + 403eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "bhmZc3BcyVJrW23PktSfpBQ6D8ZxoMfF0L7V2GQMaUg+3r7ucrx82kpqotjv0xHghNIm95aBr1Qw" + 404eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "1gaEjsC/0wGmmBDg1dTDH+F1p9TInzr3EFuYD0YiQ7YlAHq3cPuyGoLXJ5dXYuSBfhDXJSeddUkl" + 405eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "k1ufZyOOcskeInQge7jzaRfmKg3U94r+spMEvb0AzDQVOKvjjo1ivxMSgFRZaDb/4qw="; 406eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 407f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes /** 408eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob * Defines the keystore contents for the server, JKS version. Holds just a 409eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob * single self-generated key. The subject name is "Test Server". 410eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob */ 411f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes private static final String SERVER_KEYS_JKS = 412eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "/u3+7QAAAAIAAAABAAAAAQAFbXlrZXkAAAEaWFfBeAAAArowggK2MA4GCisGAQQBKgIRAQEFAASC" + 413eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "AqI2kp5XjnF8YZkhcF92YsJNQkvsmH7zqMM87j23zSoV4DwyE3XeC/gZWq1ToScIhoqZkzlbWcu4" + 414eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "T/Zfc/DrfGk/rKbBL1uWKGZ8fMtlZk8KoAhxZk1JSyJvdkyKxqmzUbxk1OFMlN2VJNu97FPVH+du" + 415eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "dvjTvmpdoM81INWBW/1fZJeQeDvn4mMbbe0IxgpiLnI9WSevlaDP/sm1X3iO9yEyzHLL+M5Erspo" + 416eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "Cwa558fOu5DdsICMXhvDQxjWFKFhPHnKtGe+VvwkG9/bAaDgx3kfhk0w5zvdnkKb+8Ed9ylNRzdk" + 417eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "ocAa/mxlMTOsTvDKXjjsBupNPIIj7OP4GNnZaxkJjSs98pEO67op1GX2qhy6FSOPNuq8k/65HzUc" + 418eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "PYn6voEeh6vm02U/sjEnzRevQ2+2wXoAdp0EwtQ/DlMe+NvcwPGWKuMgX4A4L93DZGb04N2VmAU3" + 419eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "YLOtZwTO0LbuWrcCM/q99G/7LcczkxIVrO2I/rh8RXVczlf9QzcrFObFv4ATuspWJ8xG7DhsMbnk" + 420eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "rT94Pq6TogYeoz8o8ZMykesAqN6mt/9+ToIemmXv+e+KU1hI5oLwWMnUG6dXM6hIvrULY6o+QCPH" + 421eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "172YQJMa+68HAeS+itBTAF4Clm/bLn6reHCGGU6vNdwU0lYldpiOj9cB3t+u2UuLo6tiFWjLf5Zs" + 422eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "EQJETd4g/EK9nHxJn0GAKrWnTw7pEHQJ08elzUuy04C/jEEG+4QXU1InzS4o/kR0Sqz2WTGDoSoq" + 423eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "ewuPRU5bzQs/b9daq3mXrnPtRBL6HfSDAdpTK76iHqLCGdqx3avHjVSBm4zFvEuYBCev+3iKOBmg" + 424eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "yh7eQRTjz4UOWfy85omMBr7lK8PtfVBDzOXpasxS0uBgdUyBDX4tO6k9jZ8a1kmQRQAAAAEABVgu" + 425eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "NTA5AAACSDCCAkQwggGtAgRIR8SKMA0GCSqGSIb3DQEBBAUAMGkxCzAJBgNVBAYTAlVTMRMwEQYD" + 426eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "VQQIEwpDYWxpZm9ybmlhMQwwCgYDVQQHEwNNVFYxDzANBgNVBAoTBkdvb2dsZTEQMA4GA1UECxMH" + 427eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "QW5kcm9pZDEUMBIGA1UEAxMLVGVzdCBTZXJ2ZXIwHhcNMDgwNjA1MTA0ODQyWhcNMDgwOTAzMTA0" + 428eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "ODQyWjBpMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEMMAoGA1UEBxMDTVRWMQ8w" + 429eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "DQYDVQQKEwZHb29nbGUxEDAOBgNVBAsTB0FuZHJvaWQxFDASBgNVBAMTC1Rlc3QgU2VydmVyMIGf" + 430eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwoC6chqCI84rj1PrXuJgbiit4EV909zR6N0jNlYfg" + 431eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "itwB39bP39wH03rFm8T59b3mbSptnGmCIpLZn25KPPFsYD3JJ+wFlmiUdEP9H05flfwtFQJnw9uT" + 432eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "3rRIdYVMPcQ3RoZzwAMliGr882I2thIDbA6xjGU/1nRIdvk0LtxH3QIDAQABMA0GCSqGSIb3DQEB" + 433eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "BAUAA4GBAJn+6YgUlY18Ie+0+Vt8oEi81DNi/bfPrAUAh63fhhBikx/3R9dl3wh09Z6p7cIdNxjW" + 434eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "n2ll+cRW9eqF7z75F0Omm0C7/KAEPjukVbszmzeU5VqzkpSt0j84YWi+TfcHRrfvhLbrlmGITVpY" + 435eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "ol5pHLDyqGmDs53pgwipWqsn/nEXEBgj3EoqPeqHbDf7YaP8h/5BSt0="; 436eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 437eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob private String PASSWORD = "android"; 438eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 439eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob /** 440eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob * Loads a keystore from a base64-encoded String. Returns the KeyManager[] 441eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob * for the result. 442eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob */ 443eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob private KeyManager[] getKeyManagers() throws Exception { 444eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String keys = (useBKS ? SERVER_KEYS_BKS : SERVER_KEYS_JKS); 445b1b8fbeeae579e9f49c41166bb5d9b2e60b75438Elliott Hughes byte[] bytes = Base64.decode(keys.getBytes()); 446eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob InputStream inputStream = new ByteArrayInputStream(bytes); 447f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 448eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); 449eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob keyStore.load(inputStream, PASSWORD.toCharArray()); 450eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob inputStream.close(); 451f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 452eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String algorithm = KeyManagerFactory.getDefaultAlgorithm(); 453eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(algorithm); 454eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob keyManagerFactory.init(keyStore, PASSWORD.toCharArray()); 455f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 456eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return keyManagerFactory.getKeyManagers(); 457eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } 458eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 459eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob private SSLServerSocket getSSLServerSocket() throws Exception { 460eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLContext context = SSLContext.getInstance("TLS"); 461eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob context.init(getKeyManagers(), null, null); 462eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = (SSLServerSocket) context.getServerSocketFactory() 463eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob .createServerSocket(); 464eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return sss; 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 466f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 467d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes public void test_creationStressTest() throws Exception { 468d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes KeyManager[] keyManagers = getKeyManagers(); 469d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes // Test the default codepath, which uses /dev/urandom. 470d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes SSLContext sslContext = SSLContext.getInstance("TLS"); 471d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes sslContext.init(keyManagers, null, null); 472d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes for (int i = 0; i < 2048; ++i) { 473d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes sslContext.getServerSocketFactory().createServerSocket(); 474d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes } 475f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 476d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes // Test the other codepath, which copies a seed from a byte[]. 477d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes sslContext.init(keyManagers, null, new SecureRandom()); 478d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes for (int i = 0; i < 2048; ++i) { 479d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes sslContext.getServerSocketFactory().createServerSocket(); 480d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes } 481d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes } 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 483