SSLEngine.java revision c9461f39290f815f560f2ec50e9ccde5ff4eb8f7
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 *
27b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin * <h3>Default configuration</h3>
28b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin * <p>{@code SSLEngine} instances obtained from default {@link SSLContext} are configured as
29b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin * follows:
30b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *
31b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin * <h4>Protocols</h4>
32b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin * <table>
33b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *     <thead>
34b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
35b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <th>Protocol</th>
36b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <th>Supported (API Levels)</th>
37b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <th>Enabled by default (API Levels)</th>
38b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
39b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *     </thead>
40b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *     <tbody>
41b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
42b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSLv3</td>
43b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1+</td>
44b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1+</td>
45b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
46b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
47b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLSv1</td>
48b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1+</td>
49b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1+</td>
50b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
51b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *     </tbody>
52b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin * </table>
53b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *
54b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin * <h4>Cipher suites</h4>
55b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin * <table>
56b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *     <thead>
57b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
58b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <th>Cipher suite</th>
59b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <th>Supported (API Levels)</th>
60b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <th>Enabled by default (API Levels)</th>
61b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
62b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *     </thead>
63b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *     <tbody>
64b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
65b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA</td>
66b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
67b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
68b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
69b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
70b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_DH_anon_EXPORT_WITH_RC4_40_MD5</td>
71b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
72b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
73b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
74b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
75b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_DH_anon_WITH_3DES_EDE_CBC_SHA</td>
76b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
77b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
78b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
79b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
80b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_DH_anon_WITH_DES_CBC_SHA</td>
81b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
82b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
83b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
84b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
85b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_DH_anon_WITH_RC4_128_MD5</td>
86b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
87b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
88b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
89b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
90b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</td>
91b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
92b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9-19</td>
93b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
94b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
95b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA</td>
96b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
97b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
98b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
99b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
100b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_DHE_DSS_WITH_DES_CBC_SHA</td>
101b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
102b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9-19</td>
103b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
104b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
105b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</td>
106b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
107b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9-19</td>
108b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
109b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
110b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA</td>
111b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
112b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
113b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
114b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
115b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_DHE_RSA_WITH_DES_CBC_SHA</td>
116b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
117b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9-19</td>
118b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
119b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
120b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_RSA_EXPORT_WITH_DES40_CBC_SHA</td>
121b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
122b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9-19</td>
123b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
124b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
125b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_RSA_EXPORT_WITH_RC4_40_MD5</td>
126b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
127b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9-19</td>
128b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
129b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
130b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_RSA_WITH_3DES_EDE_CBC_SHA</td>
131b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
132b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
133b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
134b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
135b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_RSA_WITH_DES_CBC_SHA</td>
136b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
137b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9-19</td>
138b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
139b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
140b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_RSA_WITH_NULL_MD5</td>
141b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
142b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
143b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
144b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
145b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_RSA_WITH_NULL_SHA</td>
146b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
147b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
148b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
149b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
150b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_RSA_WITH_RC4_128_MD5</td>
151b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
152b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
153b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
154b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
155b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>SSL_RSA_WITH_RC4_128_SHA</td>
156b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
157b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
158b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
159b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
160b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA</td>
161b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
162b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
163b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
164b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
165b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DH_anon_WITH_3DES_EDE_CBC_SHA</td>
166b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
167b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
168b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
169b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
170b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DH_anon_WITH_AES_128_CBC_SHA</td>
171b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
172b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
173b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
174b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
175b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DH_anon_WITH_AES_256_CBC_SHA</td>
176b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
177b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
178b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
179b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
180b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DH_anon_WITH_DES_CBC_SHA</td>
181b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
182b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
183b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
184b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
185b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA</td>
186b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
187b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
188b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
189b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
190b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA</td>
191b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
192b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
193b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
194b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
195b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DH_DSS_WITH_DES_CBC_SHA</td>
196b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
197b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
198b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
199b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
200b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA</td>
201b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
202b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
203b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
204b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
205b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA</td>
206b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
207b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
208b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
209b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
210b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DH_RSA_WITH_DES_CBC_SHA</td>
211b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
212b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
213b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
214b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
215b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</td>
216b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
217b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
218b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
219b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
220b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA</td>
221b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
222b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
223b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
224b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
225b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DHE_DSS_WITH_AES_128_CBC_SHA</td>
226b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
227b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
228b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
229b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
230b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA</td>
231b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
232b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>20+</td>
233b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
234b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
235b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DHE_DSS_WITH_DES_CBC_SHA</td>
236b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
237b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
238b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
239b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
240b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</td>
241b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
242b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
243b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
244b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
245b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA</td>
246b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
247b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
248b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
249b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
250b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DHE_RSA_WITH_AES_128_CBC_SHA</td>
251b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
252b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
253b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
254b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
255b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DHE_RSA_WITH_AES_256_CBC_SHA</td>
256b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
257b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>20+</td>
258b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
259b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
260b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_DHE_RSA_WITH_DES_CBC_SHA</td>
261b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
262b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
263b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
264b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
265c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td>TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256</td>
266c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td>20+</td>
267c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td></td>
268c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *         </tr>
269c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *         <tr>
270c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td>TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384</td>
271c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td>20+</td>
272c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td></td>
273c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *         </tr>
274c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *         <tr>
275b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_NULL_WITH_NULL_NULL</td>
276b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
277b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
278b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
279b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
280c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td>TLS_PSK_WITH_3DES_EDE_CBC_SHA</td>
281c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td>20+</td>
282c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td></td>
283c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *         </tr>
284c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *         <tr>
285c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td>TLS_PSK_WITH_AES_128_CBC_SHA</td>
286c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td>20+</td>
287c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td></td>
288c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *         </tr>
289c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *         <tr>
290c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td>TLS_PSK_WITH_AES_256_CBC_SHA</td>
291c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td>20+</td>
292c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td></td>
293c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *         </tr>
294c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *         <tr>
295c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td>TLS_PSK_WITH_RC4_128_SHA</td>
296c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td>20+</td>
297c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *             <td></td>
298c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *         </tr>
299c9461f39290f815f560f2ec50e9ccde5ff4eb8f7Alex Klyubin *         <tr>
300b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_RSA_EXPORT_WITH_DES40_CBC_SHA</td>
301b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
302b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
303b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
304b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
305b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_RSA_WITH_3DES_EDE_CBC_SHA</td>
306b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
307b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
308b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
309b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
310b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_RSA_WITH_AES_128_CBC_SHA</td>
311b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
312b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
313b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
314b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
315b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_RSA_WITH_AES_256_CBC_SHA</td>
316b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>9+</td>
317b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>20+</td>
318b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
319b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
320b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_RSA_WITH_DES_CBC_SHA</td>
321b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
322b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
323b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
324b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
325b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_RSA_WITH_NULL_MD5</td>
326b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
327b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
328b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
329b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         <tr>
330b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>TLS_RSA_WITH_NULL_SHA</td>
331b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td>1-8</td>
332b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *             <td></td>
333b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *         </tr>
334b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *     </tbody>
335b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin * </table>
336b4675a53abbbb55acad213485636cf6a0d8b5bf6Alex Klyubin *
337f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson * @since 1.5
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class SSLEngine {
340f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson    private final String peerHost;
341f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson    private final int peerPort;
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Creates a new {@code SSLEngine} instance.
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected SSLEngine() {
347f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson        peerHost = null;
348f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson        peerPort = -1;
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Creates a new {@code SSLEngine} instance with the specified host and
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * port.
354f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param host
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the name of the host.
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param port
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the port of the host.
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected SSLEngine(String host, int port) {
361f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson        this.peerHost = host;
362f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson        this.peerPort = port;
363f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson    }
364f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson
365f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson    /**
366f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     * Returns the name of the peer host.
367f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
368f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     * @return the name of the peer host, or {@code null} if none is available.
369f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     */
370f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson    public String getPeerHost() {
371f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson        return peerHost;
372f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson    }
373f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson
374f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson    /**
375f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     * Returns the port number of the peer host.
376f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
377f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     * @return the port number of the peer host, or {@code -1} is none is
378f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *         available.
379f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     */
380f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson    public int getPeerPort() {
381f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson        return peerPort;
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Initiates a handshake on this engine.
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method is not needed for the initial handshake: it will be
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * called by {@code wrap} or {@code unwrap} if the initial handshake has not
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * been started yet.
390f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SSLException
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if starting the handshake fails.
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalStateException
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the engine does not have all the needed settings (e.g.
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             client/server mode not set).
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract void beginHandshake() throws SSLException;
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Notifies this engine instance that no more inbound network data will be
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * sent to this engine.
402f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SSLException
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if this engine did not receive a needed protocol specific
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             close notification message from the peer.
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract void closeInbound() throws SSLException;
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Notifies this engine instance that no more outbound application data will
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * be sent to this engine.
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract void closeOutbound();
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a delegate task for this engine instance. Some engine operations
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * may require the results of blocking or long running operations, and the
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code SSLEngineResult} instances returned by this engine may indicate
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * that a delegated task result is needed. In this case the
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Runnable#run() run} method of the returned {@code Runnable}
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * delegated task must be called.
422f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a delegate task, or {@code null} if none are available.
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract Runnable getDelegatedTask();
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the SSL cipher suite names that are enabled in this engine
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * instance.
430f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the SSL cipher suite names that are enabled in this engine
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         instance.
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract String[] getEnabledCipherSuites();
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the protocol version names that are enabled in this engine
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * instance.
439f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the protocol version names that are enabled in this engine
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         instance.
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract String[] getEnabledProtocols();
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns whether new SSL sessions may be established by this engine.
447f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if new session may be established, {@code false} if
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         existing sessions must be reused.
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract boolean getEnableSessionCreation();
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the status of the handshake of this engine instance.
455f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the status of the handshake of this engine instance.
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract SSLEngineResult.HandshakeStatus getHandshakeStatus();
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns whether this engine instance will require client authentication.
462f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if this engine will require client authentication,
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code false} if no client authentication is needed.
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract boolean getNeedClientAuth();
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the SSL session for this engine instance.
470f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the SSL session for this engine instance.
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract SSLSession getSession();
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
47670bf6bc3ad78ed9a0a7a5767381ad6c25debbd70Kenny Root     * Returns the SSL session for this engine instance. Does not cause the
47770bf6bc3ad78ed9a0a7a5767381ad6c25debbd70Kenny Root     * handshake to start if it has not already started.
47870bf6bc3ad78ed9a0a7a5767381ad6c25debbd70Kenny Root     *
47970bf6bc3ad78ed9a0a7a5767381ad6c25debbd70Kenny Root     * @return the SSL session for this engine instance.
48070bf6bc3ad78ed9a0a7a5767381ad6c25debbd70Kenny Root     * @since 1.7
48170bf6bc3ad78ed9a0a7a5767381ad6c25debbd70Kenny Root     * @hide
48270bf6bc3ad78ed9a0a7a5767381ad6c25debbd70Kenny Root     */
48370bf6bc3ad78ed9a0a7a5767381ad6c25debbd70Kenny Root    public SSLSession getHandshakeSession() {
48470bf6bc3ad78ed9a0a7a5767381ad6c25debbd70Kenny Root        throw new UnsupportedOperationException();
48570bf6bc3ad78ed9a0a7a5767381ad6c25debbd70Kenny Root    }
48670bf6bc3ad78ed9a0a7a5767381ad6c25debbd70Kenny Root
48770bf6bc3ad78ed9a0a7a5767381ad6c25debbd70Kenny Root    /**
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the SSL cipher suite names that are supported by this engine.
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * These cipher suites can be enabled using
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link #setEnabledCipherSuites(String[])}.
491f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the SSL cipher suite names that are supported by this engine.
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract String[] getSupportedCipherSuites();
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the protocol names that are supported by this engine. These
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * protocols can be enables using {@link #setEnabledProtocols(String[])}.
499f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the protocol names that are supported by this engine.
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract String[] getSupportedProtocols();
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns whether this engine is set to act in client mode when
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * handshaking.
507f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if the engine is set to do handshaking in client
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         mode.
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract boolean getUseClientMode();
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns whether this engine will request client authentication.
515f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if client authentication will be requested,
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code false} otherwise.
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract boolean getWantClientAuth();
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns whether no more inbound data will be accepted by this engine.
523f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if no more inbound data will be accepted by this
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         engine, {@code false} otherwise.
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract boolean isInboundDone();
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns whether no more outbound data will be produced by this engine.
531f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if no more outbound data will be producted by this
533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         engine, {@code otherwise} false.
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract boolean isOutboundDone();
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets the SSL cipher suite names that should be enabled in this engine
539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * instance. Only cipher suites listed by {@code getSupportedCipherSuites()}
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * are allowed.
541f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param suites
543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the SSL cipher suite names to be enabled.
544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if one of the specified cipher suites is not supported, or if
546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             {@code suites} is {@code null}.
547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract void setEnabledCipherSuites(String[] suites);
549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets the protocol version names that should be enabled in this engine
552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * instance. Only protocols listed by {@code getSupportedProtocols()} are
553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * allowed.
554f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param protocols
556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the protocol version names to be enabled.
557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if one of the protocol version names is not supported, or if
559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             {@code protocols} is {@code null}.
560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract void setEnabledProtocols(String[] protocols);
562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets whether new SSL sessions may be established by this engine instance.
565f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param flag
567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code true} if new SSL sessions may be established,
568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code false} if existing SSL sessions must be reused.
569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract void setEnableSessionCreation(boolean flag);
571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets whether this engine must require client authentication. The client
574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * authentication is one of:
575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <ul>
576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <li>authentication required</li>
577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <li>authentication requested</li>
578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <li>no authentication needed</li>
579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * </ul>
580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * This method overrides the setting of {@link #setWantClientAuth(boolean)}.
581f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param need
583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code true} if client authentication is required,
584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code false} if no authentication is needed.
585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract void setNeedClientAuth(boolean need);
587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets whether this engine should act in client (or server) mode when
590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * handshaking.
591f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param mode
593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code true} if this engine should act in client mode,
594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code false} if not.
595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if this method is called after starting the initial
597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             handshake.
598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract void setUseClientMode(boolean mode);
600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets whether this engine should request client authentication. The client
603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * authentication is one of the following:
604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <ul>
605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <li>authentication required</li>
606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <li>authentication requested</li>
607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <li>no authentication needed</li>
608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * </ul>
609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * This method overrides the setting of {@link #setNeedClientAuth(boolean)}.
610f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param want
612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code true} if client authentication should be requested,
613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code false} if no authentication is needed.
614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract void setWantClientAuth(boolean want);
616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Decodes the incoming network data buffer into application data buffers.
619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If a handshake has not been started yet, it will automatically be
620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * started.
621f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the buffer with incoming network data
624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param dsts
625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the array of destination buffers for incoming application
626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            data.
627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param offset
628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the offset in the array of destination buffers to which data
629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            is to be transferred.
630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param length
631f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *            the maximum number of destination buffers to be used.
632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the result object of this operation.
633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SSLException
634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a problem occurred while processing the data.
635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IndexOutOfBoundsException
636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code length} is greater than
637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             {@code dsts.length - offset}.
638f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     * @throws java.nio.ReadOnlyBufferException
639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if one of the destination buffers is read-only.
640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code src}, {@code dsts}, or one of the entries in
642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             {@code dsts} is {@code null}.
643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalStateException
644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the engine does not have all the needed settings (e.g.
645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             client/server mode not set).
646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
6470c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom    public abstract SSLEngineResult unwrap(ByteBuffer src,
6480c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom                                           ByteBuffer[] dsts,
6490c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom                                           int offset,
6500c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom                                           int length) throws SSLException;
651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Encodes the outgoing application data buffers into the network data
654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer. If a handshake has not been started yet, it will automatically be
655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * started.
656f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param srcs
658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the array of source buffers of outgoing application data.
659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param offset
660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the offset in the array of source buffers from which data is
661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            to be retrieved.
662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param length
663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the maximum number of source buffers to be used.
664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param dst
665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the destination buffer for network data.
666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the result object of this operation.
667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SSLException
668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a problem occurred while processing the data.
669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IndexOutOfBoundsException
670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code length} is greater than
671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             {@code srcs.length - offset}.
672f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     * @throws java.nio.ReadOnlyBufferException
673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the destination buffer is readonly.
674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code srcs}, {@code dst}, or one the entries in
676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             {@code srcs} is {@code null}.
677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalStateException
678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the engine does not have all the needed settings (e.g.
679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             client/server mode not set).
680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
681f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson    public abstract SSLEngineResult wrap(ByteBuffer[] srcs, int offset, int length, ByteBuffer dst)
682f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson            throws SSLException;
683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Decodes the incoming network data buffer into the application data
686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer. If a handshake has not been started yet, it will automatically be
687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * started.
688f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the buffer with incoming network data
691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param dst
692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the destination buffer for incoming application data.
693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the result object of this operation.
694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SSLException
695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a problem occurred while processing the data.
696f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     * @throws java.nio.ReadOnlyBufferException
697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if one of the destination buffers is read-only.
698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code src} or {@code dst} is {@code null}.
700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalStateException
701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the engine does not have all the needed settings (e.g.
702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             client/server mode not set).
703f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     */
704f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson    public SSLEngineResult unwrap(ByteBuffer src, ByteBuffer dst) throws SSLException {
705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return unwrap(src, new ByteBuffer[] { dst }, 0, 1);
706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Decodes the incoming network data buffer into the application data
710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffers. If a handshake has not been started yet, it will automatically
711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * be started.
712f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     *
713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the buffer with incoming network data
715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param dsts
716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the array of destination buffers for incoming application
717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            data.
718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the result object of this operation.
719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SSLException
720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a problem occurred while processing the data.
721f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     * @throws java.nio.ReadOnlyBufferException
722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if one of the destination buffers is read-only.
723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code src} or {@code dsts} is {@code null}.
725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalStateException
726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the engine does not have all the needed settings (e.g.
727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             client/server mode not set).
728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
729f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson    public SSLEngineResult unwrap(ByteBuffer src, ByteBuffer[] dsts) throws SSLException {
730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (dsts == null) {
731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IllegalArgumentException("Byte buffer array dsts is null");
732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return unwrap(src, dsts, 0, dsts.length);
734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Encodes the outgoing application data buffers into the network data
738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer. If a handshake has not been started yet, it will automatically be
739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * started.
740f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param srcs
742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the array of source buffers of outgoing application data.
743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param dst
744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the destination buffer for network data.
745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the result object of this operation.
746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SSLException
747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a problem occurred while processing the data.
748f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     * @throws java.nio.ReadOnlyBufferException
749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the destination buffer is readonly.
750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code srcs} or {@code dst} is {@code null}.
752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalStateException
753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the engine does not have all the needed settings (e.g.
754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             client/server mode not set).
755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
756f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson    public SSLEngineResult wrap(ByteBuffer[] srcs, ByteBuffer dst) throws SSLException {
757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (srcs == null) {
758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IllegalArgumentException("Byte buffer array srcs is null");
759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return wrap(srcs, 0, srcs.length, dst);
761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Encodes the outgoing application data buffer into the network data
765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer. If a handshake has not been started yet, it will automatically be
766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * started.
767f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source buffers of outgoing application data.
770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param dst
771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the destination buffer for network data.
772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the result object of this operation.
773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SSLException
774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a problem occurred while processing the data.
775f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     * @throws java.nio.ReadOnlyBufferException
776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the destination buffer is readonly.
777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code src} or {@code dst} is {@code null}.
779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalStateException
780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the engine does not have all the needed settings (e.g.
781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             client/server mode not set).
782f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson     */
783f921579f87fa63204b4a4bef39ed27e7835aec45Jesse Wilson    public SSLEngineResult wrap(ByteBuffer src, ByteBuffer dst) throws SSLException {
784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return wrap(new ByteBuffer[] { src }, 0, 1, dst);
785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
7860c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom
7870c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom    /**
7880c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom     * Returns a new SSLParameters based on this SSLSocket's current
7890c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom     * cipher suites, protocols, and client authentication settings.
7900c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom     *
7910c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom     * @since 1.6
7920c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom     */
7930c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom    public SSLParameters getSSLParameters() {
7940c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        SSLParameters p = new SSLParameters();
7950c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        p.setCipherSuites(getEnabledCipherSuites());
7960c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        p.setProtocols(getEnabledProtocols());
7970c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        p.setNeedClientAuth(getNeedClientAuth());
7980c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        p.setWantClientAuth(getWantClientAuth());
7990c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        return p;
8000c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom    }
8010c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom
8020c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom    /**
8030c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom     * Sets various SSL handshake parameters based on the SSLParameter
8040c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom     * argument. Specifically, sets the SSLEngine's enabled cipher
8050c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom     * suites if the parameter's cipher suites are non-null. Similarly
8060c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom     * sets the enabled protocols. If the parameters specify the want
8070c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom     * or need for client authentication, those requirements are set
8080c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom     * on the SSLEngine, otherwise both are set to false.
8090c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom     * @since 1.6
8100c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom     */
8110c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom    public void setSSLParameters(SSLParameters p) {
8120c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        String[] cipherSuites = p.getCipherSuites();
8130c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        if (cipherSuites != null) {
8140c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom            setEnabledCipherSuites(cipherSuites);
8150c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        }
8160c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        String[] protocols = p.getProtocols();
8170c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        if (protocols != null) {
8180c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom            setEnabledProtocols(protocols);
8190c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        }
8200c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        if (p.getNeedClientAuth()) {
8210c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom            setNeedClientAuth(true);
8220c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        } else if (p.getWantClientAuth()) {
8230c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom            setWantClientAuth(true);
8240c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        } else {
8250c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom            setWantClientAuth(false);
8260c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom        }
8270c131a2ca38465b7d1df4eaee63ac73ce4d5986dBrian Carlstrom    }
828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
829