1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.xnet.tests.javax.net.ssl;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.ByteBuffer;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.ReadOnlyBufferException;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.SSLEngine;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.SSLException;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.SSLParameters;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.SSLEngineResult.HandshakeStatus;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.SSLSession;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.SSLEngineResult;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests for SSLEngine class
34e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes *
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class SSLEngineTest extends TestCase {
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>SSLEngine()</code> constructor Assertion: creates
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * SSLEngine object with null host and -1 port
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test01() {
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngine e = new mySSLEngine();
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(e.getPeerHost());
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(-1, e.getPeerPort());
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] suites = { "a", "b", "c" };
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.setEnabledCipherSuites(suites);
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(e.getEnabledCipherSuites().length, suites.length);
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>SSLEngine(String host, int port)</code> constructor
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test02() throws SSLException {
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = 1010;
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngine e = new mySSLEngine(null, port);
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(e.getPeerHost());
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(e.getPeerPort(), port);
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.beginHandshake();
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SSLException ex) {
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>SSLEngine(String host, int port)</code> constructor
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test03() {
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String host = "new host";
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = 8080;
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngine e = new mySSLEngine(host, port);
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(e.getPeerHost(), host);
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(e.getPeerPort(), port);
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] suites = { "a", "b", "c" };
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.setEnabledCipherSuites(suites);
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(e.getEnabledCipherSuites().length, suites.length);
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.setUseClientMode(true);
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(e.getUseClientMode());
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>wrap(ByteBuffer src, ByteBuffer dst)</code> method
84e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     * Assertions:
85e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     * throws IllegalArgumentException when src or dst is null
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * throws ReadOnlyBufferException when dst is ReadOnly byte buffer
87e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Check that implementation behavior follows RI:
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * jdk 1.5 does not throw IllegalArgumentException when parameters are null
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * and does not throw ReadOnlyBufferException if dst is read only byte buffer
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testWrap01() throws SSLException {
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String host = "new host";
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = 8080;
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bbN = null;
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bb = ByteBuffer.allocate(10);
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngine e = new mySSLEngine(host, port);
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.wrap(bbN, bb);
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.wrap(bb, bbN);
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer roBb = bb.asReadOnlyBuffer();
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Not read only byte buffer", roBb.isReadOnly());
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.wrap(bb, roBb);
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>wrap(ByteBuffer[] srcs, ByteBuffer dst)</code> method
110e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertions: throws IllegalArgumentException when srcs or dst is null or
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * srcs contains null byte buffer; throws ReadOnlyBufferException when dst
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * is read only byte buffer
114e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Check that implementation behavior follows RI:
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * jdk 1.5 does not throw IllegalArgumentException when dst is null or
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * if srcs contains null elements It does not throw ReadOnlyBufferException
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * for read only dst
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testWrap02() throws SSLException {
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String host = "new host";
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = 8080;
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer[] bbNA = null;
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer[] bbA = { null, ByteBuffer.allocate(10), null };
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bb = ByteBuffer.allocate(10);
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bbN = null;
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngine e = new mySSLEngine(host, port);
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.wrap(bbNA, bb);
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("IllegalArgumentException must be thrown for null srcs byte buffer array");
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException ex) {
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.wrap(bbA, bb);
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.wrap(bbA, bbN);
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer roBb = bb.asReadOnlyBuffer();
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bbA[0] = ByteBuffer.allocate(100);
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bbA[2] = ByteBuffer.allocate(20);
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Not read only byte buffer", roBb.isReadOnly());
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.wrap(bbA, roBb);
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>wrap(ByteBuffer src, ByteBuffer dst)</code> and
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <code>wrap(ByteBuffer[] srcs, ByteBuffer dst)</code> methods
150e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: these methods throw SSLException
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testWrap03() throws SSLException {
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String host = "new host";
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = 8080;
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bbs = ByteBuffer.allocate(100);
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bbd = ByteBuffer.allocate(10);
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngine e = new mySSLEngine1(host, port);
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.wrap(bbs, bbd);
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("SSLException must be thrown");
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SSLException ex) {
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngineResult res = e.wrap(bbd, bbs);
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(10, res.bytesConsumed());
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(20, res.bytesProduced());
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.wrap(new ByteBuffer[] { bbs }, bbd);
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("SSLException must be thrown");
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SSLException ex) {
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        res = e.wrap(new ByteBuffer[] { bbd }, bbs);
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(10, res.bytesConsumed());
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(20, res.bytesProduced());
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>wrap(ByteBuffer src, ByteBuffer dst)</code> method
180e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: encodes a buffer data into network data.
182e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testWrap04() throws SSLException {
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String host = "new host";
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = 8080;
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bb = ByteBuffer.allocate(10);
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngine e = new mySSLEngine(host, port);
189e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngineResult res = e.wrap(bb, ByteBuffer.allocate(10));
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(10, res.bytesConsumed());
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(20, res.bytesProduced());
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
194e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>wrap(ByteBuffer[] srcs, ByteBuffer dst)</code> method
197e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: encodes datas from buffers into network data.
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testWrap05() throws SSLException {
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String host = "new host";
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = 8080;
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bb = ByteBuffer.allocate(10);
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer[] bbA = { ByteBuffer.allocate(5), ByteBuffer.allocate(10), ByteBuffer.allocate(5) };
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngine e = new mySSLEngine(host, port);
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngineResult res = e.wrap(bbA, bb);
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(10, res.bytesConsumed());
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(20, res.bytesProduced());
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
213e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>unwrap(ByteBuffer src, ByteBuffer dst)</code> method
216e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
217e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     * Assertions:
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * throws IllegalArgumentException when src or dst is null
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * throws ReadOnlyBufferException when dst is read only byte buffer
220e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Check that implementation behavior follows RI:
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * jdk 1.5 does not throw IllegalArgumentException when parameters are null
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * and does not throw ReadOnlyBufferException if dst is read only byte buffer
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testUnwrap01() throws SSLException {
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String host = "new host";
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = 8080;
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bbN = null;
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bb = ByteBuffer.allocate(10);
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngine e = new mySSLEngine(host, port);
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.unwrap(bbN, bb);
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.unwrap(bb, bbN);
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer roBb = bb.asReadOnlyBuffer();
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Not read only byte buffer", roBb.isReadOnly());
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.unwrap(bb, roBb);
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>unwrap(ByteBuffer src, ByteBuffer[] dsts)</code> method
243e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertions: throws IllegalArgumentException if parameters are null or
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * when dsts contains null elements throws ReadOnlyBufferException when dsts
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * contains read only elements
247e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Check that implementation behavior follows RI:
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * jdk 1.5 does not throw IllegalArgumentException when src is null or
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * if dsts contains null elements It does not throw ReadOnlyBufferException
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * when dsts contains read only elements
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testUnwrap02() throws SSLException {
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String host = "new host";
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = 8080;
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer[] bbNA = null;
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer[] bbA = { null, ByteBuffer.allocate(10), null };
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bb = ByteBuffer.allocate(10);
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bbN = null;
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngine e = new mySSLEngine(host, port);
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.unwrap(bb, bbNA);
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("IllegalArgumentException must be thrown for null dsts byte buffer array");
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException ex) {
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.unwrap(bb, bbA);
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.unwrap(bbN, bbA);
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bb1 = ByteBuffer.allocate(100);
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer roBb = bb1.asReadOnlyBuffer();
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bbA[0] = bb1;
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bbA[2] = roBb;
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Not read only byte buffer", bbA[2].isReadOnly());
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        e.unwrap(bb, bbA);
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>unwrap(ByteBuffersrc, ByteBuffer dst)</code> and
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <code>unwrap(ByteBuffer src, ByteBuffer[] dsts)</code> methods
284e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: these methods throw SSLException
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testUnwrap03() throws SSLException {
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bbs = ByteBuffer.allocate(100);
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bbd = ByteBuffer.allocate(10);
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngine e = new mySSLEngine1();
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.unwrap(bbs, bbd);
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("SSLException must be thrown");
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SSLException ex) {
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngineResult res = e.unwrap(bbd, bbs);
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, res.bytesConsumed());
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, res.bytesProduced());
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.unwrap(bbs, new ByteBuffer[] { bbd });
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("SSLException must be thrown");
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SSLException ex) {
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        res = e.unwrap(bbd, new ByteBuffer[] { bbs });
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, res.bytesConsumed());
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, res.bytesProduced());
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
309e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>unwrap(ByteBuffer src, ByteBuffer dst)</code> method
312e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
313e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     * Assertion: decodes  network data into a data buffer.
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testUnwrap04() throws SSLException {
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String host = "new host";
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = 8080;
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bb = ByteBuffer.allocate(10);
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngine e = new mySSLEngine(host, port);
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngineResult res = e.unwrap(bb, ByteBuffer.allocate(10));
321e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, res.bytesConsumed());
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, res.bytesProduced());
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
325e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>unwrap(ByteBuffer src, ByteBuffer[] dsts)</code> method
328e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     *
329e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes     * Assertion:
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * decode network data into data buffers.
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testUnwrap05() throws SSLException {
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String host = "new host";
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = 8080;
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer[] bbA = { ByteBuffer.allocate(100), ByteBuffer.allocate(10), ByteBuffer.allocate(100) };
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteBuffer bb = ByteBuffer.allocate(10);
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngine e = new mySSLEngine(host, port);
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLEngineResult res = e.unwrap(bb, bbA);
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, res.bytesConsumed());
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, res.bytesProduced());
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Additional class for verification SSLEngine constructors
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesclass mySSLEngine extends SSLEngine {
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private boolean useClientMode;
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private boolean needClientAuth;
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private boolean enableSessionCreation;
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private boolean wantClientAuth;
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private String[] enabledProtocols;
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private String[] enabledCipherSuites;
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public mySSLEngine() {
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        super();
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected mySSLEngine(String host, int port) {
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        super(host, port);
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void beginHandshake() throws SSLException {
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String host = super.getPeerHost();
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if ((host == null) || (host.length() == 0)) {
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throw new SSLException("");
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void closeInbound() throws SSLException {
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void closeOutbound() {
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public Runnable getDelegatedTask() {
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return null;
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public String[] getEnabledCipherSuites() {
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return enabledCipherSuites;
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public String[] getEnabledProtocols() {
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return enabledProtocols;
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public boolean getEnableSessionCreation() {
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return enableSessionCreation;
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public SSLEngineResult.HandshakeStatus getHandshakeStatus() {
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return SSLEngineResult.HandshakeStatus.FINISHED;
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public boolean getNeedClientAuth() {
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return needClientAuth;
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public SSLSession getSession() {
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return null;
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public String[] getSupportedCipherSuites() {
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return new String[0];
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public String[] getSupportedProtocols() {
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return new String[0];
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public boolean getUseClientMode() {
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return useClientMode;
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public boolean getWantClientAuth() {
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return wantClientAuth;
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public boolean isInboundDone() {
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return false;
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public boolean isOutboundDone() {
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return false;
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void setEnabledCipherSuites(String[] suites) {
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enabledCipherSuites = suites;
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void setEnabledProtocols(String[] protocols) {
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enabledProtocols = protocols;
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void setEnableSessionCreation(boolean flag) {
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enableSessionCreation = flag;
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void setNeedClientAuth(boolean need) {
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        needClientAuth = need;
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void setUseClientMode(boolean mode) {
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        useClientMode = mode;
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void setWantClientAuth(boolean want) {
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        wantClientAuth = want;
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public SSLEngineResult unwrap(ByteBuffer src, ByteBuffer[] dsts,
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int offset, int length) throws SSLException {
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return new SSLEngineResult(SSLEngineResult.Status.OK,
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SSLEngineResult.HandshakeStatus.FINISHED, 1, 2);
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public SSLEngineResult wrap(ByteBuffer[] srcs, int offset, int length,
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ByteBuffer dst) throws SSLException {
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return new SSLEngineResult(SSLEngineResult.Status.OK,
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SSLEngineResult.HandshakeStatus.FINISHED, 10, 20);
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public SSLParameters getSSLParameters() {
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // TODO Auto-generated method stub
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return null;
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void setSSLParameters(SSLParameters sslP) {
505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // TODO Auto-generated method stub
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesclass mySSLEngine1 extends mySSLEngine {
511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public mySSLEngine1() {
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public mySSLEngine1(String host, int port) {
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        super(host, port);
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public SSLEngineResult unwrap(ByteBuffer src, ByteBuffer dst)
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws SSLException {
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (src.limit() > dst.limit()) {
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throw new SSLException("incorrect limits");
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return super.unwrap(src, dst);
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public SSLEngineResult unwrap(ByteBuffer src, ByteBuffer[] dsts)
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws SSLException {
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (src.limit() > dsts[0].limit()) {
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throw new SSLException("incorrect limits");
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return super.unwrap(src, dsts);
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public SSLEngineResult wrap(ByteBuffer[] srcs, ByteBuffer dst)
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws SSLException {
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (srcs[0].limit() > dst.limit()) {
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throw new SSLException("incorrect limits");
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return super.wrap(srcs, dst);
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public SSLEngineResult wrap(ByteBuffer src, ByteBuffer dst)
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws SSLException {
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (src.limit() > dst.limit()) {
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throw new SSLException("incorrect limits");
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return super.wrap(src, dst);
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
555e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes}
556