/* * Copyright 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.conscrypt; import java.security.Principal; import java.security.cert.Certificate; import java.util.List; import javax.net.ssl.ExtendedSSLSession; import javax.net.ssl.SSLPeerUnverifiedException; import javax.net.ssl.SSLSessionContext; import javax.security.cert.X509Certificate; /** * This is an adapter that wraps the active session with {@link ExtendedSSLSession}, if running * on Java 7+. */ class Java7ExtendedSSLSession extends ExtendedSSLSession implements SessionDecorator { // TODO: use BoringSSL API to actually fetch the real data private static final String[] LOCAL_SUPPORTED_SIGNATURE_ALGORITHMS = new String[] { "SHA512withRSA", "SHA512withECDSA", "SHA384withRSA", "SHA384withECDSA", "SHA256withRSA", "SHA256withECDSA", "SHA224withRSA", "SHA224withECDSA", "SHA1withRSA", "SHA1withECDSA", }; // TODO: use BoringSSL API to actually fetch the real data private static final String[] PEER_SUPPORTED_SIGNATURE_ALGORITHMS = new String[] {"SHA1withRSA", "SHA1withECDSA"}; private final ConscryptSession delegate; Java7ExtendedSSLSession(ConscryptSession delegate) { this.delegate = delegate; } @Override public final ConscryptSession getDelegate() { return delegate; } /* @Override */ @SuppressWarnings("MissingOverride") // For Android backward-compatibility. public final String[] getLocalSupportedSignatureAlgorithms() { return LOCAL_SUPPORTED_SIGNATURE_ALGORITHMS.clone(); } /* @Override */ @SuppressWarnings("MissingOverride") // For Android backward-compatibility. public final String[] getPeerSupportedSignatureAlgorithms() { return PEER_SUPPORTED_SIGNATURE_ALGORITHMS.clone(); } @Override public final String getRequestedServerName() { return getDelegate().getRequestedServerName(); } /** * Provides forward-compatibility with Java 9. */ @Override public final List getStatusResponses() { return getDelegate().getStatusResponses(); } @Override public final byte[] getPeerSignedCertificateTimestamp() { return getDelegate().getPeerSignedCertificateTimestamp(); } @Override public final byte[] getId() { return getDelegate().getId(); } @Override public final SSLSessionContext getSessionContext() { return getDelegate().getSessionContext(); } @Override public final long getCreationTime() { return getDelegate().getCreationTime(); } @Override public final long getLastAccessedTime() { return getDelegate().getLastAccessedTime(); } @Override public final void invalidate() { getDelegate().invalidate(); } @Override public final boolean isValid() { return getDelegate().isValid(); } @Override public final void putValue(String s, Object o) { getDelegate().putValue(s, o); } @Override public final Object getValue(String s) { return getDelegate().getValue(s); } @Override public final void removeValue(String s) { getDelegate().removeValue(s); } @Override public final String[] getValueNames() { return getDelegate().getValueNames(); } @Override public java.security.cert.X509Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException { return getDelegate().getPeerCertificates(); } @Override public final Certificate[] getLocalCertificates() { return getDelegate().getLocalCertificates(); } @Override public final X509Certificate[] getPeerCertificateChain() throws SSLPeerUnverifiedException { return getDelegate().getPeerCertificateChain(); } @Override public final Principal getPeerPrincipal() throws SSLPeerUnverifiedException { return getDelegate().getPeerPrincipal(); } @Override public final Principal getLocalPrincipal() { return getDelegate().getLocalPrincipal(); } @Override public final String getCipherSuite() { return getDelegate().getCipherSuite(); } @Override public final String getProtocol() { return getDelegate().getProtocol(); } @Override public final String getPeerHost() { return getDelegate().getPeerHost(); } @Override public final int getPeerPort() { return getDelegate().getPeerPort(); } @Override public final int getPacketBufferSize() { return getDelegate().getPacketBufferSize(); } @Override public final int getApplicationBufferSize() { return getDelegate().getApplicationBufferSize(); } }