public class org.h2.security.CipherFactory
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.h2.security.CipherFactory
  super_class: java.lang.Object
{
  public static final java.lang.String KEYSTORE_PASSWORD;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "h2pass"

  public static final java.lang.String LEGACY_ALGORITHMS_SECURITY_KEY;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "jdk.tls.legacyAlgorithms"

  public static final java.lang.String DEFAULT_LEGACY_ALGORITHMS;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  private static final java.lang.String KEYSTORE;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "~/.h2.keystore"

  private static final java.lang.String KEYSTORE_KEY;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "javax.net.ssl.keyStore"

  private static final java.lang.String KEYSTORE_PASSWORD_KEY;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "javax.net.ssl.keyStorePassword"

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 68
            invokestatic org.h2.security.CipherFactory.getLegacyAlgorithmsSilently:()Ljava/lang/String;
            putstatic org.h2.security.CipherFactory.DEFAULT_LEGACY_ALGORITHMS:Ljava/lang/String;
         1: .line 75
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.h2.security.CipherFactory this
         0: .line 78
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 80
            return
        end local 0 // org.h2.security.CipherFactory this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/h2/security/CipherFactory;

  public static org.h2.security.BlockCipher getBlockCipher(java.lang.String);
    descriptor: (Ljava/lang/String;)Lorg/h2/security/BlockCipher;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String algorithm
         0: .line 89
            ldc "XTEA"
            aload 0 /* algorithm */
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 2
         1: .line 90
            new org.h2.security.XTEA
            dup
            invokespecial org.h2.security.XTEA.<init>:()V
            areturn
         2: .line 91
      StackMap locals:
      StackMap stack:
            ldc "AES"
            aload 0 /* algorithm */
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 4
         3: .line 92
            new org.h2.security.AES
            dup
            invokespecial org.h2.security.AES.<init>:()V
            areturn
         4: .line 93
      StackMap locals:
      StackMap stack:
            ldc "FOG"
            aload 0 /* algorithm */
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 6
         5: .line 94
            new org.h2.security.Fog
            dup
            invokespecial org.h2.security.Fog.<init>:()V
            areturn
         6: .line 96
      StackMap locals:
      StackMap stack:
            ldc 90055
            aload 0 /* algorithm */
            invokestatic org.h2.message.DbException.get:(ILjava/lang/String;)Lorg/h2/message/DbException;
            athrow
        end local 0 // java.lang.String algorithm
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    7     0  algorithm  Ljava/lang/String;
    MethodParameters:
           Name  Flags
      algorithm  

  public static java.net.Socket createSocket(java.net.InetAddress, int);
    descriptor: (Ljava/net/InetAddress;I)Ljava/net/Socket;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=6, args_size=2
        start local 0 // java.net.InetAddress address
        start local 1 // int port
         0: .line 109
            aconst_null
            astore 2 /* socket */
        start local 2 // java.net.Socket socket
         1: .line 110
            invokestatic org.h2.security.CipherFactory.setKeystore:()V
         2: .line 111
            invokestatic javax.net.ssl.SSLSocketFactory.getDefault:()Ljavax/net/SocketFactory;
            checkcast javax.net.ssl.SSLSocketFactory
            astore 3 /* f */
        start local 3 // javax.net.ssl.SSLSocketFactory f
         3: .line 112
            aload 3 /* f */
            invokevirtual javax.net.ssl.SSLSocketFactory.createSocket:()Ljava/net/Socket;
            checkcast javax.net.ssl.SSLSocket
            astore 4 /* secureSocket */
        start local 4 // javax.net.ssl.SSLSocket secureSocket
         4: .line 113
            aload 4 /* secureSocket */
            new java.net.InetSocketAddress
            dup
            aload 0 /* address */
            iload 1 /* port */
            invokespecial java.net.InetSocketAddress.<init>:(Ljava/net/InetAddress;I)V
         5: .line 114
            getstatic org.h2.engine.SysProperties.SOCKET_CONNECT_TIMEOUT:I
         6: .line 113
            invokevirtual javax.net.ssl.SSLSocket.connect:(Ljava/net/SocketAddress;I)V
         7: .line 115
            aload 4 /* secureSocket */
         8: .line 116
            aload 4 /* secureSocket */
            invokevirtual javax.net.ssl.SSLSocket.getEnabledProtocols:()[Ljava/lang/String;
            invokestatic org.h2.security.CipherFactory.disableSSL:([Ljava/lang/String;)[Ljava/lang/String;
         9: .line 115
            invokevirtual javax.net.ssl.SSLSocket.setEnabledProtocols:([Ljava/lang/String;)V
        10: .line 117
            getstatic org.h2.engine.SysProperties.ENABLE_ANONYMOUS_TLS:Z
            ifeq 15
        11: .line 119
            aload 4 /* secureSocket */
            invokevirtual javax.net.ssl.SSLSocket.getEnabledCipherSuites:()[Ljava/lang/String;
        12: .line 120
            aload 4 /* secureSocket */
            invokevirtual javax.net.ssl.SSLSocket.getSupportedCipherSuites:()[Ljava/lang/String;
        13: .line 118
            invokestatic org.h2.security.CipherFactory.enableAnonymous:([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
            astore 5 /* list */
        start local 5 // java.lang.String[] list
        14: .line 121
            aload 4 /* secureSocket */
            aload 5 /* list */
            invokevirtual javax.net.ssl.SSLSocket.setEnabledCipherSuites:([Ljava/lang/String;)V
        end local 5 // java.lang.String[] list
        15: .line 123
      StackMap locals: java.net.Socket javax.net.ssl.SSLSocketFactory javax.net.ssl.SSLSocket
      StackMap stack:
            aload 4 /* secureSocket */
            astore 2 /* socket */
        16: .line 124
            aload 2 /* socket */
            areturn
        end local 4 // javax.net.ssl.SSLSocket secureSocket
        end local 3 // javax.net.ssl.SSLSocketFactory f
        end local 2 // java.net.Socket socket
        end local 1 // int port
        end local 0 // java.net.InetAddress address
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   17     0       address  Ljava/net/InetAddress;
            0   17     1          port  I
            1   17     2        socket  Ljava/net/Socket;
            3   17     3             f  Ljavax/net/ssl/SSLSocketFactory;
            4   17     4  secureSocket  Ljavax/net/ssl/SSLSocket;
           14   15     5          list  [Ljava/lang/String;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      address  
      port     

  public static java.net.ServerSocket createServerSocket(int, java.net.InetAddress);
    descriptor: (ILjava/net/InetAddress;)Ljava/net/ServerSocket;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=6, args_size=2
        start local 0 // int port
        start local 1 // java.net.InetAddress bindAddress
         0: .line 143
            aconst_null
            astore 2 /* socket */
        start local 2 // java.net.ServerSocket socket
         1: .line 144
            getstatic org.h2.engine.SysProperties.ENABLE_ANONYMOUS_TLS:Z
            ifeq 3
         2: .line 145
            invokestatic org.h2.security.CipherFactory.removeAnonFromLegacyAlgorithms:()V
         3: .line 147
      StackMap locals: java.net.ServerSocket
      StackMap stack:
            invokestatic org.h2.security.CipherFactory.setKeystore:()V
         4: .line 148
            invokestatic javax.net.ssl.SSLServerSocketFactory.getDefault:()Ljavax/net/ServerSocketFactory;
            astore 3 /* f */
        start local 3 // javax.net.ServerSocketFactory f
         5: .line 150
            aload 1 /* bindAddress */
            ifnonnull 8
         6: .line 151
            aload 3 /* f */
            iload 0 /* port */
            invokevirtual javax.net.ServerSocketFactory.createServerSocket:(I)Ljava/net/ServerSocket;
            checkcast javax.net.ssl.SSLServerSocket
            astore 4 /* secureSocket */
        start local 4 // javax.net.ssl.SSLServerSocket secureSocket
         7: .line 152
            goto 9
        end local 4 // javax.net.ssl.SSLServerSocket secureSocket
         8: .line 153
      StackMap locals: javax.net.ServerSocketFactory
      StackMap stack:
            aload 3 /* f */
            iload 0 /* port */
            iconst_0
            aload 1 /* bindAddress */
            invokevirtual javax.net.ServerSocketFactory.createServerSocket:(IILjava/net/InetAddress;)Ljava/net/ServerSocket;
            checkcast javax.net.ssl.SSLServerSocket
            astore 4 /* secureSocket */
        start local 4 // javax.net.ssl.SSLServerSocket secureSocket
         9: .line 155
      StackMap locals: javax.net.ssl.SSLServerSocket
      StackMap stack:
            aload 4 /* secureSocket */
        10: .line 156
            aload 4 /* secureSocket */
            invokevirtual javax.net.ssl.SSLServerSocket.getEnabledProtocols:()[Ljava/lang/String;
            invokestatic org.h2.security.CipherFactory.disableSSL:([Ljava/lang/String;)[Ljava/lang/String;
        11: .line 155
            invokevirtual javax.net.ssl.SSLServerSocket.setEnabledProtocols:([Ljava/lang/String;)V
        12: .line 157
            getstatic org.h2.engine.SysProperties.ENABLE_ANONYMOUS_TLS:Z
            ifeq 17
        13: .line 159
            aload 4 /* secureSocket */
            invokevirtual javax.net.ssl.SSLServerSocket.getEnabledCipherSuites:()[Ljava/lang/String;
        14: .line 160
            aload 4 /* secureSocket */
            invokevirtual javax.net.ssl.SSLServerSocket.getSupportedCipherSuites:()[Ljava/lang/String;
        15: .line 158
            invokestatic org.h2.security.CipherFactory.enableAnonymous:([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
            astore 5 /* list */
        start local 5 // java.lang.String[] list
        16: .line 161
            aload 4 /* secureSocket */
            aload 5 /* list */
            invokevirtual javax.net.ssl.SSLServerSocket.setEnabledCipherSuites:([Ljava/lang/String;)V
        end local 5 // java.lang.String[] list
        17: .line 164
      StackMap locals:
      StackMap stack:
            aload 4 /* secureSocket */
            astore 2 /* socket */
        18: .line 165
            aload 2 /* socket */
            areturn
        end local 4 // javax.net.ssl.SSLServerSocket secureSocket
        end local 3 // javax.net.ServerSocketFactory f
        end local 2 // java.net.ServerSocket socket
        end local 1 // java.net.InetAddress bindAddress
        end local 0 // int port
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   19     0          port  I
            0   19     1   bindAddress  Ljava/net/InetAddress;
            1   19     2        socket  Ljava/net/ServerSocket;
            5   19     3             f  Ljavax/net/ServerSocketFactory;
            7    8     4  secureSocket  Ljavax/net/ssl/SSLServerSocket;
            9   19     4  secureSocket  Ljavax/net/ssl/SSLServerSocket;
           16   17     5          list  [Ljava/lang/String;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
             Name  Flags
      port         
      bindAddress  

  public static java.lang.String removeDhAnonFromCommaSeparatedList(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=5, args_size=1
        start local 0 // java.lang.String list
         0: .line 177
            aload 0 /* list */
            ifnonnull 2
         1: .line 178
            aload 0 /* list */
            areturn
         2: .line 180
      StackMap locals:
      StackMap stack:
            new java.util.LinkedList
            dup
            aload 0 /* list */
            ldc "\\s*,\\s*"
            invokevirtual java.lang.String.split:(Ljava/lang/String;)[Ljava/lang/String;
            invokestatic java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
            invokespecial java.util.LinkedList.<init>:(Ljava/util/Collection;)V
            astore 1 /* algorithms */
        start local 1 // java.util.List algorithms
         3: .line 181
            aload 1 /* algorithms */
            ldc "DH_anon"
            invokeinterface java.util.List.remove:(Ljava/lang/Object;)Z
            istore 2 /* dhAnonRemoved */
        start local 2 // boolean dhAnonRemoved
         4: .line 182
            aload 1 /* algorithms */
            ldc "ECDH_anon"
            invokeinterface java.util.List.remove:(Ljava/lang/Object;)Z
            istore 3 /* ecdhAnonRemoved */
        start local 3 // boolean ecdhAnonRemoved
         5: .line 183
            iload 2 /* dhAnonRemoved */
            ifne 6
            iload 3 /* ecdhAnonRemoved */
            ifeq 10
         6: .line 184
      StackMap locals: java.util.List int int
      StackMap stack:
            aload 1 /* algorithms */
            aload 1 /* algorithms */
            invokeinterface java.util.List.size:()I
            anewarray java.lang.String
            invokeinterface java.util.List.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            invokestatic java.util.Arrays.toString:([Ljava/lang/Object;)Ljava/lang/String;
            astore 4 /* string */
        start local 4 // java.lang.String string
         7: .line 185
            aload 1 /* algorithms */
            invokeinterface java.util.List.isEmpty:()Z
            ifne 8
            aload 4 /* string */
            iconst_1
            aload 4 /* string */
            invokevirtual java.lang.String.length:()I
            iconst_1
            isub
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            goto 9
      StackMap locals: java.lang.String
      StackMap stack:
         8: ldc ""
      StackMap locals:
      StackMap stack: java.lang.String
         9: areturn
        end local 4 // java.lang.String string
        10: .line 187
      StackMap locals:
      StackMap stack:
            aload 0 /* list */
            areturn
        end local 3 // boolean ecdhAnonRemoved
        end local 2 // boolean dhAnonRemoved
        end local 1 // java.util.List algorithms
        end local 0 // java.lang.String list
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   11     0             list  Ljava/lang/String;
            3   11     1       algorithms  Ljava/util/List<Ljava/lang/String;>;
            4   11     2    dhAnonRemoved  Z
            5   11     3  ecdhAnonRemoved  Z
            7   10     4           string  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      list  

  public static synchronized void removeAnonFromLegacyAlgorithms();
    descriptor: ()V
    flags: (0x0029) ACC_PUBLIC, ACC_STATIC, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=2, args_size=0
         0: .line 206
            invokestatic org.h2.security.CipherFactory.getLegacyAlgorithmsSilently:()Ljava/lang/String;
            astore 0 /* legacyOriginal */
        start local 0 // java.lang.String legacyOriginal
         1: .line 207
            aload 0 /* legacyOriginal */
            ifnonnull 3
         2: .line 208
            return
         3: .line 210
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* legacyOriginal */
            invokestatic org.h2.security.CipherFactory.removeDhAnonFromCommaSeparatedList:(Ljava/lang/String;)Ljava/lang/String;
            astore 1 /* legacyNew */
        start local 1 // java.lang.String legacyNew
         4: .line 211
            aload 0 /* legacyOriginal */
            aload 1 /* legacyNew */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 6
         5: .line 212
            aload 1 /* legacyNew */
            invokestatic org.h2.security.CipherFactory.setLegacyAlgorithmsSilently:(Ljava/lang/String;)V
         6: .line 214
      StackMap locals: java.lang.String
      StackMap stack:
            return
        end local 1 // java.lang.String legacyNew
        end local 0 // java.lang.String legacyOriginal
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            1    7     0  legacyOriginal  Ljava/lang/String;
            4    7     1       legacyNew  Ljava/lang/String;

  public static synchronized void resetDefaultLegacyAlgorithms();
    descriptor: ()V
    flags: (0x0029) ACC_PUBLIC, ACC_STATIC, ACC_SYNCHRONIZED
    Code:
      stack=1, locals=0, args_size=0
         0: .line 226
            getstatic org.h2.security.CipherFactory.DEFAULT_LEGACY_ALGORITHMS:Ljava/lang/String;
            invokestatic org.h2.security.CipherFactory.setLegacyAlgorithmsSilently:(Ljava/lang/String;)V
         1: .line 227
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public static java.lang.String getLegacyAlgorithmsSilently();
    descriptor: ()Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=0
         0: .line 237
            aconst_null
            astore 0 /* defaultLegacyAlgorithms */
        start local 0 // java.lang.String defaultLegacyAlgorithms
         1: .line 239
            ldc "jdk.tls.legacyAlgorithms"
            invokestatic java.security.Security.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            astore 0 /* defaultLegacyAlgorithms */
         2: .line 240
            goto 4
      StackMap locals: java.lang.String
      StackMap stack: java.lang.SecurityException
         3: pop
         4: .line 243
      StackMap locals:
      StackMap stack:
            aload 0 /* defaultLegacyAlgorithms */
            areturn
        end local 0 // java.lang.String defaultLegacyAlgorithms
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            1    5     0  defaultLegacyAlgorithms  Ljava/lang/String;
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.SecurityException

  private static void setLegacyAlgorithmsSilently(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String legacyAlgorithms
         0: .line 247
            aload 0 /* legacyAlgorithms */
            ifnonnull 2
         1: .line 248
            return
         2: .line 251
      StackMap locals:
      StackMap stack:
            ldc "jdk.tls.legacyAlgorithms"
            aload 0 /* legacyAlgorithms */
            invokestatic java.security.Security.setProperty:(Ljava/lang/String;Ljava/lang/String;)V
         3: .line 252
            goto 5
      StackMap locals:
      StackMap stack: java.lang.SecurityException
         4: pop
         5: .line 255
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.lang.String legacyAlgorithms
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    6     0  legacyAlgorithms  Ljava/lang/String;
      Exception table:
        from    to  target  type
           2     3       4  Class java.lang.SecurityException
    MethodParameters:
                  Name  Flags
      legacyAlgorithms  

  private static byte[] getKeyStoreBytes(java.security.KeyStore, java.lang.String);
    descriptor: (Ljava/security/KeyStore;Ljava/lang/String;)[B
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // java.security.KeyStore store
        start local 1 // java.lang.String password
         0: .line 259
            new java.io.ByteArrayOutputStream
            dup
            invokespecial java.io.ByteArrayOutputStream.<init>:()V
            astore 2 /* bout */
        start local 2 // java.io.ByteArrayOutputStream bout
         1: .line 261
            aload 0 /* store */
            aload 2 /* bout */
            aload 1 /* password */
            invokevirtual java.lang.String.toCharArray:()[C
            invokevirtual java.security.KeyStore.store:(Ljava/io/OutputStream;[C)V
         2: .line 262
            goto 5
      StackMap locals: java.security.KeyStore java.lang.String java.io.ByteArrayOutputStream
      StackMap stack: java.lang.Exception
         3: astore 3 /* e */
        start local 3 // java.lang.Exception e
         4: .line 263
            aload 3 /* e */
            invokestatic org.h2.message.DbException.convertToIOException:(Ljava/lang/Throwable;)Ljava/io/IOException;
            athrow
        end local 3 // java.lang.Exception e
         5: .line 265
      StackMap locals:
      StackMap stack:
            aload 2 /* bout */
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            areturn
        end local 2 // java.io.ByteArrayOutputStream bout
        end local 1 // java.lang.String password
        end local 0 // java.security.KeyStore store
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    6     0     store  Ljava/security/KeyStore;
            0    6     1  password  Ljava/lang/String;
            1    6     2      bout  Ljava/io/ByteArrayOutputStream;
            4    5     3         e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.Exception
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      store     
      password  

  public static java.security.KeyStore getKeyStore(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/security/KeyStore;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=6, args_size=1
        start local 0 // java.lang.String password
         0: .line 284
            invokestatic java.security.KeyStore.getDefaultType:()Ljava/lang/String;
            invokestatic java.security.KeyStore.getInstance:(Ljava/lang/String;)Ljava/security/KeyStore;
            astore 1 /* store */
        start local 1 // java.security.KeyStore store
         1: .line 286
            aload 1 /* store */
            aconst_null
            aload 0 /* password */
            invokevirtual java.lang.String.toCharArray:()[C
            invokevirtual java.security.KeyStore.load:(Ljava/io/InputStream;[C)V
         2: .line 287
            ldc "RSA"
            invokestatic java.security.KeyFactory.getInstance:(Ljava/lang/String;)Ljava/security/KeyFactory;
            astore 2 /* keyFactory */
        start local 2 // java.security.KeyFactory keyFactory
         3: .line 288
            aload 1 /* store */
            aconst_null
            aload 0 /* password */
            invokevirtual java.lang.String.toCharArray:()[C
            invokevirtual java.security.KeyStore.load:(Ljava/io/InputStream;[C)V
         4: .line 289
            new java.security.spec.PKCS8EncodedKeySpec
            dup
         5: .line 291
            ldc "30820277020100300d06092a864886f70d0101010500048202613082025d02010002818100dc0a13c602b7141110eade2f051b54777b060d0f74e6a110f9cce81159f271ebc88d8e8aa1f743b505fc2e7dfe38d33b8d3f64d1b363d1af4d877833897954cbaec2fa384c22a415498cf306bb07ac09b76b001cd68bf77ea0a628f5101959cf2993a9c23dbee79b19305977f8715ae78d023471194cc900b231eecb0aaea98d02030100010281810099aa4ff4d0a09a5af0bd953cb10c4d08c3d98df565664ac5582e494314d5c3c92dddedd5d316a32a206be4ec084616fe57be15e27cad111aa3c21fa79e32258c6ca8430afc69eddd52d3b751b37da6b6860910b94653192c0db1d02abcfd6ce14c01f238eec7c20bd3bb750940004bacba2880349a9494d10e139ecb2355d101024100ffdc3defd9c05a2d377ef6019fa62b3fbd5b0020a04cc8533bca730e1f6fcf5dfceea1b044fbe17d9eababfbc7d955edad6bc60f9be826ad2c22ba77d19a9f65024100dc28d43fdbbc93852cc3567093157702bc16f156f709fb7db0d9eec028f41fd0edcd17224c866e66be1744141fb724a10fd741c8a96afdd9141b36d67fff6309024077b1cddbde0f69604bdcfe33263fb36ddf24aa3b9922327915b890f8a36648295d0139ecdf68c245652c4489c6257b58744fbdd961834a4cab201801a3b1e52d024100b17142e8991d1b350a0802624759d48ae2b8071a158ff91fabeb6a8f7c328e762143dc726b8529f42b1fab6220d1c676fdc27ba5d44e847c72c52064afd351a902407c6e23fe35bcfcd1a662aa82a2aa725fcece311644d5b6e3894853fd4ce9fe78218c957b1ff03fc9e5ef8ffeb6bd58235f6a215c97d354fdace7e781e4a63e8b"
         6: .line 290
            invokestatic org.h2.util.StringUtils.convertHexToBytes:(Ljava/lang/String;)[B
         7: .line 289
            invokespecial java.security.spec.PKCS8EncodedKeySpec.<init>:([B)V
            astore 3 /* keySpec */
        start local 3 // java.security.spec.PKCS8EncodedKeySpec keySpec
         8: .line 323
            aload 2 /* keyFactory */
            aload 3 /* keySpec */
            invokevirtual java.security.KeyFactory.generatePrivate:(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;
            astore 4 /* privateKey */
        start local 4 // java.security.PrivateKey privateKey
         9: .line 324
            iconst_1
            anewarray java.security.cert.Certificate
            dup
            iconst_0
        10: .line 325
            ldc "X.509"
            invokestatic java.security.cert.CertificateFactory.getInstance:(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
        11: .line 327
            new java.io.ByteArrayInputStream
            dup
        12: .line 329
            ldc "3082018b3081f502044295ce6b300d06092a864886f70d0101040500300d310b3009060355040313024832301e170d3035303532363133323630335a170d3337303933303036353734375a300d310b300906035504031302483230819f300d06092a864886f70d010101050003818d0030818902818100dc0a13c602b7141110eade2f051b54777b060d0f74e6a110f9cce81159f271ebc88d8e8aa1f743b505fc2e7dfe38d33b8d3f64d1b363d1af4d877833897954cbaec2fa384c22a415498cf306bb07ac09b76b001cd68bf77ea0a628f5101959cf2993a9c23dbee79b19305977f8715ae78d023471194cc900b231eecb0aaea98d0203010001300d06092a864886f70d01010405000381810083f4401a279453701bef9a7681a5b8b24f153f7d18c7c892133d97bd5f13736be7505290a445a7d5ceb75522403e5097515cd966ded6351ff60d5193de34cd36e5cb04d380398e66286f99923fd92296645fd4ada45844d194dfd815e6cd57f385c117be982809028bba1116c85740b3d27a55b1a0948bf291ddba44bed337b9"
        13: .line 328
            invokestatic org.h2.util.StringUtils.convertHexToBytes:(Ljava/lang/String;)[B
        14: .line 327
            invokespecial java.io.ByteArrayInputStream.<init>:([B)V
        15: .line 326
            invokevirtual java.security.cert.CertificateFactory.generateCertificate:(Ljava/io/InputStream;)Ljava/security/cert/Certificate;
            aastore
        16: .line 324
            astore 5 /* certs */
        start local 5 // java.security.cert.Certificate[] certs
        17: .line 349
            aload 1 /* store */
            ldc "h2"
            aload 4 /* privateKey */
            aload 0 /* password */
            invokevirtual java.lang.String.toCharArray:()[C
            aload 5 /* certs */
            invokevirtual java.security.KeyStore.setKeyEntry:(Ljava/lang/String;Ljava/security/Key;[C[Ljava/security/cert/Certificate;)V
        18: .line 351
            aload 1 /* store */
        19: areturn
        end local 5 // java.security.cert.Certificate[] certs
        end local 4 // java.security.PrivateKey privateKey
        end local 3 // java.security.spec.PKCS8EncodedKeySpec keySpec
        end local 2 // java.security.KeyFactory keyFactory
        end local 1 // java.security.KeyStore store
        20: .line 352
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 1 /* e */
        start local 1 // java.lang.Exception e
        21: .line 353
            aload 1 /* e */
            invokestatic org.h2.message.DbException.convertToIOException:(Ljava/lang/Throwable;)Ljava/io/IOException;
            athrow
        end local 1 // java.lang.Exception e
        end local 0 // java.lang.String password
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   22     0    password  Ljava/lang/String;
            1   20     1       store  Ljava/security/KeyStore;
            3   20     2  keyFactory  Ljava/security/KeyFactory;
            8   20     3     keySpec  Ljava/security/spec/PKCS8EncodedKeySpec;
            9   20     4  privateKey  Ljava/security/PrivateKey;
           17   20     5       certs  [Ljava/security/cert/Certificate;
           21   22     1           e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           0    19      20  Class java.lang.Exception
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      password  

  private static void setKeystore();
    descriptor: ()V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=6, args_size=0
         0: .line 358
            invokestatic java.lang.System.getProperties:()Ljava/util/Properties;
            astore 0 /* p */
        start local 0 // java.util.Properties p
         1: .line 359
            aload 0 /* p */
            ldc "javax.net.ssl.keyStore"
            invokevirtual java.util.Properties.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            ifnonnull 22
         2: .line 360
            ldc "~/.h2.keystore"
            astore 1 /* fileName */
        start local 1 // java.lang.String fileName
         3: .line 362
            ldc "h2pass"
         4: .line 361
            invokestatic org.h2.security.CipherFactory.getKeyStore:(Ljava/lang/String;)Ljava/security/KeyStore;
         5: .line 362
            ldc "h2pass"
         6: .line 361
            invokestatic org.h2.security.CipherFactory.getKeyStoreBytes:(Ljava/security/KeyStore;Ljava/lang/String;)[B
            astore 2 /* data */
        start local 2 // byte[] data
         7: .line 363
            iconst_1
            istore 3 /* needWrite */
        start local 3 // boolean needWrite
         8: .line 364
            aload 1 /* fileName */
            invokestatic org.h2.store.fs.FileUtils.exists:(Ljava/lang/String;)Z
            ifeq 13
            aload 1 /* fileName */
            invokestatic org.h2.store.fs.FileUtils.size:(Ljava/lang/String;)J
            aload 2 /* data */
            arraylength
            i2l
            lcmp
            ifne 13
         9: .line 366
            aload 1 /* fileName */
            invokestatic org.h2.store.fs.FileUtils.newInputStream:(Ljava/lang/String;)Ljava/io/InputStream;
            astore 4 /* fin */
        start local 4 // java.io.InputStream fin
        10: .line 367
            aload 4 /* fin */
            iconst_0
            invokestatic org.h2.util.IOUtils.readBytesAndClose:(Ljava/io/InputStream;I)[B
            astore 5 /* now */
        start local 5 // byte[] now
        11: .line 368
            aload 5 /* now */
            ifnull 13
            aload 2 /* data */
            aload 5 /* now */
            invokestatic java.util.Arrays.equals:([B[B)Z
            ifeq 13
        12: .line 369
            iconst_0
            istore 3 /* needWrite */
        end local 5 // byte[] now
        end local 4 // java.io.InputStream fin
        13: .line 372
      StackMap locals: java.util.Properties java.lang.String byte[] int
      StackMap stack:
            iload 3 /* needWrite */
            ifeq 20
        14: .line 374
            aload 1 /* fileName */
            iconst_0
            invokestatic org.h2.store.fs.FileUtils.newOutputStream:(Ljava/lang/String;Z)Ljava/io/OutputStream;
            astore 4 /* out */
        start local 4 // java.io.OutputStream out
        15: .line 375
            aload 4 /* out */
            aload 2 /* data */
            invokevirtual java.io.OutputStream.write:([B)V
        16: .line 376
            aload 4 /* out */
            invokevirtual java.io.OutputStream.close:()V
        end local 4 // java.io.OutputStream out
        17: .line 377
            goto 20
      StackMap locals:
      StackMap stack: java.lang.Exception
        18: astore 4 /* e */
        start local 4 // java.lang.Exception e
        19: .line 378
            aload 4 /* e */
            invokestatic org.h2.message.DbException.convertToIOException:(Ljava/lang/Throwable;)Ljava/io/IOException;
            athrow
        end local 4 // java.lang.Exception e
        20: .line 381
      StackMap locals:
      StackMap stack:
            aload 1 /* fileName */
            invokestatic org.h2.store.fs.FileUtils.toRealPath:(Ljava/lang/String;)Ljava/lang/String;
            astore 4 /* absolutePath */
        start local 4 // java.lang.String absolutePath
        21: .line 382
            ldc "javax.net.ssl.keyStore"
            aload 4 /* absolutePath */
            invokestatic java.lang.System.setProperty:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
            pop
        end local 4 // java.lang.String absolutePath
        end local 3 // boolean needWrite
        end local 2 // byte[] data
        end local 1 // java.lang.String fileName
        22: .line 384
      StackMap locals:
      StackMap stack:
            aload 0 /* p */
            ldc "javax.net.ssl.keyStorePassword"
            invokevirtual java.util.Properties.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            ifnonnull 24
        23: .line 385
            ldc "javax.net.ssl.keyStorePassword"
            ldc "h2pass"
            invokestatic java.lang.System.setProperty:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
            pop
        24: .line 387
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.util.Properties p
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            1   25     0             p  Ljava/util/Properties;
            3   22     1      fileName  Ljava/lang/String;
            7   22     2          data  [B
            8   22     3     needWrite  Z
           10   13     4           fin  Ljava/io/InputStream;
           11   13     5           now  [B
           15   17     4           out  Ljava/io/OutputStream;
           19   20     4             e  Ljava/lang/Exception;
           21   22     4  absolutePath  Ljava/lang/String;
      Exception table:
        from    to  target  type
          14    17      18  Class java.lang.Exception
    Exceptions:
      throws java.io.IOException

  private static java.lang.String[] enableAnonymous(java.lang.String[], java.lang.String[]);
    descriptor: ([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=7, args_size=2
        start local 0 // java.lang.String[] enabled
        start local 1 // java.lang.String[] supported
         0: .line 390
            new java.util.LinkedHashSet
            dup
            invokespecial java.util.LinkedHashSet.<init>:()V
            astore 2 /* set */
        start local 2 // java.util.LinkedHashSet set
         1: .line 391
            aload 1 /* supported */
            dup
            astore 6
            arraylength
            istore 5
            iconst_0
            istore 4
            goto 8
      StackMap locals: java.lang.String[] java.lang.String[] java.util.LinkedHashSet top int int java.lang.String[]
      StackMap stack:
         2: aload 6
            iload 4
            aaload
            astore 3 /* x */
        start local 3 // java.lang.String x
         3: .line 392
            aload 3 /* x */
            ldc "SSL"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifne 7
            aload 3 /* x */
            ldc "_anon_"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 7
         4: .line 393
            aload 3 /* x */
            ldc "_AES_"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifne 5
            aload 3 /* x */
            ldc "_3DES_"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 7
      StackMap locals: java.lang.String[] java.lang.String[] java.util.LinkedHashSet java.lang.String int int java.lang.String[]
      StackMap stack:
         5: aload 3 /* x */
            ldc "_SHA"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 7
         6: .line 394
            aload 2 /* set */
            aload 3 /* x */
            invokevirtual java.util.LinkedHashSet.add:(Ljava/lang/Object;)Z
            pop
        end local 3 // java.lang.String x
         7: .line 391
      StackMap locals: java.lang.String[] java.lang.String[] java.util.LinkedHashSet top int int java.lang.String[]
      StackMap stack:
            iinc 4 1
      StackMap locals:
      StackMap stack:
         8: iload 4
            iload 5
            if_icmplt 2
         9: .line 397
            aload 2 /* set */
            aload 0 /* enabled */
            invokestatic java.util.Collections.addAll:(Ljava/util/Collection;[Ljava/lang/Object;)Z
            pop
        10: .line 398
            aload 2 /* set */
            iconst_0
            anewarray java.lang.String
            invokevirtual java.util.LinkedHashSet.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast java.lang.String[]
            areturn
        end local 2 // java.util.LinkedHashSet set
        end local 1 // java.lang.String[] supported
        end local 0 // java.lang.String[] enabled
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   11     0    enabled  [Ljava/lang/String;
            0   11     1  supported  [Ljava/lang/String;
            1   11     2        set  Ljava/util/LinkedHashSet<Ljava/lang/String;>;
            3    7     3          x  Ljava/lang/String;
    MethodParameters:
           Name  Flags
      enabled    
      supported  

  private static java.lang.String[] disableSSL(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)[Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=6, args_size=1
        start local 0 // java.lang.String[] enabled
         0: .line 402
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            astore 1 /* set */
        start local 1 // java.util.HashSet set
         1: .line 403
            aload 0 /* enabled */
            dup
            astore 5
            arraylength
            istore 4
            iconst_0
            istore 3
            goto 6
      StackMap locals: java.lang.String[] java.util.HashSet top int int java.lang.String[]
      StackMap stack:
         2: aload 5
            iload 3
            aaload
            astore 2 /* x */
        start local 2 // java.lang.String x
         3: .line 404
            aload 2 /* x */
            ldc "SSL"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifne 5
         4: .line 405
            aload 1 /* set */
            aload 2 /* x */
            invokevirtual java.util.HashSet.add:(Ljava/lang/Object;)Z
            pop
        end local 2 // java.lang.String x
         5: .line 403
      StackMap locals:
      StackMap stack:
            iinc 3 1
      StackMap locals:
      StackMap stack:
         6: iload 3
            iload 4
            if_icmplt 2
         7: .line 408
            aload 1 /* set */
            iconst_0
            anewarray java.lang.String
            invokevirtual java.util.HashSet.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast java.lang.String[]
            areturn
        end local 1 // java.util.HashSet set
        end local 0 // java.lang.String[] enabled
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0  enabled  [Ljava/lang/String;
            1    8     1      set  Ljava/util/HashSet<Ljava/lang/String;>;
            3    5     2        x  Ljava/lang/String;
    MethodParameters:
         Name  Flags
      enabled  
}
SourceFile: "CipherFactory.java"