public class com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider extends com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionKeyStoreProvider
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider
  super_class: com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionKeyStoreProvider
{
  java.lang.String name;
    descriptor: Ljava/lang/String;
    flags: (0x0000) 

  java.lang.String keyStorePath;
    descriptor: Ljava/lang/String;
    flags: (0x0000) 

  char[] keyStorePwd;
    descriptor: [C
    flags: (0x0000) 

  private static final java.util.logging.Logger javaKeyStoreLogger;
    descriptor: Ljava/util/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 47
            ldc "com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider"
            invokestatic java.util.logging.Logger.getLogger:(Ljava/lang/String;)Ljava/util/logging/Logger;
         1: .line 46
            putstatic com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.javaKeyStoreLogger:Ljava/util/logging/Logger;
         2: .line 47
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void setName(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
        start local 1 // java.lang.String name
         0: .line 50
            aload 0 /* this */
            aload 1 /* name */
            putfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.name:Ljava/lang/String;
         1: .line 51
            return
        end local 1 // java.lang.String name
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            0    2     1  name  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      name  

  public java.lang.String getName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
         0: .line 54
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.name:Ljava/lang/String;
            areturn
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;

  public void <init>(java.lang.String, char[]);
    descriptor: (Ljava/lang/String;[C)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
        start local 1 // java.lang.String keyStoreLocation
        start local 2 // char[] keyStoreSecret
         0: .line 67
            aload 0 /* this */
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionKeyStoreProvider.<init>:()V
         1: .line 42
            aload 0 /* this */
            ldc "MSSQL_JAVA_KEYSTORE"
            putfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.name:Ljava/lang/String;
         2: .line 43
            aload 0 /* this */
            aconst_null
            putfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.keyStorePath:Ljava/lang/String;
         3: .line 44
            aload 0 /* this */
            aconst_null
            putfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.keyStorePwd:[C
         4: .line 69
            getstatic com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.javaKeyStoreLogger:Ljava/util/logging/Logger;
            ldc Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
         5: .line 70
            ldc "SQLServerColumnEncryptionJavaKeyStoreProvider"
         6: .line 69
            invokevirtual java.util.logging.Logger.entering:(Ljava/lang/String;Ljava/lang/String;)V
         7: .line 72
            aload 1 /* keyStoreLocation */
            ifnull 8
            aload 1 /* keyStoreLocation */
            invokevirtual java.lang.String.length:()I
            ifne 11
         8: .line 73
      StackMap locals: com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider java.lang.String char[]
      StackMap stack:
            new java.text.MessageFormat
            dup
            ldc "R_InvalidConnectionSetting"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 3 /* form */
        start local 3 // java.text.MessageFormat form
         9: .line 74
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            ldc "keyStoreLocation"
            aastore
            dup
            iconst_1
            aload 1 /* keyStoreLocation */
            aastore
            astore 4 /* msgArgs */
        start local 4 // java.lang.Object[] msgArgs
        10: .line 75
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 3 /* form */
            aload 4 /* msgArgs */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            aconst_null
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.lang.Object[] msgArgs
        end local 3 // java.text.MessageFormat form
        11: .line 78
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* keyStoreLocation */
            putfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.keyStorePath:Ljava/lang/String;
        12: .line 80
            getstatic com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.javaKeyStoreLogger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 14
        13: .line 81
            getstatic com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.javaKeyStoreLogger:Ljava/util/logging/Logger;
            ldc "Path of key store provider is set."
            invokevirtual java.util.logging.Logger.fine:(Ljava/lang/String;)V
        14: .line 85
      StackMap locals:
      StackMap stack:
            aload 2 /* keyStoreSecret */
            ifnonnull 16
        15: .line 86
            ldc ""
            invokevirtual java.lang.String.toCharArray:()[C
            astore 2 /* keyStoreSecret */
        16: .line 89
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* keyStoreSecret */
            arraylength
            newarray 5
            putfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.keyStorePwd:[C
        17: .line 90
            aload 2 /* keyStoreSecret */
            iconst_0
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.keyStorePwd:[C
            iconst_0
            aload 2 /* keyStoreSecret */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        18: .line 92
            getstatic com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.javaKeyStoreLogger:Ljava/util/logging/Logger;
            getstatic java.util.logging.Level.FINE:Ljava/util/logging/Level;
            invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
            ifeq 20
        19: .line 93
            getstatic com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.javaKeyStoreLogger:Ljava/util/logging/Logger;
            ldc "Password for key store provider is set."
            invokevirtual java.util.logging.Logger.fine:(Ljava/lang/String;)V
        20: .line 96
      StackMap locals:
      StackMap stack:
            getstatic com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.javaKeyStoreLogger:Ljava/util/logging/Logger;
            ldc Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
        21: .line 97
            ldc "SQLServerColumnEncryptionJavaKeyStoreProvider"
        22: .line 96
            invokevirtual java.util.logging.Logger.exiting:(Ljava/lang/String;Ljava/lang/String;)V
        23: .line 98
            return
        end local 2 // char[] keyStoreSecret
        end local 1 // java.lang.String keyStoreLocation
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   24     0              this  Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            0   24     1  keyStoreLocation  Ljava/lang/String;
            0   24     2    keyStoreSecret  [C
            9   11     3              form  Ljava/text/MessageFormat;
           10   11     4           msgArgs  [Ljava/lang/Object;
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
                  Name  Flags
      keyStoreLocation  
      keyStoreSecret    

  public byte[] decryptColumnEncryptionKey(java.lang.String, java.lang.String, byte[]);
    descriptor: (Ljava/lang/String;Ljava/lang/String;[B)[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=6, args_size=4
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
        start local 1 // java.lang.String masterKeyPath
        start local 2 // java.lang.String encryptionAlgorithm
        start local 3 // byte[] encryptedColumnEncryptionKey
         0: .line 103
            getstatic com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.javaKeyStoreLogger:Ljava/util/logging/Logger;
            ldc Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
         1: .line 104
            ldc "decryptColumnEncryptionKey"
            ldc "Decrypting Column Encryption Key."
         2: .line 103
            invokevirtual java.util.logging.Logger.entering:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V
         3: .line 106
            aload 1 /* masterKeyPath */
            invokestatic com.microsoft.sqlserver.jdbc.KeyStoreProviderCommon.validateNonEmptyMasterKeyPath:(Ljava/lang/String;)V
         4: .line 107
            aload 0 /* this */
            aload 1 /* masterKeyPath */
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.getCertificateDetails:(Ljava/lang/String;)Lcom/microsoft/sqlserver/jdbc/CertificateDetails;
            astore 4 /* certificateDetails */
        start local 4 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
         5: .line 108
            aload 1 /* masterKeyPath */
            aload 2 /* encryptionAlgorithm */
         6: .line 109
            aload 3 /* encryptedColumnEncryptionKey */
            aload 4 /* certificateDetails */
         7: .line 108
            invokestatic com.microsoft.sqlserver.jdbc.KeyStoreProviderCommon.decryptColumnEncryptionKey:(Ljava/lang/String;Ljava/lang/String;[BLcom/microsoft/sqlserver/jdbc/CertificateDetails;)[B
            astore 5 /* plainCEK */
        start local 5 // byte[] plainCEK
         8: .line 111
            getstatic com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.javaKeyStoreLogger:Ljava/util/logging/Logger;
            ldc Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
         9: .line 112
            ldc "decryptColumnEncryptionKey"
            ldc "Finished decrypting Column Encryption Key."
        10: .line 111
            invokevirtual java.util.logging.Logger.exiting:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V
        11: .line 113
            aload 5 /* plainCEK */
            areturn
        end local 5 // byte[] plainCEK
        end local 4 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
        end local 3 // byte[] encryptedColumnEncryptionKey
        end local 2 // java.lang.String encryptionAlgorithm
        end local 1 // java.lang.String masterKeyPath
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
      LocalVariableTable:
        Start  End  Slot                          Name  Signature
            0   12     0                          this  Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            0   12     1                 masterKeyPath  Ljava/lang/String;
            0   12     2           encryptionAlgorithm  Ljava/lang/String;
            0   12     3  encryptedColumnEncryptionKey  [B
            5   12     4            certificateDetails  Lcom/microsoft/sqlserver/jdbc/CertificateDetails;
            8   12     5                      plainCEK  [B
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
                              Name  Flags
      masterKeyPath                 
      encryptionAlgorithm           
      encryptedColumnEncryptionKey  

  private com.microsoft.sqlserver.jdbc.CertificateDetails getCertificateDetails(java.lang.String);
    descriptor: (Ljava/lang/String;)Lcom/microsoft/sqlserver/jdbc/CertificateDetails;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=9, args_size=2
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
        start local 1 // java.lang.String masterKeyPath
         0: .line 117
            aconst_null
            astore 2 /* fis */
        start local 2 // java.io.FileInputStream fis
         1: .line 118
            aconst_null
            astore 3 /* keyStore */
        start local 3 // java.security.KeyStore keyStore
         2: .line 119
            aconst_null
            astore 4 /* certificateDetails */
        start local 4 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
         3: .line 122
            aload 1 /* masterKeyPath */
            ifnull 4
            aload 1 /* masterKeyPath */
            invokevirtual java.lang.String.length:()I
            ifne 7
         4: .line 123
      StackMap locals: java.io.FileInputStream java.security.KeyStore com.microsoft.sqlserver.jdbc.CertificateDetails
      StackMap stack:
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aconst_null
            ldc "R_InvalidMasterKeyDetails"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            aconst_null
         5: .line 124
            iconst_0
            iconst_0
         6: .line 123
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
            athrow
         7: .line 129
      StackMap locals:
      StackMap stack:
            ldc "JKS"
            invokestatic java.security.KeyStore.getInstance:(Ljava/lang/String;)Ljava/security/KeyStore;
            astore 3 /* keyStore */
         8: .line 130
            new java.io.FileInputStream
            dup
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.keyStorePath:Ljava/lang/String;
            invokespecial java.io.FileInputStream.<init>:(Ljava/lang/String;)V
            astore 2 /* fis */
         9: .line 131
            aload 3 /* keyStore */
            aload 2 /* fis */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.keyStorePwd:[C
            invokevirtual java.security.KeyStore.load:(Ljava/io/InputStream;[C)V
        10: .line 132
            goto 17
      StackMap locals:
      StackMap stack: java.io.IOException
        11: pop
        12: .line 133
            aload 2 /* fis */
            ifnull 14
        13: .line 134
            aload 2 /* fis */
            invokevirtual java.io.FileInputStream.close:()V
        14: .line 137
      StackMap locals:
      StackMap stack:
            ldc "PKCS12"
            invokestatic java.security.KeyStore.getInstance:(Ljava/lang/String;)Ljava/security/KeyStore;
            astore 3 /* keyStore */
        15: .line 138
            new java.io.FileInputStream
            dup
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.keyStorePath:Ljava/lang/String;
            invokespecial java.io.FileInputStream.<init>:(Ljava/lang/String;)V
            astore 2 /* fis */
        16: .line 139
            aload 3 /* keyStore */
            aload 2 /* fis */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.keyStorePwd:[C
            invokevirtual java.security.KeyStore.load:(Ljava/io/InputStream;[C)V
        17: .line 142
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* keyStore */
            aload 1 /* masterKeyPath */
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.getCertificateDetailsByAlias:(Ljava/security/KeyStore;Ljava/lang/String;)Lcom/microsoft/sqlserver/jdbc/CertificateDetails;
            astore 4 /* certificateDetails */
        18: .line 143
            goto 31
      StackMap locals:
      StackMap stack: java.io.FileNotFoundException
        19: pop
        20: .line 144
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 0 /* this */
            ldc "R_KeyStoreNotFound"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            aconst_null
            iconst_0
            iconst_0
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
            athrow
        21: .line 145
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 5 /* e */
        start local 5 // java.lang.Exception e
        22: .line 146
            new java.text.MessageFormat
            dup
            ldc "R_invalidKeyStoreFile"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 6 /* form */
        start local 6 // java.text.MessageFormat form
        23: .line 147
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.keyStorePath:Ljava/lang/String;
            aastore
            astore 7 /* msgArgs */
        start local 7 // java.lang.Object[] msgArgs
        24: .line 148
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 6 /* form */
            aload 7 /* msgArgs */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            aload 5 /* e */
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 7 // java.lang.Object[] msgArgs
        end local 6 // java.text.MessageFormat form
        end local 5 // java.lang.Exception e
        25: .line 149
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 8
        26: .line 151
            aload 2 /* fis */
            ifnull 30
        27: .line 152
            aload 2 /* fis */
            invokevirtual java.io.FileInputStream.close:()V
        28: .line 153
            goto 30
        29: .line 155
      StackMap locals: com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider java.lang.String java.io.FileInputStream java.security.KeyStore com.microsoft.sqlserver.jdbc.CertificateDetails top top top java.lang.Throwable
      StackMap stack: java.io.IOException
            pop
        30: .line 156
      StackMap locals:
      StackMap stack:
            aload 8
            athrow
        31: .line 151
      StackMap locals: com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider java.lang.String java.io.FileInputStream java.security.KeyStore com.microsoft.sqlserver.jdbc.CertificateDetails
      StackMap stack:
            aload 2 /* fis */
            ifnull 35
        32: .line 152
            aload 2 /* fis */
            invokevirtual java.io.FileInputStream.close:()V
        33: .line 153
            goto 35
        34: .line 155
      StackMap locals:
      StackMap stack: java.io.IOException
            pop
        35: .line 158
      StackMap locals:
      StackMap stack:
            aload 4 /* certificateDetails */
            areturn
        end local 4 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
        end local 3 // java.security.KeyStore keyStore
        end local 2 // java.io.FileInputStream fis
        end local 1 // java.lang.String masterKeyPath
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   36     0                this  Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            0   36     1       masterKeyPath  Ljava/lang/String;
            1   36     2                 fis  Ljava/io/FileInputStream;
            2   36     3            keyStore  Ljava/security/KeyStore;
            3   36     4  certificateDetails  Lcom/microsoft/sqlserver/jdbc/CertificateDetails;
           22   25     5                   e  Ljava/lang/Exception;
           23   25     6                form  Ljava/text/MessageFormat;
           24   25     7             msgArgs  [Ljava/lang/Object;
      Exception table:
        from    to  target  type
           7    10      11  Class java.io.IOException
           3    18      19  Class java.io.FileNotFoundException
           3    18      21  Class java.io.IOException
           3    18      21  Class java.security.cert.CertificateException
           3    18      21  Class java.security.NoSuchAlgorithmException
           3    18      21  Class java.security.KeyStoreException
           3    25      25  any
          26    28      29  Class java.io.IOException
          31    33      34  Class java.io.IOException
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
               Name  Flags
      masterKeyPath  

  private com.microsoft.sqlserver.jdbc.CertificateDetails getCertificateDetailsByAlias(java.security.KeyStore, java.lang.String);
    descriptor: (Ljava/security/KeyStore;Ljava/lang/String;)Lcom/microsoft/sqlserver/jdbc/CertificateDetails;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=7, args_size=3
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
        start local 1 // java.security.KeyStore keyStore
        start local 2 // java.lang.String alias
         0: .line 163
            aload 1 /* keyStore */
            aload 2 /* alias */
            invokevirtual java.security.KeyStore.getCertificate:(Ljava/lang/String;)Ljava/security/cert/Certificate;
            checkcast java.security.cert.X509Certificate
            astore 3 /* publicCertificate */
        start local 3 // java.security.cert.X509Certificate publicCertificate
         1: .line 164
            aload 1 /* keyStore */
            aload 2 /* alias */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.keyStorePwd:[C
            invokevirtual java.security.KeyStore.getKey:(Ljava/lang/String;[C)Ljava/security/Key;
            astore 4 /* keyPrivate */
        start local 4 // java.security.Key keyPrivate
         2: .line 165
            aload 3 /* publicCertificate */
            ifnonnull 8
         3: .line 167
            new java.text.MessageFormat
            dup
         4: .line 168
            ldc "R_CertificateNotFoundForAlias"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
         5: .line 167
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 5 /* form */
        start local 5 // java.text.MessageFormat form
         6: .line 169
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* alias */
            aastore
            dup
            iconst_1
            ldc "MSSQL_JAVA_KEYSTORE"
            aastore
            astore 6 /* msgArgs */
        start local 6 // java.lang.Object[] msgArgs
         7: .line 170
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 0 /* this */
            aload 5 /* form */
            aload 6 /* msgArgs */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            aconst_null
            iconst_0
            iconst_0
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
            athrow
        end local 6 // java.lang.Object[] msgArgs
        end local 5 // java.text.MessageFormat form
         8: .line 174
      StackMap locals: java.security.cert.X509Certificate java.security.Key
      StackMap stack:
            aload 4 /* keyPrivate */
            ifnonnull 10
         9: .line 175
            new java.security.UnrecoverableKeyException
            dup
            invokespecial java.security.UnrecoverableKeyException.<init>:()V
            athrow
        10: .line 178
      StackMap locals:
      StackMap stack:
            new com.microsoft.sqlserver.jdbc.CertificateDetails
            dup
            aload 3 /* publicCertificate */
            aload 4 /* keyPrivate */
            invokespecial com.microsoft.sqlserver.jdbc.CertificateDetails.<init>:(Ljava/security/cert/X509Certificate;Ljava/security/Key;)V
        11: areturn
        end local 4 // java.security.Key keyPrivate
        end local 3 // java.security.cert.X509Certificate publicCertificate
        12: .line 179
      StackMap locals: com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider java.security.KeyStore java.lang.String
      StackMap stack: java.security.UnrecoverableKeyException
            pop
        13: .line 181
            new java.text.MessageFormat
            dup
            ldc "R_UnrecoverableKeyAE"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 3 /* form */
        start local 3 // java.text.MessageFormat form
        14: .line 182
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* alias */
            aastore
            astore 4 /* msgArgs */
        start local 4 // java.lang.Object[] msgArgs
        15: .line 183
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 0 /* this */
            aload 3 /* form */
            aload 4 /* msgArgs */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            aconst_null
            iconst_0
            iconst_0
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
            athrow
        end local 4 // java.lang.Object[] msgArgs
        end local 3 // java.text.MessageFormat form
        16: .line 184
      StackMap locals:
      StackMap stack: java.security.GeneralSecurityException
            astore 3 /* e */
        start local 3 // java.security.GeneralSecurityException e
        17: .line 185
            new java.text.MessageFormat
            dup
            ldc "R_CertificateError"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 4 /* form */
        start local 4 // java.text.MessageFormat form
        18: .line 186
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* alias */
            aastore
            dup
            iconst_1
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.name:Ljava/lang/String;
            aastore
            astore 5 /* msgArgs */
        start local 5 // java.lang.Object[] msgArgs
        19: .line 187
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 4 /* form */
            aload 5 /* msgArgs */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            aload 3 /* e */
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 5 // java.lang.Object[] msgArgs
        end local 4 // java.text.MessageFormat form
        end local 3 // java.security.GeneralSecurityException e
        end local 2 // java.lang.String alias
        end local 1 // java.security.KeyStore keyStore
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   20     0               this  Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            0   20     1           keyStore  Ljava/security/KeyStore;
            0   20     2              alias  Ljava/lang/String;
            1   12     3  publicCertificate  Ljava/security/cert/X509Certificate;
            2   12     4         keyPrivate  Ljava/security/Key;
            6    8     5               form  Ljava/text/MessageFormat;
            7    8     6            msgArgs  [Ljava/lang/Object;
           14   16     3               form  Ljava/text/MessageFormat;
           15   16     4            msgArgs  [Ljava/lang/Object;
           17   20     3                  e  Ljava/security/GeneralSecurityException;
           18   20     4               form  Ljava/text/MessageFormat;
           19   20     5            msgArgs  [Ljava/lang/Object;
      Exception table:
        from    to  target  type
           0    11      12  Class java.security.UnrecoverableKeyException
           0    11      16  Class java.security.NoSuchAlgorithmException
           0    11      16  Class java.security.KeyStoreException
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
          Name  Flags
      keyStore  
      alias     

  public byte[] encryptColumnEncryptionKey(java.lang.String, java.lang.String, byte[]);
    descriptor: (Ljava/lang/String;Ljava/lang/String;[B)[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=16, args_size=4
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
        start local 1 // java.lang.String masterKeyPath
        start local 2 // java.lang.String encryptionAlgorithm
        start local 3 // byte[] plainTextColumnEncryptionKey
         0: .line 194
            getstatic com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.javaKeyStoreLogger:Ljava/util/logging/Logger;
            ldc Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
         1: .line 195
            ldc "encryptColumnEncryptionKey"
            ldc "Encrypting Column Encryption Key."
         2: .line 194
            invokevirtual java.util.logging.Logger.entering:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V
         3: .line 197
            getstatic com.microsoft.sqlserver.jdbc.KeyStoreProviderCommon.version:[B
            astore 4 /* version */
        start local 4 // byte[] version
         4: .line 198
            aload 1 /* masterKeyPath */
            invokestatic com.microsoft.sqlserver.jdbc.KeyStoreProviderCommon.validateNonEmptyMasterKeyPath:(Ljava/lang/String;)V
         5: .line 200
            aload 3 /* plainTextColumnEncryptionKey */
            ifnonnull 9
         6: .line 202
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aconst_null
            ldc "R_NullColumnEncryptionKey"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            aconst_null
            iconst_0
         7: .line 203
            iconst_0
         8: .line 202
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
            athrow
         9: .line 205
      StackMap locals: byte[]
      StackMap stack:
            aload 3 /* plainTextColumnEncryptionKey */
            arraylength
            ifne 13
        10: .line 207
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aconst_null
            ldc "R_EmptyColumnEncryptionKey"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            aconst_null
            iconst_0
        11: .line 208
            iconst_0
        12: .line 207
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
            athrow
        13: .line 212
      StackMap locals:
      StackMap stack:
            aload 2 /* encryptionAlgorithm */
            iconst_1
            invokestatic com.microsoft.sqlserver.jdbc.KeyStoreProviderCommon.validateEncryptionAlgorithm:(Ljava/lang/String;Z)V
        14: .line 214
            aload 0 /* this */
            aload 1 /* masterKeyPath */
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.getCertificateDetails:(Ljava/lang/String;)Lcom/microsoft/sqlserver/jdbc/CertificateDetails;
            astore 5 /* certificateDetails */
        start local 5 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
        15: .line 215
            aload 0 /* this */
            aload 3 /* plainTextColumnEncryptionKey */
            aload 5 /* certificateDetails */
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.encryptRSAOAEP:([BLcom/microsoft/sqlserver/jdbc/CertificateDetails;)[B
            astore 6 /* cipherText */
        start local 6 // byte[] cipherText
        16: .line 216
            aload 0 /* this */
            aload 6 /* cipherText */
            arraylength
            i2s
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.getLittleEndianBytesFromShort:(S)[B
            astore 7 /* cipherTextLength */
        start local 7 // byte[] cipherTextLength
        17: .line 217
            aload 1 /* masterKeyPath */
            invokevirtual java.lang.String.toLowerCase:()Ljava/lang/String;
            getstatic java.nio.charset.StandardCharsets.UTF_16LE:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            astore 8 /* masterKeyPathBytes */
        start local 8 // byte[] masterKeyPathBytes
        18: .line 219
            aload 0 /* this */
            aload 8 /* masterKeyPathBytes */
            arraylength
            i2s
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.getLittleEndianBytesFromShort:(S)[B
            astore 9 /* keyPathLength */
        start local 9 // byte[] keyPathLength
        19: .line 221
            aload 4 /* version */
            arraylength
            aload 9 /* keyPathLength */
            arraylength
            iadd
            aload 7 /* cipherTextLength */
            arraylength
            iadd
        20: .line 222
            aload 8 /* masterKeyPathBytes */
            arraylength
        21: .line 221
            iadd
        22: .line 222
            aload 6 /* cipherText */
            arraylength
        23: .line 221
            iadd
            newarray 8
            astore 10 /* dataToSign */
        start local 10 // byte[] dataToSign
        24: .line 223
            aload 4 /* version */
            arraylength
            istore 11 /* destinationPosition */
        start local 11 // int destinationPosition
        25: .line 224
            aload 4 /* version */
            iconst_0
            aload 10 /* dataToSign */
            iconst_0
            aload 4 /* version */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        26: .line 226
            aload 9 /* keyPathLength */
            iconst_0
            aload 10 /* dataToSign */
            iload 11 /* destinationPosition */
            aload 9 /* keyPathLength */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        27: .line 227
            iload 11 /* destinationPosition */
            aload 9 /* keyPathLength */
            arraylength
            iadd
            istore 11 /* destinationPosition */
        28: .line 229
            aload 7 /* cipherTextLength */
            iconst_0
            aload 10 /* dataToSign */
            iload 11 /* destinationPosition */
            aload 7 /* cipherTextLength */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        29: .line 230
            iload 11 /* destinationPosition */
            aload 7 /* cipherTextLength */
            arraylength
            iadd
            istore 11 /* destinationPosition */
        30: .line 232
            aload 8 /* masterKeyPathBytes */
            iconst_0
            aload 10 /* dataToSign */
            iload 11 /* destinationPosition */
            aload 8 /* masterKeyPathBytes */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        31: .line 233
            iload 11 /* destinationPosition */
            aload 8 /* masterKeyPathBytes */
            arraylength
            iadd
            istore 11 /* destinationPosition */
        32: .line 235
            aload 6 /* cipherText */
            iconst_0
            aload 10 /* dataToSign */
            iload 11 /* destinationPosition */
            aload 6 /* cipherText */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        33: .line 236
            aload 0 /* this */
            aload 10 /* dataToSign */
            aload 5 /* certificateDetails */
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.rsaSignHashedData:([BLcom/microsoft/sqlserver/jdbc/CertificateDetails;)[B
            astore 12 /* signedHash */
        start local 12 // byte[] signedHash
        34: .line 238
            aload 4 /* version */
            arraylength
            aload 7 /* cipherTextLength */
            arraylength
            iadd
            aload 9 /* keyPathLength */
            arraylength
            iadd
        35: .line 239
            aload 6 /* cipherText */
            arraylength
        36: .line 238
            iadd
        37: .line 239
            aload 8 /* masterKeyPathBytes */
            arraylength
        38: .line 238
            iadd
        39: .line 239
            aload 12 /* signedHash */
            arraylength
        40: .line 238
            iadd
            istore 13 /* encryptedColumnEncryptionKeyLength */
        start local 13 // int encryptedColumnEncryptionKeyLength
        41: .line 240
            iload 13 /* encryptedColumnEncryptionKeyLength */
            newarray 8
            astore 14 /* encryptedColumnEncryptionKey */
        start local 14 // byte[] encryptedColumnEncryptionKey
        42: .line 242
            iconst_0
            istore 15 /* currentIndex */
        start local 15 // int currentIndex
        43: .line 243
            aload 4 /* version */
            iconst_0
            aload 14 /* encryptedColumnEncryptionKey */
            iload 15 /* currentIndex */
            aload 4 /* version */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        44: .line 244
            iload 15 /* currentIndex */
            aload 4 /* version */
            arraylength
            iadd
            istore 15 /* currentIndex */
        45: .line 246
            aload 9 /* keyPathLength */
            iconst_0
            aload 14 /* encryptedColumnEncryptionKey */
            iload 15 /* currentIndex */
            aload 9 /* keyPathLength */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        46: .line 247
            iload 15 /* currentIndex */
            aload 9 /* keyPathLength */
            arraylength
            iadd
            istore 15 /* currentIndex */
        47: .line 249
            aload 7 /* cipherTextLength */
            iconst_0
            aload 14 /* encryptedColumnEncryptionKey */
            iload 15 /* currentIndex */
            aload 7 /* cipherTextLength */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        48: .line 250
            iload 15 /* currentIndex */
            aload 7 /* cipherTextLength */
            arraylength
            iadd
            istore 15 /* currentIndex */
        49: .line 252
            aload 8 /* masterKeyPathBytes */
            iconst_0
            aload 14 /* encryptedColumnEncryptionKey */
            iload 15 /* currentIndex */
            aload 8 /* masterKeyPathBytes */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        50: .line 253
            iload 15 /* currentIndex */
            aload 8 /* masterKeyPathBytes */
            arraylength
            iadd
            istore 15 /* currentIndex */
        51: .line 255
            aload 6 /* cipherText */
            iconst_0
            aload 14 /* encryptedColumnEncryptionKey */
            iload 15 /* currentIndex */
            aload 6 /* cipherText */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        52: .line 256
            iload 15 /* currentIndex */
            aload 6 /* cipherText */
            arraylength
            iadd
            istore 15 /* currentIndex */
        53: .line 258
            aload 12 /* signedHash */
            iconst_0
            aload 14 /* encryptedColumnEncryptionKey */
            iload 15 /* currentIndex */
            aload 12 /* signedHash */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        54: .line 260
            getstatic com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.javaKeyStoreLogger:Ljava/util/logging/Logger;
            ldc Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
        55: .line 261
            ldc "encryptColumnEncryptionKey"
            ldc "Finished encrypting Column Encryption Key."
        56: .line 260
            invokevirtual java.util.logging.Logger.exiting:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V
        57: .line 262
            aload 14 /* encryptedColumnEncryptionKey */
            areturn
        end local 15 // int currentIndex
        end local 14 // byte[] encryptedColumnEncryptionKey
        end local 13 // int encryptedColumnEncryptionKeyLength
        end local 12 // byte[] signedHash
        end local 11 // int destinationPosition
        end local 10 // byte[] dataToSign
        end local 9 // byte[] keyPathLength
        end local 8 // byte[] masterKeyPathBytes
        end local 7 // byte[] cipherTextLength
        end local 6 // byte[] cipherText
        end local 5 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
        end local 4 // byte[] version
        end local 3 // byte[] plainTextColumnEncryptionKey
        end local 2 // java.lang.String encryptionAlgorithm
        end local 1 // java.lang.String masterKeyPath
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
      LocalVariableTable:
        Start  End  Slot                                Name  Signature
            0   58     0                                this  Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            0   58     1                       masterKeyPath  Ljava/lang/String;
            0   58     2                 encryptionAlgorithm  Ljava/lang/String;
            0   58     3        plainTextColumnEncryptionKey  [B
            4   58     4                             version  [B
           15   58     5                  certificateDetails  Lcom/microsoft/sqlserver/jdbc/CertificateDetails;
           16   58     6                          cipherText  [B
           17   58     7                    cipherTextLength  [B
           18   58     8                  masterKeyPathBytes  [B
           19   58     9                       keyPathLength  [B
           24   58    10                          dataToSign  [B
           25   58    11                 destinationPosition  I
           34   58    12                          signedHash  [B
           41   58    13  encryptedColumnEncryptionKeyLength  I
           42   58    14        encryptedColumnEncryptionKey  [B
           43   58    15                        currentIndex  I
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
                              Name  Flags
      masterKeyPath                 
      encryptionAlgorithm           
      plainTextColumnEncryptionKey  

  private byte[] encryptRSAOAEP(byte[], com.microsoft.sqlserver.jdbc.CertificateDetails);
    descriptor: ([BLcom/microsoft/sqlserver/jdbc/CertificateDetails;)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=7, args_size=3
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
        start local 1 // byte[] plainText
        start local 2 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
         0: .line 276
            aconst_null
            astore 3 /* cipherText */
        start local 3 // byte[] cipherText
         1: .line 278
            ldc "RSA/ECB/OAEPWithSHA-1AndMGF1Padding"
            invokestatic javax.crypto.Cipher.getInstance:(Ljava/lang/String;)Ljavax/crypto/Cipher;
            astore 4 /* rsa */
        start local 4 // javax.crypto.Cipher rsa
         2: .line 279
            aload 4 /* rsa */
            iconst_1
            aload 2 /* certificateDetails */
            getfield com.microsoft.sqlserver.jdbc.CertificateDetails.certificate:Ljava/security/cert/X509Certificate;
            invokevirtual java.security.cert.X509Certificate.getPublicKey:()Ljava/security/PublicKey;
            invokevirtual javax.crypto.Cipher.init:(ILjava/security/Key;)V
         3: .line 280
            aload 4 /* rsa */
            aload 1 /* plainText */
            invokevirtual javax.crypto.Cipher.update:([B)[B
            pop
         4: .line 281
            aload 4 /* rsa */
            invokevirtual javax.crypto.Cipher.doFinal:()[B
            astore 3 /* cipherText */
        end local 4 // javax.crypto.Cipher rsa
         5: .line 282
            goto 10
         6: .line 283
      StackMap locals: com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider byte[] com.microsoft.sqlserver.jdbc.CertificateDetails byte[]
      StackMap stack: java.security.GeneralSecurityException
            astore 4 /* e */
        start local 4 // java.security.GeneralSecurityException e
         7: .line 284
            new java.text.MessageFormat
            dup
            ldc "R_EncryptionFailed"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 5 /* form */
        start local 5 // java.text.MessageFormat form
         8: .line 285
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* e */
            invokevirtual java.security.GeneralSecurityException.getMessage:()Ljava/lang/String;
            aastore
            astore 6 /* msgArgs */
        start local 6 // java.lang.Object[] msgArgs
         9: .line 286
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 0 /* this */
            aload 5 /* form */
            aload 6 /* msgArgs */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            aconst_null
            iconst_0
            iconst_0
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
            athrow
        end local 6 // java.lang.Object[] msgArgs
        end local 5 // java.text.MessageFormat form
        end local 4 // java.security.GeneralSecurityException e
        10: .line 289
      StackMap locals:
      StackMap stack:
            aload 3 /* cipherText */
            areturn
        end local 3 // byte[] cipherText
        end local 2 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
        end local 1 // byte[] plainText
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   11     0                this  Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            0   11     1           plainText  [B
            0   11     2  certificateDetails  Lcom/microsoft/sqlserver/jdbc/CertificateDetails;
            1   11     3          cipherText  [B
            2    5     4                 rsa  Ljavax/crypto/Cipher;
            7   10     4                   e  Ljava/security/GeneralSecurityException;
            8   10     5                form  Ljava/text/MessageFormat;
            9   10     6             msgArgs  [Ljava/lang/Object;
      Exception table:
        from    to  target  type
           1     5       6  Class java.security.InvalidKeyException
           1     5       6  Class java.security.NoSuchAlgorithmException
           1     5       6  Class javax.crypto.IllegalBlockSizeException
           1     5       6  Class javax.crypto.NoSuchPaddingException
           1     5       6  Class javax.crypto.BadPaddingException
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
                    Name  Flags
      plainText           
      certificateDetails  

  private byte[] rsaSignHashedData(byte[], com.microsoft.sqlserver.jdbc.CertificateDetails);
    descriptor: ([BLcom/microsoft/sqlserver/jdbc/CertificateDetails;)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=8, args_size=3
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
        start local 1 // byte[] dataToSign
        start local 2 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
         0: .line 296
            aconst_null
            astore 4 /* signedHash */
        start local 4 // byte[] signedHash
         1: .line 299
            ldc "SHA256withRSA"
            invokestatic java.security.Signature.getInstance:(Ljava/lang/String;)Ljava/security/Signature;
            astore 3 /* signature */
        start local 3 // java.security.Signature signature
         2: .line 300
            aload 3 /* signature */
            aload 2 /* certificateDetails */
            getfield com.microsoft.sqlserver.jdbc.CertificateDetails.privateKey:Ljava/security/Key;
            checkcast java.security.PrivateKey
            invokevirtual java.security.Signature.initSign:(Ljava/security/PrivateKey;)V
         3: .line 301
            aload 3 /* signature */
            aload 1 /* dataToSign */
            invokevirtual java.security.Signature.update:([B)V
         4: .line 302
            aload 3 /* signature */
            invokevirtual java.security.Signature.sign:()[B
            astore 4 /* signedHash */
         5: .line 303
            goto 10
        end local 3 // java.security.Signature signature
      StackMap locals: com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider byte[] com.microsoft.sqlserver.jdbc.CertificateDetails top byte[]
      StackMap stack: java.security.GeneralSecurityException
         6: astore 5 /* e */
        start local 5 // java.security.GeneralSecurityException e
         7: .line 304
            new java.text.MessageFormat
            dup
            ldc "R_EncryptionFailed"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 6 /* form */
        start local 6 // java.text.MessageFormat form
         8: .line 305
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 5 /* e */
            invokevirtual java.security.GeneralSecurityException.getMessage:()Ljava/lang/String;
            aastore
            astore 7 /* msgArgs */
        start local 7 // java.lang.Object[] msgArgs
         9: .line 306
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 0 /* this */
            aload 6 /* form */
            aload 7 /* msgArgs */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            aconst_null
            iconst_0
            iconst_0
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
            athrow
        end local 7 // java.lang.Object[] msgArgs
        end local 6 // java.text.MessageFormat form
        end local 5 // java.security.GeneralSecurityException e
        start local 3 // java.security.Signature signature
        10: .line 308
      StackMap locals: com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider byte[] com.microsoft.sqlserver.jdbc.CertificateDetails java.security.Signature byte[]
      StackMap stack:
            aload 4 /* signedHash */
            areturn
        end local 4 // byte[] signedHash
        end local 3 // java.security.Signature signature
        end local 2 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
        end local 1 // byte[] dataToSign
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   11     0                this  Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            0   11     1          dataToSign  [B
            0   11     2  certificateDetails  Lcom/microsoft/sqlserver/jdbc/CertificateDetails;
            2    6     3           signature  Ljava/security/Signature;
           10   11     3           signature  Ljava/security/Signature;
            1   11     4          signedHash  [B
            7   10     5                   e  Ljava/security/GeneralSecurityException;
            8   10     6                form  Ljava/text/MessageFormat;
            9   10     7             msgArgs  [Ljava/lang/Object;
      Exception table:
        from    to  target  type
           1     5       6  Class java.security.InvalidKeyException
           1     5       6  Class java.security.NoSuchAlgorithmException
           1     5       6  Class java.security.SignatureException
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
                    Name  Flags
      dataToSign          
      certificateDetails  

  private byte[] getLittleEndianBytesFromShort(short);
    descriptor: (S)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
        start local 1 // short value
         0: .line 313
            iconst_2
            invokestatic java.nio.ByteBuffer.allocate:(I)Ljava/nio/ByteBuffer;
            astore 2 /* byteBuffer */
        start local 2 // java.nio.ByteBuffer byteBuffer
         1: .line 314
            aload 2 /* byteBuffer */
            getstatic java.nio.ByteOrder.LITTLE_ENDIAN:Ljava/nio/ByteOrder;
            invokevirtual java.nio.ByteBuffer.order:(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
            pop
         2: .line 315
            aload 2 /* byteBuffer */
            iload 1 /* value */
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            invokevirtual java.nio.ByteBuffer.array:()[B
            astore 3 /* byteValue */
        start local 3 // byte[] byteValue
         3: .line 316
            aload 3 /* byteValue */
            areturn
        end local 3 // byte[] byteValue
        end local 2 // java.nio.ByteBuffer byteBuffer
        end local 1 // short value
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            0    4     1       value  S
            1    4     2  byteBuffer  Ljava/nio/ByteBuffer;
            3    4     3   byteValue  [B
    MethodParameters:
       Name  Flags
      value  

  private boolean rsaVerifySignature(byte[], byte[], com.microsoft.sqlserver.jdbc.CertificateDetails);
    descriptor: ([B[BLcom/microsoft/sqlserver/jdbc/CertificateDetails;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=7, args_size=4
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
        start local 1 // byte[] dataToVerify
        start local 2 // byte[] signature
        start local 3 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
         0: .line 325
            ldc "SHA256withRSA"
            invokestatic java.security.Signature.getInstance:(Ljava/lang/String;)Ljava/security/Signature;
            astore 4 /* sig */
        start local 4 // java.security.Signature sig
         1: .line 326
            aload 4 /* sig */
            aload 3 /* certificateDetails */
            getfield com.microsoft.sqlserver.jdbc.CertificateDetails.privateKey:Ljava/security/Key;
            checkcast java.security.PrivateKey
            invokevirtual java.security.Signature.initSign:(Ljava/security/PrivateKey;)V
         2: .line 327
            aload 4 /* sig */
            aload 1 /* dataToVerify */
            invokevirtual java.security.Signature.update:([B)V
         3: .line 328
            aload 4 /* sig */
            invokevirtual java.security.Signature.sign:()[B
            astore 5 /* signedHash */
        start local 5 // byte[] signedHash
         4: .line 330
            aload 4 /* sig */
            aload 3 /* certificateDetails */
            getfield com.microsoft.sqlserver.jdbc.CertificateDetails.certificate:Ljava/security/cert/X509Certificate;
            invokevirtual java.security.cert.X509Certificate.getPublicKey:()Ljava/security/PublicKey;
            invokevirtual java.security.Signature.initVerify:(Ljava/security/PublicKey;)V
         5: .line 331
            aload 4 /* sig */
            aload 1 /* dataToVerify */
            invokevirtual java.security.Signature.update:([B)V
         6: .line 333
            aload 4 /* sig */
            aload 5 /* signedHash */
            invokevirtual java.security.Signature.verify:([B)Z
         7: ireturn
        end local 5 // byte[] signedHash
        end local 4 // java.security.Signature sig
         8: .line 335
      StackMap locals:
      StackMap stack: java.security.GeneralSecurityException
            astore 4 /* e */
        start local 4 // java.security.GeneralSecurityException e
         9: .line 336
            new java.text.MessageFormat
            dup
            ldc "R_VerifySignatureFailed"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
            astore 5 /* form */
        start local 5 // java.text.MessageFormat form
        10: .line 337
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* e */
            invokevirtual java.security.GeneralSecurityException.getMessage:()Ljava/lang/String;
            aastore
            astore 6 /* msgArgs */
        start local 6 // java.lang.Object[] msgArgs
        11: .line 338
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            aload 0 /* this */
            aload 5 /* form */
            aload 6 /* msgArgs */
            invokevirtual java.text.MessageFormat.format:(Ljava/lang/Object;)Ljava/lang/String;
            aconst_null
            iconst_0
            iconst_0
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
            athrow
        end local 6 // java.lang.Object[] msgArgs
        end local 5 // java.text.MessageFormat form
        end local 4 // java.security.GeneralSecurityException e
        end local 3 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
        end local 2 // byte[] signature
        end local 1 // byte[] dataToVerify
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   12     0                this  Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            0   12     1        dataToVerify  [B
            0   12     2           signature  [B
            0   12     3  certificateDetails  Lcom/microsoft/sqlserver/jdbc/CertificateDetails;
            1    8     4                 sig  Ljava/security/Signature;
            4    8     5          signedHash  [B
            9   12     4                   e  Ljava/security/GeneralSecurityException;
           10   12     5                form  Ljava/text/MessageFormat;
           11   12     6             msgArgs  [Ljava/lang/Object;
      Exception table:
        from    to  target  type
           0     7       8  Class java.security.InvalidKeyException
           0     7       8  Class java.security.NoSuchAlgorithmException
           0     7       8  Class java.security.SignatureException
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
                    Name  Flags
      dataToVerify        
      signature           
      certificateDetails  

  public boolean verifyColumnMasterKeyMetadata(java.lang.String, boolean, byte[]);
    descriptor: (Ljava/lang/String;Z[B)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=6, args_size=4
        start local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
        start local 1 // java.lang.String masterKeyPath
        start local 2 // boolean allowEnclaveComputations
        start local 3 // byte[] signature
         0: .line 346
            iload 2 /* allowEnclaveComputations */
            ifne 2
         1: .line 347
            iconst_0
            ireturn
         2: .line 349
      StackMap locals:
      StackMap stack:
            aload 1 /* masterKeyPath */
            invokestatic com.microsoft.sqlserver.jdbc.KeyStoreProviderCommon.validateNonEmptyMasterKeyPath:(Ljava/lang/String;)V
         3: .line 350
            aload 0 /* this */
            aload 1 /* masterKeyPath */
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.getCertificateDetails:(Ljava/lang/String;)Lcom/microsoft/sqlserver/jdbc/CertificateDetails;
            astore 4 /* certificateDetails */
        start local 4 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
         4: .line 351
            aload 4 /* certificateDetails */
            ifnonnull 6
         5: .line 352
            iconst_0
            ireturn
         6: .line 356
      StackMap locals: com.microsoft.sqlserver.jdbc.CertificateDetails
      StackMap stack:
            ldc "SHA-256"
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            astore 5 /* md */
        start local 5 // java.security.MessageDigest md
         7: .line 357
            aload 5 /* md */
            aload 0 /* this */
            getfield com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.name:Ljava/lang/String;
            invokevirtual java.lang.String.toLowerCase:()Ljava/lang/String;
            getstatic java.nio.charset.StandardCharsets.UTF_16LE:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            invokevirtual java.security.MessageDigest.update:([B)V
         8: .line 358
            aload 5 /* md */
            aload 1 /* masterKeyPath */
            invokevirtual java.lang.String.toLowerCase:()Ljava/lang/String;
            getstatic java.nio.charset.StandardCharsets.UTF_16LE:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            invokevirtual java.security.MessageDigest.update:([B)V
         9: .line 360
            aload 5 /* md */
            ldc "true"
            getstatic java.nio.charset.StandardCharsets.UTF_16LE:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            invokevirtual java.security.MessageDigest.update:([B)V
        10: .line 361
            aload 0 /* this */
            aload 5 /* md */
            invokevirtual java.security.MessageDigest.digest:()[B
            aload 3 /* signature */
            aload 4 /* certificateDetails */
            invokevirtual com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider.rsaVerifySignature:([B[BLcom/microsoft/sqlserver/jdbc/CertificateDetails;)Z
        11: ireturn
        end local 5 // java.security.MessageDigest md
        12: .line 362
      StackMap locals:
      StackMap stack: java.security.NoSuchAlgorithmException
            astore 5 /* e */
        start local 5 // java.security.NoSuchAlgorithmException e
        13: .line 363
            new com.microsoft.sqlserver.jdbc.SQLServerException
            dup
            ldc "R_NoSHA256Algorithm"
            invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
            aload 5 /* e */
            invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 5 // java.security.NoSuchAlgorithmException e
        end local 4 // com.microsoft.sqlserver.jdbc.CertificateDetails certificateDetails
        end local 3 // byte[] signature
        end local 2 // boolean allowEnclaveComputations
        end local 1 // java.lang.String masterKeyPath
        end local 0 // com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionJavaKeyStoreProvider this
      LocalVariableTable:
        Start  End  Slot                      Name  Signature
            0   14     0                      this  Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionJavaKeyStoreProvider;
            0   14     1             masterKeyPath  Ljava/lang/String;
            0   14     2  allowEnclaveComputations  Z
            0   14     3                 signature  [B
            4   14     4        certificateDetails  Lcom/microsoft/sqlserver/jdbc/CertificateDetails;
            7   12     5                        md  Ljava/security/MessageDigest;
           13   14     5                         e  Ljava/security/NoSuchAlgorithmException;
      Exception table:
        from    to  target  type
           6    11      12  Class java.security.NoSuchAlgorithmException
    Exceptions:
      throws com.microsoft.sqlserver.jdbc.SQLServerException
    MethodParameters:
                          Name  Flags
      masterKeyPath             
      allowEnclaveComputations  
      signature                 
}
SourceFile: "SQLServerColumnEncryptionJavaKeyStoreProvider.java"