public final class org.apache.cassandra.security.SSLFactory
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: org.apache.cassandra.security.SSLFactory
  super_class: java.lang.Object
{
  private static final org.slf4j.Logger logger;
    descriptor: Lorg/slf4j/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static boolean checkedExpiry;
    descriptor: Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 56
            ldc Lorg/apache/cassandra/security/SSLFactory;
            invokestatic org.slf4j.LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
            putstatic org.apache.cassandra.security.SSLFactory.logger:Lorg/slf4j/Logger;
         1: .line 57
            iconst_0
            putstatic org.apache.cassandra.security.SSLFactory.checkedExpiry:Z
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.cassandra.security.SSLFactory this
         0: .line 54
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.apache.cassandra.security.SSLFactory this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/cassandra/security/SSLFactory;

  public static javax.net.ssl.SSLServerSocket getServerSocket(org.apache.cassandra.config.EncryptionOptions, java.net.InetAddress, int);
    descriptor: (Lorg/apache/cassandra/config/EncryptionOptions;Ljava/net/InetAddress;I)Ljavax/net/ssl/SSLServerSocket;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=6, args_size=3
        start local 0 // org.apache.cassandra.config.EncryptionOptions options
        start local 1 // java.net.InetAddress address
        start local 2 // int port
         0: .line 61
            aload 0 /* options */
            iconst_1
            invokestatic org.apache.cassandra.security.SSLFactory.createSSLContext:(Lorg/apache/cassandra/config/EncryptionOptions;Z)Ljavax/net/ssl/SSLContext;
            astore 3 /* ctx */
        start local 3 // javax.net.ssl.SSLContext ctx
         1: .line 62
            aload 3 /* ctx */
            invokevirtual javax.net.ssl.SSLContext.getServerSocketFactory:()Ljavax/net/ssl/SSLServerSocketFactory;
            invokevirtual javax.net.ssl.SSLServerSocketFactory.createServerSocket:()Ljava/net/ServerSocket;
            checkcast javax.net.ssl.SSLServerSocket
            astore 4 /* serverSocket */
        start local 4 // javax.net.ssl.SSLServerSocket serverSocket
         2: .line 65
            aload 4 /* serverSocket */
            iconst_1
            invokevirtual javax.net.ssl.SSLServerSocket.setReuseAddress:(Z)V
         3: .line 66
            aload 4 /* serverSocket */
            aload 0 /* options */
            invokestatic org.apache.cassandra.security.SSLFactory.prepareSocket:(Ljavax/net/ssl/SSLServerSocket;Lorg/apache/cassandra/config/EncryptionOptions;)V
         4: .line 67
            aload 4 /* serverSocket */
            new java.net.InetSocketAddress
            dup
            aload 1 /* address */
            iload 2 /* port */
            invokespecial java.net.InetSocketAddress.<init>:(Ljava/net/InetAddress;I)V
            sipush 500
            invokevirtual javax.net.ssl.SSLServerSocket.bind:(Ljava/net/SocketAddress;I)V
         5: .line 68
            aload 4 /* serverSocket */
         6: areturn
         7: .line 70
      StackMap locals: org.apache.cassandra.config.EncryptionOptions java.net.InetAddress int javax.net.ssl.SSLContext javax.net.ssl.SSLServerSocket
      StackMap stack: java.lang.Exception
            astore 5 /* e */
        start local 5 // java.lang.Exception e
         8: .line 72
            aload 4 /* serverSocket */
            invokevirtual javax.net.ssl.SSLServerSocket.close:()V
         9: .line 73
            aload 5 /* e */
            athrow
        end local 5 // java.lang.Exception e
        end local 4 // javax.net.ssl.SSLServerSocket serverSocket
        end local 3 // javax.net.ssl.SSLContext ctx
        end local 2 // int port
        end local 1 // java.net.InetAddress address
        end local 0 // org.apache.cassandra.config.EncryptionOptions options
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   10     0       options  Lorg/apache/cassandra/config/EncryptionOptions;
            0   10     1       address  Ljava/net/InetAddress;
            0   10     2          port  I
            1   10     3           ctx  Ljavax/net/ssl/SSLContext;
            2   10     4  serverSocket  Ljavax/net/ssl/SSLServerSocket;
            8   10     5             e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           2     6       7  Class java.lang.IllegalArgumentException
           2     6       7  Class java.lang.SecurityException
           2     6       7  Class java.io.IOException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      options  
      address  
      port     

  public static javax.net.ssl.SSLSocket getSocket(org.apache.cassandra.config.EncryptionOptions, java.net.InetAddress, int, java.net.InetAddress, int);
    descriptor: (Lorg/apache/cassandra/config/EncryptionOptions;Ljava/net/InetAddress;ILjava/net/InetAddress;I)Ljavax/net/ssl/SSLSocket;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=8, args_size=5
        start local 0 // org.apache.cassandra.config.EncryptionOptions options
        start local 1 // java.net.InetAddress address
        start local 2 // int port
        start local 3 // java.net.InetAddress localAddress
        start local 4 // int localPort
         0: .line 80
            aload 0 /* options */
            iconst_1
            invokestatic org.apache.cassandra.security.SSLFactory.createSSLContext:(Lorg/apache/cassandra/config/EncryptionOptions;Z)Ljavax/net/ssl/SSLContext;
            astore 5 /* ctx */
        start local 5 // javax.net.ssl.SSLContext ctx
         1: .line 81
            aload 5 /* ctx */
            invokevirtual javax.net.ssl.SSLContext.getSocketFactory:()Ljavax/net/ssl/SSLSocketFactory;
            aload 1 /* address */
            iload 2 /* port */
            aload 3 /* localAddress */
            iload 4 /* localPort */
            invokevirtual javax.net.ssl.SSLSocketFactory.createSocket:(Ljava/net/InetAddress;ILjava/net/InetAddress;I)Ljava/net/Socket;
            checkcast javax.net.ssl.SSLSocket
            astore 6 /* socket */
        start local 6 // javax.net.ssl.SSLSocket socket
         2: .line 84
            aload 6 /* socket */
            aload 0 /* options */
            invokestatic org.apache.cassandra.security.SSLFactory.prepareSocket:(Ljavax/net/ssl/SSLSocket;Lorg/apache/cassandra/config/EncryptionOptions;)V
         3: .line 85
            aload 6 /* socket */
         4: areturn
         5: .line 87
      StackMap locals: org.apache.cassandra.config.EncryptionOptions java.net.InetAddress int java.net.InetAddress int javax.net.ssl.SSLContext javax.net.ssl.SSLSocket
      StackMap stack: java.lang.IllegalArgumentException
            astore 7 /* e */
        start local 7 // java.lang.IllegalArgumentException e
         6: .line 89
            aload 6 /* socket */
            invokevirtual javax.net.ssl.SSLSocket.close:()V
         7: .line 90
            aload 7 /* e */
            athrow
        end local 7 // java.lang.IllegalArgumentException e
        end local 6 // javax.net.ssl.SSLSocket socket
        end local 5 // javax.net.ssl.SSLContext ctx
        end local 4 // int localPort
        end local 3 // java.net.InetAddress localAddress
        end local 2 // int port
        end local 1 // java.net.InetAddress address
        end local 0 // org.apache.cassandra.config.EncryptionOptions options
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    8     0       options  Lorg/apache/cassandra/config/EncryptionOptions;
            0    8     1       address  Ljava/net/InetAddress;
            0    8     2          port  I
            0    8     3  localAddress  Ljava/net/InetAddress;
            0    8     4     localPort  I
            1    8     5           ctx  Ljavax/net/ssl/SSLContext;
            2    8     6        socket  Ljavax/net/ssl/SSLSocket;
            6    8     7             e  Ljava/lang/IllegalArgumentException;
      Exception table:
        from    to  target  type
           2     4       5  Class java.lang.IllegalArgumentException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
              Name  Flags
      options       
      address       
      port          
      localAddress  
      localPort     

  public static javax.net.ssl.SSLSocket getSocket(org.apache.cassandra.config.EncryptionOptions, java.net.InetAddress, int);
    descriptor: (Lorg/apache/cassandra/config/EncryptionOptions;Ljava/net/InetAddress;I)Ljavax/net/ssl/SSLSocket;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=6, args_size=3
        start local 0 // org.apache.cassandra.config.EncryptionOptions options
        start local 1 // java.net.InetAddress address
        start local 2 // int port
         0: .line 97
            aload 0 /* options */
            iconst_1
            invokestatic org.apache.cassandra.security.SSLFactory.createSSLContext:(Lorg/apache/cassandra/config/EncryptionOptions;Z)Ljavax/net/ssl/SSLContext;
            astore 3 /* ctx */
        start local 3 // javax.net.ssl.SSLContext ctx
         1: .line 98
            aload 3 /* ctx */
            invokevirtual javax.net.ssl.SSLContext.getSocketFactory:()Ljavax/net/ssl/SSLSocketFactory;
            aload 1 /* address */
            iload 2 /* port */
            invokevirtual javax.net.ssl.SSLSocketFactory.createSocket:(Ljava/net/InetAddress;I)Ljava/net/Socket;
            checkcast javax.net.ssl.SSLSocket
            astore 4 /* socket */
        start local 4 // javax.net.ssl.SSLSocket socket
         2: .line 101
            aload 4 /* socket */
            aload 0 /* options */
            invokestatic org.apache.cassandra.security.SSLFactory.prepareSocket:(Ljavax/net/ssl/SSLSocket;Lorg/apache/cassandra/config/EncryptionOptions;)V
         3: .line 102
            aload 4 /* socket */
         4: areturn
         5: .line 104
      StackMap locals: org.apache.cassandra.config.EncryptionOptions java.net.InetAddress int javax.net.ssl.SSLContext javax.net.ssl.SSLSocket
      StackMap stack: java.lang.IllegalArgumentException
            astore 5 /* e */
        start local 5 // java.lang.IllegalArgumentException e
         6: .line 106
            aload 4 /* socket */
            invokevirtual javax.net.ssl.SSLSocket.close:()V
         7: .line 107
            aload 5 /* e */
            athrow
        end local 5 // java.lang.IllegalArgumentException e
        end local 4 // javax.net.ssl.SSLSocket socket
        end local 3 // javax.net.ssl.SSLContext ctx
        end local 2 // int port
        end local 1 // java.net.InetAddress address
        end local 0 // org.apache.cassandra.config.EncryptionOptions options
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0  options  Lorg/apache/cassandra/config/EncryptionOptions;
            0    8     1  address  Ljava/net/InetAddress;
            0    8     2     port  I
            1    8     3      ctx  Ljavax/net/ssl/SSLContext;
            2    8     4   socket  Ljavax/net/ssl/SSLSocket;
            6    8     5        e  Ljava/lang/IllegalArgumentException;
      Exception table:
        from    to  target  type
           2     4       5  Class java.lang.IllegalArgumentException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      options  
      address  
      port     

  public static javax.net.ssl.SSLSocket getSocket(org.apache.cassandra.config.EncryptionOptions);
    descriptor: (Lorg/apache/cassandra/config/EncryptionOptions;)Ljavax/net/ssl/SSLSocket;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // org.apache.cassandra.config.EncryptionOptions options
         0: .line 114
            aload 0 /* options */
            iconst_1
            invokestatic org.apache.cassandra.security.SSLFactory.createSSLContext:(Lorg/apache/cassandra/config/EncryptionOptions;Z)Ljavax/net/ssl/SSLContext;
            astore 1 /* ctx */
        start local 1 // javax.net.ssl.SSLContext ctx
         1: .line 115
            aload 1 /* ctx */
            invokevirtual javax.net.ssl.SSLContext.getSocketFactory:()Ljavax/net/ssl/SSLSocketFactory;
            invokevirtual javax.net.ssl.SSLSocketFactory.createSocket:()Ljava/net/Socket;
            checkcast javax.net.ssl.SSLSocket
            astore 2 /* socket */
        start local 2 // javax.net.ssl.SSLSocket socket
         2: .line 118
            aload 2 /* socket */
            aload 0 /* options */
            invokestatic org.apache.cassandra.security.SSLFactory.prepareSocket:(Ljavax/net/ssl/SSLSocket;Lorg/apache/cassandra/config/EncryptionOptions;)V
         3: .line 119
            aload 2 /* socket */
         4: areturn
         5: .line 121
      StackMap locals: org.apache.cassandra.config.EncryptionOptions javax.net.ssl.SSLContext javax.net.ssl.SSLSocket
      StackMap stack: java.lang.IllegalArgumentException
            astore 3 /* e */
        start local 3 // java.lang.IllegalArgumentException e
         6: .line 123
            aload 2 /* socket */
            invokevirtual javax.net.ssl.SSLSocket.close:()V
         7: .line 124
            aload 3 /* e */
            athrow
        end local 3 // java.lang.IllegalArgumentException e
        end local 2 // javax.net.ssl.SSLSocket socket
        end local 1 // javax.net.ssl.SSLContext ctx
        end local 0 // org.apache.cassandra.config.EncryptionOptions options
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0  options  Lorg/apache/cassandra/config/EncryptionOptions;
            1    8     1      ctx  Ljavax/net/ssl/SSLContext;
            2    8     2   socket  Ljavax/net/ssl/SSLSocket;
            6    8     3        e  Ljava/lang/IllegalArgumentException;
      Exception table:
        from    to  target  type
           2     4       5  Class java.lang.IllegalArgumentException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      options  

  private static void prepareSocket(javax.net.ssl.SSLServerSocket, org.apache.cassandra.config.EncryptionOptions);
    descriptor: (Ljavax/net/ssl/SSLServerSocket;Lorg/apache/cassandra/config/EncryptionOptions;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // javax.net.ssl.SSLServerSocket serverSocket
        start local 1 // org.apache.cassandra.config.EncryptionOptions options
         0: .line 131
            aload 0 /* serverSocket */
            invokevirtual javax.net.ssl.SSLServerSocket.getSupportedCipherSuites:()[Ljava/lang/String;
            aload 1 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.cipher_suites:[Ljava/lang/String;
            invokestatic org.apache.cassandra.security.SSLFactory.filterCipherSuites:([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
            astore 2 /* suites */
        start local 2 // java.lang.String[] suites
         1: .line 132
            aload 1 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.require_endpoint_verification:Z
            ifeq 5
         2: .line 134
            aload 0 /* serverSocket */
            invokevirtual javax.net.ssl.SSLServerSocket.getSSLParameters:()Ljavax/net/ssl/SSLParameters;
            astore 3 /* sslParameters */
        start local 3 // javax.net.ssl.SSLParameters sslParameters
         3: .line 135
            aload 3 /* sslParameters */
            ldc "HTTPS"
            invokevirtual javax.net.ssl.SSLParameters.setEndpointIdentificationAlgorithm:(Ljava/lang/String;)V
         4: .line 136
            aload 0 /* serverSocket */
            aload 3 /* sslParameters */
            invokevirtual javax.net.ssl.SSLServerSocket.setSSLParameters:(Ljavax/net/ssl/SSLParameters;)V
        end local 3 // javax.net.ssl.SSLParameters sslParameters
         5: .line 138
      StackMap locals: java.lang.String[]
      StackMap stack:
            aload 0 /* serverSocket */
            aload 2 /* suites */
            invokevirtual javax.net.ssl.SSLServerSocket.setEnabledCipherSuites:([Ljava/lang/String;)V
         6: .line 139
            aload 0 /* serverSocket */
            aload 1 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.require_client_auth:Z
            invokevirtual javax.net.ssl.SSLServerSocket.setNeedClientAuth:(Z)V
         7: .line 140
            return
        end local 2 // java.lang.String[] suites
        end local 1 // org.apache.cassandra.config.EncryptionOptions options
        end local 0 // javax.net.ssl.SSLServerSocket serverSocket
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    8     0   serverSocket  Ljavax/net/ssl/SSLServerSocket;
            0    8     1        options  Lorg/apache/cassandra/config/EncryptionOptions;
            1    8     2         suites  [Ljava/lang/String;
            3    5     3  sslParameters  Ljavax/net/ssl/SSLParameters;
    MethodParameters:
              Name  Flags
      serverSocket  
      options       

  private static void prepareSocket(javax.net.ssl.SSLSocket, org.apache.cassandra.config.EncryptionOptions);
    descriptor: (Ljavax/net/ssl/SSLSocket;Lorg/apache/cassandra/config/EncryptionOptions;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // javax.net.ssl.SSLSocket socket
        start local 1 // org.apache.cassandra.config.EncryptionOptions options
         0: .line 145
            aload 0 /* socket */
            invokevirtual javax.net.ssl.SSLSocket.getSupportedCipherSuites:()[Ljava/lang/String;
            aload 1 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.cipher_suites:[Ljava/lang/String;
            invokestatic org.apache.cassandra.security.SSLFactory.filterCipherSuites:([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
            astore 2 /* suites */
        start local 2 // java.lang.String[] suites
         1: .line 146
            aload 1 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.require_endpoint_verification:Z
            ifeq 5
         2: .line 148
            aload 0 /* socket */
            invokevirtual javax.net.ssl.SSLSocket.getSSLParameters:()Ljavax/net/ssl/SSLParameters;
            astore 3 /* sslParameters */
        start local 3 // javax.net.ssl.SSLParameters sslParameters
         3: .line 149
            aload 3 /* sslParameters */
            ldc "HTTPS"
            invokevirtual javax.net.ssl.SSLParameters.setEndpointIdentificationAlgorithm:(Ljava/lang/String;)V
         4: .line 150
            aload 0 /* socket */
            aload 3 /* sslParameters */
            invokevirtual javax.net.ssl.SSLSocket.setSSLParameters:(Ljavax/net/ssl/SSLParameters;)V
        end local 3 // javax.net.ssl.SSLParameters sslParameters
         5: .line 152
      StackMap locals: java.lang.String[]
      StackMap stack:
            aload 0 /* socket */
            aload 2 /* suites */
            invokevirtual javax.net.ssl.SSLSocket.setEnabledCipherSuites:([Ljava/lang/String;)V
         6: .line 153
            return
        end local 2 // java.lang.String[] suites
        end local 1 // org.apache.cassandra.config.EncryptionOptions options
        end local 0 // javax.net.ssl.SSLSocket socket
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    7     0         socket  Ljavax/net/ssl/SSLSocket;
            0    7     1        options  Lorg/apache/cassandra/config/EncryptionOptions;
            1    7     2         suites  [Ljava/lang/String;
            3    5     3  sslParameters  Ljavax/net/ssl/SSLParameters;
    MethodParameters:
         Name  Flags
      socket   
      options  

  public static javax.net.ssl.SSLContext createSSLContext(org.apache.cassandra.config.EncryptionOptions, boolean);
    descriptor: (Lorg/apache/cassandra/config/EncryptionOptions;Z)Ljavax/net/ssl/SSLContext;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=12, args_size=2
        start local 0 // org.apache.cassandra.config.EncryptionOptions options
        start local 1 // boolean buildTruststore
         0: .line 158
            aconst_null
            astore 2 /* tsf */
        start local 2 // java.io.FileInputStream tsf
         1: .line 159
            aconst_null
            astore 3 /* ksf */
        start local 3 // java.io.FileInputStream ksf
         2: .line 163
            aload 0 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.protocol:Ljava/lang/String;
            invokestatic javax.net.ssl.SSLContext.getInstance:(Ljava/lang/String;)Ljavax/net/ssl/SSLContext;
            astore 4 /* ctx */
        start local 4 // javax.net.ssl.SSLContext ctx
         3: .line 164
            aconst_null
            astore 5 /* trustManagers */
        start local 5 // javax.net.ssl.TrustManager[] trustManagers
         4: .line 166
            iload 1 /* buildTruststore */
            ifeq 11
         5: .line 168
            new java.io.FileInputStream
            dup
            aload 0 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.truststore:Ljava/lang/String;
            invokespecial java.io.FileInputStream.<init>:(Ljava/lang/String;)V
            astore 2 /* tsf */
         6: .line 169
            aload 0 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.algorithm:Ljava/lang/String;
            invokestatic javax.net.ssl.TrustManagerFactory.getInstance:(Ljava/lang/String;)Ljavax/net/ssl/TrustManagerFactory;
            astore 6 /* tmf */
        start local 6 // javax.net.ssl.TrustManagerFactory tmf
         7: .line 170
            aload 0 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.store_type:Ljava/lang/String;
            invokestatic java.security.KeyStore.getInstance:(Ljava/lang/String;)Ljava/security/KeyStore;
            astore 7 /* ts */
        start local 7 // java.security.KeyStore ts
         8: .line 171
            aload 7 /* ts */
            aload 2 /* tsf */
            aload 0 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.truststore_password:Ljava/lang/String;
            invokevirtual java.lang.String.toCharArray:()[C
            invokevirtual java.security.KeyStore.load:(Ljava/io/InputStream;[C)V
         9: .line 172
            aload 6 /* tmf */
            aload 7 /* ts */
            invokevirtual javax.net.ssl.TrustManagerFactory.init:(Ljava/security/KeyStore;)V
        10: .line 173
            aload 6 /* tmf */
            invokevirtual javax.net.ssl.TrustManagerFactory.getTrustManagers:()[Ljavax/net/ssl/TrustManager;
            astore 5 /* trustManagers */
        end local 7 // java.security.KeyStore ts
        end local 6 // javax.net.ssl.TrustManagerFactory tmf
        11: .line 176
      StackMap locals: org.apache.cassandra.config.EncryptionOptions int java.io.FileInputStream java.io.FileInputStream javax.net.ssl.SSLContext javax.net.ssl.TrustManager[]
      StackMap stack:
            new java.io.FileInputStream
            dup
            aload 0 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.keystore:Ljava/lang/String;
            invokespecial java.io.FileInputStream.<init>:(Ljava/lang/String;)V
            astore 3 /* ksf */
        12: .line 177
            aload 0 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.algorithm:Ljava/lang/String;
            invokestatic javax.net.ssl.KeyManagerFactory.getInstance:(Ljava/lang/String;)Ljavax/net/ssl/KeyManagerFactory;
            astore 6 /* kmf */
        start local 6 // javax.net.ssl.KeyManagerFactory kmf
        13: .line 178
            aload 0 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.store_type:Ljava/lang/String;
            invokestatic java.security.KeyStore.getInstance:(Ljava/lang/String;)Ljava/security/KeyStore;
            astore 7 /* ks */
        start local 7 // java.security.KeyStore ks
        14: .line 179
            aload 7 /* ks */
            aload 3 /* ksf */
            aload 0 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.keystore_password:Ljava/lang/String;
            invokevirtual java.lang.String.toCharArray:()[C
            invokevirtual java.security.KeyStore.load:(Ljava/io/InputStream;[C)V
        15: .line 180
            getstatic org.apache.cassandra.security.SSLFactory.checkedExpiry:Z
            ifne 25
        16: .line 182
            aload 7 /* ks */
            invokevirtual java.security.KeyStore.aliases:()Ljava/util/Enumeration;
            astore 8 /* aliases */
        start local 8 // java.util.Enumeration aliases
        17: goto 23
        18: .line 184
      StackMap locals: javax.net.ssl.KeyManagerFactory java.security.KeyStore java.util.Enumeration
      StackMap stack:
            aload 8 /* aliases */
            invokeinterface java.util.Enumeration.nextElement:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 9 /* alias */
        start local 9 // java.lang.String alias
        19: .line 185
            aload 7 /* ks */
            aload 9 /* alias */
            invokevirtual java.security.KeyStore.getCertificate:(Ljava/lang/String;)Ljava/security/cert/Certificate;
            invokevirtual java.security.cert.Certificate.getType:()Ljava/lang/String;
            ldc "X.509"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 23
        20: .line 187
            aload 7 /* ks */
            aload 9 /* alias */
            invokevirtual java.security.KeyStore.getCertificate:(Ljava/lang/String;)Ljava/security/cert/Certificate;
            checkcast java.security.cert.X509Certificate
            invokevirtual java.security.cert.X509Certificate.getNotAfter:()Ljava/util/Date;
            astore 10 /* expires */
        start local 10 // java.util.Date expires
        21: .line 188
            aload 10 /* expires */
            new java.util.Date
            dup
            invokespecial java.util.Date.<init>:()V
            invokevirtual java.util.Date.before:(Ljava/util/Date;)Z
            ifeq 23
        22: .line 189
            getstatic org.apache.cassandra.security.SSLFactory.logger:Lorg/slf4j/Logger;
            ldc "Certificate for {} expired on {}"
            aload 9 /* alias */
            aload 10 /* expires */
            invokeinterface org.slf4j.Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
        end local 10 // java.util.Date expires
        end local 9 // java.lang.String alias
        23: .line 182
      StackMap locals:
      StackMap stack:
            aload 8 /* aliases */
            invokeinterface java.util.Enumeration.hasMoreElements:()Z
            ifne 18
        end local 8 // java.util.Enumeration aliases
        24: .line 192
            iconst_1
            putstatic org.apache.cassandra.security.SSLFactory.checkedExpiry:Z
        25: .line 194
      StackMap locals:
      StackMap stack:
            aload 6 /* kmf */
            aload 7 /* ks */
            aload 0 /* options */
            getfield org.apache.cassandra.config.EncryptionOptions.keystore_password:Ljava/lang/String;
            invokevirtual java.lang.String.toCharArray:()[C
            invokevirtual javax.net.ssl.KeyManagerFactory.init:(Ljava/security/KeyStore;[C)V
        26: .line 196
            aload 4 /* ctx */
            aload 6 /* kmf */
            invokevirtual javax.net.ssl.KeyManagerFactory.getKeyManagers:()[Ljavax/net/ssl/KeyManager;
            aload 5 /* trustManagers */
            aconst_null
            invokevirtual javax.net.ssl.SSLContext.init:([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V
        end local 7 // java.security.KeyStore ks
        end local 6 // javax.net.ssl.KeyManagerFactory kmf
        end local 5 // javax.net.ssl.TrustManager[] trustManagers
        27: .line 198
            goto 34
        end local 4 // javax.net.ssl.SSLContext ctx
        28: .line 199
      StackMap locals: org.apache.cassandra.config.EncryptionOptions int java.io.FileInputStream java.io.FileInputStream
      StackMap stack: java.lang.Exception
            astore 5 /* e */
        start local 5 // java.lang.Exception e
        29: .line 201
            new java.io.IOException
            dup
            ldc "Error creating the initializing the SSL Context"
            aload 5 /* e */
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 5 // java.lang.Exception e
        30: .line 204
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 11
        31: .line 205
            aload 2 /* tsf */
            invokestatic org.apache.cassandra.io.util.FileUtils.closeQuietly:(Ljava/io/Closeable;)V
        32: .line 206
            aload 3 /* ksf */
            invokestatic org.apache.cassandra.io.util.FileUtils.closeQuietly:(Ljava/io/Closeable;)V
        33: .line 207
            aload 11
            athrow
        start local 4 // javax.net.ssl.SSLContext ctx
        34: .line 205
      StackMap locals: javax.net.ssl.SSLContext
      StackMap stack:
            aload 2 /* tsf */
            invokestatic org.apache.cassandra.io.util.FileUtils.closeQuietly:(Ljava/io/Closeable;)V
        35: .line 206
            aload 3 /* ksf */
            invokestatic org.apache.cassandra.io.util.FileUtils.closeQuietly:(Ljava/io/Closeable;)V
        36: .line 208
            aload 4 /* ctx */
            areturn
        end local 4 // javax.net.ssl.SSLContext ctx
        end local 3 // java.io.FileInputStream ksf
        end local 2 // java.io.FileInputStream tsf
        end local 1 // boolean buildTruststore
        end local 0 // org.apache.cassandra.config.EncryptionOptions options
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   37     0          options  Lorg/apache/cassandra/config/EncryptionOptions;
            0   37     1  buildTruststore  Z
            1   37     2              tsf  Ljava/io/FileInputStream;
            2   37     3              ksf  Ljava/io/FileInputStream;
            3   28     4              ctx  Ljavax/net/ssl/SSLContext;
           34   37     4              ctx  Ljavax/net/ssl/SSLContext;
            4   27     5    trustManagers  [Ljavax/net/ssl/TrustManager;
            7   11     6              tmf  Ljavax/net/ssl/TrustManagerFactory;
            8   11     7               ts  Ljava/security/KeyStore;
           13   27     6              kmf  Ljavax/net/ssl/KeyManagerFactory;
           14   27     7               ks  Ljava/security/KeyStore;
           17   24     8          aliases  Ljava/util/Enumeration<Ljava/lang/String;>;
           19   23     9            alias  Ljava/lang/String;
           21   23    10          expires  Ljava/util/Date;
           29   30     5                e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           2    27      28  Class java.lang.Exception
           2    30      30  any
    Exceptions:
      throws java.io.IOException
    MethodParameters:
                 Name  Flags
      options          
      buildTruststore  

  public static java.lang.String[] filterCipherSuites(java.lang.String[], java.lang.String[]);
    descriptor: ([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=6, args_size=2
        start local 0 // java.lang.String[] supported
        start local 1 // java.lang.String[] desired
         0: .line 213
            aload 0 /* supported */
            aload 1 /* desired */
            invokestatic java.util.Arrays.equals:([Ljava/lang/Object;[Ljava/lang/Object;)Z
            ifeq 2
         1: .line 214
            aload 1 /* desired */
            areturn
         2: .line 215
      StackMap locals:
      StackMap stack:
            aload 1 /* desired */
            invokestatic java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
            astore 2 /* ldesired */
        start local 2 // java.util.List ldesired
         3: .line 216
            aload 0 /* supported */
            invokestatic com.google.common.collect.ImmutableSet.copyOf:([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSet;
            astore 3 /* ssupported */
        start local 3 // com.google.common.collect.ImmutableSet ssupported
         4: .line 217
            aload 2 /* ldesired */
            aload 3 /* ssupported */
            invokestatic com.google.common.base.Predicates.in:(Ljava/util/Collection;)Lcom/google/common/base/Predicate;
            invokestatic com.google.common.collect.Iterables.filter:(Ljava/lang/Iterable;Lcom/google/common/base/Predicate;)Ljava/lang/Iterable;
            ldc Ljava/lang/String;
            invokestatic com.google.common.collect.Iterables.toArray:(Ljava/lang/Iterable;Ljava/lang/Class;)[Ljava/lang/Object;
            checkcast java.lang.String[]
            astore 4 /* ret */
        start local 4 // java.lang.String[] ret
         5: .line 218
            aload 1 /* desired */
            arraylength
            aload 4 /* ret */
            arraylength
            if_icmple 8
            getstatic org.apache.cassandra.security.SSLFactory.logger:Lorg/slf4j/Logger;
            invokeinterface org.slf4j.Logger.isWarnEnabled:()Z
            ifeq 8
         6: .line 220
            aload 2 /* ldesired */
            aload 4 /* ret */
            invokestatic com.google.common.collect.Sets.newHashSet:([Ljava/lang/Object;)Ljava/util/HashSet;
            invokestatic com.google.common.base.Predicates.in:(Ljava/util/Collection;)Lcom/google/common/base/Predicate;
            invokestatic com.google.common.base.Predicates.not:(Lcom/google/common/base/Predicate;)Lcom/google/common/base/Predicate;
            invokestatic com.google.common.collect.Iterables.filter:(Ljava/lang/Iterable;Lcom/google/common/base/Predicate;)Ljava/lang/Iterable;
            astore 5 /* missing */
        start local 5 // java.lang.Iterable missing
         7: .line 221
            getstatic org.apache.cassandra.security.SSLFactory.logger:Lorg/slf4j/Logger;
            ldc "Filtering out {} as it isn't supported by the socket"
            aload 5 /* missing */
            invokestatic com.google.common.collect.Iterables.toString:(Ljava/lang/Iterable;)Ljava/lang/String;
            invokeinterface org.slf4j.Logger.warn:(Ljava/lang/String;Ljava/lang/Object;)V
        end local 5 // java.lang.Iterable missing
         8: .line 223
      StackMap locals: java.util.List com.google.common.collect.ImmutableSet java.lang.String[]
      StackMap stack:
            aload 4 /* ret */
            areturn
        end local 4 // java.lang.String[] ret
        end local 3 // com.google.common.collect.ImmutableSet ssupported
        end local 2 // java.util.List ldesired
        end local 1 // java.lang.String[] desired
        end local 0 // java.lang.String[] supported
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    9     0   supported  [Ljava/lang/String;
            0    9     1     desired  [Ljava/lang/String;
            3    9     2    ldesired  Ljava/util/List<Ljava/lang/String;>;
            4    9     3  ssupported  Lcom/google/common/collect/ImmutableSet<Ljava/lang/String;>;
            5    9     4         ret  [Ljava/lang/String;
            7    8     5     missing  Ljava/lang/Iterable<Ljava/lang/String;>;
    MethodParameters:
           Name  Flags
      supported  
      desired    
}
SourceFile: "SSLFactory.java"