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