--TEST-- Try re-encrypting a table with ColumnEncryption set to 'enabled', which should fail. --DESCRIPTION-- This test cycles through $encryptionTypes and $keys, creating an encrypted table each time, then cycles through $targetTypes and $targetKeys to try re-encrypting the table with different combinations of enclave-enabled and non-enclave keys and encryption types. The sequence of operations is the following: 1. Connect with correct attestation information. 2. Create an encrypted table with two columns for each AE-supported data type, one encrypted and one not encrypted. 3. Insert some data. 4. Disconnect and reconnect with ColumnEncryption set to 'enabled'. 5. Test comparison and pattern matching by comparing the results for the encrypted and non-encrypted columns. Equality should work with deterministic encryption as in AE v1, but other computations should fail. 6. Try re-encrypting the table. This should fail. --SKIPIF-- --FILE-- 2000 characters) $splitDataTypes = array_chunk($dataTypes, 5); $encryptionFailed = false; foreach ($splitDataTypes as $split) { $alterQuery = constructAlterQuery($tableName, $colNamesAE, $split, $targetKey, $targetType, $slength); $stmt = sqlsrv_query($conn, $alterQuery); if(!$stmt) { if (!isEnclaveEnabled($key) or !isEnclaveEnabled($targetKey)) { $e = sqlsrv_errors(); checkErrors($e, array('42000', '33543')); $encryptionFailed = true; continue; } else { $e = sqlsrv_errors(); checkErrors($e, array('42000', '33546')); $encryptionFailed = true; continue; } continue; } else { die("Encrypting should have failed with key $targetKey and encryption type $encryptionType!\n"); } } if ($encryptionFailed) { continue; } } } } } echo "Done.\n"; ?> --EXPECT-- Done.