ClickHouse/tests/queries/0_stateless/02124_encrypt_decrypt_nullable.sql
2021-11-24 23:09:50 +03:00

58 lines
2.9 KiB
SQL

-- Tags: no-fasttest
-- Tag no-fasttest: Depends on OpenSSL
-------------------------------------------------------------------------------
-- Validate that encrypt/decrypt (and mysql versions) work against Nullable(String).
-- null gets encrypted/decrypted as null, non-null encrypted/decrypted as usual.
-------------------------------------------------------------------------------
-- using nullIf since that is the easiest way to produce `Nullable(String)` with a `null` value
-----------------------------------------------------------------------------------------------------------------------------------
-- MySQL compatibility
SELECT 'aes_encrypt_mysql';
SELECT aes_encrypt_mysql('aes-256-ecb', CAST(null as Nullable(String)), 'test_key________________________');
WITH 'aes-256-ecb' as mode, 'Hello World!' as plaintext, 'test_key________________________' as key
SELECT hex(aes_encrypt_mysql(mode, toNullable(plaintext), key));
SELECT 'aes_decrypt_mysql';
SELECT aes_decrypt_mysql('aes-256-ecb', CAST(null as Nullable(String)), 'test_key________________________');
WITH 'aes-256-ecb' as mode, unhex('D1B43643E1D0E9390E39BA4EAE150851') as ciphertext, 'test_key________________________' as key
SELECT hex(aes_decrypt_mysql(mode, toNullable(ciphertext), key));
-----------------------------------------------------------------------------------------------------------------------------------
-- encrypt both non-null and null values of Nullable(String)
SELECT 'encrypt';
WITH 'aes-256-ecb' as mode, 'test_key________________________' as key
SELECT mode, encrypt(mode, CAST(null as Nullable(String)), key);
WITH 'aes-256-gcm' as mode, 'test_key________________________' as key, 'test_iv_____' as iv
SELECT mode, encrypt(mode, CAST(null as Nullable(String)), key, iv);
WITH 'aes-256-ecb' as mode, 'test_key________________________' as key
SELECT mode, hex(encrypt(mode, toNullable('Hello World!'), key));
WITH 'aes-256-gcm' as mode, 'test_key________________________' as key, 'test_iv_____' as iv
SELECT mode, hex(encrypt(mode, toNullable('Hello World!'), key, iv));
-----------------------------------------------------------------------------------------------------------------------------------
-- decrypt both non-null and null values of Nullable(String)
SELECT 'decrypt';
WITH 'aes-256-ecb' as mode, 'test_key________________________' as key
SELECT mode, decrypt(mode, CAST(null as Nullable(String)), key);
WITH 'aes-256-gcm' as mode, 'test_key________________________' as key, 'test_iv_____' as iv
SELECT mode, decrypt(mode, CAST(null as Nullable(String)), key, iv);
WITH 'aes-256-ecb' as mode, unhex('D1B43643E1D0E9390E39BA4EAE150851') as ciphertext, 'test_key________________________' as key
SELECT mode, decrypt(mode, toNullable(ciphertext), key);
WITH 'aes-256-gcm' as mode, unhex('219E6478A1A3BB5B686DA4BAD70323F192EFEDCCBBD6F49E78A7E2F6') as ciphertext, 'test_key________________________' as key, 'test_iv_____' as iv
SELECT mode, decrypt(mode, toNullable(ciphertext), key, iv);