class com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility
minor version: 0
major version: 59
flags: flags: (0x0020) ACC_SUPER
this_class: com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility
super_class: java.lang.Object
{
private static final java.util.logging.Logger connectionlogger;
descriptor: Ljava/util/logging/Logger;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
static final int GONE;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
ConstantValue: 410
static final int TOO_MANY_RESQUESTS;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
ConstantValue: 429
static final int NOT_FOUND;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
ConstantValue: 404
static final int INTERNAL_SERVER_ERROR;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
ConstantValue: 500
static final int NETWORK_CONNECT_TIMEOUT_ERROR;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
ConstantValue: 599
static final boolean $assertionsDisabled;
descriptor: Z
flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=1, locals=0, args_size=0
0: ldc Lcom/microsoft/sqlserver/jdbc/SQLServerSecurityUtility;
invokevirtual java.lang.Class.desiredAssertionStatus:()Z
ifne 1
iconst_1
goto 2
StackMap locals:
StackMap stack:
1: iconst_0
StackMap locals:
StackMap stack: int
2: putstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
3: ldc "com.microsoft.sqlserver.jdbc.internals.SQLServerConnection"
invokestatic java.util.logging.Logger.getLogger:(Ljava/lang/String;)Ljava/util/logging/Logger;
4: putstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.connectionlogger:Ljava/util/logging/Logger;
5: return
LocalVariableTable:
Start End Slot Name Signature
void <init>();
descriptor: ()V
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
invokespecial java.lang.Object.<init>:()V
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/microsoft/sqlserver/jdbc/SQLServerSecurityUtility;
static byte[] getHMACWithSHA256(byte[], byte[], int);
descriptor: ([B[BI)[B
flags: (0x0008) ACC_STATIC
Code:
stack=5, locals=7, args_size=3
start local 0 start local 1 start local 2 0: iload 2
newarray 8
astore 4
start local 4 1: ldc "HmacSHA256"
invokestatic javax.crypto.Mac.getInstance:(Ljava/lang/String;)Ljavax/crypto/Mac;
astore 5
start local 5 2: new javax.crypto.spec.SecretKeySpec
dup
aload 1
ldc "HmacSHA256"
invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
astore 6
start local 6 3: aload 5
aload 6
invokevirtual javax.crypto.Mac.init:(Ljava/security/Key;)V
4: aload 5
aload 0
invokevirtual javax.crypto.Mac.doFinal:([B)[B
astore 3
start local 3 5: aload 3
iconst_0
aload 4
iconst_0
aload 4
arraylength
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
6: aload 4
areturn
end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 7 0 plainText [B
0 7 1 key [B
0 7 2 length I
5 7 3 computedHash [B
1 7 4 hash [B
2 7 5 mac Ljavax/crypto/Mac;
3 7 6 ivkeySpec Ljavax/crypto/spec/SecretKeySpec;
Exceptions:
throws java.security.NoSuchAlgorithmException, java.security.InvalidKeyException
MethodParameters:
Name Flags
plainText
key
length
static boolean compareBytes(byte[], byte[], int, int);
descriptor: ([B[BII)Z
flags: (0x0008) ACC_STATIC
Code:
stack=4, locals=5, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
ifnull 1
aload 1
ifnonnull 2
1: StackMap locals:
StackMap stack:
iconst_0
ireturn
2: StackMap locals:
StackMap stack:
aload 1
arraylength
iload 2
isub
iload 3
if_icmpge 4
3: iconst_0
ireturn
4: StackMap locals:
StackMap stack:
iconst_0
istore 4
start local 4 5: goto 9
6: StackMap locals: int
StackMap stack:
aload 0
iload 4
baload
aload 1
iload 2
iload 4
iadd
baload
if_icmpeq 8
7: iconst_0
ireturn
8: StackMap locals:
StackMap stack:
iinc 4 1
StackMap locals:
StackMap stack:
9: iload 4
aload 0
arraylength
if_icmpge 10
iload 4
iload 3
if_icmplt 6
end local 4 10: StackMap locals:
StackMap stack:
iconst_1
ireturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 11 0 buffer1 [B
0 11 1 buffer2 [B
0 11 2 buffer2Index I
0 11 3 lengthToCompare I
5 10 4 index I
MethodParameters:
Name Flags
buffer1
buffer2
buffer2Index
lengthToCompare
static byte[] encryptWithKey(byte[], com.microsoft.sqlserver.jdbc.CryptoMetadata, com.microsoft.sqlserver.jdbc.SQLServerConnection);
descriptor: ([BLcom/microsoft/sqlserver/jdbc/CryptoMetadata;Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;)[B
flags: (0x0008) ACC_STATIC
Code:
stack=7, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 2
invokevirtual com.microsoft.sqlserver.jdbc.SQLServerConnection.getTrustedServerNameAE:()Ljava/lang/String;
astore 3
start local 3 1: getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
ifne 2
aload 3
ifnonnull 2
new java.lang.AssertionError
dup
ldc "Server name should npt be null in EncryptWithKey"
invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
athrow
2: StackMap locals: java.lang.String
StackMap stack:
aload 1
invokevirtual com.microsoft.sqlserver.jdbc.CryptoMetadata.IsAlgorithmInitialized:()Z
ifne 4
3: aload 1
aload 2
invokestatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.decryptSymmetricKey:(Lcom/microsoft/sqlserver/jdbc/CryptoMetadata;Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;)V
4: StackMap locals:
StackMap stack:
getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
ifne 5
aload 1
invokevirtual com.microsoft.sqlserver.jdbc.CryptoMetadata.IsAlgorithmInitialized:()Z
ifne 5
new java.lang.AssertionError
dup
invokespecial java.lang.AssertionError.<init>:()V
athrow
5: StackMap locals:
StackMap stack:
aload 1
getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cipherAlgorithm:Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithm;
aload 0
invokevirtual com.microsoft.sqlserver.jdbc.SQLServerEncryptionAlgorithm.encryptData:([B)[B
astore 4
start local 4 6: aload 4
ifnull 7
aload 4
arraylength
ifne 8
7: StackMap locals: byte[]
StackMap stack:
new com.microsoft.sqlserver.jdbc.SQLServerException
dup
aconst_null
ldc "R_NullCipherTextAE"
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
8: StackMap locals:
StackMap stack:
aload 4
areturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 plainText [B
0 9 1 md Lcom/microsoft/sqlserver/jdbc/CryptoMetadata;
0 9 2 connection Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;
1 9 3 serverName Ljava/lang/String;
6 9 4 cipherText [B
Exceptions:
throws com.microsoft.sqlserver.jdbc.SQLServerException
MethodParameters:
Name Flags
plainText
md
connection
private static java.lang.String ValidateAndGetEncryptionAlgorithmName(byte, java.lang.String);
descriptor: (BLjava/lang/String;)Ljava/lang/String;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=7, locals=2, args_size=2
start local 0 start local 1 0: iconst_2
iload 0
if_icmpeq 4
1: new com.microsoft.sqlserver.jdbc.SQLServerException
dup
aconst_null
ldc "R_CustomCipherAlgorithmNotSupportedAE"
invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
2: aconst_null
iconst_0
iconst_0
3: invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
athrow
4: StackMap locals:
StackMap stack:
ldc "AEAD_AES_256_CBC_HMAC_SHA256"
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 cipherAlgorithmId B
0 5 1 cipherAlgorithmName Ljava/lang/String;
Exceptions:
throws com.microsoft.sqlserver.jdbc.SQLServerException
MethodParameters:
Name Flags
cipherAlgorithmId
cipherAlgorithmName
static void decryptSymmetricKey(com.microsoft.sqlserver.jdbc.CryptoMetadata, com.microsoft.sqlserver.jdbc.SQLServerConnection);
descriptor: (Lcom/microsoft/sqlserver/jdbc/CryptoMetadata;Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;)V
flags: (0x0008) ACC_STATIC
Code:
stack=7, locals=9, args_size=2
start local 0 start local 1 0: getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
ifne 1
aload 0
ifnonnull 1
new java.lang.AssertionError
dup
ldc "md should not be null in DecryptSymmetricKey."
invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
athrow
1: StackMap locals:
StackMap stack:
getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
ifne 2
aload 0
getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cekTableEntry:Lcom/microsoft/sqlserver/jdbc/CekTableEntry;
ifnonnull 2
new java.lang.AssertionError
dup
ldc "md.EncryptionInfo should not be null in DecryptSymmetricKey."
invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
athrow
2: StackMap locals:
StackMap stack:
getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
ifne 3
aload 0
getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cekTableEntry:Lcom/microsoft/sqlserver/jdbc/CekTableEntry;
getfield com.microsoft.sqlserver.jdbc.CekTableEntry.columnEncryptionKeyValues:Ljava/util/List;
ifnonnull 3
new java.lang.AssertionError
dup
ldc "md.EncryptionInfo.ColumnEncryptionKeyValues should not be null in DecryptSymmetricKey."
invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
athrow
3: StackMap locals:
StackMap stack:
aconst_null
astore 2
start local 2 4: aconst_null
astore 3
start local 3 5: invokestatic com.microsoft.sqlserver.jdbc.SQLServerSymmetricKeyCache.getInstance:()Lcom/microsoft/sqlserver/jdbc/SQLServerSymmetricKeyCache;
astore 4
start local 4 6: aload 0
getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cekTableEntry:Lcom/microsoft/sqlserver/jdbc/CekTableEntry;
getfield com.microsoft.sqlserver.jdbc.CekTableEntry.columnEncryptionKeyValues:Ljava/util/List;
invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
astore 5
start local 5 7: aconst_null
astore 6
start local 6 8: goto 16
9: StackMap locals: com.microsoft.sqlserver.jdbc.CryptoMetadata com.microsoft.sqlserver.jdbc.SQLServerConnection com.microsoft.sqlserver.jdbc.SQLServerSymmetricKey com.microsoft.sqlserver.jdbc.EncryptionKeyInfo com.microsoft.sqlserver.jdbc.SQLServerSymmetricKeyCache java.util.Iterator com.microsoft.sqlserver.jdbc.SQLServerException
StackMap stack:
aload 5
invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
checkcast com.microsoft.sqlserver.jdbc.EncryptionKeyInfo
astore 7
start local 7 10: aload 4
aload 7
aload 1
invokevirtual com.microsoft.sqlserver.jdbc.SQLServerSymmetricKeyCache.getKey:(Lcom/microsoft/sqlserver/jdbc/EncryptionKeyInfo;Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;)Lcom/microsoft/sqlserver/jdbc/SQLServerSymmetricKey;
astore 2
11: aload 2
ifnull 16
12: aload 7
astore 3
13: goto 17
14: StackMap locals: com.microsoft.sqlserver.jdbc.CryptoMetadata com.microsoft.sqlserver.jdbc.SQLServerConnection com.microsoft.sqlserver.jdbc.SQLServerSymmetricKey com.microsoft.sqlserver.jdbc.EncryptionKeyInfo com.microsoft.sqlserver.jdbc.SQLServerSymmetricKeyCache java.util.Iterator com.microsoft.sqlserver.jdbc.SQLServerException com.microsoft.sqlserver.jdbc.EncryptionKeyInfo
StackMap stack: com.microsoft.sqlserver.jdbc.SQLServerException
astore 8
start local 8 15: aload 8
astore 6
end local 8 end local 7 16: StackMap locals:
StackMap stack:
aload 5
invokeinterface java.util.Iterator.hasNext:()Z
ifne 9
17: StackMap locals:
StackMap stack:
aload 2
ifnonnull 23
18: aload 6
ifnull 20
19: aload 6
athrow
20: StackMap locals:
StackMap stack:
new com.microsoft.sqlserver.jdbc.SQLServerException
dup
aconst_null
ldc "R_CEKDecryptionFailed"
invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
aconst_null
iconst_0
21: iconst_0
22: invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;IZ)V
athrow
23: StackMap locals:
StackMap stack:
aload 0
aconst_null
putfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cipherAlgorithm:Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithm;
24: aconst_null
astore 7
start local 7 25: aload 0
getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cipherAlgorithmId:B
aload 0
getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cipherAlgorithmName:Ljava/lang/String;
invokestatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.ValidateAndGetEncryptionAlgorithmName:(BLjava/lang/String;)Ljava/lang/String;
astore 8
start local 8 26: invokestatic com.microsoft.sqlserver.jdbc.SQLServerEncryptionAlgorithmFactoryList.getInstance:()Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithmFactoryList;
aload 2
aload 0
getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.encryptionType:Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionType;
27: aload 8
28: invokevirtual com.microsoft.sqlserver.jdbc.SQLServerEncryptionAlgorithmFactoryList.getAlgorithm:(Lcom/microsoft/sqlserver/jdbc/SQLServerSymmetricKey;Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionType;Ljava/lang/String;)Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithm;
astore 7
29: getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
ifne 30
aload 7
ifnonnull 30
new java.lang.AssertionError
dup
ldc "Cipher algorithm cannot be null in DecryptSymmetricKey"
invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
athrow
30: StackMap locals: com.microsoft.sqlserver.jdbc.SQLServerEncryptionAlgorithm java.lang.String
StackMap stack:
aload 0
aload 7
putfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cipherAlgorithm:Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithm;
31: aload 0
aload 3
putfield com.microsoft.sqlserver.jdbc.CryptoMetadata.encryptionKeyInfo:Lcom/microsoft/sqlserver/jdbc/EncryptionKeyInfo;
32: return
end local 8 end local 7 end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 33 0 md Lcom/microsoft/sqlserver/jdbc/CryptoMetadata;
0 33 1 connection Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;
4 33 2 symKey Lcom/microsoft/sqlserver/jdbc/SQLServerSymmetricKey;
5 33 3 encryptionkeyInfoChosen Lcom/microsoft/sqlserver/jdbc/EncryptionKeyInfo;
6 33 4 cache Lcom/microsoft/sqlserver/jdbc/SQLServerSymmetricKeyCache;
7 33 5 it Ljava/util/Iterator<Lcom/microsoft/sqlserver/jdbc/EncryptionKeyInfo;>;
8 33 6 lastException Lcom/microsoft/sqlserver/jdbc/SQLServerException;
10 16 7 keyInfo Lcom/microsoft/sqlserver/jdbc/EncryptionKeyInfo;
15 16 8 e Lcom/microsoft/sqlserver/jdbc/SQLServerException;
25 33 7 cipherAlgorithm Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithm;
26 33 8 algorithmName Ljava/lang/String;
Exception table:
from to target type
10 13 14 Class com.microsoft.sqlserver.jdbc.SQLServerException
Exceptions:
throws com.microsoft.sqlserver.jdbc.SQLServerException
MethodParameters:
Name Flags
md
connection
static byte[] decryptWithKey(byte[], com.microsoft.sqlserver.jdbc.CryptoMetadata, com.microsoft.sqlserver.jdbc.SQLServerConnection);
descriptor: ([BLcom/microsoft/sqlserver/jdbc/CryptoMetadata;Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;)[B
flags: (0x0008) ACC_STATIC
Code:
stack=7, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 2
invokevirtual com.microsoft.sqlserver.jdbc.SQLServerConnection.getTrustedServerNameAE:()Ljava/lang/String;
astore 3
start local 3 1: getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
ifne 2
aload 3
ifnonnull 2
new java.lang.AssertionError
dup
ldc "serverName should not be null in DecryptWithKey."
invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
athrow
2: StackMap locals: java.lang.String
StackMap stack:
aload 1
invokevirtual com.microsoft.sqlserver.jdbc.CryptoMetadata.IsAlgorithmInitialized:()Z
ifne 4
3: aload 1
aload 2
invokestatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.decryptSymmetricKey:(Lcom/microsoft/sqlserver/jdbc/CryptoMetadata;Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;)V
4: StackMap locals:
StackMap stack:
getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.$assertionsDisabled:Z
ifne 5
aload 1
invokevirtual com.microsoft.sqlserver.jdbc.CryptoMetadata.IsAlgorithmInitialized:()Z
ifne 5
new java.lang.AssertionError
dup
ldc "Decryption Algorithm is not initialized"
invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
athrow
5: StackMap locals:
StackMap stack:
aload 1
getfield com.microsoft.sqlserver.jdbc.CryptoMetadata.cipherAlgorithm:Lcom/microsoft/sqlserver/jdbc/SQLServerEncryptionAlgorithm;
aload 0
invokevirtual com.microsoft.sqlserver.jdbc.SQLServerEncryptionAlgorithm.decryptData:([B)[B
astore 4
start local 4 6: aload 4
ifnonnull 8
7: new com.microsoft.sqlserver.jdbc.SQLServerException
dup
aconst_null
ldc "R_PlainTextNullAE"
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
8: StackMap locals: byte[]
StackMap stack:
aload 4
areturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 cipherText [B
0 9 1 md Lcom/microsoft/sqlserver/jdbc/CryptoMetadata;
0 9 2 connection Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;
1 9 3 serverName Ljava/lang/String;
6 9 4 plainText [B
Exceptions:
throws com.microsoft.sqlserver.jdbc.SQLServerException
MethodParameters:
Name Flags
cipherText
md
connection
static void verifyColumnMasterKeyMetadata(com.microsoft.sqlserver.jdbc.SQLServerConnection, java.lang.String, java.lang.String, java.lang.String, boolean, byte[]);
descriptor: (Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z[B)V
flags: (0x0008) ACC_STATIC
Code:
stack=4, locals=10, args_size=6
start local 0 start local 1 start local 2 start local 3 start local 4 start local 5 0: iconst_1
anewarray java.lang.Boolean
astore 6
start local 6 1: aload 3
2: aload 6
3: invokestatic com.microsoft.sqlserver.jdbc.SQLServerConnection.getColumnEncryptionTrustedMasterKeyPaths:(Ljava/lang/String;[Ljava/lang/Boolean;)Ljava/util/List;
astore 7
start local 7 4: aload 6
iconst_0
aaload
invokevirtual java.lang.Boolean.booleanValue:()Z
ifeq 9
5: aload 7
ifnull 6
aload 7
invokeinterface java.util.List.size:()I
ifeq 6
aload 7
aload 2
invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
ifne 9
6: StackMap locals: java.lang.Boolean[] java.util.List
StackMap stack:
new java.text.MessageFormat
dup
ldc "R_UntrustedKeyPath"
invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
invokespecial java.text.MessageFormat.<init>:(Ljava/lang/String;)V
astore 8
start local 8 7: iconst_2
anewarray java.lang.Object
dup
iconst_0
aload 2
aastore
dup
iconst_1
aload 3
aastore
astore 9
start local 9 8: new com.microsoft.sqlserver.jdbc.SQLServerException
dup
aload 8
aload 9
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 9 end local 8 9: StackMap locals:
StackMap stack:
aload 0
aload 1
invokevirtual com.microsoft.sqlserver.jdbc.SQLServerConnection.getColumnEncryptionKeyStoreProvider:(Ljava/lang/String;)Lcom/microsoft/sqlserver/jdbc/SQLServerColumnEncryptionKeyStoreProvider;
aload 2
10: iload 4
aload 5
11: invokevirtual com.microsoft.sqlserver.jdbc.SQLServerColumnEncryptionKeyStoreProvider.verifyColumnMasterKeyMetadata:(Ljava/lang/String;Z[B)Z
12: ifne 14
13: new com.microsoft.sqlserver.jdbc.SQLServerException
dup
ldc "R_VerifySignature"
invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
aconst_null
invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
14: StackMap locals:
StackMap stack:
return
end local 7 end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 15 0 connection Lcom/microsoft/sqlserver/jdbc/SQLServerConnection;
0 15 1 keyStoreName Ljava/lang/String;
0 15 2 keyPath Ljava/lang/String;
0 15 3 serverName Ljava/lang/String;
0 15 4 isEnclaveEnabled Z
0 15 5 CMKSignature [B
1 15 6 hasEntry [Ljava/lang/Boolean;
4 15 7 trustedKeyPaths Ljava/util/List<Ljava/lang/String;>;
7 9 8 form Ljava/text/MessageFormat;
8 9 9 msgArgs [Ljava/lang/Object;
Exceptions:
throws com.microsoft.sqlserver.jdbc.SQLServerException
MethodParameters:
Name Flags
connection
keyStoreName
keyPath
serverName
isEnclaveEnabled
CMKSignature
static com.microsoft.sqlserver.jdbc.SqlFedAuthToken getMSIAuthToken(java.lang.String, java.lang.String);
descriptor: (Ljava/lang/String;Ljava/lang/String;)Lcom/microsoft/sqlserver/jdbc/SqlFedAuthToken;
flags: (0x0008) ACC_STATIC
Code:
stack=6, locals=22, args_size=2
start local 0 start local 1 0: new java.util.ArrayList
dup
invokespecial java.util.ArrayList.<init>:()V
astore 2
start local 2 1: new java.lang.StringBuilder
dup
invokespecial java.lang.StringBuilder.<init>:()V
astore 3
start local 3 2: iconst_1
istore 4
start local 4 3: iconst_1
istore 5
start local 5 4: ldc "IDENTITY_ENDPOINT"
invokestatic java.lang.System.getenv:(Ljava/lang/String;)Ljava/lang/String;
astore 6
start local 6 5: aload 6
ifnull 6
aload 6
invokevirtual java.lang.String.trim:()Ljava/lang/String;
invokevirtual java.lang.String.isEmpty:()Z
ifeq 7
6: StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String
StackMap stack:
ldc "MSI_ENDPOINT"
invokestatic java.lang.System.getenv:(Ljava/lang/String;)Ljava/lang/String;
astore 6
7: StackMap locals:
StackMap stack:
ldc "IDENTITY_HEADER"
invokestatic java.lang.System.getenv:(Ljava/lang/String;)Ljava/lang/String;
astore 7
start local 7 8: aload 7
ifnull 9
aload 7
invokevirtual java.lang.String.trim:()Ljava/lang/String;
invokevirtual java.lang.String.isEmpty:()Z
ifeq 10
9: StackMap locals: java.lang.String
StackMap stack:
ldc "MSI_SECRET"
invokestatic java.lang.System.getenv:(Ljava/lang/String;)Ljava/lang/String;
astore 7
10: StackMap locals:
StackMap stack:
aload 6
ifnull 13
aload 6
invokevirtual java.lang.String.isEmpty:()Z
ifne 13
aload 7
ifnull 13
11: aload 7
invokevirtual java.lang.String.isEmpty:()Z
ifne 13
12: iconst_1
goto 14
StackMap locals:
StackMap stack:
13: iconst_0
StackMap locals:
StackMap stack: int
14: istore 8
start local 8 15: iload 8
ifeq 18
16: aload 3
aload 6
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
ldc "?api-version=2019-08-01&resource="
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload 0
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
pop
17: goto 25
18: StackMap locals: int
StackMap stack:
aload 3
ldc "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
ldc "&resource="
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload 0
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
pop
19: bipush 20
istore 5
20: iconst_0
istore 9
start local 9 21: goto 24
22: StackMap locals: int
StackMap stack:
aload 2
iconst_1
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
pop
23: iinc 9 1
StackMap locals:
StackMap stack:
24: iload 9
iload 5
if_icmplt 22
end local 9 25: StackMap locals:
StackMap stack:
aload 1
ifnull 110
aload 1
invokevirtual java.lang.String.isEmpty:()Z
ifne 110
26: aload 3
ldc "&client_id="
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload 1
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
pop
27: goto 110
28: StackMap locals:
StackMap stack:
aconst_null
astore 9
start local 9 29: new java.net.URL
dup
aload 3
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokespecial java.net.URL.<init>:(Ljava/lang/String;)V
invokevirtual java.net.URL.openConnection:()Ljava/net/URLConnection;
checkcast java.net.HttpURLConnection
astore 9
30: aload 9
ldc "GET"
invokevirtual java.net.HttpURLConnection.setRequestMethod:(Ljava/lang/String;)V
31: iload 8
ifeq 36
32: aload 9
ldc "X-IDENTITY-HEADER"
aload 7
invokevirtual java.net.HttpURLConnection.setRequestProperty:(Ljava/lang/String;Ljava/lang/String;)V
33: getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.connectionlogger:Ljava/util/logging/Logger;
getstatic java.util.logging.Level.FINER:Ljava/util/logging/Level;
invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
ifeq 39
34: getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.connectionlogger:Ljava/util/logging/Logger;
new java.lang.StringBuilder
dup
ldc "Using Azure Function/App Service Managed Identity auth: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 3
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokevirtual java.util.logging.Logger.finer:(Ljava/lang/String;)V
35: goto 39
36: StackMap locals: java.net.HttpURLConnection
StackMap stack:
aload 9
ldc "Metadata"
ldc "true"
invokevirtual java.net.HttpURLConnection.setRequestProperty:(Ljava/lang/String;Ljava/lang/String;)V
37: getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.connectionlogger:Ljava/util/logging/Logger;
getstatic java.util.logging.Level.FINER:Ljava/util/logging/Level;
invokevirtual java.util.logging.Logger.isLoggable:(Ljava/util/logging/Level;)Z
ifeq 39
38: getstatic com.microsoft.sqlserver.jdbc.SQLServerSecurityUtility.connectionlogger:Ljava/util/logging/Logger;
new java.lang.StringBuilder
dup
ldc "Using Azure Managed Identity auth: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 3
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokevirtual java.util.logging.Logger.finer:(Ljava/lang/String;)V
39: StackMap locals:
StackMap stack:
aload 9
invokevirtual java.net.HttpURLConnection.connect:()V
40: aconst_null
astore 10
aconst_null
astore 11
41: aload 9
invokevirtual java.net.HttpURLConnection.getInputStream:()Ljava/io/InputStream;
astore 12
start local 12 42: new java.io.BufferedReader
dup
new java.io.InputStreamReader
dup
aload 12
getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
invokespecial java.io.InputStreamReader.<init>:(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
bipush 100
invokespecial java.io.BufferedReader.<init>:(Ljava/io/Reader;I)V
astore 13
start local 13 43: new java.lang.StringBuilder
dup
aload 13
invokevirtual java.io.BufferedReader.readLine:()Ljava/lang/String;
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
astore 14
start local 14 44: aload 14
ldc "\"access_token\":\""
invokevirtual java.lang.StringBuilder.indexOf:(Ljava/lang/String;)I
45: ldc "\"access_token\":\""
invokevirtual java.lang.String.length:()I
46: iadd
istore 15
start local 15 47: aload 14
iload 15
aload 14
ldc "\""
iload 15
iconst_1
iadd
invokevirtual java.lang.StringBuilder.indexOf:(Ljava/lang/String;I)I
invokevirtual java.lang.StringBuilder.substring:(II)Ljava/lang/String;
astore 16
start local 16 48: new java.util.Calendar$Builder
dup
invokespecial java.util.Calendar$Builder.<init>:()V
new java.util.Date
dup
invokespecial java.util.Date.<init>:()V
invokevirtual java.util.Calendar$Builder.setInstant:(Ljava/util/Date;)Ljava/util/Calendar$Builder;
invokevirtual java.util.Calendar$Builder.build:()Ljava/util/Calendar;
astore 17
start local 17 49: iload 8
ifeq 55
50: aload 14
51: ldc "\"expires_on\":\""
invokevirtual java.lang.StringBuilder.indexOf:(Ljava/lang/String;)I
52: ldc "\"expires_on\":\""
invokevirtual java.lang.String.length:()I
53: iadd
istore 18
start local 18 54: goto 59
end local 18 55: StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection java.lang.Throwable java.lang.Throwable java.io.InputStream java.io.BufferedReader java.lang.StringBuilder int java.lang.String java.util.Calendar
StackMap stack:
aload 14
56: ldc "\"expires_in\":\""
invokevirtual java.lang.StringBuilder.indexOf:(Ljava/lang/String;)I
57: ldc "\"expires_in\":\""
invokevirtual java.lang.String.length:()I
58: iadd
istore 18
start local 18 59: StackMap locals: int
StackMap stack:
aload 14
iload 18
60: aload 14
ldc "\""
iload 18
iconst_1
iadd
invokevirtual java.lang.StringBuilder.indexOf:(Ljava/lang/String;I)I
61: invokevirtual java.lang.StringBuilder.substring:(II)Ljava/lang/String;
astore 19
start local 19 62: aload 17
bipush 13
aload 19
invokestatic java.lang.Integer.parseInt:(Ljava/lang/String;)I
invokevirtual java.util.Calendar.add:(II)V
63: new com.microsoft.sqlserver.jdbc.SqlFedAuthToken
dup
aload 16
aload 17
invokevirtual java.util.Calendar.getTime:()Ljava/util/Date;
invokespecial com.microsoft.sqlserver.jdbc.SqlFedAuthToken.<init>:(Ljava/lang/String;Ljava/util/Date;)V
astore 21
64: aload 12
ifnull 65
aload 12
invokevirtual java.io.InputStream.close:()V
65: StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection java.lang.Throwable java.lang.Throwable java.io.InputStream java.io.BufferedReader java.lang.StringBuilder int java.lang.String java.util.Calendar int java.lang.String top com.microsoft.sqlserver.jdbc.SqlFedAuthToken
StackMap stack:
aload 9
ifnull 67
66: aload 9
invokevirtual java.net.HttpURLConnection.disconnect:()V
67: StackMap locals:
StackMap stack:
aload 21
areturn
end local 19 end local 18 end local 17 end local 16 end local 15 end local 14 end local 13 StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection java.lang.Throwable java.lang.Throwable java.io.InputStream
StackMap stack: java.lang.Throwable
68: astore 10
69: aload 12
ifnull 70
aload 12
invokevirtual java.io.InputStream.close:()V
end local 12 StackMap locals:
StackMap stack:
70: aload 10
athrow
StackMap locals:
StackMap stack: java.lang.Throwable
71: astore 11
aload 10
ifnonnull 72
aload 11
astore 10
goto 73
StackMap locals:
StackMap stack:
72: aload 10
aload 11
if_acmpeq 73
aload 10
aload 11
invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
StackMap locals:
StackMap stack:
73: aload 10
athrow
74: StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection
StackMap stack: java.lang.Exception
pop
75: iinc 4 1
76: iload 4
iload 5
if_icmple 80
77: aload 9
ifnull 111
78: aload 9
invokevirtual java.net.HttpURLConnection.disconnect:()V
79: goto 111
80: StackMap locals:
StackMap stack:
aload 9
invokevirtual java.net.HttpURLConnection.getResponseCode:()I
istore 10
start local 10 81: sipush 410
iload 10
if_icmpeq 84
sipush 429
iload 10
if_icmpeq 84
sipush 404
iload 10
if_icmpeq 84
82: sipush 500
iload 10
if_icmpgt 93
83: sipush 599
iload 10
if_icmplt 93
84: StackMap locals: int
StackMap stack:
aload 2
invokestatic java.util.concurrent.ThreadLocalRandom.current:()Ljava/util/concurrent/ThreadLocalRandom;
iload 4
iconst_1
isub
invokevirtual java.util.concurrent.ThreadLocalRandom.nextInt:(I)I
invokeinterface java.util.List.get:(I)Ljava/lang/Object;
checkcast java.lang.Integer
invokevirtual java.lang.Integer.intValue:()I
istore 11
start local 11 85: iload 10
sipush 410
if_icmpne 87
86: iload 11
ldc 70000
if_icmpge 87
ldc 70000
goto 88
87: StackMap locals: int
StackMap stack:
iload 11
88: StackMap locals:
StackMap stack: int
istore 11
89: iload 11
i2l
invokestatic java.lang.Thread.sleep:(J)V
end local 11 90: goto 104
StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection int
StackMap stack: java.lang.InterruptedException
91: astore 11
start local 11 92: new java.lang.RuntimeException
dup
aload 11
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
athrow
end local 11 93: StackMap locals:
StackMap stack:
aload 1
ifnull 97
aload 1
invokevirtual java.lang.String.isEmpty:()Z
ifne 97
94: new com.microsoft.sqlserver.jdbc.SQLServerException
dup
95: ldc "R_MSITokenFailureImdsClientId"
invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
aconst_null
96: invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
97: StackMap locals:
StackMap stack:
new com.microsoft.sqlserver.jdbc.SQLServerException
dup
ldc "R_MSITokenFailureImds"
invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
98: aconst_null
99: invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
end local 10 100: StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection
StackMap stack: java.io.IOException
pop
101: new com.microsoft.sqlserver.jdbc.SQLServerException
dup
ldc "R_MSITokenFailureUnexpected"
invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
102: aconst_null
103: invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
104: StackMap locals:
StackMap stack:
aload 9
ifnull 110
105: aload 9
invokevirtual java.net.HttpURLConnection.disconnect:()V
goto 110
106: StackMap locals:
StackMap stack: java.lang.Throwable
astore 20
107: aload 9
ifnull 109
108: aload 9
invokevirtual java.net.HttpURLConnection.disconnect:()V
109: StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int java.net.HttpURLConnection top top top top top top top top top top java.lang.Throwable
StackMap stack:
aload 20
athrow
end local 9 110: StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int
StackMap stack:
iload 4
iload 5
if_icmple 28
111: StackMap locals:
StackMap stack:
iload 4
iload 5
if_icmple 117
112: new com.microsoft.sqlserver.jdbc.SQLServerException
dup
113: iload 8
ifeq 114
ldc "R_MSITokenFailureEndpoint"
goto 115
StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int
StackMap stack: new 112 new 112
114: ldc "R_MSITokenFailureImds"
StackMap locals: java.lang.String java.lang.String java.util.List java.lang.StringBuilder int int java.lang.String java.lang.String int
StackMap stack: new 112 new 112 java.lang.String
115: invokestatic com.microsoft.sqlserver.jdbc.SQLServerException.getErrString:(Ljava/lang/String;)Ljava/lang/String;
aconst_null
116: invokespecial com.microsoft.sqlserver.jdbc.SQLServerException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
117: StackMap locals:
StackMap stack:
aconst_null
areturn
end local 8 end local 7 end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 118 0 resource Ljava/lang/String;
0 118 1 msiClientId Ljava/lang/String;
1 118 2 retrySlots Ljava/util/List<Ljava/lang/Integer;>;
2 118 3 urlString Ljava/lang/StringBuilder;
3 118 4 retry I
4 118 5 maxRetry I
5 118 6 identityEndpoint Ljava/lang/String;
8 118 7 identityHeader Ljava/lang/String;
15 118 8 isAzureFunction Z
21 25 9 x I
29 110 9 connection Ljava/net/HttpURLConnection;
42 70 12 stream Ljava/io/InputStream;
43 68 13 reader Ljava/io/BufferedReader;
44 68 14 result Ljava/lang/StringBuilder;
47 68 15 startIndex_AT I
48 68 16 accessToken Ljava/lang/String;
49 68 17 cal Ljava/util/Calendar;
54 55 18 startIndex_ATX I
59 68 18 startIndex_ATX I
62 68 19 accessTokenExpiry Ljava/lang/String;
81 100 10 responseCode I
85 90 11 retryTimeoutInMs I
92 93 11 ex Ljava/lang/InterruptedException;
Exception table:
from to target type
42 64 68 any
41 65 71 any
68 71 71 any
29 65 74 Class java.lang.Exception
68 74 74 Class java.lang.Exception
84 90 91 Class java.lang.InterruptedException
80 100 100 Class java.io.IOException
29 65 106 any
68 77 106 any
80 104 106 any
Exceptions:
throws com.microsoft.sqlserver.jdbc.SQLServerException
MethodParameters:
Name Flags
resource
msiClientId
}
SourceFile: "SQLServerSecurityUtility.java"
InnerClasses:
public Builder = java.util.Calendar$Builder of java.util.Calendar