package io.netty.handler.ssl;

import com.cvte.vman.instance.InvokeCmd;
import com.seewo.libmcuservice.constant.ITVStateConstants;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.Unpooled;
import io.netty.handler.ssl.ApplicationProtocolConfig;
import io.netty.util.internal.EmptyArrays;
import io.netty.util.internal.InternalThreadLocalMap;
import io.netty.util.internal.ObjectUtil;
import io.netty.util.internal.PlatformDependent;
import io.netty.util.internal.ThrowableUtil;
import io.netty.util.internal.logging.InternalLogger;
import io.netty.util.internal.logging.InternalLoggerFactory;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.nio.ByteBuffer;
import java.nio.ReadOnlyBufferException;
import java.security.Principal;
import java.security.cert.Certificate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLEngineResult;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLHandshakeException;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.SSLPeerUnverifiedException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSessionBindingEvent;
import javax.net.ssl.SSLSessionBindingListener;
import javax.net.ssl.SSLSessionContext;
import javax.security.cert.X509Certificate;
import org.apache.tomcat.jni.Buffer;
import org.apache.tomcat.jni.SSL;

/* JADX INFO: loaded from: classes.dex */
public final class OpenSslEngine extends SSLEngine {
    static final /* synthetic */ boolean $assertionsDisabled = false;
    private static final SSLEngineResult CLOSED_NOT_HANDSHAKING;
    private static final AtomicIntegerFieldUpdater<OpenSslEngine> DESTROYED_UPDATER;
    private static final long EMPTY_ADDR;
    private static final Method GET_ASCII_NAME_METHOD;
    private static final Method GET_SERVER_NAMES_METHOD;
    private static final Method GET_USE_CIPHER_SUITES_ORDER_METHOD;
    private static final String INVALID_CIPHER = "SSL_NULL_WITH_NULL_NULL";
    private static final int MAX_CIPHERTEXT_LENGTH = 18432;
    private static final int MAX_COMPRESSED_LENGTH = 17408;
    static final int MAX_ENCRYPTED_PACKET_LENGTH = 18713;
    static final int MAX_ENCRYPTION_OVERHEAD_LENGTH = 2329;
    private static final int MAX_PLAINTEXT_LENGTH = 16384;
    private static final SSLEngineResult NEED_UNWRAP_CLOSED;
    private static final SSLEngineResult NEED_UNWRAP_OK;
    private static final SSLEngineResult NEED_WRAP_CLOSED;
    private static final SSLEngineResult NEED_WRAP_OK;
    private static final Method SET_SERVER_NAMES_METHOD;
    private static final Method SET_USE_CIPHER_SUITES_ORDER_METHOD;
    private static final Class<?> SNI_HOSTNAME_CLASS;
    private Object algorithmConstraints;
    private final ByteBufAllocator alloc;
    private final OpenSslApplicationProtocolNegotiator apn;
    private boolean certificateSet;
    private volatile ClientAuth clientAuth;
    private final boolean clientMode;
    private volatile int destroyed;
    private String endPointIdentificationAlgorithm;
    private boolean engineClosed;
    private final OpenSslEngineMap engineMap;
    SSLHandshakeException handshakeException;
    private HandshakeState handshakeState;
    private boolean isInboundDone;
    private boolean isOutboundDone;
    private final OpenSslKeyMaterialManager keyMaterialManager;
    private volatile long lastAccessed;
    private final Certificate[] localCerts;
    private long networkBIO;
    private boolean receivedShutdown;
    private final boolean rejectRemoteInitiatedRenegation;
    private final OpenSslSession session;
    private final ByteBuffer[] singleDstBuffer;
    private final ByteBuffer[] singleSrcBuffer;
    private List<?> sniHostNames;
    private long ssl;
    private static final InternalLogger logger = InternalLoggerFactory.getInstance((Class<?>) OpenSslEngine.class);
    private static final Certificate[] EMPTY_CERTIFICATES = EmptyArrays.EMPTY_CERTIFICATES;
    private static final X509Certificate[] EMPTY_X509_CERTIFICATES = EmptyArrays.EMPTY_JAVAX_X509_CERTIFICATES;
    private static final SSLException BEGIN_HANDSHAKE_ENGINE_CLOSED = (SSLException) ThrowableUtil.unknownStackTrace(new SSLException("engine closed"), OpenSslEngine.class, "beginHandshake()");
    private static final SSLException HANDSHAKE_ENGINE_CLOSED = (SSLException) ThrowableUtil.unknownStackTrace(new SSLException("engine closed"), OpenSslEngine.class, "handshake()");
    private static final SSLException RENEGOTIATION_UNSUPPORTED = (SSLException) ThrowableUtil.unknownStackTrace(new SSLException("renegotiation unsupported"), OpenSslEngine.class, "beginHandshake()");
    private static final SSLException ENCRYPTED_PACKET_OVERSIZED = (SSLException) ThrowableUtil.unknownStackTrace(new SSLException("encrypted packet oversized"), OpenSslEngine.class, "unwrap(...)");

    /* JADX INFO: renamed from: io.netty.handler.ssl.OpenSslEngine$1, reason: invalid class name */
    static /* synthetic */ class AnonymousClass1 {
        static final /* synthetic */ int[] $SwitchMap$io$netty$handler$ssl$ApplicationProtocolConfig$Protocol;
        static final /* synthetic */ int[] $SwitchMap$io$netty$handler$ssl$ClientAuth;
        static final /* synthetic */ int[] $SwitchMap$io$netty$handler$ssl$OpenSslEngine$HandshakeState;

        static {
            int[] iArr = new int[ApplicationProtocolConfig.Protocol.values().length];
            $SwitchMap$io$netty$handler$ssl$ApplicationProtocolConfig$Protocol = iArr;
            try {
                iArr[ApplicationProtocolConfig.Protocol.NONE.ordinal()] = 1;
            } catch (NoSuchFieldError unused) {
            }
            try {
                $SwitchMap$io$netty$handler$ssl$ApplicationProtocolConfig$Protocol[ApplicationProtocolConfig.Protocol.ALPN.ordinal()] = 2;
            } catch (NoSuchFieldError unused2) {
            }
            try {
                $SwitchMap$io$netty$handler$ssl$ApplicationProtocolConfig$Protocol[ApplicationProtocolConfig.Protocol.NPN.ordinal()] = 3;
            } catch (NoSuchFieldError unused3) {
            }
            try {
                $SwitchMap$io$netty$handler$ssl$ApplicationProtocolConfig$Protocol[ApplicationProtocolConfig.Protocol.NPN_AND_ALPN.ordinal()] = 4;
            } catch (NoSuchFieldError unused4) {
            }
            int[] iArr2 = new int[ClientAuth.values().length];
            $SwitchMap$io$netty$handler$ssl$ClientAuth = iArr2;
            try {
                iArr2[ClientAuth.NONE.ordinal()] = 1;
            } catch (NoSuchFieldError unused5) {
            }
            try {
                $SwitchMap$io$netty$handler$ssl$ClientAuth[ClientAuth.REQUIRE.ordinal()] = 2;
            } catch (NoSuchFieldError unused6) {
            }
            try {
                $SwitchMap$io$netty$handler$ssl$ClientAuth[ClientAuth.OPTIONAL.ordinal()] = 3;
            } catch (NoSuchFieldError unused7) {
            }
            int[] iArr3 = new int[HandshakeState.values().length];
            $SwitchMap$io$netty$handler$ssl$OpenSslEngine$HandshakeState = iArr3;
            try {
                iArr3[HandshakeState.NOT_STARTED.ordinal()] = 1;
            } catch (NoSuchFieldError unused8) {
            }
            try {
                $SwitchMap$io$netty$handler$ssl$OpenSslEngine$HandshakeState[HandshakeState.FINISHED.ordinal()] = 2;
            } catch (NoSuchFieldError unused9) {
            }
            try {
                $SwitchMap$io$netty$handler$ssl$OpenSslEngine$HandshakeState[HandshakeState.STARTED_IMPLICITLY.ordinal()] = 3;
            } catch (NoSuchFieldError unused10) {
            }
            try {
                $SwitchMap$io$netty$handler$ssl$OpenSslEngine$HandshakeState[HandshakeState.STARTED_EXPLICITLY.ordinal()] = 4;
            } catch (NoSuchFieldError unused11) {
            }
        }
    }

    private enum HandshakeState {
        NOT_STARTED,
        STARTED_IMPLICITLY,
        STARTED_EXPLICITLY,
        FINISHED
    }

    static {
        Class<?> cls;
        Method declaredMethod;
        Method declaredMethod2;
        Method declaredMethod3;
        Method declaredMethod4;
        Method declaredMethod5;
        AtomicIntegerFieldUpdater<OpenSslEngine> atomicIntegerFieldUpdaterNewAtomicIntegerFieldUpdater = PlatformDependent.newAtomicIntegerFieldUpdater(OpenSslEngine.class, "destroyed");
        if (atomicIntegerFieldUpdaterNewAtomicIntegerFieldUpdater == null) {
            atomicIntegerFieldUpdaterNewAtomicIntegerFieldUpdater = AtomicIntegerFieldUpdater.newUpdater(OpenSslEngine.class, "destroyed");
        }
        DESTROYED_UPDATER = atomicIntegerFieldUpdaterNewAtomicIntegerFieldUpdater;
        Method method = null;
        if (PlatformDependent.javaVersion() >= 8) {
            try {
                declaredMethod5 = SSLParameters.class.getDeclaredMethod("getUseCipherSuitesOrder", new Class[0]);
                SSLParameters sSLParameters = new SSLParameters();
                declaredMethod = SSLParameters.class.getDeclaredMethod("setUseCipherSuitesOrder", Boolean.TYPE);
                declaredMethod.invoke(sSLParameters, Boolean.TRUE);
            } catch (Throwable unused) {
                declaredMethod5 = null;
                declaredMethod = null;
            }
            try {
                cls = Class.forName("javax.net.ssl.SNIHostName", false, PlatformDependent.getClassLoader(OpenSslEngine.class));
                Object objNewInstance = cls.getConstructor(String.class).newInstance("netty.io");
                declaredMethod3 = cls.getDeclaredMethod("getAsciiName", new Class[0]);
                declaredMethod2 = SSLParameters.class.getDeclaredMethod("getServerNames", new Class[0]);
                declaredMethod4 = SSLParameters.class.getDeclaredMethod("setServerNames", List.class);
                SSLParameters sSLParameters2 = new SSLParameters();
                declaredMethod4.invoke(sSLParameters2, Collections.emptyList());
            } catch (Throwable unused2) {
                cls = null;
                declaredMethod2 = null;
                declaredMethod3 = null;
                declaredMethod4 = null;
            }
            method = declaredMethod5;
        } else {
            cls = null;
            declaredMethod = null;
            declaredMethod2 = null;
            declaredMethod3 = null;
            declaredMethod4 = null;
        }
        GET_USE_CIPHER_SUITES_ORDER_METHOD = method;
        SET_USE_CIPHER_SUITES_ORDER_METHOD = declaredMethod;
        SNI_HOSTNAME_CLASS = cls;
        GET_ASCII_NAME_METHOD = declaredMethod3;
        GET_SERVER_NAMES_METHOD = declaredMethod2;
        SET_SERVER_NAMES_METHOD = declaredMethod4;
        EMPTY_ADDR = Buffer.address(Unpooled.EMPTY_BUFFER.nioBuffer());
        NEED_UNWRAP_OK = new SSLEngineResult(SSLEngineResult.Status.OK, SSLEngineResult.HandshakeStatus.NEED_UNWRAP, 0, 0);
        NEED_UNWRAP_CLOSED = new SSLEngineResult(SSLEngineResult.Status.CLOSED, SSLEngineResult.HandshakeStatus.NEED_UNWRAP, 0, 0);
        NEED_WRAP_OK = new SSLEngineResult(SSLEngineResult.Status.OK, SSLEngineResult.HandshakeStatus.NEED_WRAP, 0, 0);
        NEED_WRAP_CLOSED = new SSLEngineResult(SSLEngineResult.Status.CLOSED, SSLEngineResult.HandshakeStatus.NEED_WRAP, 0, 0);
        CLOSED_NOT_HANDSHAKING = new SSLEngineResult(SSLEngineResult.Status.CLOSED, SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING, 0, 0);
    }

    OpenSslEngine(OpenSslContext openSslContext, ByteBufAllocator byteBufAllocator, String str, int i) {
        super(str, i);
        this.handshakeState = HandshakeState.NOT_STARTED;
        ClientAuth clientAuth = ClientAuth.NONE;
        this.clientAuth = clientAuth;
        this.lastAccessed = -1L;
        this.singleSrcBuffer = new ByteBuffer[1];
        this.singleDstBuffer = new ByteBuffer[1];
        OpenSsl.ensureAvailability();
        this.alloc = (ByteBufAllocator) ObjectUtil.checkNotNull(byteBufAllocator, "alloc");
        this.apn = (OpenSslApplicationProtocolNegotiator) openSslContext.applicationProtocolNegotiator();
        this.ssl = SSL.newSSL(openSslContext.ctx, !openSslContext.isClient());
        this.session = new OpenSslSession(openSslContext.sessionContext());
        this.networkBIO = SSL.makeNetworkBIO(this.ssl);
        boolean zIsClient = openSslContext.isClient();
        this.clientMode = zIsClient;
        this.engineMap = openSslContext.engineMap;
        this.rejectRemoteInitiatedRenegation = openSslContext.rejectRemoteInitiatedRenegotiation;
        this.localCerts = openSslContext.keyCertChain;
        setClientAuth(zIsClient ? clientAuth : openSslContext.clientAuth);
        if (zIsClient && str != null) {
            SSL.setTlsExtHostName(this.ssl, str);
        }
        this.keyMaterialManager = openSslContext.keyMaterialManager();
    }

    private void checkEngineClosed(SSLException sSLException) throws SSLException {
        if (this.engineClosed || isDestroyed()) {
            throw sSLException;
        }
    }

    private void closeAll() throws SSLException {
        this.receivedShutdown = true;
        closeOutbound();
        closeInbound();
    }

    private SSLEngineResult.Status getEngineStatus() {
        return this.engineClosed ? SSLEngineResult.Status.CLOSED : SSLEngineResult.Status.OK;
    }

    private SSLEngineResult.HandshakeStatus handshake() throws Exception {
        OpenSslKeyMaterialManager openSslKeyMaterialManager;
        if (this.handshakeState == HandshakeState.FINISHED) {
            return SSLEngineResult.HandshakeStatus.FINISHED;
        }
        checkEngineClosed(HANDSHAKE_ENGINE_CLOSED);
        SSLHandshakeException sSLHandshakeException = this.handshakeException;
        if (sSLHandshakeException != null) {
            if (SSL.pendingWrittenBytesInBIO(this.networkBIO) > 0) {
                return SSLEngineResult.HandshakeStatus.NEED_WRAP;
            }
            this.handshakeException = null;
            shutdown();
            throw sSLHandshakeException;
        }
        this.engineMap.add(this);
        if (this.lastAccessed == -1) {
            this.lastAccessed = System.currentTimeMillis();
        }
        if (!this.certificateSet && (openSslKeyMaterialManager = this.keyMaterialManager) != null) {
            this.certificateSet = true;
            openSslKeyMaterialManager.setKeyMaterial(this);
        }
        int iDoHandshake = SSL.doHandshake(this.ssl);
        if (iDoHandshake > 0) {
            this.session.handshakeFinished();
            this.engineMap.remove(this.ssl);
            return SSLEngineResult.HandshakeStatus.FINISHED;
        }
        SSLHandshakeException sSLHandshakeException2 = this.handshakeException;
        if (sSLHandshakeException2 != null) {
            this.handshakeException = null;
            shutdown();
            throw sSLHandshakeException2;
        }
        int error = SSL.getError(this.ssl, iDoHandshake);
        if (error == 2 || error == 3) {
            return pendingStatus(SSL.pendingWrittenBytesInBIO(this.networkBIO));
        }
        throw shutdownWithError("SSL_do_handshake");
    }

    /* JADX INFO: Access modifiers changed from: private */
    public boolean isDestroyed() {
        return this.destroyed != 0;
    }

    private SSLEngineResult.HandshakeStatus mayFinishHandshake(SSLEngineResult.HandshakeStatus handshakeStatus) throws SSLException {
        return (handshakeStatus != SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING || this.handshakeState == HandshakeState.FINISHED) ? handshakeStatus : handshake();
    }

    private boolean needPendingStatus() {
        return (this.handshakeState == HandshakeState.NOT_STARTED || isDestroyed() || (this.handshakeState == HandshakeState.FINISHED && !this.engineClosed)) ? false : true;
    }

    private SSLEngineResult newResult(int i, int i2, SSLEngineResult.HandshakeStatus handshakeStatus) throws SSLException {
        SSLEngineResult.Status engineStatus = getEngineStatus();
        if (handshakeStatus != SSLEngineResult.HandshakeStatus.FINISHED) {
            handshakeStatus = getHandshakeStatus();
        }
        return new SSLEngineResult(engineStatus, mayFinishHandshake(handshakeStatus), i, i2);
    }

    private int pendingAppData() {
        if (this.handshakeState == HandshakeState.FINISHED) {
            return SSL.pendingReadableBytesInSSL(this.ssl);
        }
        return 0;
    }

    private static SSLEngineResult.HandshakeStatus pendingStatus(int i) {
        return i > 0 ? SSLEngineResult.HandshakeStatus.NEED_WRAP : SSLEngineResult.HandshakeStatus.NEED_UNWRAP;
    }

    private int readEncryptedData(ByteBuffer byteBuffer, int i) {
        int fromBIO;
        if (!byteBuffer.isDirect() || byteBuffer.remaining() < i) {
            ByteBuf byteBufDirectBuffer = this.alloc.directBuffer(i);
            try {
                fromBIO = SSL.readFromBIO(this.networkBIO, OpenSsl.memoryAddress(byteBufDirectBuffer), i);
                if (fromBIO > 0) {
                    int iLimit = byteBuffer.limit();
                    byteBuffer.limit(byteBuffer.position() + fromBIO);
                    byteBufDirectBuffer.getBytes(0, byteBuffer);
                    byteBuffer.limit(iLimit);
                    return fromBIO;
                }
            } finally {
                byteBufDirectBuffer.release();
            }
        } else {
            int iPosition = byteBuffer.position();
            fromBIO = SSL.readFromBIO(this.networkBIO, Buffer.address(byteBuffer) + ((long) iPosition), i);
            if (fromBIO > 0) {
                byteBuffer.position(iPosition + fromBIO);
                return fromBIO;
            }
        }
        return fromBIO;
    }

    private SSLEngineResult readPendingBytesFromBIO(ByteBuffer byteBuffer, int i, int i2, SSLEngineResult.HandshakeStatus handshakeStatus) throws SSLException {
        int iPendingWrittenBytesInBIO = SSL.pendingWrittenBytesInBIO(this.networkBIO);
        if (iPendingWrittenBytesInBIO <= 0) {
            return null;
        }
        if (byteBuffer.remaining() < iPendingWrittenBytesInBIO) {
            SSLEngineResult.Status status = SSLEngineResult.Status.BUFFER_OVERFLOW;
            if (handshakeStatus != SSLEngineResult.HandshakeStatus.FINISHED) {
                handshakeStatus = getHandshakeStatus(iPendingWrittenBytesInBIO);
            }
            return new SSLEngineResult(status, mayFinishHandshake(handshakeStatus), i, i2);
        }
        int encryptedData = readEncryptedData(byteBuffer, iPendingWrittenBytesInBIO);
        if (encryptedData <= 0) {
            SSL.clearError();
        } else {
            i2 += encryptedData;
            iPendingWrittenBytesInBIO -= encryptedData;
        }
        if (this.isOutboundDone) {
            shutdown();
        }
        SSLEngineResult.Status engineStatus = getEngineStatus();
        if (handshakeStatus != SSLEngineResult.HandshakeStatus.FINISHED) {
            handshakeStatus = getHandshakeStatus(iPendingWrittenBytesInBIO);
        }
        return new SSLEngineResult(engineStatus, mayFinishHandshake(handshakeStatus), i, i2);
    }

    private int readPlaintextData(ByteBuffer byteBuffer) {
        if (byteBuffer.isDirect()) {
            int iPosition = byteBuffer.position();
            int fromSSL = SSL.readFromSSL(this.ssl, Buffer.address(byteBuffer) + ((long) iPosition), byteBuffer.limit() - iPosition);
            if (fromSSL <= 0) {
                return fromSSL;
            }
            byteBuffer.position(iPosition + fromSSL);
            return fromSSL;
        }
        int iPosition2 = byteBuffer.position();
        int iLimit = byteBuffer.limit();
        int iMin = Math.min(MAX_ENCRYPTED_PACKET_LENGTH, iLimit - iPosition2);
        ByteBuf byteBufDirectBuffer = this.alloc.directBuffer(iMin);
        try {
            int fromSSL2 = SSL.readFromSSL(this.ssl, OpenSsl.memoryAddress(byteBufDirectBuffer), iMin);
            if (fromSSL2 > 0) {
                byteBuffer.limit(iPosition2 + fromSSL2);
                byteBufDirectBuffer.getBytes(0, byteBuffer);
                byteBuffer.limit(iLimit);
            }
            return fromSSL2;
        } finally {
            byteBufDirectBuffer.release();
        }
    }

    private void rejectRemoteInitiatedRenegation() throws SSLHandshakeException {
        if (!this.rejectRemoteInitiatedRenegation || SSL.getHandshakeCount(this.ssl) <= 1) {
            return;
        }
        shutdown();
        throw new SSLHandshakeException("remote-initiated renegotation not allowed");
    }

    private void resetSingleDstBuffer() {
        this.singleDstBuffer[0] = null;
    }

    private void resetSingleSrcBuffer() {
        this.singleSrcBuffer[0] = null;
    }

    private void setClientAuth(ClientAuth clientAuth) {
        if (this.clientMode) {
            return;
        }
        synchronized (this) {
            if (this.clientAuth == clientAuth) {
                return;
            }
            int i = AnonymousClass1.$SwitchMap$io$netty$handler$ssl$ClientAuth[clientAuth.ordinal()];
            if (i == 1) {
                SSL.setVerify(this.ssl, 0, 10);
            } else if (i == 2) {
                SSL.setVerify(this.ssl, 2, 10);
            } else if (i == 3) {
                SSL.setVerify(this.ssl, 1, 10);
            }
            this.clientAuth = clientAuth;
        }
    }

    private SSLException shutdownWithError(String str) {
        return shutdownWithError(str, SSL.getLastError());
    }

    private ByteBuffer[] singleDstBuffer(ByteBuffer byteBuffer) {
        ByteBuffer[] byteBufferArr = this.singleDstBuffer;
        byteBufferArr[0] = byteBuffer;
        return byteBufferArr;
    }

    private ByteBuffer[] singleSrcBuffer(ByteBuffer byteBuffer) {
        ByteBuffer[] byteBufferArr = this.singleSrcBuffer;
        byteBufferArr[0] = byteBuffer;
        return byteBufferArr;
    }

    private SSLEngineResult sslReadErrorResult(int i, int i2, int i3) throws SSLException {
        String errorString = SSL.getErrorString(i);
        if (SSL.pendingWrittenBytesInBIO(this.networkBIO) <= 0) {
            throw shutdownWithError("SSL_read", errorString);
        }
        if (this.handshakeException == null && this.handshakeState != HandshakeState.FINISHED) {
            this.handshakeException = new SSLHandshakeException(errorString);
        }
        return new SSLEngineResult(SSLEngineResult.Status.OK, SSLEngineResult.HandshakeStatus.NEED_WRAP, i2, i3);
    }

    /* JADX INFO: Access modifiers changed from: private */
    public String toJavaCipherSuite(String str) {
        if (str == null) {
            return null;
        }
        return CipherSuiteConverter.toJava(str, toJavaCipherSuitePrefix(SSL.getVersion(this.ssl)));
    }

    private static String toJavaCipherSuitePrefix(String str) {
        char cCharAt = 0;
        if (str != null && str.length() != 0) {
            cCharAt = str.charAt(0);
        }
        return cCharAt != 'S' ? cCharAt != 'T' ? "UNKNOWN" : "TLS" : "SSL";
    }

    private int writeEncryptedData(ByteBuffer byteBuffer) {
        int iWriteToBIO;
        int iPosition = byteBuffer.position();
        int iRemaining = byteBuffer.remaining();
        if (byteBuffer.isDirect()) {
            iWriteToBIO = SSL.writeToBIO(this.networkBIO, Buffer.address(byteBuffer) + ((long) iPosition), iRemaining);
            if (iWriteToBIO >= 0) {
                byteBuffer.position(iPosition + iWriteToBIO);
            }
        } else {
            ByteBuf byteBufDirectBuffer = this.alloc.directBuffer(iRemaining);
            try {
                long jMemoryAddress = OpenSsl.memoryAddress(byteBufDirectBuffer);
                byteBufDirectBuffer.setBytes(0, byteBuffer);
                iWriteToBIO = SSL.writeToBIO(this.networkBIO, jMemoryAddress, iRemaining);
                if (iWriteToBIO >= 0) {
                    byteBuffer.position(iPosition + iWriteToBIO);
                } else {
                    byteBuffer.position(iPosition);
                }
            } finally {
                byteBufDirectBuffer.release();
            }
        }
        return iWriteToBIO;
    }

    private int writePlaintextData(ByteBuffer byteBuffer) {
        int iWriteToSSL;
        int iPosition = byteBuffer.position();
        int iLimit = byteBuffer.limit();
        int iMin = Math.min(iLimit - iPosition, MAX_PLAINTEXT_LENGTH);
        if (byteBuffer.isDirect()) {
            iWriteToSSL = SSL.writeToSSL(this.ssl, Buffer.address(byteBuffer) + ((long) iPosition), iMin);
            if (iWriteToSSL > 0) {
                byteBuffer.position(iPosition + iWriteToSSL);
            }
        } else {
            ByteBuf byteBufDirectBuffer = this.alloc.directBuffer(iMin);
            try {
                long jMemoryAddress = OpenSsl.memoryAddress(byteBufDirectBuffer);
                byteBuffer.limit(iPosition + iMin);
                byteBufDirectBuffer.setBytes(0, byteBuffer);
                byteBuffer.limit(iLimit);
                iWriteToSSL = SSL.writeToSSL(this.ssl, jMemoryAddress, iMin);
                if (iWriteToSSL > 0) {
                    byteBuffer.position(iPosition + iWriteToSSL);
                } else {
                    byteBuffer.position(iPosition);
                }
            } finally {
                byteBufDirectBuffer.release();
            }
        }
        return iWriteToSSL;
    }

    @Override // javax.net.ssl.SSLEngine
    public synchronized void beginHandshake() throws SSLException {
        int i = AnonymousClass1.$SwitchMap$io$netty$handler$ssl$OpenSslEngine$HandshakeState[this.handshakeState.ordinal()];
        if (i == 1) {
            this.handshakeState = HandshakeState.STARTED_EXPLICITLY;
            handshake();
        } else if (i != 2) {
            if (i == 3) {
                checkEngineClosed(BEGIN_HANDSHAKE_ENGINE_CLOSED);
                this.handshakeState = HandshakeState.STARTED_EXPLICITLY;
            } else if (i != 4) {
                throw new Error();
            }
        } else {
            if (this.clientMode) {
                throw RENEGOTIATION_UNSUPPORTED;
            }
            if (SSL.renegotiate(this.ssl) != 1 || SSL.doHandshake(this.ssl) != 1) {
                throw shutdownWithError("renegotiation failed");
            }
            SSL.setState(this.ssl, InvokeCmd.CMD_TOUCH_CTRL_START);
            this.lastAccessed = System.currentTimeMillis();
            this.handshakeState = HandshakeState.STARTED_EXPLICITLY;
            handshake();
        }
    }

    @Override // javax.net.ssl.SSLEngine
    public synchronized void closeInbound() throws SSLException {
        if (this.isInboundDone) {
            return;
        }
        this.isInboundDone = true;
        this.engineClosed = true;
        shutdown();
        if (this.handshakeState != HandshakeState.NOT_STARTED && !this.receivedShutdown) {
            throw new SSLException("Inbound closed before receiving peer's close_notify: possible truncation attack?");
        }
    }

    @Override // javax.net.ssl.SSLEngine
    public synchronized void closeOutbound() {
        int iShutdownSSL;
        if (this.isOutboundDone) {
            return;
        }
        this.isOutboundDone = true;
        this.engineClosed = true;
        if (this.handshakeState != HandshakeState.NOT_STARTED && !isDestroyed()) {
            if ((SSL.getShutdown(this.ssl) & 1) != 1 && (iShutdownSSL = SSL.shutdownSSL(this.ssl)) < 0) {
                switch (SSL.getError(this.ssl, iShutdownSSL)) {
                    case 0:
                    case 2:
                    case 3:
                    case 4:
                    case 6:
                    case 7:
                    case 8:
                        break;
                    case 1:
                    case 5:
                        InternalLogger internalLogger = logger;
                        if (internalLogger.isDebugEnabled()) {
                            internalLogger.debug("SSL_shutdown failed: OpenSSL error: {}", SSL.getLastError());
                        }
                        shutdown();
                        break;
                    default:
                        SSL.clearError();
                        break;
                }
            }
        } else {
            shutdown();
        }
    }

    protected void finalize() throws Throwable {
        super.finalize();
        shutdown();
    }

    @Override // javax.net.ssl.SSLEngine
    public Runnable getDelegatedTask() {
        return null;
    }

    @Override // javax.net.ssl.SSLEngine
    public boolean getEnableSessionCreation() {
        return false;
    }

    @Override // javax.net.ssl.SSLEngine
    public String[] getEnabledCipherSuites() {
        synchronized (this) {
            if (isDestroyed()) {
                return EmptyArrays.EMPTY_STRINGS;
            }
            String[] ciphers = SSL.getCiphers(this.ssl);
            if (ciphers == null) {
                return EmptyArrays.EMPTY_STRINGS;
            }
            for (int i = 0; i < ciphers.length; i++) {
                String javaCipherSuite = toJavaCipherSuite(ciphers[i]);
                if (javaCipherSuite != null) {
                    ciphers[i] = javaCipherSuite;
                }
            }
            return ciphers;
        }
    }

    @Override // javax.net.ssl.SSLEngine
    public String[] getEnabledProtocols() {
        ArrayList arrayList = InternalThreadLocalMap.get().arrayList();
        arrayList.add("SSLv2Hello");
        synchronized (this) {
            if (isDestroyed()) {
                return (String[]) arrayList.toArray(new String[1]);
            }
            int options = SSL.getOptions(this.ssl);
            if ((67108864 & options) == 0) {
                arrayList.add("TLSv1");
            }
            if ((268435456 & options) == 0) {
                arrayList.add("TLSv1.1");
            }
            if ((134217728 & options) == 0) {
                arrayList.add("TLSv1.2");
            }
            if ((16777216 & options) == 0) {
                arrayList.add("SSLv2");
            }
            if ((options & 33554432) == 0) {
                arrayList.add("SSLv3");
            }
            return (String[]) arrayList.toArray(new String[arrayList.size()]);
        }
    }

    @Override // javax.net.ssl.SSLEngine
    public synchronized SSLSession getHandshakeSession() {
        int i = AnonymousClass1.$SwitchMap$io$netty$handler$ssl$OpenSslEngine$HandshakeState[this.handshakeState.ordinal()];
        if (i == 1 || i == 2) {
            return null;
        }
        return this.session;
    }

    @Override // javax.net.ssl.SSLEngine
    public synchronized SSLEngineResult.HandshakeStatus getHandshakeStatus() {
        return needPendingStatus() ? pendingStatus(SSL.pendingWrittenBytesInBIO(this.networkBIO)) : SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING;
    }

    @Override // javax.net.ssl.SSLEngine
    public boolean getNeedClientAuth() {
        return this.clientAuth == ClientAuth.REQUIRE;
    }

    @Override // javax.net.ssl.SSLEngine
    public synchronized SSLParameters getSSLParameters() {
        SSLParameters sSLParameters;
        List<?> list;
        sSLParameters = super.getSSLParameters();
        int iJavaVersion = PlatformDependent.javaVersion();
        if (iJavaVersion >= 7) {
            sSLParameters.setEndpointIdentificationAlgorithm(this.endPointIdentificationAlgorithm);
            SslParametersUtils.setAlgorithmConstraints(sSLParameters, this.algorithmConstraints);
            if (iJavaVersion >= 8) {
                Method method = SET_SERVER_NAMES_METHOD;
                boolean z = true;
                if (method != null && (list = this.sniHostNames) != null) {
                    try {
                        method.invoke(sSLParameters, list);
                    } catch (IllegalAccessException e2) {
                        throw new Error(e2);
                    } catch (InvocationTargetException e3) {
                        throw new Error(e3);
                    }
                }
                Method method2 = SET_USE_CIPHER_SUITES_ORDER_METHOD;
                if (method2 != null && !isDestroyed()) {
                    try {
                        Object[] objArr = new Object[1];
                        if ((SSL.getOptions(this.ssl) & 4194304) == 0) {
                            z = false;
                        }
                        objArr[0] = Boolean.valueOf(z);
                        method2.invoke(sSLParameters, objArr);
                    } catch (IllegalAccessException e4) {
                        throw new Error(e4);
                    } catch (InvocationTargetException e5) {
                        throw new Error(e5);
                    }
                }
            }
        }
        return sSLParameters;
    }

    @Override // javax.net.ssl.SSLEngine
    public SSLSession getSession() {
        return this.session;
    }

    @Override // javax.net.ssl.SSLEngine
    public String[] getSupportedCipherSuites() {
        Set<String> set = OpenSsl.AVAILABLE_CIPHER_SUITES;
        return (String[]) set.toArray(new String[set.size()]);
    }

    @Override // javax.net.ssl.SSLEngine
    public String[] getSupportedProtocols() {
        Set<String> set = OpenSsl.SUPPORTED_PROTOCOLS_SET;
        return (String[]) set.toArray(new String[set.size()]);
    }

    @Override // javax.net.ssl.SSLEngine
    public boolean getUseClientMode() {
        return this.clientMode;
    }

    @Override // javax.net.ssl.SSLEngine
    public boolean getWantClientAuth() {
        return this.clientAuth == ClientAuth.OPTIONAL;
    }

    /* JADX WARN: Removed duplicated region for block: B:9:0x000c  */
    @Override // javax.net.ssl.SSLEngine
    /*
        Code decompiled incorrectly, please refer to instructions dump.
        To view partially-correct add '--show-bad-code' argument
    */
    public synchronized boolean isInboundDone() {
        /*
            r1 = this;
            monitor-enter(r1)
            boolean r0 = r1.isInboundDone     // Catch: java.lang.Throwable -> Lf
            if (r0 != 0) goto Lc
            boolean r0 = r1.engineClosed     // Catch: java.lang.Throwable -> Lf
            if (r0 == 0) goto La
            goto Lc
        La:
            r0 = 0
            goto Ld
        Lc:
            r0 = 1
        Ld:
            monitor-exit(r1)
            return r0
        Lf:
            r0 = move-exception
            monitor-exit(r1)
            throw r0
        */
        throw new UnsupportedOperationException("Method not decompiled: io.netty.handler.ssl.OpenSslEngine.isInboundDone():boolean");
    }

    @Override // javax.net.ssl.SSLEngine
    public synchronized boolean isOutboundDone() {
        return this.isOutboundDone;
    }

    @Override // javax.net.ssl.SSLEngine
    public void setEnableSessionCreation(boolean z) {
        if (z) {
            throw new UnsupportedOperationException();
        }
    }

    @Override // javax.net.ssl.SSLEngine
    public void setEnabledCipherSuites(String[] strArr) {
        ObjectUtil.checkNotNull(strArr, "cipherSuites");
        StringBuilder sb = new StringBuilder();
        for (String str : strArr) {
            if (str == null) {
                break;
            }
            String openSsl = CipherSuiteConverter.toOpenSsl(str);
            if (openSsl == null) {
                openSsl = str;
            }
            if (!OpenSsl.isCipherSuiteAvailable(openSsl)) {
                throw new IllegalArgumentException("unsupported cipher suite: " + str + '(' + openSsl + ')');
            }
            sb.append(openSsl);
            sb.append(':');
        }
        if (sb.length() == 0) {
            throw new IllegalArgumentException("empty cipher suites");
        }
        sb.setLength(sb.length() - 1);
        String string = sb.toString();
        synchronized (this) {
            if (isDestroyed()) {
                throw new IllegalStateException("failed to enable cipher suites: " + string);
            }
            try {
                SSL.setCipherSuites(this.ssl, string);
            } catch (Exception e2) {
                throw new IllegalStateException("failed to enable cipher suites: " + string, e2);
            }
        }
    }

    @Override // javax.net.ssl.SSLEngine
    public void setEnabledProtocols(String[] strArr) {
        if (strArr == null) {
            throw new IllegalArgumentException();
        }
        boolean z = false;
        boolean z2 = false;
        boolean z3 = false;
        boolean z4 = false;
        boolean z5 = false;
        for (String str : strArr) {
            if (!OpenSsl.SUPPORTED_PROTOCOLS_SET.contains(str)) {
                throw new IllegalArgumentException("Protocol " + str + " is not supported.");
            }
            if (str.equals("SSLv2")) {
                z = true;
            } else if (str.equals("SSLv3")) {
                z2 = true;
            } else if (str.equals("TLSv1")) {
                z3 = true;
            } else if (str.equals("TLSv1.1")) {
                z4 = true;
            } else if (str.equals("TLSv1.2")) {
                z5 = true;
            }
        }
        synchronized (this) {
            if (isDestroyed()) {
                throw new IllegalStateException("failed to enable protocols: " + Arrays.asList(strArr));
            }
            SSL.setOptions(this.ssl, 4095);
            SSL.clearOptions(this.ssl, 520093696);
            int i = z ? 0 : 16777216;
            if (!z2) {
                i |= 33554432;
            }
            if (!z3) {
                i |= 67108864;
            }
            if (!z4) {
                i |= 268435456;
            }
            if (!z5) {
                i |= 134217728;
            }
            SSL.setOptions(this.ssl, i);
        }
    }

    @Override // javax.net.ssl.SSLEngine
    public void setNeedClientAuth(boolean z) {
        setClientAuth(z ? ClientAuth.REQUIRE : ClientAuth.NONE);
    }

    @Override // javax.net.ssl.SSLEngine
    public synchronized void setSSLParameters(SSLParameters sSLParameters) {
        super.setSSLParameters(sSLParameters);
        int iJavaVersion = PlatformDependent.javaVersion();
        if (iJavaVersion >= 7) {
            this.endPointIdentificationAlgorithm = sSLParameters.getEndpointIdentificationAlgorithm();
            this.algorithmConstraints = sSLParameters.getAlgorithmConstraints();
            if (iJavaVersion >= 8) {
                if (SNI_HOSTNAME_CLASS != null && this.clientMode && !isDestroyed()) {
                    try {
                        try {
                            List<?> list = (List) GET_SERVER_NAMES_METHOD.invoke(sSLParameters, new Object[0]);
                            if (list != null) {
                                for (Object obj : list) {
                                    Class<?> cls = SNI_HOSTNAME_CLASS;
                                    if (!cls.isInstance(obj)) {
                                        throw new IllegalArgumentException("Only " + cls.getName() + " instances are supported, but found: " + obj);
                                    }
                                    SSL.setTlsExtHostName(this.ssl, (String) GET_ASCII_NAME_METHOD.invoke(obj, new Object[0]));
                                }
                            }
                            this.sniHostNames = list;
                        } catch (InvocationTargetException e2) {
                            throw new Error(e2);
                        }
                    } catch (IllegalAccessException e3) {
                        throw new Error(e3);
                    }
                }
                Method method = GET_USE_CIPHER_SUITES_ORDER_METHOD;
                if (method != null && !isDestroyed()) {
                    try {
                        if (((Boolean) method.invoke(sSLParameters, new Object[0])).booleanValue()) {
                            SSL.setOptions(this.ssl, 4194304);
                        } else {
                            SSL.clearOptions(this.ssl, 4194304);
                        }
                    } catch (IllegalAccessException e4) {
                        throw new Error(e4);
                    } catch (InvocationTargetException e5) {
                        throw new Error(e5);
                    }
                }
            }
        }
    }

    @Override // javax.net.ssl.SSLEngine
    public void setUseClientMode(boolean z) {
        if (z != this.clientMode) {
            throw new UnsupportedOperationException();
        }
    }

    @Override // javax.net.ssl.SSLEngine
    public void setWantClientAuth(boolean z) {
        setClientAuth(z ? ClientAuth.OPTIONAL : ClientAuth.NONE);
    }

    public synchronized void shutdown() {
        if (DESTROYED_UPDATER.compareAndSet(this, 0, 1)) {
            this.engineMap.remove(this.ssl);
            SSL.freeSSL(this.ssl);
            SSL.freeBIO(this.networkBIO);
            this.networkBIO = 0L;
            this.ssl = 0L;
            this.engineClosed = true;
            this.isOutboundDone = true;
            this.isInboundDone = true;
        }
        SSL.clearError();
    }

    public synchronized long sslPointer() {
        return this.ssl;
    }

    /* JADX WARN: Removed duplicated region for block: B:136:0x00cf A[SYNTHETIC] */
    /* JADX WARN: Removed duplicated region for block: B:137:? A[LOOP:2: B:54:0x00b8->B:137:?, LOOP_END, SYNTHETIC] */
    /*
        Code decompiled incorrectly, please refer to instructions dump.
        To view partially-correct add '--show-bad-code' argument
    */
    public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer[] r10, int r11, int r12, java.nio.ByteBuffer[] r13, int r14, int r15) throws javax.net.ssl.SSLException {
        /*
            Method dump skipped, instruction units count: 479
            To view this dump add '--comments-level debug' option
        */
        throw new UnsupportedOperationException("Method not decompiled: io.netty.handler.ssl.OpenSslEngine.unwrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer[], int, int):javax.net.ssl.SSLEngineResult");
    }

    @Override // javax.net.ssl.SSLEngine
    public SSLEngineResult wrap(ByteBuffer[] byteBufferArr, int i, int i2, ByteBuffer byteBuffer) throws SSLException {
        int i3;
        SSLEngineResult pendingBytesFromBIO;
        if (byteBufferArr == null) {
            throw new IllegalArgumentException("srcs is null");
        }
        if (byteBuffer == null) {
            throw new IllegalArgumentException("dst is null");
        }
        if (i >= byteBufferArr.length || (i3 = i + i2) > byteBufferArr.length) {
            throw new IndexOutOfBoundsException("offset: " + i + ", length: " + i2 + " (expected: offset <= offset + length <= srcs.length (" + byteBufferArr.length + "))");
        }
        if (byteBuffer.isReadOnly()) {
            throw new ReadOnlyBufferException();
        }
        synchronized (this) {
            if (isDestroyed()) {
                return CLOSED_NOT_HANDSHAKING;
            }
            SSLEngineResult.HandshakeStatus handshakeStatusHandshake = SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING;
            HandshakeState handshakeState = this.handshakeState;
            if (handshakeState != HandshakeState.FINISHED) {
                if (handshakeState != HandshakeState.STARTED_EXPLICITLY) {
                    this.handshakeState = HandshakeState.STARTED_IMPLICITLY;
                }
                handshakeStatusHandshake = handshake();
                if (handshakeStatusHandshake == SSLEngineResult.HandshakeStatus.NEED_UNWRAP) {
                    return NEED_UNWRAP_OK;
                }
                if (this.engineClosed) {
                    return NEED_UNWRAP_CLOSED;
                }
            }
            int i4 = 0;
            int iBytesProduced = 0;
            while (i < i3) {
                ByteBuffer byteBuffer2 = byteBufferArr[i];
                if (byteBuffer2 == null) {
                    throw new IllegalArgumentException("srcs[" + i + "] is null");
                }
                while (byteBuffer2.hasRemaining()) {
                    int iWritePlaintextData = writePlaintextData(byteBuffer2);
                    if (iWritePlaintextData <= 0) {
                        int error = SSL.getError(this.ssl, iWritePlaintextData);
                        if (error == 2) {
                            SSLEngineResult pendingBytesFromBIO2 = readPendingBytesFromBIO(byteBuffer, i4, iBytesProduced, handshakeStatusHandshake);
                            if (pendingBytesFromBIO2 == null) {
                                pendingBytesFromBIO2 = new SSLEngineResult(getEngineStatus(), SSLEngineResult.HandshakeStatus.NEED_UNWRAP, i4, iBytesProduced);
                            }
                            return pendingBytesFromBIO2;
                        }
                        if (error == 3) {
                            SSLEngineResult pendingBytesFromBIO3 = readPendingBytesFromBIO(byteBuffer, i4, iBytesProduced, handshakeStatusHandshake);
                            if (pendingBytesFromBIO3 == null) {
                                pendingBytesFromBIO3 = NEED_WRAP_CLOSED;
                            }
                            return pendingBytesFromBIO3;
                        }
                        if (error != 6) {
                            throw shutdownWithError("SSL_write");
                        }
                        if (!this.receivedShutdown) {
                            closeAll();
                        }
                        SSLEngineResult pendingBytesFromBIO4 = readPendingBytesFromBIO(byteBuffer, i4, iBytesProduced, handshakeStatusHandshake);
                        if (pendingBytesFromBIO4 == null) {
                            pendingBytesFromBIO4 = CLOSED_NOT_HANDSHAKING;
                        }
                        return pendingBytesFromBIO4;
                    }
                    i4 += iWritePlaintextData;
                    SSLEngineResult pendingBytesFromBIO5 = readPendingBytesFromBIO(byteBuffer, i4, iBytesProduced, handshakeStatusHandshake);
                    if (pendingBytesFromBIO5 != null) {
                        if (pendingBytesFromBIO5.getStatus() != SSLEngineResult.Status.OK) {
                            return pendingBytesFromBIO5;
                        }
                        iBytesProduced = pendingBytesFromBIO5.bytesProduced();
                    }
                }
                i++;
            }
            return (i4 != 0 || (pendingBytesFromBIO = readPendingBytesFromBIO(byteBuffer, 0, iBytesProduced, handshakeStatusHandshake)) == null) ? newResult(i4, iBytesProduced, handshakeStatusHandshake) : pendingBytesFromBIO;
        }
    }

    private SSLEngineResult.HandshakeStatus getHandshakeStatus(int i) {
        return needPendingStatus() ? pendingStatus(i) : SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING;
    }

    private SSLException shutdownWithError(String str, String str2) {
        InternalLogger internalLogger = logger;
        if (internalLogger.isDebugEnabled()) {
            internalLogger.debug("{} failed: OpenSSL error: {}", str, str2);
        }
        shutdown();
        if (this.handshakeState == HandshakeState.FINISHED) {
            return new SSLException(str2);
        }
        return new SSLHandshakeException(str2);
    }

    private final class OpenSslSession implements SSLSession, ApplicationProtocolAccessor {
        static final /* synthetic */ boolean $assertionsDisabled = false;
        private String applicationProtocol;
        private String cipher;
        private long creationTime;
        private byte[] id;
        private Certificate[] peerCerts;
        private String protocol;
        private final OpenSslSessionContext sessionContext;
        private Map<String, Object> values;
        private X509Certificate[] x509PeerCerts;

        OpenSslSession(OpenSslSessionContext openSslSessionContext) {
            this.sessionContext = openSslSessionContext;
        }

        private void initPeerCerts() {
            Certificate[] certificateArr;
            int i;
            byte[][] peerCertChain = SSL.getPeerCertChain(OpenSslEngine.this.ssl);
            byte[] peerCertificate = !OpenSslEngine.this.clientMode ? SSL.getPeerCertificate(OpenSslEngine.this.ssl) : null;
            if (peerCertChain == null && peerCertificate == null) {
                this.peerCerts = OpenSslEngine.EMPTY_CERTIFICATES;
                this.x509PeerCerts = OpenSslEngine.EMPTY_X509_CERTIFICATES;
                return;
            }
            int length = peerCertChain != null ? peerCertChain.length : 0;
            if (peerCertificate != null) {
                certificateArr = new Certificate[length + 1];
                certificateArr[0] = new OpenSslX509Certificate(peerCertificate);
                i = 1;
            } else {
                certificateArr = new Certificate[length];
                i = 0;
            }
            if (peerCertChain != null) {
                int length2 = peerCertChain.length;
                X509Certificate[] x509CertificateArr = new X509Certificate[length2];
                for (int i2 = 0; i2 < length2; i2++) {
                    byte[] bArr = peerCertChain[i2];
                    x509CertificateArr[i2] = new OpenSslJavaxX509Certificate(bArr);
                    certificateArr[i] = new OpenSslX509Certificate(bArr);
                    i++;
                }
                this.x509PeerCerts = x509CertificateArr;
            } else {
                this.x509PeerCerts = OpenSslEngine.EMPTY_X509_CERTIFICATES;
            }
            this.peerCerts = certificateArr;
        }

        private void notifyUnbound(Object obj, String str) {
            if (obj instanceof SSLSessionBindingListener) {
                ((SSLSessionBindingListener) obj).valueUnbound(new SSLSessionBindingEvent(this, str));
            }
        }

        private void selectApplicationProtocol() throws SSLException {
            ApplicationProtocolConfig.SelectedListenerFailureBehavior selectedListenerFailureBehavior = OpenSslEngine.this.apn.selectedListenerFailureBehavior();
            List<String> listProtocols = OpenSslEngine.this.apn.protocols();
            int i = AnonymousClass1.$SwitchMap$io$netty$handler$ssl$ApplicationProtocolConfig$Protocol[OpenSslEngine.this.apn.protocol().ordinal()];
            if (i != 1) {
                if (i == 2) {
                    String alpnSelected = SSL.getAlpnSelected(OpenSslEngine.this.ssl);
                    if (alpnSelected != null) {
                        this.applicationProtocol = selectApplicationProtocol(listProtocols, selectedListenerFailureBehavior, alpnSelected);
                        return;
                    }
                    return;
                }
                if (i == 3) {
                    String nextProtoNegotiated = SSL.getNextProtoNegotiated(OpenSslEngine.this.ssl);
                    if (nextProtoNegotiated != null) {
                        this.applicationProtocol = selectApplicationProtocol(listProtocols, selectedListenerFailureBehavior, nextProtoNegotiated);
                        return;
                    }
                    return;
                }
                if (i != 4) {
                    throw new Error();
                }
                String alpnSelected2 = SSL.getAlpnSelected(OpenSslEngine.this.ssl);
                if (alpnSelected2 == null) {
                    alpnSelected2 = SSL.getNextProtoNegotiated(OpenSslEngine.this.ssl);
                }
                if (alpnSelected2 != null) {
                    this.applicationProtocol = selectApplicationProtocol(listProtocols, selectedListenerFailureBehavior, alpnSelected2);
                }
            }
        }

        @Override // javax.net.ssl.SSLSession
        public int getApplicationBufferSize() {
            return OpenSslEngine.MAX_PLAINTEXT_LENGTH;
        }

        @Override // io.netty.handler.ssl.ApplicationProtocolAccessor
        public String getApplicationProtocol() {
            String str;
            synchronized (OpenSslEngine.this) {
                str = this.applicationProtocol;
            }
            return str;
        }

        @Override // javax.net.ssl.SSLSession
        public String getCipherSuite() {
            synchronized (OpenSslEngine.this) {
                String str = this.cipher;
                return str == null ? OpenSslEngine.INVALID_CIPHER : str;
            }
        }

        @Override // javax.net.ssl.SSLSession
        public long getCreationTime() {
            synchronized (OpenSslEngine.this) {
                if (this.creationTime == 0 && !OpenSslEngine.this.isDestroyed()) {
                    this.creationTime = SSL.getTime(OpenSslEngine.this.ssl) * 1000;
                }
            }
            return this.creationTime;
        }

        @Override // javax.net.ssl.SSLSession
        public byte[] getId() {
            synchronized (OpenSslEngine.this) {
                byte[] bArr = this.id;
                if (bArr == null) {
                    return EmptyArrays.EMPTY_BYTES;
                }
                return (byte[]) bArr.clone();
            }
        }

        @Override // javax.net.ssl.SSLSession
        public long getLastAccessedTime() {
            long j = OpenSslEngine.this.lastAccessed;
            return j == -1 ? getCreationTime() : j;
        }

        @Override // javax.net.ssl.SSLSession
        public Certificate[] getLocalCertificates() {
            if (OpenSslEngine.this.localCerts == null) {
                return null;
            }
            return (Certificate[]) OpenSslEngine.this.localCerts.clone();
        }

        @Override // javax.net.ssl.SSLSession
        public Principal getLocalPrincipal() {
            Certificate[] certificateArr = OpenSslEngine.this.localCerts;
            if (certificateArr == null || certificateArr.length == 0) {
                return null;
            }
            return ((java.security.cert.X509Certificate) certificateArr[0]).getIssuerX500Principal();
        }

        @Override // javax.net.ssl.SSLSession
        public int getPacketBufferSize() {
            return OpenSslEngine.MAX_ENCRYPTED_PACKET_LENGTH;
        }

        @Override // javax.net.ssl.SSLSession
        public X509Certificate[] getPeerCertificateChain() throws SSLPeerUnverifiedException {
            X509Certificate[] x509CertificateArr;
            synchronized (OpenSslEngine.this) {
                x509CertificateArr = this.x509PeerCerts;
                if (x509CertificateArr == null || x509CertificateArr.length == 0) {
                    throw new SSLPeerUnverifiedException("peer not verified");
                }
            }
            return x509CertificateArr;
        }

        @Override // javax.net.ssl.SSLSession
        public Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException {
            Certificate[] certificateArr;
            synchronized (OpenSslEngine.this) {
                certificateArr = this.peerCerts;
                if (certificateArr == null || certificateArr.length == 0) {
                    throw new SSLPeerUnverifiedException("peer not verified");
                }
            }
            return certificateArr;
        }

        @Override // javax.net.ssl.SSLSession
        public String getPeerHost() {
            return OpenSslEngine.this.getPeerHost();
        }

        @Override // javax.net.ssl.SSLSession
        public int getPeerPort() {
            return OpenSslEngine.this.getPeerPort();
        }

        @Override // javax.net.ssl.SSLSession
        public Principal getPeerPrincipal() throws SSLPeerUnverifiedException {
            return ((java.security.cert.X509Certificate) getPeerCertificates()[0]).getSubjectX500Principal();
        }

        @Override // javax.net.ssl.SSLSession
        public String getProtocol() {
            String version = this.protocol;
            if (version == null) {
                synchronized (OpenSslEngine.this) {
                    version = !OpenSslEngine.this.isDestroyed() ? SSL.getVersion(OpenSslEngine.this.ssl) : "";
                }
            }
            return version;
        }

        @Override // javax.net.ssl.SSLSession
        public SSLSessionContext getSessionContext() {
            return this.sessionContext;
        }

        @Override // javax.net.ssl.SSLSession
        public Object getValue(String str) {
            Objects.requireNonNull(str, "name");
            Map<String, Object> map = this.values;
            if (map == null) {
                return null;
            }
            return map.get(str);
        }

        @Override // javax.net.ssl.SSLSession
        public String[] getValueNames() {
            Map<String, Object> map = this.values;
            return (map == null || map.isEmpty()) ? EmptyArrays.EMPTY_STRINGS : (String[]) map.keySet().toArray(new String[map.size()]);
        }

        void handshakeFinished() throws SSLException {
            synchronized (OpenSslEngine.this) {
                if (OpenSslEngine.this.isDestroyed()) {
                    throw new SSLException("Already closed");
                }
                this.id = SSL.getSessionId(OpenSslEngine.this.ssl);
                OpenSslEngine openSslEngine = OpenSslEngine.this;
                this.cipher = openSslEngine.toJavaCipherSuite(SSL.getCipherForSSL(openSslEngine.ssl));
                this.protocol = SSL.getVersion(OpenSslEngine.this.ssl);
                initPeerCerts();
                selectApplicationProtocol();
                OpenSslEngine.this.handshakeState = HandshakeState.FINISHED;
            }
        }

        @Override // javax.net.ssl.SSLSession
        public void invalidate() {
            synchronized (OpenSslEngine.this) {
                if (!OpenSslEngine.this.isDestroyed()) {
                    SSL.setTimeout(OpenSslEngine.this.ssl, 0L);
                }
            }
        }

        @Override // javax.net.ssl.SSLSession
        public boolean isValid() {
            synchronized (OpenSslEngine.this) {
                if (OpenSslEngine.this.isDestroyed()) {
                    return false;
                }
                return System.currentTimeMillis() - (SSL.getTimeout(OpenSslEngine.this.ssl) * 1000) < SSL.getTime(OpenSslEngine.this.ssl) * 1000;
            }
        }

        @Override // javax.net.ssl.SSLSession
        public void putValue(String str, Object obj) {
            Objects.requireNonNull(str, "name");
            Objects.requireNonNull(obj, ITVStateConstants.KEY_VOICE_VALUE);
            Map map = this.values;
            if (map == null) {
                map = new HashMap(2);
                this.values = map;
            }
            Object objPut = map.put(str, obj);
            if (obj instanceof SSLSessionBindingListener) {
                ((SSLSessionBindingListener) obj).valueBound(new SSLSessionBindingEvent(this, str));
            }
            notifyUnbound(objPut, str);
        }

        @Override // javax.net.ssl.SSLSession
        public void removeValue(String str) {
            Objects.requireNonNull(str, "name");
            Map<String, Object> map = this.values;
            if (map == null) {
                return;
            }
            notifyUnbound(map.remove(str), str);
        }

        private String selectApplicationProtocol(List<String> list, ApplicationProtocolConfig.SelectedListenerFailureBehavior selectedListenerFailureBehavior, String str) throws SSLException {
            if (selectedListenerFailureBehavior == ApplicationProtocolConfig.SelectedListenerFailureBehavior.ACCEPT) {
                return str;
            }
            int size = list.size();
            if (list.contains(str)) {
                return str;
            }
            if (selectedListenerFailureBehavior == ApplicationProtocolConfig.SelectedListenerFailureBehavior.CHOOSE_MY_LAST_PROTOCOL) {
                return list.get(size - 1);
            }
            throw new SSLException("unknown protocol " + str);
        }
    }

    @Override // javax.net.ssl.SSLEngine
    public synchronized SSLEngineResult wrap(ByteBuffer byteBuffer, ByteBuffer byteBuffer2) throws SSLException {
        try {
        } finally {
            resetSingleSrcBuffer();
        }
        return wrap(singleSrcBuffer(byteBuffer), byteBuffer2);
    }

    public SSLEngineResult unwrap(ByteBuffer[] byteBufferArr, ByteBuffer[] byteBufferArr2) throws SSLException {
        return unwrap(byteBufferArr, 0, byteBufferArr.length, byteBufferArr2, 0, byteBufferArr2.length);
    }

    @Override // javax.net.ssl.SSLEngine
    public synchronized SSLEngineResult unwrap(ByteBuffer byteBuffer, ByteBuffer[] byteBufferArr, int i, int i2) throws SSLException {
        try {
        } finally {
            resetSingleSrcBuffer();
        }
        return unwrap(singleSrcBuffer(byteBuffer), 0, 1, byteBufferArr, i, i2);
    }

    @Override // javax.net.ssl.SSLEngine
    public synchronized SSLEngineResult unwrap(ByteBuffer byteBuffer, ByteBuffer byteBuffer2) throws SSLException {
        try {
        } finally {
            resetSingleSrcBuffer();
            resetSingleDstBuffer();
        }
        return unwrap(singleSrcBuffer(byteBuffer), singleDstBuffer(byteBuffer2));
    }

    @Override // javax.net.ssl.SSLEngine
    public synchronized SSLEngineResult unwrap(ByteBuffer byteBuffer, ByteBuffer[] byteBufferArr) throws SSLException {
        try {
        } finally {
            resetSingleSrcBuffer();
        }
        return unwrap(singleSrcBuffer(byteBuffer), byteBufferArr);
    }
}
