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