private void GetEnclaveSession(string enclaveType, string serverName, string enclaveAttestationUrl, out SqlEnclaveSession sqlEnclaveSession, out long counter, bool throwIfNull) { SqlColumnEncryptionEnclaveProvider sqlColumnEncryptionEnclaveProvider = GetEnclaveProvider(enclaveType); sqlColumnEncryptionEnclaveProvider.GetEnclaveSession(serverName, enclaveAttestationUrl, out sqlEnclaveSession, out counter); if (throwIfNull) { if (sqlEnclaveSession == null) { throw SQL.NullEnclaveSessionDuringQueryExecution(enclaveType, enclaveAttestationUrl); } } }
/// <summary> /// Create a new enclave session /// </summary> /// <param name="enclaveType">enclave type</param> /// <param name="serverName">servername</param> /// <param name="attestationUrl">attestation url for attestation service endpoint</param> /// <param name="attestationInfo">attestation info from SQL Server</param> /// <param name="attestationParameters">attestation parameters</param> internal void CreateEnclaveSession(string enclaveType, string serverName, string attestationUrl, byte[] attestationInfo, SqlEnclaveAttestationParameters attestationParameters) { lock (_lock) { SqlColumnEncryptionEnclaveProvider sqlColumnEncryptionEnclaveProvider = GetEnclaveProvider(enclaveType); long counter; SqlEnclaveSession sqlEnclaveSession = null; sqlColumnEncryptionEnclaveProvider.GetEnclaveSession(serverName, attestationUrl, out sqlEnclaveSession, out counter); if (sqlEnclaveSession != null) { return; } sqlColumnEncryptionEnclaveProvider.CreateEnclaveSession(attestationInfo, attestationParameters.ClientDiffieHellmanKey, attestationUrl, serverName, out sqlEnclaveSession, out counter); if (sqlEnclaveSession == null) { throw SQL.NullEnclaveSessionReturnedFromProvider(enclaveType, attestationUrl); } } }