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 17e82be46881b2ab9d64b35c0ee53fc359b5cfd18aNarayan Kamathpackage org.apache.harmony.tests.javax.net.ssl; 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 21eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.io.ByteArrayInputStream; 22eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.io.IOException; 23eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.io.InputStream; 24eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.net.InetAddress; 25eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport java.security.KeyStore; 26d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughesimport java.security.SecureRandom; 27e92ca10c7620dd54c5e13fdabb6f1ff6adefd9fdBrian Carlstromimport java.util.Arrays; 287ff645482d5d10f2c15955ed812de183dead5557Tobias Thiererimport java.util.Base64; 29eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 30eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport javax.net.ssl.KeyManager; 31eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport javax.net.ssl.KeyManagerFactory; 32eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport javax.net.ssl.SSLContext; 33eff7bc0401e656948b0f491d88fe134843ef1573Urs Grobimport javax.net.ssl.SSLServerSocket; 34eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SSLServerSocketTest extends TestCase { 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob // set to true if on Android, false if on RI 38eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob boolean useBKS = true; 39eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Additional class for SSLServerSocket constructor verification 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class mySSLServerSocket extends SSLServerSocket { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public mySSLServerSocket() throws IOException{ 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(); 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 48eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public mySSLServerSocket(int port) throws IOException{ 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(port); 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 52eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public mySSLServerSocket(int port, int backlog) throws IOException{ 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(port, backlog); 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 56eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public mySSLServerSocket(int port, int backlog, InetAddress address) throws IOException{ 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(port, backlog, address); 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 60eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String[] getSupportedCipherSuites() { 62eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return null; 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 64eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setEnabledCipherSuites(String[] suites) { 66eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 68eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String[] getEnabledCipherSuites() { 70eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return null; 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 72eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String[] getSupportedProtocols() { 74eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return null; 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 76eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String[] getEnabledProtocols() { 78eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return null; 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 80eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setEnabledProtocols(String[] protocols) { 82eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 84f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setEnableSessionCreation(boolean flag) { 86eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 88eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getEnableSessionCreation() { 90eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return false; 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 92f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setNeedClientAuth(boolean need) { 94eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getNeedClientAuth() { 98eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return false; 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 100f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getUseClientMode() { 102eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return false; 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 104eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setUseClientMode(boolean mode) { 106eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 108f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getWantClientAuth() { 110eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return false; 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setWantClientAuth(boolean mode) { 113eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 116f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 118229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#SSLServerSocket() 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 120bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes public void testConstructor() throws Exception { 121bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes SSLServerSocket ssl = new mySSLServerSocket(); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 123f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 125229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#SSLServerSocket(int port) 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 127bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes public void testConstructor_I() throws Exception { 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int[] port_invalid = {-1, 65536, Integer.MIN_VALUE, Integer.MAX_VALUE}; 129f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 130bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes SSLServerSocket ssl = new mySSLServerSocket(0); 131f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < port_invalid.length; i++) { 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 134bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes new mySSLServerSocket(port_invalid[i]); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException should be thrown"); 136bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes } catch (IllegalArgumentException expected) { 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 139f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 141bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes new mySSLServerSocket(ssl.getLocalPort()); 142eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob fail("IOException Expected when opening an already opened port"); 143bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes } catch (IOException expected) { 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 146f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 148229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#SSLServerSocket(int port, int backlog) 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 150bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes public void testConstructor_II() throws Exception { 151bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes mySSLServerSocket ssl = new mySSLServerSocket(0, 1); 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int[] port_invalid = {-1, Integer.MIN_VALUE, Integer.MAX_VALUE}; 153f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < port_invalid.length; i++) { 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 156bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes new mySSLServerSocket(port_invalid[i], 1); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException should be thrown"); 158bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes } catch (IllegalArgumentException expected) { 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 161f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 163bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes new mySSLServerSocket(ssl.getLocalPort(), 1); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException should be thrown"); 165bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes } catch (IOException expected) { 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 170229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#SSLServerSocket(int port, int backlog, InetAddress address) 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 172bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes public void testConstructor_IIInetAddress() throws Exception { 173bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes // A null InetAddress is okay. 174bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes new mySSLServerSocket(0, 0, null); 175f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 176bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes int[] port_invalid = {-1, 65536, Integer.MIN_VALUE, Integer.MAX_VALUE}; 177f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 178bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes mySSLServerSocket ssl = new mySSLServerSocket(0, 0, InetAddress.getLocalHost()); 179f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < port_invalid.length; i++) { 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 182bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes new mySSLServerSocket(port_invalid[i], 1, InetAddress.getLocalHost()); 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException should be thrown"); 184bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes } catch (IllegalArgumentException expected) { 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 187f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 189bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes new mySSLServerSocket(ssl.getLocalPort(), 0, InetAddress.getLocalHost()); 190bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes fail("IOException should be thrown for"); 191bd8d745469c817f0865237fe4e5ca85b0e75f071Elliott Hughes } catch (IOException expected) { 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 193f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 194f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 196f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws Exception 197229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getSupportedCipherSuites() 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 199eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_getSupportedCipherSuites() throws Exception { 200eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 201eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String[] res = sss.getSupportedCipherSuites(); 202eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertNotNull("NULL result", res); 203eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue("no supported cipher suites available.", res.length > 0); 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 205eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 207f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 208229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getEnabledCipherSuites() 209229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#setEnabledCipherSuites(String[] suites) 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 211eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_EnabledCipherSuites() throws Exception { 212eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 214eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnabledCipherSuites(null); 215eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } catch (IllegalArgumentException iae) { 216eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob //expected 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 218eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String[] unsupportedCipherSuites = {"unsupported"}; 219eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob try { 220eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnabledCipherSuites(unsupportedCipherSuites); 221eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } catch (IllegalArgumentException iae) { 222eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob //expected 223eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } 224eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob int count = sss.getSupportedCipherSuites().length; 225eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue("No supported cipher suites", count > 0); 226eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnabledCipherSuites(sss.getSupportedCipherSuites()); 227eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String[] res = sss.getEnabledCipherSuites(); 228eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertNotNull("NULL result", res); 229e92ca10c7620dd54c5e13fdabb6f1ff6adefd9fdBrian Carlstrom assertEquals("not all supported cipher suites were enabled", 230e92ca10c7620dd54c5e13fdabb6f1ff6adefd9fdBrian Carlstrom Arrays.asList(sss.getSupportedCipherSuites()), 231e92ca10c7620dd54c5e13fdabb6f1ff6adefd9fdBrian Carlstrom Arrays.asList(res)); 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 233f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 235f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 236229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getSupportedProtocols() 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 238eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_getSupportedProtocols() throws Exception { 239eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 240eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String[] res = sss.getSupportedCipherSuites(); 241eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertNotNull("NULL result", res); 242eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue("no supported protocols available.", res.length > 0); 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 244f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 246f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 247229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getEnabledProtocols() 248229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#setEnabledProtocols(String[] protocols) 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 250eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_EnabledProtocols() throws Exception { 251eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 253eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnabledProtocols(null); 254eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } catch (IllegalArgumentException iae) { 255eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob //expected 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 257eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String[] unsupportedProtocols = {"unsupported"}; 258eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob try { 259eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnabledProtocols(unsupportedProtocols); 260eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } catch (IllegalArgumentException iae) { 261eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob //expected 262eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } 263eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob int count = sss.getSupportedProtocols().length; 264eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue("No supported protocols", count > 0); 265eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnabledProtocols(sss.getSupportedProtocols()); 266eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String[] res = sss.getEnabledProtocols(); 267eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertNotNull("NULL result", res); 268eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue("no enabled protocols.", res.length == count); 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 270f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 272f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 273229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#setEnableSessionCreation(boolean flag) 274229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getEnableSessionCreation() 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 276eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_EnableSessionCreation() throws Exception { 277eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 278eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue(sss.getEnableSessionCreation()); 279eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnableSessionCreation(false); 280eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertFalse(sss.getEnableSessionCreation()); 281eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setEnableSessionCreation(true); 282eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue(sss.getEnableSessionCreation()); 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 284f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 286f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 287229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#setNeedClientAuth(boolean need) 288229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getNeedClientAuthCreation() 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 290eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_NeedClientAuth() throws Exception { 291eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 292eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setNeedClientAuth(true); 293eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue(sss.getNeedClientAuth()); 294eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setNeedClientAuth(false); 295eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertFalse(sss.getNeedClientAuth()); 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 297f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 299f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 300229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getUseClientMode() 301229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#setUseClientMode(boolean mode) 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 303eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_UseClientMode() throws Exception { 304eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 305eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setUseClientMode(false); 306eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertFalse(sss.getUseClientMode()); 307eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setUseClientMode(true); 308eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue(sss.getUseClientMode()); 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 310f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 312f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @throws IOException 313229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#setWantClientAuth(boolean want) 314229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLServerSocket#getWantClientAuthCreation() 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 316eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob public void test_WantClientAuth() throws Exception { 317eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = getSSLServerSocket(); 318eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setWantClientAuth(true); 319eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertTrue(sss.getWantClientAuth()); 320eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob sss.setWantClientAuth(false); 321eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob assertFalse(sss.getWantClientAuth()); 322eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } 323eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 324eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 325f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes /** 326eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob * Defines the keystore contents for the server, BKS version. Holds just a 327eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob * single self-generated key. The subject name is "Test Server". 328eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob */ 329f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes private static final String SERVER_KEYS_BKS = 330eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "AAAAAQAAABQDkebzoP1XwqyWKRCJEpn/t8dqIQAABDkEAAVteWtleQAAARpYl20nAAAAAQAFWC41" + 331eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "MDkAAAJNMIICSTCCAbKgAwIBAgIESEfU1jANBgkqhkiG9w0BAQUFADBpMQswCQYDVQQGEwJVUzET" + 332eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "MBEGA1UECBMKQ2FsaWZvcm5pYTEMMAoGA1UEBxMDTVRWMQ8wDQYDVQQKEwZHb29nbGUxEDAOBgNV" + 333eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "BAsTB0FuZHJvaWQxFDASBgNVBAMTC1Rlc3QgU2VydmVyMB4XDTA4MDYwNTExNTgxNFoXDTA4MDkw" + 334eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "MzExNTgxNFowaTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExDDAKBgNVBAcTA01U" + 335eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "VjEPMA0GA1UEChMGR29vZ2xlMRAwDgYDVQQLEwdBbmRyb2lkMRQwEgYDVQQDEwtUZXN0IFNlcnZl" + 336eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "cjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LIdKaIr9/vsTq8BZlA3R+NFWRaH4lGsTAQy" + 337eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "DPMF9ZqEDOaL6DJuu0colSBBBQ85hQTPa9m9nyJoN3pEi1hgamqOvQIWcXBk+SOpUGRZZFXwniJV" + 338eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "zDKU5nE9MYgn2B9AoiH3CSuMz6HRqgVaqtppIe1jhukMc/kHVJvlKRNy9XMCAwEAATANBgkqhkiG" + 339eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "9w0BAQUFAAOBgQC7yBmJ9O/eWDGtSH9BH0R3dh2NdST3W9hNZ8hIa8U8klhNHbUCSSktZmZkvbPU" + 340eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "hse5LI3dh6RyNDuqDrbYwcqzKbFJaq/jX9kCoeb3vgbQElMRX8D2ID1vRjxwlALFISrtaN4VpWzV" + 341eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "yeoHPW4xldeZmoVtjn8zXNzQhLuBqX2MmAAAAqwAAAAUvkUScfw9yCSmALruURNmtBai7kQAAAZx" + 342eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "4Jmijxs/l8EBaleaUru6EOPioWkUAEVWCxjM/TxbGHOi2VMsQWqRr/DZ3wsDmtQgw3QTrUK666sR" + 343eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "MBnbqdnyCyvM1J2V1xxLXPUeRBmR2CXorYGF9Dye7NkgVdfA+9g9L/0Au6Ugn+2Cj5leoIgkgApN" + 344eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "vuEcZegFlNOUPVEs3SlBgUF1BY6OBM0UBHTPwGGxFBBcetcuMRbUnu65vyDG0pslT59qpaR0TMVs" + 345eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "P+tcheEzhyjbfM32/vwhnL9dBEgM8qMt0sqF6itNOQU/F4WGkK2Cm2v4CYEyKYw325fEhzTXosck" + 346eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "MhbqmcyLab8EPceWF3dweoUT76+jEZx8lV2dapR+CmczQI43tV9btsd1xiBbBHAKvymm9Ep9bPzM" + 347eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "J0MQi+OtURL9Lxke/70/MRueqbPeUlOaGvANTmXQD2OnW7PISwJ9lpeLfTG0LcqkoqkbtLKQLYHI" + 348eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "rQfV5j0j+wmvmpMxzjN3uvNajLa4zQ8l0Eok9SFaRr2RL0gN8Q2JegfOL4pUiHPsh64WWya2NB7f" + 349eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "V+1s65eA5ospXYsShRjo046QhGTmymwXXzdzuxu8IlnTEont6P4+J+GsWk6cldGbl20hctuUKzyx" + 350eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "OptjEPOKejV60iDCYGmHbCWAzQ8h5MILV82IclzNViZmzAapeeCnexhpXhWTs+xDEYSKEiG/camt" + 351eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "bhmZc3BcyVJrW23PktSfpBQ6D8ZxoMfF0L7V2GQMaUg+3r7ucrx82kpqotjv0xHghNIm95aBr1Qw" + 352eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "1gaEjsC/0wGmmBDg1dTDH+F1p9TInzr3EFuYD0YiQ7YlAHq3cPuyGoLXJ5dXYuSBfhDXJSeddUkl" + 353eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "k1ufZyOOcskeInQge7jzaRfmKg3U94r+spMEvb0AzDQVOKvjjo1ivxMSgFRZaDb/4qw="; 354eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 355f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes /** 356eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob * Defines the keystore contents for the server, JKS version. Holds just a 357eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob * single self-generated key. The subject name is "Test Server". 358eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob */ 359f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes private static final String SERVER_KEYS_JKS = 360eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "/u3+7QAAAAIAAAABAAAAAQAFbXlrZXkAAAEaWFfBeAAAArowggK2MA4GCisGAQQBKgIRAQEFAASC" + 361eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "AqI2kp5XjnF8YZkhcF92YsJNQkvsmH7zqMM87j23zSoV4DwyE3XeC/gZWq1ToScIhoqZkzlbWcu4" + 362eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "T/Zfc/DrfGk/rKbBL1uWKGZ8fMtlZk8KoAhxZk1JSyJvdkyKxqmzUbxk1OFMlN2VJNu97FPVH+du" + 363eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "dvjTvmpdoM81INWBW/1fZJeQeDvn4mMbbe0IxgpiLnI9WSevlaDP/sm1X3iO9yEyzHLL+M5Erspo" + 364eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "Cwa558fOu5DdsICMXhvDQxjWFKFhPHnKtGe+VvwkG9/bAaDgx3kfhk0w5zvdnkKb+8Ed9ylNRzdk" + 365eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "ocAa/mxlMTOsTvDKXjjsBupNPIIj7OP4GNnZaxkJjSs98pEO67op1GX2qhy6FSOPNuq8k/65HzUc" + 366eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "PYn6voEeh6vm02U/sjEnzRevQ2+2wXoAdp0EwtQ/DlMe+NvcwPGWKuMgX4A4L93DZGb04N2VmAU3" + 367eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "YLOtZwTO0LbuWrcCM/q99G/7LcczkxIVrO2I/rh8RXVczlf9QzcrFObFv4ATuspWJ8xG7DhsMbnk" + 368eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "rT94Pq6TogYeoz8o8ZMykesAqN6mt/9+ToIemmXv+e+KU1hI5oLwWMnUG6dXM6hIvrULY6o+QCPH" + 369eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "172YQJMa+68HAeS+itBTAF4Clm/bLn6reHCGGU6vNdwU0lYldpiOj9cB3t+u2UuLo6tiFWjLf5Zs" + 370eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "EQJETd4g/EK9nHxJn0GAKrWnTw7pEHQJ08elzUuy04C/jEEG+4QXU1InzS4o/kR0Sqz2WTGDoSoq" + 371eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "ewuPRU5bzQs/b9daq3mXrnPtRBL6HfSDAdpTK76iHqLCGdqx3avHjVSBm4zFvEuYBCev+3iKOBmg" + 372eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "yh7eQRTjz4UOWfy85omMBr7lK8PtfVBDzOXpasxS0uBgdUyBDX4tO6k9jZ8a1kmQRQAAAAEABVgu" + 373eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "NTA5AAACSDCCAkQwggGtAgRIR8SKMA0GCSqGSIb3DQEBBAUAMGkxCzAJBgNVBAYTAlVTMRMwEQYD" + 374eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "VQQIEwpDYWxpZm9ybmlhMQwwCgYDVQQHEwNNVFYxDzANBgNVBAoTBkdvb2dsZTEQMA4GA1UECxMH" + 375eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "QW5kcm9pZDEUMBIGA1UEAxMLVGVzdCBTZXJ2ZXIwHhcNMDgwNjA1MTA0ODQyWhcNMDgwOTAzMTA0" + 376eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "ODQyWjBpMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEMMAoGA1UEBxMDTVRWMQ8w" + 377eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "DQYDVQQKEwZHb29nbGUxEDAOBgNVBAsTB0FuZHJvaWQxFDASBgNVBAMTC1Rlc3QgU2VydmVyMIGf" + 378eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwoC6chqCI84rj1PrXuJgbiit4EV909zR6N0jNlYfg" + 379eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "itwB39bP39wH03rFm8T59b3mbSptnGmCIpLZn25KPPFsYD3JJ+wFlmiUdEP9H05flfwtFQJnw9uT" + 380eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "3rRIdYVMPcQ3RoZzwAMliGr882I2thIDbA6xjGU/1nRIdvk0LtxH3QIDAQABMA0GCSqGSIb3DQEB" + 381eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "BAUAA4GBAJn+6YgUlY18Ie+0+Vt8oEi81DNi/bfPrAUAh63fhhBikx/3R9dl3wh09Z6p7cIdNxjW" + 382eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "n2ll+cRW9eqF7z75F0Omm0C7/KAEPjukVbszmzeU5VqzkpSt0j84YWi+TfcHRrfvhLbrlmGITVpY" + 383eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob "ol5pHLDyqGmDs53pgwipWqsn/nEXEBgj3EoqPeqHbDf7YaP8h/5BSt0="; 384eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 385eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob private String PASSWORD = "android"; 386eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 387eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob /** 388eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob * Loads a keystore from a base64-encoded String. Returns the KeyManager[] 389eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob * for the result. 390eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob */ 391eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob private KeyManager[] getKeyManagers() throws Exception { 392eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String keys = (useBKS ? SERVER_KEYS_BKS : SERVER_KEYS_JKS); 3937ff645482d5d10f2c15955ed812de183dead5557Tobias Thierer byte[] bytes = Base64.getDecoder().decode(keys.getBytes()); 394eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob InputStream inputStream = new ByteArrayInputStream(bytes); 395f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 396eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); 397eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob keyStore.load(inputStream, PASSWORD.toCharArray()); 398eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob inputStream.close(); 399f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 400eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob String algorithm = KeyManagerFactory.getDefaultAlgorithm(); 401eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(algorithm); 402eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob keyManagerFactory.init(keyStore, PASSWORD.toCharArray()); 403f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 404eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return keyManagerFactory.getKeyManagers(); 405eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob } 406eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob 407eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob private SSLServerSocket getSSLServerSocket() throws Exception { 408eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLContext context = SSLContext.getInstance("TLS"); 409eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob context.init(getKeyManagers(), null, null); 410eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob SSLServerSocket sss = (SSLServerSocket) context.getServerSocketFactory() 411eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob .createServerSocket(); 412eff7bc0401e656948b0f491d88fe134843ef1573Urs Grob return sss; 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 414f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 415d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes public void test_creationStressTest() throws Exception { 416d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes KeyManager[] keyManagers = getKeyManagers(); 417d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes // Test the default codepath, which uses /dev/urandom. 418d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes SSLContext sslContext = SSLContext.getInstance("TLS"); 419d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes sslContext.init(keyManagers, null, null); 420d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes for (int i = 0; i < 2048; ++i) { 4215f8b0e8811187fb67b29268c6bf97e42cd5a3897Brian Carlstrom sslContext.getServerSocketFactory().createServerSocket().close(); 422d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes } 423f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 424d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes // Test the other codepath, which copies a seed from a byte[]. 425d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes sslContext.init(keyManagers, null, new SecureRandom()); 426d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes for (int i = 0; i < 2048; ++i) { 4275f8b0e8811187fb67b29268c6bf97e42cd5a3897Brian Carlstrom sslContext.getServerSocketFactory().createServerSocket().close(); 428d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes } 429d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes } 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 431