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