1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18e82be46881b2ab9d64b35c0ee53fc359b5cfd18aNarayan Kamathpackage org.apache.harmony.tests.javax.net.ssl; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumannimport java.io.IOException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.ByteBuffer; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.ReadOnlyBufferException; 23051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumannimport java.nio.channels.Pipe; 24051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumannimport java.nio.channels.Pipe.SinkChannel; 25051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumannimport java.nio.channels.Pipe.SourceChannel; 261cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport java.security.KeyManagementException; 271cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport java.security.NoSuchAlgorithmException; 281cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport java.util.Arrays; 29be25811712488827cf836ee6170eca8fb4e14fe4Urs Grobimport java.util.HashSet; 30be25811712488827cf836ee6170eca8fb4e14fe4Urs Grobimport java.util.Set; 31051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumannimport javax.net.ssl.SSLContext; 32051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumannimport javax.net.ssl.SSLEngine; 33051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumannimport javax.net.ssl.SSLEngineResult; 34b330a5e324ef8d399f12db82b4bf472859815fafKenny Rootimport javax.net.ssl.SSLEngineResult.Status; 35051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumannimport javax.net.ssl.SSLException; 36051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumannimport javax.net.ssl.SSLEngineResult.HandshakeStatus; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 38b330a5e324ef8d399f12db82b4bf472859815fafKenny Rootimport libcore.java.security.StandardNames; 395be4c97a83895b7e1385445db6a1717eb8df3e9bKenny Rootimport libcore.javax.net.ssl.TestSSLContext; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for SSLEngine class 43f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SSLEngineTest extends TestCase { 46b330a5e324ef8d399f12db82b4bf472859815fafKenny Root private static final int MAX_TLS_RECORD_SIZE = 32768; 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 48051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann private HandshakeHandler clientEngine; 49051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann private HandshakeHandler serverEngine; 50051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 51d37c804ccd11e38ee9221194866a152a4de6c8e9Jesse Wilson @Override protected void setUp() throws Exception { 52d37c804ccd11e38ee9221194866a152a4de6c8e9Jesse Wilson super.setUp(); 53d37c804ccd11e38ee9221194866a152a4de6c8e9Jesse Wilson } 54d37c804ccd11e38ee9221194866a152a4de6c8e9Jesse Wilson 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>SSLEngine()</code> constructor Assertion: creates 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SSLEngine object with null host and -1 port 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 59b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_Constructor() throws Exception { 601cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine e = getEngine(); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull(e.getPeerHost()); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(-1, e.getPeerPort()); 631cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob String[] suites = e.getSupportedCipherSuites(); 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.setEnabledCipherSuites(suites); 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(e.getEnabledCipherSuites().length, suites.length); 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>SSLEngine(String host, int port)</code> constructor 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 71b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_ConstructorLjava_lang_StringI01() throws Exception { 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 1010; 731cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine e = getEngine(null, port); 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull(e.getPeerHost()); 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(e.getPeerPort(), port); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.beginHandshake(); 78b330a5e324ef8d399f12db82b4bf472859815fafKenny Root fail("should throw IllegalStateException"); 79b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalStateException expected) { 801cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 81b330a5e324ef8d399f12db82b4bf472859815fafKenny Root 821cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob e = getEngine(null, port); 831cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob e.setUseClientMode(true); 84b330a5e324ef8d399f12db82b4bf472859815fafKenny Root e.beginHandshake(); 85b330a5e324ef8d399f12db82b4bf472859815fafKenny Root 861cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob e = getEngine(null, port); 871cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob e.setUseClientMode(false); 88b330a5e324ef8d399f12db82b4bf472859815fafKenny Root e.beginHandshake(); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>SSLEngine(String host, int port)</code> constructor 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 94b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_ConstructorLjava_lang_StringI02() throws Exception { 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 971cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine e = getEngine(host, port); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(e.getPeerHost(), host); 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(e.getPeerPort(), port); 1001cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob String[] suites = e.getSupportedCipherSuites(); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.setEnabledCipherSuites(suites); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(e.getEnabledCipherSuites().length, suites.length); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.setUseClientMode(true); 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(e.getUseClientMode()); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getPeerHost()</code> method 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 110b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_getPeerHost() throws Exception { 1111cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine e = getEngine(); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull(e.getPeerHost()); 1131cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob e = getEngine("www.fortify.net", 80); 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect host name", "www.fortify.net", e.getPeerHost()); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 116f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getPeerPort()</code> method 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 120b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_getPeerPort() throws Exception { 1211cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine e = getEngine(); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect default value of peer port", 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project -1 ,e.getPeerPort()); 1241cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob e = getEngine("www.fortify.net", 80); 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect peer port", 80, e.getPeerPort()); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 128b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_getSupportedProtocols() throws Exception { 1291cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 130b330a5e324ef8d399f12db82b4bf472859815fafKenny Root 131b330a5e324ef8d399f12db82b4bf472859815fafKenny Root String[] res = sse.getSupportedProtocols(); 132b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertNotNull(res); 133b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertTrue(res.length > 0); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 135f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 137229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#setEnabledProtocols(String[] protocols) 138229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#getEnabledProtocols() 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 140b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_EnabledProtocols() throws Exception { 1411cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 1421cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob String[] pr = sse.getSupportedProtocols(); 143b330a5e324ef8d399f12db82b4bf472859815fafKenny Root 144b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.setEnabledProtocols(pr); 145b330a5e324ef8d399f12db82b4bf472859815fafKenny Root String[] res = sse.getEnabledProtocols(); 146b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertNotNull("Null array was returned", res); 147b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals("Incorrect array length", res.length, pr.length); 148b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertTrue("Incorrect array was returned", Arrays.equals(res, pr)); 149b330a5e324ef8d399f12db82b4bf472859815fafKenny Root 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setEnabledProtocols(null); 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 153b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 156f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 158229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#getSupportedCipherSuites() 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 160b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_getSupportedCipherSuites() throws Exception { 1611cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 162b330a5e324ef8d399f12db82b4bf472859815fafKenny Root 163b330a5e324ef8d399f12db82b4bf472859815fafKenny Root String[] res = sse.getSupportedCipherSuites(); 164b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertNotNull(res); 165b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertTrue(res.length > 0); 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 167f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 169229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#setEnabledCipherSuites(String[] suites) 170229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#getEnabledCipherSuites() 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 172b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_EnabledCipherSuites() throws Exception { 1731cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 1741cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob String[] st = sse.getSupportedCipherSuites(); 175b330a5e324ef8d399f12db82b4bf472859815fafKenny Root 176b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.setEnabledCipherSuites(st); 177b330a5e324ef8d399f12db82b4bf472859815fafKenny Root String[] res = sse.getEnabledCipherSuites(); 178b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertNotNull("Null array was returned", res); 179b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals("Incorrect array length", res.length, st.length); 180b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertTrue("Incorrect array was returned", Arrays.equals(res, st)); 181b330a5e324ef8d399f12db82b4bf472859815fafKenny Root 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setEnabledCipherSuites(null); 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 185b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 188f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 190229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#setEnableSessionCreation(boolean flag) 191229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#getEnableSessionCreation() 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 193b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_EnableSessionCreation() throws Exception { 1941cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(sse.getEnableSessionCreation()); 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setEnableSessionCreation(false); 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(sse.getEnableSessionCreation()); 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setEnableSessionCreation(true); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(sse.getEnableSessionCreation()); 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception ex) { 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception " + ex); 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 205f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 207229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#setNeedClientAuth(boolean need) 208229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#getNeedClientAuth() 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 210b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_NeedClientAuth() throws Exception { 2111cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setNeedClientAuth(false); 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(sse.getNeedClientAuth()); 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setNeedClientAuth(true); 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(sse.getNeedClientAuth()); 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception ex) { 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception " + ex); 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 221f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 223229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#setWantClientAuth(boolean want) 224229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#getWantClientAuth() 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 226b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_WantClientAuth() throws Exception { 2271cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 228b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.setWantClientAuth(false); 229b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertFalse(sse.getWantClientAuth()); 230b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.setWantClientAuth(true); 231b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertTrue(sse.getWantClientAuth()); 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 233f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 235229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#beginHandshake() 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 237b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_beginHandshake() throws Exception { 2381cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.beginHandshake(); 2411cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail("IllegalStateException wasn't thrown"); 242b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalStateException expected) { 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2441cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob sse = getEngine("new host", 1080); 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.beginHandshake(); 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException wasn't thrown"); 248b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalStateException expected) { 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2501cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob sse = getEngine(); 251b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.setUseClientMode(true); 252b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.beginHandshake(); 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 254f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 256229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#setUseClientMode(boolean mode) 257229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#getUseClientMode() 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 259b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_UseClientMode() throws Exception { 2601cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 261b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.setUseClientMode(false); 262b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertFalse(sse.getUseClientMode()); 263b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.setUseClientMode(true); 264b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertTrue(sse.getUseClientMode()); 265f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 266b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse = getEngine(null, 1080); 267b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.setUseClientMode(true); 268b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.beginHandshake(); 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 270b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.setUseClientMode(false); 271b330a5e324ef8d399f12db82b4bf472859815fafKenny Root fail("IllegalArgumentException was not thrown"); 272b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 275f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 277229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#getSession() 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 279b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_getSession() throws Exception { 2801cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 281b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertNotNull(sse.getSession()); 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 283f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 285229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#getHandshakeStatus() 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 287b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_getHandshakeStatus() throws Exception { 2881cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 289b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(sse.getHandshakeStatus().toString(), "NOT_HANDSHAKING"); 290b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.setUseClientMode(true); 291b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.beginHandshake(); 292b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(sse.getHandshakeStatus().toString(), "NEED_WRAP"); 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 294f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 296229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#getDelegatedTask() 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 298b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_getDelegatedTask() throws Exception { 2991cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 300b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertNull(sse.getDelegatedTask()); 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 302f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 304229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts, 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * int offset, int length) 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Exception case: SSLException should be thrown. 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 308b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_01() throws Exception { 309051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann prepareEngines(); 310051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann doHandshake(); 311f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 312051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann ByteBuffer bbs = ByteBuffer.wrap(new byte[] {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,31,2,3,1,2,3,1,2,3,1,2,3}); 313d833702509b0cd9f738fb44c7c103b4e5dae439aKenny Root ByteBuffer bbd = ByteBuffer.allocate(clientEngine.engine.getSession().getApplicationBufferSize()); 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 315051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann clientEngine.engine.unwrap(bbs, new ByteBuffer[] { bbd }, 0, 1); 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SSLException wasn't thrown"); 317b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (SSLException expected) { 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 320f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 322229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts, 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * int offset, int length) 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Exception case: IndexOutOfBoundsException should be thrown. 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 326b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_02() throws Exception { 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = { ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100) }; 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bb = ByteBuffer.allocate(10); 3321cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 334f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 336051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bb, bbA, -1, 3); 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IndexOutOfBoundsException wasn't thrown"); 338b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IndexOutOfBoundsException expected) { 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 341051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bb, bbA, 0, -3); 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IndexOutOfBoundsException wasn't thrown"); 343b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IndexOutOfBoundsException expected) { 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 346051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bb, bbA, bbA.length + 1, bbA.length); 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IndexOutOfBoundsException wasn't thrown"); 348b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IndexOutOfBoundsException expected) { 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 351051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bb, bbA, 0, bbA.length + 1); 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IndexOutOfBoundsException wasn't thrown"); 353b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IndexOutOfBoundsException expected) { 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 356f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 358229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts, 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * int offset, int length) 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Exception case: ReadOnlyBufferException should be thrown. 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 362b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_03() throws Exception { 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbR = ByteBuffer.allocate(100).asReadOnlyBuffer(); 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = { bbR, ByteBuffer.allocate(10), ByteBuffer.allocate(100) }; 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bb = ByteBuffer.allocate(10); 3691cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 371f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 373051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bb, bbA, 0, bbA.length); 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ReadOnlyBufferException wasn't thrown"); 375b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (ReadOnlyBufferException expected) { 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 378f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 380229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts, 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * int offset, int length) 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Exception case: IllegalArgumentException should be thrown. 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 384b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_04() throws Exception { 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = {ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100)}; 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbAN = {ByteBuffer.allocate(100), null, ByteBuffer.allocate(100)}; 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbN = null; 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bb = ByteBuffer.allocate(10); 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bN = null; 3921cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 394f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 396051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bN, bbA, 0, 3); 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 398b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 401051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bb, bbAN, 0, 3); 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 403b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 406051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bb, bbN, 0, 0); 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 408b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 411051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bN, bbN, 0, 0); 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 413b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 416f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 418229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts, 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * int offset, int length) 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Exception case: IllegalStateException should be thrown. 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 422b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_05() throws Exception { 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = { ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100) }; 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bb = ByteBuffer.allocate(10); 4281cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 429f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 431b330a5e324ef8d399f12db82b4bf472859815fafKenny Root SSLEngineResult result = sse.unwrap(bb, bbA, 0, bbA.length); 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException wasn't thrown"); 433b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalStateException expected) { 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 436f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 438229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts, 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * int offset, int length) 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 441b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_06() throws Exception { 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = { ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100) }; 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bb = ByteBuffer.allocate(10); 4471cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 449f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 450b330a5e324ef8d399f12db82b4bf472859815fafKenny Root SSLEngineResult res = sse.unwrap(bb, bbA, 0, bbA.length); 451b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(0, res.bytesConsumed()); 452b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(0, res.bytesProduced()); 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 454f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 455b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_01() throws Exception { 456051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann prepareEngines(); 457051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann doHandshake(); 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbs = ByteBuffer.allocate(100); 459b330a5e324ef8d399f12db82b4bf472859815fafKenny Root ByteBuffer bbd = ByteBuffer.allocate(MAX_TLS_RECORD_SIZE); 4605a1dfc86838c8030550a8c954a1f817d0929f20aJesse Wilson clientEngine.engine.wrap(new ByteBuffer[] { bbs }, 0, 1, bbd); 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 462f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 464229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, int offset, 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * int length, ByteBuffer dst) 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Exception case: IndexOutOfBoundsException should be thrown. 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 468b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_02() throws Exception { 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bb = ByteBuffer.allocate(10); 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = {ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5)}; 4731cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 475f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 477051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.wrap(bbA, -1, 3, bb); 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IndexOutOfBoundsException wasn't thrown"); 479b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IndexOutOfBoundsException expected) { 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 482051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.wrap(bbA, 0, -3, bb); 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IndexOutOfBoundsException wasn't thrown"); 484b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IndexOutOfBoundsException expected) { 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 487051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.wrap(bbA, bbA.length + 1, bbA.length, bb); 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IndexOutOfBoundsException wasn't thrown"); 489b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IndexOutOfBoundsException expected) { 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 492051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.wrap(bbA, 0, bbA.length + 1, bb); 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IndexOutOfBoundsException wasn't thrown"); 494b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IndexOutOfBoundsException expected) { 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 497f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 499229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, int offset, 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * int length, ByteBuffer dst) 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Exception case: ReadOnlyBufferException should be thrown. 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 503b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_03() throws Exception { 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 506b330a5e324ef8d399f12db82b4bf472859815fafKenny Root ByteBuffer bb = ByteBuffer.allocate(MAX_TLS_RECORD_SIZE).asReadOnlyBuffer(); 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = {ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5)}; 5081cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 510f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 512051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.wrap(bbA, 0, bbA.length, bb); 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ReadOnlyBufferException wasn't thrown"); 514b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (ReadOnlyBufferException expected) { 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 517f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 519229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, int offset, 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * int length, ByteBuffer dst) 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Exception case: IllegalArgumentException should be thrown. 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 523b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_04() throws Exception { 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = {ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100)}; 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbN = null; 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bN = null; 5291cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine e = getEngine(host, port); 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.setUseClientMode(true); 531f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.wrap(bbA, 0, 3, bN); 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown for null srcs byte buffer array"); 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException ex) { 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 537f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.wrap(bbN, 0, 0, bN); 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException ex) { 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 544f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 546229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, int offset, 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * int length, ByteBuffer dst) 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Exception case: IllegalStateException should be thrown. 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 550b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_05() throws Exception { 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 553b330a5e324ef8d399f12db82b4bf472859815fafKenny Root ByteBuffer bb = ByteBuffer.allocate(MAX_TLS_RECORD_SIZE); 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = {ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5)}; 5551cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 556f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 558b330a5e324ef8d399f12db82b4bf472859815fafKenny Root SSLEngineResult result = sse.wrap(bbA, 0, bbA.length, bb); 559b330a5e324ef8d399f12db82b4bf472859815fafKenny Root fail("Should fail since mode not set yet"); 560b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalStateException expected) { 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 563f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 565229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, int offset, 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * int length, ByteBuffer dst) 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 568b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_06() throws Exception { 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 571b330a5e324ef8d399f12db82b4bf472859815fafKenny Root ByteBuffer bb = ByteBuffer.allocate(MAX_TLS_RECORD_SIZE); 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = {ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5)}; 5731cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 574f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sse.setUseClientMode(true); 575f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 576b330a5e324ef8d399f12db82b4bf472859815fafKenny Root SSLEngineResult result = sse.wrap(bbA, 0, bbA.length, bb); 577b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(SSLEngineResult.Status.OK, result.getStatus()); 578b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(0, result.bytesConsumed()); 579b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertTrue(result.bytesProduced() > 0); 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 581f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 583229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#closeOutbound() 584229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#isOutboundDone() 585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 586b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_closeOutbound() throws Exception { 5871cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 588f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 589b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertFalse(sse.isOutboundDone()); 590b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.closeOutbound(); 591b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertTrue(sse.isOutboundDone()); 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 593f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 595229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#closeInbound() 596229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#isInboundDone() 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 598b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_closeInbound() throws Exception { 5991cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(); 600f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 601b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertFalse(sse.isInboundDone()); 602b330a5e324ef8d399f12db82b4bf472859815fafKenny Root sse.closeInbound(); 603b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertTrue(sse.isInboundDone()); 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 605f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 607229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer dst) 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SSLException should be thrown. 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 610b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_ByteBuffer_ByteBuffer_01() throws Exception { 611051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann prepareEngines(); 612051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann doHandshake(); 613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbs = ByteBuffer.allocate(100); 614051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann ByteBuffer bbd = ByteBuffer.allocate(100); 615f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 617051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann SSLEngineResult unwrap = clientEngine.engine.unwrap(bbs, bbd); 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SSLException wasn't thrown"); 619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SSLException ex) { 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 623f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 625229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer dst) 626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ReadOnlyBufferException should be thrown. 627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 628b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_ByteBuffer_ByteBuffer_02() throws Exception { 629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbs = ByteBuffer.allocate(10); 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbd = ByteBuffer.allocate(100).asReadOnlyBuffer(); 6331cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 635f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 637051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bbs, bbd); 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ReadOnlyBufferException wasn't thrown"); 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ReadOnlyBufferException iobe) { 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(e + " was thrown instead of ReadOnlyBufferException"); 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 645f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 647229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer dst) 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException should be thrown. 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 650b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_ByteBuffer_ByteBuffer_03() throws Exception { 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbsN = null; 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbdN = null; 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbs = ByteBuffer.allocate(10); 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbd = ByteBuffer.allocate(100); 6571cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 659f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 661051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bbsN, bbd); 662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 663b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 665f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 667051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bbs, bbdN); 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 669b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 671f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 673051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bbsN, bbdN); 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 675b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 678f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 680229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer dst) 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalStateException should be thrown. 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 683b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_ByteBuffer_ByteBuffer_04() throws Exception { 684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbs = ByteBuffer.allocate(10); 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbd = ByteBuffer.allocate(100); 6881cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 689f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 691051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bbs, bbd); 692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException wasn't thrown"); 693b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalStateException expected) { 694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 696f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 698229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer dst) 699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 700b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_ByteBuffer_ByteBuffer_05() throws Exception { 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbs = ByteBuffer.allocate(10); 704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbd = ByteBuffer.allocate(100); 7051cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 707f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 708b330a5e324ef8d399f12db82b4bf472859815fafKenny Root SSLEngineResult res = sse.unwrap(bbs, bbd); 709b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(0, res.bytesConsumed()); 710b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(0, res.bytesProduced()); 711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 712f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 714229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts) 715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SSLException should be thrown. 716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 717b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_ByteBuffer$ByteBuffer_01() throws Exception { 718be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob prepareEngines(); 719be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob doHandshake(); 720051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 721f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes ByteBuffer bbs = ByteBuffer.allocate(100); 722be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob ByteBuffer bbd = ByteBuffer.allocate(100); 723f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 724051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann try { 725be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob clientEngine.engine.unwrap(bbs, new ByteBuffer[] { bbd }); 726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SSLException wasn't thrown"); 727b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (SSLException expected) { 728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 730051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 732229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts) 733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ReadOnlyBufferException should be thrown. 734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 735b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_ByteBuffer$ByteBuffer_02() throws Exception { 736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbs = ByteBuffer.allocate(10); 739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbR = ByteBuffer.allocate(100).asReadOnlyBuffer(); 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = { bbR, ByteBuffer.allocate(10), ByteBuffer.allocate(100) }; 7411cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 743f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 745051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bbs, bbA); 746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ReadOnlyBufferException wasn't thrown"); 747b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (ReadOnlyBufferException expected) { 748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 750f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 752229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts) 753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException should be thrown. 754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 755b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_ByteBuffer$ByteBuffer_03() throws Exception { 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = { ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100) }; 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbN = { ByteBuffer.allocate(100), null, ByteBuffer.allocate(100) }; 760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbAN = null; 761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bb = ByteBuffer.allocate(10); 762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bN = null; 7631cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 765f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 767051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bN, bbA); 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 769b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 771f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 773051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bb, bbAN); 774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 775b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 777f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 779051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bb, bbN); 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 781b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 783f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 785051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bN, bbAN); 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 787b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 790f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 792229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts) 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalStateException should be thrown. 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 795b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_ByteBuffer$ByteBuffer_04() throws Exception { 796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbs = ByteBuffer.allocate(10); 799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbd = {ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100) }; 8001cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 801f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 803051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.unwrap(bbs, bbd); 804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException wasn't thrown"); 805b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalStateException expected) { 806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 808f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 810229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#unwrap(ByteBuffer src, ByteBuffer[] dsts) 811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 812b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_unwrap_ByteBuffer$ByteBuffer_05() throws Exception { 813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbs = ByteBuffer.allocate(10); 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbd = {ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100) }; 8171cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 819f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 820b330a5e324ef8d399f12db82b4bf472859815fafKenny Root SSLEngineResult res = sse.unwrap(bbs, bbd); 821b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(0, res.bytesConsumed()); 822b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(0, res.bytesProduced()); 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 824f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 825b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_ByteBuffer_ByteBuffer_01() throws Exception { 826051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann prepareEngines(); 827051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann doHandshake(); 828051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann ByteBuffer bbs = ByteBuffer.allocate(20); 829051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann ByteBuffer bbd = ByteBuffer.allocate(20000); 8305a1dfc86838c8030550a8c954a1f817d0929f20aJesse Wilson clientEngine.engine.wrap(bbs, bbd); 831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 832f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 834229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer src, ByteBuffer dst) 835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ReadOnlyBufferException should be thrown. 836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 837b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_ByteBuffer_ByteBuffer_02() throws Exception { 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbs = ByteBuffer.allocate(10); 841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbd = ByteBuffer.allocate(100).asReadOnlyBuffer(); 8421cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 844f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 846051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.wrap(bbs, bbd); 847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ReadOnlyBufferException wasn't thrown"); 848b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (ReadOnlyBufferException expected) { 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 851f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 853229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer src, ByteBuffer dst) 854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException should be thrown. 855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 856b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_ByteBuffer_ByteBuffer_03() throws Exception { 857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbsN = null; 860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbdN = null; 861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbs = ByteBuffer.allocate(10); 862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbd = ByteBuffer.allocate(100); 8631cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 865f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 867051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.wrap(bbsN, bbd); 868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 869b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 871f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 873051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.wrap(bbs, bbdN); 874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 875b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 877f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 879051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.wrap(bbsN, bbdN); 880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 881b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 884f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 886229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer src, ByteBuffer dst) 887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalStateException should be thrown. 888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 889b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_ByteBuffer_ByteBuffer_04() throws Exception { 890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbs = ByteBuffer.allocate(10); 893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbd = ByteBuffer.allocate(10); 8941cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 895f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 897b330a5e324ef8d399f12db82b4bf472859815fafKenny Root SSLEngineResult result = sse.wrap(bbs, bbd); 898c54efa1b0849fde7c1dec4a6b9b8d4f60f7a1b7dKenny Root fail(); 899b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalStateException expected) { 900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 902f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 904229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer src, ByteBuffer dst) 905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 906b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_ByteBuffer_ByteBuffer_05() throws Exception { 907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bb = ByteBuffer.allocate(10); 9101cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 912f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 913b330a5e324ef8d399f12db82b4bf472859815fafKenny Root SSLEngineResult res = sse.wrap(bb, ByteBuffer.allocate(10)); 914b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(Status.BUFFER_OVERFLOW, res.getStatus()); 915b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(0, res.bytesConsumed()); 916b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(0, res.bytesProduced()); 917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 918f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 920229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, ByteBuffer dst) 921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SSLException should be thrown. 922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 923b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_ByteBuffer$ByteBuffer_01() throws Exception { 924051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann prepareEngines(); 925051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann doHandshake(); 926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bbs = ByteBuffer.allocate(100); 927051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann ByteBuffer bbd = ByteBuffer.allocate(20000); 928f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 929b330a5e324ef8d399f12db82b4bf472859815fafKenny Root clientEngine.engine.wrap(new ByteBuffer[] { bbs }, bbd); 930b330a5e324ef8d399f12db82b4bf472859815fafKenny Root serverEngine.engine.wrap(new ByteBuffer[] { bbs }, bbd); 931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 932f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 934229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, ByteBuffer dst) 935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ReadOnlyBufferException should be thrown. 936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 937b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_ByteBuffer$ByteBuffer_02() throws Exception { 938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bb = ByteBuffer.allocate(10).asReadOnlyBuffer(); 941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = {ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5)}; 9421cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 944f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 946051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.wrap(bbA, bb); 947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ReadOnlyBufferException wasn't thrown"); 948b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (ReadOnlyBufferException expected) { 949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 951f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 953229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, ByteBuffer dst) 954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException should be thrown. 955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 956b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_ByteBuffer$ByteBuffer_03() throws Exception { 957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = {ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100)}; 960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbAN = null; 961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bb = ByteBuffer.allocate(10); 962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bN = null; 9631cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 965f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 967051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.wrap(bbA, bN); 968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 969b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 971f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 973051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.wrap(bbAN, bb); 974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 975b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 977f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 979051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann sse.wrap(bbAN, bN); 980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 981b330a5e324ef8d399f12db82b4bf472859815fafKenny Root } catch (IllegalArgumentException expected) { 982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 984f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 986229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, ByteBuffer dst) 987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalStateException should be thrown. 988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 989b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_ByteBuffer$ByteBuffer_04() throws Exception { 990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bb = ByteBuffer.allocate(10); 993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = { ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5) }; 9941cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 995f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 996c54efa1b0849fde7c1dec4a6b9b8d4f60f7a1b7dKenny Root try { 997c54efa1b0849fde7c1dec4a6b9b8d4f60f7a1b7dKenny Root SSLEngineResult result = sse.wrap(bbA, bb); 998c54efa1b0849fde7c1dec4a6b9b8d4f60f7a1b7dKenny Root fail(); 999c54efa1b0849fde7c1dec4a6b9b8d4f60f7a1b7dKenny Root } catch (IllegalStateException expected) { 1000c54efa1b0849fde7c1dec4a6b9b8d4f60f7a1b7dKenny Root } 1001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1002f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1004229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * javax.net.ssl.SSLEngine#wrap(ByteBuffer[] srcs, ByteBuffer dst) 1005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1006b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void test_wrap_ByteBuffer$ByteBuffer_05() throws Exception { 1007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "new host"; 1008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 1009b330a5e324ef8d399f12db82b4bf472859815fafKenny Root ByteBuffer bb = ByteBuffer.allocate(2000); 1010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer[] bbA = { ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5) }; 10111cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLEngine sse = getEngine(host, port); 1012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sse.setUseClientMode(true); 1013f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1014b330a5e324ef8d399f12db82b4bf472859815fafKenny Root SSLEngineResult res = sse.wrap(bbA, bb); 1015b330a5e324ef8d399f12db82b4bf472859815fafKenny Root assertEquals(0, res.bytesConsumed()); 1016039b20086fa05ea9b2fa10f508c20afab34663dfKenny Root if (res.bytesProduced() == 0) { 1017039b20086fa05ea9b2fa10f508c20afab34663dfKenny Root assertEquals(HandshakeStatus.NEED_WRAP, res.getHandshakeStatus()); 1018039b20086fa05ea9b2fa10f508c20afab34663dfKenny Root } else { 1019039b20086fa05ea9b2fa10f508c20afab34663dfKenny Root assertEquals(HandshakeStatus.NEED_UNWRAP, res.getHandshakeStatus()); 1020039b20086fa05ea9b2fa10f508c20afab34663dfKenny Root } 1021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1022adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1023b330a5e324ef8d399f12db82b4bf472859815fafKenny Root private SSLEngine getEngine() throws Exception { 1024b330a5e324ef8d399f12db82b4bf472859815fafKenny Root SSLContext context = SSLContext.getInstance("TLS"); 1025b330a5e324ef8d399f12db82b4bf472859815fafKenny Root context.init(null, null, null); 10261cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob return context.createSSLEngine(); 1027adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1029b330a5e324ef8d399f12db82b4bf472859815fafKenny Root private SSLEngine getEngine(String host, int port) throws Exception { 1030b330a5e324ef8d399f12db82b4bf472859815fafKenny Root SSLContext context = SSLContext.getInstance("TLS"); 1031b330a5e324ef8d399f12db82b4bf472859815fafKenny Root context.init(null, null, null); 10321cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob return context.createSSLEngine(host, port); 1033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1034f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1035051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann class HandshakeHandler implements Runnable { 1036051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1037051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann private final SSLEngine engine; 1038051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1039051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann private final SourceChannel in; 1040051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1041051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann private final SinkChannel out; 1042051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1043051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann private final ByteBuffer EMPTY = ByteBuffer.allocate(0); 1044051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1045051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann @SuppressWarnings("unused") 1046051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann private final String LOGTAG; 1047051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1048051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann private SSLEngineResult.HandshakeStatus status; 1049051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1050051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann private ByteBuffer readBuffer; 1051051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1052051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann private ByteBuffer writeBuffer; 1053051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 10545be4c97a83895b7e1385445db6a1717eb8df3e9bKenny Root HandshakeHandler(SSLContext context, boolean clientMode, SourceChannel in, SinkChannel out) 10555be4c97a83895b7e1385445db6a1717eb8df3e9bKenny Root throws Exception { 1056051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann this.in = in; 1057051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann this.out = out; 10585be4c97a83895b7e1385445db6a1717eb8df3e9bKenny Root engine = context.createSSLEngine(); 1059051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann engine.setUseClientMode(clientMode); 1060be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob engine.beginHandshake(); 1061be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob status = engine.getHandshakeStatus(); 1062051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1063051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann if (clientMode) { 1064051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann LOGTAG = "CLIENT: "; 1065051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } else { 1066051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann LOGTAG = "SERVER: "; 1067051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1068051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1069051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann log("CipherSuites: " + Arrays.toString(engine.getEnabledCipherSuites())); 1070051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann log(status); 1071051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1072051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann readBuffer = ByteBuffer.allocate(200000); 1073051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann writeBuffer = ByteBuffer.allocate(20000); 1074051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1075051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1076051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann public SSLEngineResult.HandshakeStatus getStatus() { 1077051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann return status; 1078051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1079051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1080051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann private void log(Object o) { 1081051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann //System.out.print(LOGTAG); 1082051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann //System.out.println(o); 1083051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1084051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1085051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann private ByteBuffer read() throws IOException { 1086051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann if (readBuffer == null || readBuffer.remaining() == 0 || readBuffer.position() == 0) { 1087be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob readBuffer.clear(); 1088051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann int read = in.read(readBuffer); 1089051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann log("read: " + read); 1090051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann readBuffer.rewind(); 1091051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann readBuffer.limit(read); 1092051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1093051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann return readBuffer; 1094051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1095051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1096051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann public void run() { 1097be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob try { 1098be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob while (true) { 1099051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann switch (status) { 1100051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann case FINISHED: { 1101051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann log(status); 1102051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann return; 1103051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1104051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann case NEED_TASK: { 1105051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann log(status); 1106be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob Runnable task; 1107051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann while ((task = engine.getDelegatedTask()) != null) { 1108051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann task.run(); 1109051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1110051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann status = engine.getHandshakeStatus(); 1111051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann break; 1112051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1113051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann case NEED_UNWRAP: { 1114051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann log(status); 1115051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann ByteBuffer source = read(); 1116be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob writeBuffer.clear(); 1117051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1118051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann while (status == HandshakeStatus.NEED_UNWRAP) { 1119051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann SSLEngineResult result = engine.unwrap(source, writeBuffer); 1120051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann status = result.getHandshakeStatus(); 1121051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann log(result); 1122051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1123051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann break; 1124051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1125051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann case NEED_WRAP: { 1126051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann log(status); 1127be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob writeBuffer.clear(); 1128051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann 1129051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann int produced = 0; 1130051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann SSLEngineResult result = null; 1131051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann while (status == HandshakeStatus.NEED_WRAP) { 1132051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann result = engine.wrap(EMPTY, writeBuffer); 1133051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann status = result.getHandshakeStatus(); 1134051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann produced += result.bytesProduced(); 1135051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann log(result); 1136051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1137051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann writeBuffer.rewind(); 1138051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann writeBuffer.limit(produced); 1139051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann log("write: " + produced); 1140051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann out.write(writeBuffer); 1141051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann break; 1142051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1143051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann case NOT_HANDSHAKING: { 1144051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann log("Not Handshaking"); 1145051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann return; 1146051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1147051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1148051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1149be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob } catch (IOException e) { 1150be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob log(e); 1151be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob } catch (RuntimeException e) { 1152be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob // ignore; 1153051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1154051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1155051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1156f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1157b330a5e324ef8d399f12db82b4bf472859815fafKenny Root public void testHandshake() throws Exception { 1158be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob 1159051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann prepareEngines(); 1160be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob 1161051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann assertTrue("handshake failed", doHandshake()); 1162f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1163051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann System.out.println(clientEngine.engine.getSession().getCipherSuite()); 1164be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob 1165be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob assertEquals("Handshake not finished", 1166be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob SSLEngineResult.HandshakeStatus.FINISHED, 1167be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob clientEngine.getStatus()); 1168be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob assertEquals("Handshake not finished", 1169be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob SSLEngineResult.HandshakeStatus.FINISHED, 1170be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob serverEngine.getStatus()); 1171051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1172f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1173b330a5e324ef8d399f12db82b4bf472859815fafKenny Root void prepareEngines() throws Exception { 1174051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann Pipe clientSendPipe = Pipe.open(); 1175051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann Pipe serverSendPipe = Pipe.open(); 1176f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1177051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann SinkChannel clientSink = clientSendPipe.sink(); 1178051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann SourceChannel serverSource = clientSendPipe.source(); 1179051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann SinkChannel serverSink = serverSendPipe.sink(); 1180051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann SourceChannel clientSource = serverSendPipe.source(); 1181f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 11825be4c97a83895b7e1385445db6a1717eb8df3e9bKenny Root TestSSLContext context = TestSSLContext.create(); 11835be4c97a83895b7e1385445db6a1717eb8df3e9bKenny Root clientEngine = new HandshakeHandler(context.clientContext, true, clientSource, clientSink); 11845be4c97a83895b7e1385445db6a1717eb8df3e9bKenny Root serverEngine = new HandshakeHandler(context.serverContext, false, serverSource, serverSink); 1185051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1186f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1187051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann boolean doHandshake() throws InterruptedException { 1188051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann Thread clientThread = new Thread(clientEngine); 1189051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann clientThread.start(); 1190f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1191051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann Thread serverThread = new Thread(serverEngine); 1192051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann serverThread.start(); 1193f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1194051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann int i = 0; 1195051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann while (clientThread.isAlive() && serverThread.isAlive() && i < 20) { 1196051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann Thread.sleep(500); 1197051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann i++; 1198051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1199f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1200051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann if (clientThread.isAlive()) { 1201051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann clientThread.interrupt(); 1202051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1203f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1204051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann if (serverThread.isAlive()) { 1205051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann serverThread.interrupt(); 1206051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1207f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1208051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann return clientEngine.getStatus() == HandshakeStatus.FINISHED && serverEngine.getStatus() == HandshakeStatus.FINISHED; 1209051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann } 1210f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 1212