OpenSSLExtendedSessionImpl.java revision 5012f2dc5bf0a28a47cf9b01bd1a63c1ebdc232f
1ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root/*
2ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root * Copyright 2015 The Android Open Source Project
3ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root *
4ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root * Licensed under the Apache License, Version 2.0 (the "License");
5ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root * you may not use this file except in compliance with the License.
6ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root * You may obtain a copy of the License at
7ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root *
8ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root *      http://www.apache.org/licenses/LICENSE-2.0
9ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root *
10ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root * Unless required by applicable law or agreed to in writing, software
11ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root * distributed under the License is distributed on an "AS IS" BASIS,
12ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root * See the License for the specific language governing permissions and
14ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root * limitations under the License.
15ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root */
16ce18fe693803e95ab627929b8e69d3362340dd06Kenny Rootpackage org.conscrypt;
17ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
18ce18fe693803e95ab627929b8e69d3362340dd06Kenny Rootimport java.security.Principal;
19ce18fe693803e95ab627929b8e69d3362340dd06Kenny Rootimport java.security.cert.Certificate;
205012f2dc5bf0a28a47cf9b01bd1a63c1ebdc232fKenny Rootimport java.util.Collections;
21ce18fe693803e95ab627929b8e69d3362340dd06Kenny Rootimport java.util.List;
22ce18fe693803e95ab627929b8e69d3362340dd06Kenny Rootimport javax.net.ssl.ExtendedSSLSession;
235012f2dc5bf0a28a47cf9b01bd1a63c1ebdc232fKenny Rootimport javax.net.ssl.SNIHostName;
24ce18fe693803e95ab627929b8e69d3362340dd06Kenny Rootimport javax.net.ssl.SNIServerName;
25ce18fe693803e95ab627929b8e69d3362340dd06Kenny Rootimport javax.net.ssl.SSLPeerUnverifiedException;
26ce18fe693803e95ab627929b8e69d3362340dd06Kenny Rootimport javax.net.ssl.SSLSessionContext;
27ce18fe693803e95ab627929b8e69d3362340dd06Kenny Rootimport javax.security.cert.X509Certificate;
28ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
29ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root/**
30ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root * Implementation of the ExtendedSSLSession class for OpenSSL. Uses a delegate to maintain backward
31ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root * compatibility with previous versions of Android which don't have ExtendedSSLSession.
32ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root */
33ce18fe693803e95ab627929b8e69d3362340dd06Kenny Rootpublic class OpenSSLExtendedSessionImpl extends ExtendedSSLSession {
34ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    private final OpenSSLSessionImpl delegate;
35ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
36ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public OpenSSLExtendedSessionImpl(OpenSSLSessionImpl delegate) {
37ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        this.delegate = delegate;
38ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
39ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
40ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public String[] getLocalSupportedSignatureAlgorithms() {
41ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        throw new UnsupportedOperationException();
42ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
43ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
44ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public String[] getPeerSupportedSignatureAlgorithms() {
45ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        throw new UnsupportedOperationException();
46ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
47ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
48ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public List<SNIServerName> getRequestedServerNames() {
495012f2dc5bf0a28a47cf9b01bd1a63c1ebdc232fKenny Root        String requestedServerName = delegate.getRequestedServerName();
505012f2dc5bf0a28a47cf9b01bd1a63c1ebdc232fKenny Root        if (requestedServerName == null) {
515012f2dc5bf0a28a47cf9b01bd1a63c1ebdc232fKenny Root            return null;
525012f2dc5bf0a28a47cf9b01bd1a63c1ebdc232fKenny Root        }
535012f2dc5bf0a28a47cf9b01bd1a63c1ebdc232fKenny Root
545012f2dc5bf0a28a47cf9b01bd1a63c1ebdc232fKenny Root        return Collections.<SNIServerName> singletonList(new SNIHostName(requestedServerName));
55ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
56ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
57ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
58ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public byte[] getId() {
59ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getId();
60ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
61ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
62ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
63ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public SSLSessionContext getSessionContext() {
64ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getSessionContext();
65ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
66ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
67ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
68ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public long getCreationTime() {
69ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getCreationTime();
70ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
71ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
72ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
73ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public long getLastAccessedTime() {
74ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getLastAccessedTime();
75ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
76ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
77ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
78ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public void invalidate() {
79ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        delegate.invalidate();
80ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
81ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
82ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
83ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public boolean isValid() {
84ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.isValid();
85ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
86ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
87ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
88ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public void putValue(String name, Object value) {
89ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        delegate.putValue(name, value);
90ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
91ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
92ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
93ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public Object getValue(String name) {
94ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getValue(name);
95ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
96ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
97ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
98ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public void removeValue(String name) {
99ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        delegate.removeValue(name);
100ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
101ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
102ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
103ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public String[] getValueNames() {
104ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getValueNames();
105ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
106ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
107ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
108ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException {
109ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getPeerCertificates();
110ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
111ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
112ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
113ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public Certificate[] getLocalCertificates() {
114ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getLocalCertificates();
115ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
116ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
117ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
118ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public X509Certificate[] getPeerCertificateChain() throws SSLPeerUnverifiedException {
119ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getPeerCertificateChain();
120ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
121ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
122ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
123ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public Principal getPeerPrincipal() throws SSLPeerUnverifiedException {
124ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getPeerPrincipal();
125ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
126ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
127ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
128ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public Principal getLocalPrincipal() {
129ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getLocalPrincipal();
130ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
131ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
132ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
133ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public String getCipherSuite() {
134ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getCipherSuite();
135ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
136ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
137ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
138ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public String getProtocol() {
139ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getProtocol();
140ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
141ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
142ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
143ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public String getPeerHost() {
144ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getPeerHost();
145ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
146ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
147ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
148ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public int getPeerPort() {
149ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getPeerPort();
150ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
151ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
152ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
153ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public int getPacketBufferSize() {
154ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getPacketBufferSize();
155ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
156ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root
157ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    @Override
158ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    public int getApplicationBufferSize() {
159ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root        return delegate.getApplicationBufferSize();
160ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root    }
161ce18fe693803e95ab627929b8e69d3362340dd06Kenny Root}
162