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 18f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilsonpackage javax.net.ssl; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.ByteBuffer; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The abstract implementation of secure communications using SSL, TLS, or other 24f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * protocols. It includes the setup, handshake, and encrypt/decrypt 25f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * functionality needed to create a secure connection. 26f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 27f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * @since 1.5 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class SSLEngine { 30f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson private final String peerHost; 31f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson private final int peerPort; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code SSLEngine} instance. 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected SSLEngine() { 37f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson peerHost = null; 38f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson peerPort = -1; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code SSLEngine} instance with the specified host and 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * port. 44f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param host 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the host. 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param port 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the port of the host. 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected SSLEngine(String host, int port) { 51f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson this.peerHost = host; 52f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson this.peerPort = port; 53f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson } 54f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson 55f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson /** 56f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * Returns the name of the peer host. 57f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 58f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * @return the name of the peer host, or {@code null} if none is available. 59f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson */ 60f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson public String getPeerHost() { 61f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson return peerHost; 62f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson } 63f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson 64f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson /** 65f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * Returns the port number of the peer host. 66f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 67f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * @return the port number of the peer host, or {@code -1} is none is 68f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * available. 69f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson */ 70f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson public int getPeerPort() { 71f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson return peerPort; 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Initiates a handshake on this engine. 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Calling this method is not needed for the initial handshake: it will be 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * called by {@code wrap} or {@code unwrap} if the initial handshake has not 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * been started yet. 80f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SSLException 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if starting the handshake fails. 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalStateException 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the engine does not have all the needed settings (e.g. 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * client/server mode not set). 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract void beginHandshake() throws SSLException; 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Notifies this engine instance that no more inbound network data will be 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * sent to this engine. 92f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SSLException 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this engine did not receive a needed protocol specific 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * close notification message from the peer. 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract void closeInbound() throws SSLException; 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Notifies this engine instance that no more outbound application data will 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be sent to this engine. 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract void closeOutbound(); 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a delegate task for this engine instance. Some engine operations 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * may require the results of blocking or long running operations, and the 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code SSLEngineResult} instances returned by this engine may indicate 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that a delegated task result is needed. In this case the 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Runnable#run() run} method of the returned {@code Runnable} 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * delegated task must be called. 112f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a delegate task, or {@code null} if none are available. 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract Runnable getDelegatedTask(); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the SSL cipher suite names that are enabled in this engine 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * instance. 120f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the SSL cipher suite names that are enabled in this engine 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * instance. 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract String[] getEnabledCipherSuites(); 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the protocol version names that are enabled in this engine 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * instance. 129f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the protocol version names that are enabled in this engine 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * instance. 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract String[] getEnabledProtocols(); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns whether new SSL sessions may be established by this engine. 137f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if new session may be established, {@code false} if 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * existing sessions must be reused. 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean getEnableSessionCreation(); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the status of the handshake of this engine instance. 145f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the status of the handshake of this engine instance. 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract SSLEngineResult.HandshakeStatus getHandshakeStatus(); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns whether this engine instance will require client authentication. 152f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this engine will require client authentication, 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} if no client authentication is needed. 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean getNeedClientAuth(); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the SSL session for this engine instance. 160f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the SSL session for this engine instance. 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract SSLSession getSession(); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the SSL cipher suite names that are supported by this engine. 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * These cipher suites can be enabled using 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link #setEnabledCipherSuites(String[])}. 169f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the SSL cipher suite names that are supported by this engine. 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract String[] getSupportedCipherSuites(); 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the protocol names that are supported by this engine. These 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * protocols can be enables using {@link #setEnabledProtocols(String[])}. 177f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the protocol names that are supported by this engine. 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract String[] getSupportedProtocols(); 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns whether this engine is set to act in client mode when 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * handshaking. 185f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the engine is set to do handshaking in client 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * mode. 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean getUseClientMode(); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns whether this engine will request client authentication. 193f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if client authentication will be requested, 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} otherwise. 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean getWantClientAuth(); 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns whether no more inbound data will be accepted by this engine. 201f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if no more inbound data will be accepted by this 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * engine, {@code false} otherwise. 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean isInboundDone(); 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns whether no more outbound data will be produced by this engine. 209f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if no more outbound data will be producted by this 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * engine, {@code otherwise} false. 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean isOutboundDone(); 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the SSL cipher suite names that should be enabled in this engine 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * instance. Only cipher suites listed by {@code getSupportedCipherSuites()} 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are allowed. 219f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param suites 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the SSL cipher suite names to be enabled. 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if one of the specified cipher suites is not supported, or if 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code suites} is {@code null}. 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract void setEnabledCipherSuites(String[] suites); 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the protocol version names that should be enabled in this engine 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * instance. Only protocols listed by {@code getSupportedProtocols()} are 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * allowed. 232f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param protocols 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the protocol version names to be enabled. 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if one of the protocol version names is not supported, or if 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code protocols} is {@code null}. 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract void setEnabledProtocols(String[] protocols); 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets whether new SSL sessions may be established by this engine instance. 243f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param flag 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} if new SSL sessions may be established, 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} if existing SSL sessions must be reused. 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract void setEnableSessionCreation(boolean flag); 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets whether this engine must require client authentication. The client 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * authentication is one of: 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul> 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>authentication required</li> 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>authentication requested</li> 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>no authentication needed</li> 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul> 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This method overrides the setting of {@link #setWantClientAuth(boolean)}. 259f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param need 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} if client authentication is required, 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} if no authentication is needed. 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract void setNeedClientAuth(boolean need); 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets whether this engine should act in client (or server) mode when 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * handshaking. 269f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param mode 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} if this engine should act in client mode, 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} if not. 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if this method is called after starting the initial 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * handshake. 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract void setUseClientMode(boolean mode); 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets whether this engine should request client authentication. The client 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * authentication is one of the following: 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul> 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>authentication required</li> 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>authentication requested</li> 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>no authentication needed</li> 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul> 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This method overrides the setting of {@link #setNeedClientAuth(boolean)}. 288f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param want 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} if client authentication should be requested, 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code false} if no authentication is needed. 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract void setWantClientAuth(boolean want); 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Decodes the incoming network data buffer into application data buffers. 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If a handshake has not been started yet, it will automatically be 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * started. 299f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param src 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the buffer with incoming network data 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param dsts 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array of destination buffers for incoming application 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * data. 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the offset in the array of destination buffers to which data 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is to be transferred. 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 309f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * the maximum number of destination buffers to be used. 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the result object of this operation. 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SSLException 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if a problem occurred while processing the data. 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IndexOutOfBoundsException 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code length} is greater than 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code dsts.length - offset}. 316f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * @throws java.nio.ReadOnlyBufferException 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if one of the destination buffers is read-only. 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code src}, {@code dsts}, or one of the entries in 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code dsts} is {@code null}. 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalStateException 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the engine does not have all the needed settings (e.g. 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * client/server mode not set). 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 3250c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom public abstract SSLEngineResult unwrap(ByteBuffer src, 3260c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom ByteBuffer[] dsts, 3270c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom int offset, 3280c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom int length) throws SSLException; 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Encodes the outgoing application data buffers into the network data 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer. If a handshake has not been started yet, it will automatically be 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * started. 334f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param srcs 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array of source buffers of outgoing application data. 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the offset in the array of source buffers from which data is 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to be retrieved. 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param length 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the maximum number of source buffers to be used. 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param dst 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the destination buffer for network data. 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the result object of this operation. 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SSLException 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if a problem occurred while processing the data. 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IndexOutOfBoundsException 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code length} is greater than 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code srcs.length - offset}. 350f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * @throws java.nio.ReadOnlyBufferException 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the destination buffer is readonly. 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code srcs}, {@code dst}, or one the entries in 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code srcs} is {@code null}. 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalStateException 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the engine does not have all the needed settings (e.g. 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * client/server mode not set). 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 359f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson public abstract SSLEngineResult wrap(ByteBuffer[] srcs, int offset, int length, ByteBuffer dst) 360f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson throws SSLException; 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Decodes the incoming network data buffer into the application data 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer. If a handshake has not been started yet, it will automatically be 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * started. 366f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param src 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the buffer with incoming network data 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param dst 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the destination buffer for incoming application data. 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the result object of this operation. 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SSLException 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if a problem occurred while processing the data. 374f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * @throws java.nio.ReadOnlyBufferException 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if one of the destination buffers is read-only. 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code src} or {@code dst} is {@code null}. 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalStateException 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the engine does not have all the needed settings (e.g. 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * client/server mode not set). 381f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson */ 382f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson public SSLEngineResult unwrap(ByteBuffer src, ByteBuffer dst) throws SSLException { 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return unwrap(src, new ByteBuffer[] { dst }, 0, 1); 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Decodes the incoming network data buffer into the application data 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffers. If a handshake has not been started yet, it will automatically 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be started. 390f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param src 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the buffer with incoming network data 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param dsts 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array of destination buffers for incoming application 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * data. 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the result object of this operation. 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SSLException 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if a problem occurred while processing the data. 399f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * @throws java.nio.ReadOnlyBufferException 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if one of the destination buffers is read-only. 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code src} or {@code dsts} is {@code null}. 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalStateException 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the engine does not have all the needed settings (e.g. 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * client/server mode not set). 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 407f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson public SSLEngineResult unwrap(ByteBuffer src, ByteBuffer[] dsts) throws SSLException { 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (dsts == null) { 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException("Byte buffer array dsts is null"); 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return unwrap(src, dsts, 0, dsts.length); 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Encodes the outgoing application data buffers into the network data 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer. If a handshake has not been started yet, it will automatically be 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * started. 418f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param srcs 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array of source buffers of outgoing application data. 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param dst 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the destination buffer for network data. 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the result object of this operation. 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SSLException 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if a problem occurred while processing the data. 426f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * @throws java.nio.ReadOnlyBufferException 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the destination buffer is readonly. 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code srcs} or {@code dst} is {@code null}. 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalStateException 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the engine does not have all the needed settings (e.g. 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * client/server mode not set). 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 434f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson public SSLEngineResult wrap(ByteBuffer[] srcs, ByteBuffer dst) throws SSLException { 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (srcs == null) { 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException("Byte buffer array srcs is null"); 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrap(srcs, 0, srcs.length, dst); 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Encodes the outgoing application data buffer into the network data 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer. If a handshake has not been started yet, it will automatically be 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * started. 445f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param src 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source buffers of outgoing application data. 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param dst 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the destination buffer for network data. 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the result object of this operation. 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws SSLException 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if a problem occurred while processing the data. 453f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * @throws java.nio.ReadOnlyBufferException 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the destination buffer is readonly. 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code src} or {@code dst} is {@code null}. 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalStateException 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the engine does not have all the needed settings (e.g. 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * client/server mode not set). 460f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson */ 461f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson public SSLEngineResult wrap(ByteBuffer src, ByteBuffer dst) throws SSLException { 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return wrap(new ByteBuffer[] { src }, 0, 1, dst); 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 4640c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom 4650c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom /** 4660c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom * Returns a new SSLParameters based on this SSLSocket's current 4670c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom * cipher suites, protocols, and client authentication settings. 4680c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom * 4690c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom * @since 1.6 4700c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom */ 4710c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom public SSLParameters getSSLParameters() { 4720c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom SSLParameters p = new SSLParameters(); 4730c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom p.setCipherSuites(getEnabledCipherSuites()); 4740c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom p.setProtocols(getEnabledProtocols()); 4750c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom p.setNeedClientAuth(getNeedClientAuth()); 4760c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom p.setWantClientAuth(getWantClientAuth()); 4770c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom return p; 4780c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom } 4790c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom 4800c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom /** 4810c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom * Sets various SSL handshake parameters based on the SSLParameter 4820c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom * argument. Specifically, sets the SSLEngine's enabled cipher 4830c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom * suites if the parameter's cipher suites are non-null. Similarly 4840c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom * sets the enabled protocols. If the parameters specify the want 4850c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom * or need for client authentication, those requirements are set 4860c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom * on the SSLEngine, otherwise both are set to false. 4870c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom * @since 1.6 4880c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom */ 4890c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom public void setSSLParameters(SSLParameters p) { 4900c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom String[] cipherSuites = p.getCipherSuites(); 4910c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom if (cipherSuites != null) { 4920c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom setEnabledCipherSuites(cipherSuites); 4930c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom } 4940c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom String[] protocols = p.getProtocols(); 4950c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom if (protocols != null) { 4960c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom setEnabledProtocols(protocols); 4970c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom } 4980c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom if (p.getNeedClientAuth()) { 4990c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom setNeedClientAuth(true); 5000c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom } else if (p.getWantClientAuth()) { 5010c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom setWantClientAuth(true); 5020c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom } else { 5030c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom setWantClientAuth(false); 5040c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom } 5050c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom } 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 507