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