diff --git a/tests/testflows/aes_encryption/configs/clickhouse/common.xml b/tests/testflows/aes_encryption/configs/clickhouse/common.xml
deleted file mode 100644
index df952b28c8..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse/common.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
- Europe/Moscow
- 0.0.0.0
- /var/lib/clickhouse/
- /var/lib/clickhouse/tmp/
-
diff --git a/tests/testflows/aes_encryption/configs/clickhouse/config.d/logs.xml b/tests/testflows/aes_encryption/configs/clickhouse/config.d/logs.xml
deleted file mode 100644
index bdf1bbc11c..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse/config.d/logs.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
- 3
-
- trace
- /var/log/clickhouse-server/log.log
- /var/log/clickhouse-server/log.err.log
- 1000M
- 10
- /var/log/clickhouse-server/stderr.log
- /var/log/clickhouse-server/stdout.log
-
-
- system
-
- 500
-
-
diff --git a/tests/testflows/aes_encryption/configs/clickhouse/config.d/ports.xml b/tests/testflows/aes_encryption/configs/clickhouse/config.d/ports.xml
deleted file mode 100644
index fbc6cea74c..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse/config.d/ports.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- 8443
- 9440
-
\ No newline at end of file
diff --git a/tests/testflows/aes_encryption/configs/clickhouse/config.d/remote.xml b/tests/testflows/aes_encryption/configs/clickhouse/config.d/remote.xml
deleted file mode 100644
index 51be2a6e8e..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse/config.d/remote.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
-
- true
-
- clickhouse1
- 9000
-
-
- clickhouse2
- 9000
-
-
- clickhouse3
- 9000
-
-
-
-
-
-
- true
-
- clickhouse1
- 9440
- 1
-
-
- clickhouse2
- 9440
- 1
-
-
- clickhouse3
- 9440
- 1
-
-
-
-
-
-
- clickhouse1
- 9000
-
-
-
-
- clickhouse2
- 9000
-
-
-
-
- clickhouse3
- 9000
-
-
-
-
-
-
- clickhouse1
- 9440
- 1
-
-
-
-
- clickhouse2
- 9440
- 1
-
-
-
-
- clickhouse3
- 9440
- 1
-
-
-
-
-
diff --git a/tests/testflows/aes_encryption/configs/clickhouse/config.d/ssl.xml b/tests/testflows/aes_encryption/configs/clickhouse/config.d/ssl.xml
deleted file mode 100644
index ca65ffd5e0..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse/config.d/ssl.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
- /etc/clickhouse-server/ssl/server.crt
- /etc/clickhouse-server/ssl/server.key
- none
- true
-
-
- true
- none
-
- AcceptCertificateHandler
-
-
-
-
diff --git a/tests/testflows/aes_encryption/configs/clickhouse/config.d/storage.xml b/tests/testflows/aes_encryption/configs/clickhouse/config.d/storage.xml
deleted file mode 100644
index 618fd6b6d2..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse/config.d/storage.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
- 1024
-
-
-
-
-
-
- default
-
-
-
-
-
-
-
diff --git a/tests/testflows/aes_encryption/configs/clickhouse/config.d/zookeeper.xml b/tests/testflows/aes_encryption/configs/clickhouse/config.d/zookeeper.xml
deleted file mode 100644
index 96270e7b64..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse/config.d/zookeeper.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
- zookeeper
- 2181
-
- 15000
-
-
diff --git a/tests/testflows/aes_encryption/configs/clickhouse/config.xml b/tests/testflows/aes_encryption/configs/clickhouse/config.xml
deleted file mode 100644
index d34d2c3525..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse/config.xml
+++ /dev/null
@@ -1,436 +0,0 @@
-
-
-
-
-
- trace
- /var/log/clickhouse-server/clickhouse-server.log
- /var/log/clickhouse-server/clickhouse-server.err.log
- 1000M
- 10
-
-
-
- 8123
- 9000
-
-
-
-
-
-
-
-
- /etc/clickhouse-server/server.crt
- /etc/clickhouse-server/server.key
-
- /etc/clickhouse-server/dhparam.pem
- none
- true
- true
- sslv2,sslv3
- true
-
-
-
- true
- true
- sslv2,sslv3
- true
-
-
-
- RejectCertificateHandler
-
-
-
-
-
-
-
-
- 9009
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4096
- 3
-
-
- 100
-
-
-
-
-
- 8589934592
-
-
- 5368709120
-
-
-
- /var/lib/clickhouse/
-
-
- /var/lib/clickhouse/tmp/
-
-
- /var/lib/clickhouse/user_files/
-
-
- /var/lib/clickhouse/access/
-
-
- users.xml
-
-
- default
-
-
-
-
-
- default
-
-
-
-
-
-
-
-
- false
-
-
-
-
-
-
-
- localhost
- 9000
-
-
-
-
-
-
- localhost
- 9000
-
-
-
-
- localhost
- 9000
-
-
-
-
-
-
- localhost
- 9440
- 1
-
-
-
-
-
-
- localhost
- 9000
-
-
-
-
- localhost
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 3600
-
-
-
- 3600
-
-
- 60
-
-
-
-
-
-
-
-
-
- system
-
-
- toYYYYMM(event_date)
-
- 7500
-
-
-
-
- system
-
-
- toYYYYMM(event_date)
- 7500
-
-
-
-
- system
-
- toYYYYMM(event_date)
- 7500
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- *_dictionary.xml
-
-
-
-
-
-
-
-
-
- /clickhouse/task_queue/ddl
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- click_cost
- any
-
- 0
- 3600
-
-
- 86400
- 60
-
-
-
- max
-
- 0
- 60
-
-
- 3600
- 300
-
-
- 86400
- 3600
-
-
-
-
-
- /var/lib/clickhouse/format_schemas/
-
-
-
-
diff --git a/tests/testflows/aes_encryption/configs/clickhouse/ssl/dhparam.pem b/tests/testflows/aes_encryption/configs/clickhouse/ssl/dhparam.pem
deleted file mode 100644
index 2e6cee0798..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse/ssl/dhparam.pem
+++ /dev/null
@@ -1,8 +0,0 @@
------BEGIN DH PARAMETERS-----
-MIIBCAKCAQEAua92DDli13gJ+//ZXyGaggjIuidqB0crXfhUlsrBk9BV1hH3i7fR
-XGP9rUdk2ubnB3k2ejBStL5oBrkHm9SzUFSQHqfDjLZjKoUpOEmuDc4cHvX1XTR5
-Pr1vf5cd0yEncJWG5W4zyUB8k++SUdL2qaeslSs+f491HBLDYn/h8zCgRbBvxhxb
-9qeho1xcbnWeqkN6Kc9bgGozA16P9NLuuLttNnOblkH+lMBf42BSne/TWt3AlGZf
-slKmmZcySUhF8aKfJnLKbkBCFqOtFRh8zBA9a7g+BT/lSANATCDPaAk1YVih2EKb
-dpc3briTDbRsiqg2JKMI7+VdULY9bh3EawIBAg==
------END DH PARAMETERS-----
diff --git a/tests/testflows/aes_encryption/configs/clickhouse/ssl/server.crt b/tests/testflows/aes_encryption/configs/clickhouse/ssl/server.crt
deleted file mode 100644
index 7ade2d9627..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse/ssl/server.crt
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIC/TCCAeWgAwIBAgIJANjx1QSR77HBMA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNV
-BAMMCWxvY2FsaG9zdDAgFw0xODA3MzAxODE2MDhaGA8yMjkyMDUxNDE4MTYwOFow
-FDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAs9uSo6lJG8o8pw0fbVGVu0tPOljSWcVSXH9uiJBwlZLQnhN4SFSFohfI
-4K8U1tBDTnxPLUo/V1K9yzoLiRDGMkwVj6+4+hE2udS2ePTQv5oaMeJ9wrs+5c9T
-4pOtlq3pLAdm04ZMB1nbrEysceVudHRkQbGHzHp6VG29Fw7Ga6YpqyHQihRmEkTU
-7UCYNA+Vk7aDPdMS/khweyTpXYZimaK9f0ECU3/VOeG3fH6Sp2X6FN4tUj/aFXEj
-sRmU5G2TlYiSIUMF2JPdhSihfk1hJVALrHPTU38SOL+GyyBRWdNcrIwVwbpvsvPg
-pryMSNxnpr0AK0dFhjwnupIv5hJIOQIDAQABo1AwTjAdBgNVHQ4EFgQUjPLb3uYC
-kcamyZHK4/EV8jAP0wQwHwYDVR0jBBgwFoAUjPLb3uYCkcamyZHK4/EV8jAP0wQw
-DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAM/ocuDvfPus/KpMVD51j
-4IdlU8R0vmnYLQ+ygzOAo7+hUWP5j0yvq4ILWNmQX6HNvUggCgFv9bjwDFhb/5Vr
-85ieWfTd9+LTjrOzTw4avdGwpX9G+6jJJSSq15tw5ElOIFb/qNA9O4dBiu8vn03C
-L/zRSXrARhSqTW5w/tZkUcSTT+M5h28+Lgn9ysx4Ff5vi44LJ1NnrbJbEAIYsAAD
-+UA+4MBFKx1r6hHINULev8+lCfkpwIaeS8RL+op4fr6kQPxnULw8wT8gkuc8I4+L
-P9gg/xDHB44T3ADGZ5Ib6O0DJaNiToO6rnoaaxs0KkotbvDWvRoxEytSbXKoYjYp
-0g==
------END CERTIFICATE-----
diff --git a/tests/testflows/aes_encryption/configs/clickhouse/ssl/server.key b/tests/testflows/aes_encryption/configs/clickhouse/ssl/server.key
deleted file mode 100644
index f0fb61ac44..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse/ssl/server.key
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCz25KjqUkbyjyn
-DR9tUZW7S086WNJZxVJcf26IkHCVktCeE3hIVIWiF8jgrxTW0ENOfE8tSj9XUr3L
-OguJEMYyTBWPr7j6ETa51LZ49NC/mhox4n3Cuz7lz1Pik62WreksB2bThkwHWdus
-TKxx5W50dGRBsYfMenpUbb0XDsZrpimrIdCKFGYSRNTtQJg0D5WTtoM90xL+SHB7
-JOldhmKZor1/QQJTf9U54bd8fpKnZfoU3i1SP9oVcSOxGZTkbZOViJIhQwXYk92F
-KKF+TWElUAusc9NTfxI4v4bLIFFZ01ysjBXBum+y8+CmvIxI3GemvQArR0WGPCe6
-ki/mEkg5AgMBAAECggEATrbIBIxwDJOD2/BoUqWkDCY3dGevF8697vFuZKIiQ7PP
-TX9j4vPq0DfsmDjHvAPFkTHiTQXzlroFik3LAp+uvhCCVzImmHq0IrwvZ9xtB43f
-7Pkc5P6h1l3Ybo8HJ6zRIY3TuLtLxuPSuiOMTQSGRL0zq3SQ5DKuGwkz+kVjHXUN
-MR2TECFwMHKQ5VLrC+7PMpsJYyOMlDAWhRfUalxC55xOXTpaN8TxNnwQ8K2ISVY5
-212Jz/a4hn4LdwxSz3Tiu95PN072K87HLWx3EdT6vW4Ge5P/A3y+smIuNAlanMnu
-plHBRtpATLiTxZt/n6npyrfQVbYjSH7KWhB8hBHtaQKBgQDh9Cq1c/KtqDtE0Ccr
-/r9tZNTUwBE6VP+3OJeKdEdtsfuxjOCkS1oAjgBJiSDOiWPh1DdoDeVZjPKq6pIu
-Mq12OE3Doa8znfCXGbkSzEKOb2unKZMJxzrz99kXt40W5DtrqKPNb24CNqTiY8Aa
-CjtcX+3weat82VRXvph6U8ltMwKBgQDLxjiQQzNoY7qvg7CwJCjf9qq8jmLK766g
-1FHXopqS+dTxDLM8eJSRrpmxGWJvNeNc1uPhsKsKgotqAMdBUQTf7rSTbt4MyoH5
-bUcRLtr+0QTK9hDWMOOvleqNXha68vATkohWYfCueNsC60qD44o8RZAS6UNy3ENq
-cM1cxqe84wKBgQDKkHutWnooJtajlTxY27O/nZKT/HA1bDgniMuKaz4R4Gr1PIez
-on3YW3V0d0P7BP6PWRIm7bY79vkiMtLEKdiKUGWeyZdo3eHvhDb/3DCawtau8L2K
-GZsHVp2//mS1Lfz7Qh8/L/NedqCQ+L4iWiPnZ3THjjwn3CoZ05ucpvrAMwKBgB54
-nay039MUVq44Owub3KDg+dcIU62U+cAC/9oG7qZbxYPmKkc4oL7IJSNecGHA5SbU
-2268RFdl/gLz6tfRjbEOuOHzCjFPdvAdbysanpTMHLNc6FefJ+zxtgk9sJh0C4Jh
-vxFrw9nTKKzfEl12gQ1SOaEaUIO0fEBGbe8ZpauRAoGAMAlGV+2/K4ebvAJKOVTa
-dKAzQ+TD2SJmeR1HZmKDYddNqwtZlzg3v4ZhCk4eaUmGeC1Bdh8MDuB3QQvXz4Dr
-vOIP4UVaOr+uM+7TgAgVnP4/K6IeJGzUDhX93pmpWhODfdu/oojEKVcpCojmEmS1
-KCBtmIrQLqzMpnBpLNuSY+Q=
------END PRIVATE KEY-----
diff --git a/tests/testflows/aes_encryption/configs/clickhouse/users.xml b/tests/testflows/aes_encryption/configs/clickhouse/users.xml
deleted file mode 100644
index 86b2cd9e1e..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse/users.xml
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
-
-
-
- 10000000000
-
-
- 0
-
-
- random
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
- ::/0
-
-
-
- default
-
-
- default
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 3600
-
-
- 0
- 0
- 0
- 0
- 0
-
-
-
-
diff --git a/tests/testflows/aes_encryption/configs/clickhouse1/config.d/macros.xml b/tests/testflows/aes_encryption/configs/clickhouse1/config.d/macros.xml
deleted file mode 100644
index 6cdcc1b440..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse1/config.d/macros.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
- clickhouse1
- 01
- 01
-
-
diff --git a/tests/testflows/aes_encryption/configs/clickhouse2/config.d/macros.xml b/tests/testflows/aes_encryption/configs/clickhouse2/config.d/macros.xml
deleted file mode 100644
index a114a9ce4a..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse2/config.d/macros.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
- clickhouse2
- 01
- 02
-
-
diff --git a/tests/testflows/aes_encryption/configs/clickhouse3/config.d/macros.xml b/tests/testflows/aes_encryption/configs/clickhouse3/config.d/macros.xml
deleted file mode 100644
index 904a27b017..0000000000
--- a/tests/testflows/aes_encryption/configs/clickhouse3/config.d/macros.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
- clickhouse3
- 01
- 03
-
-
diff --git a/tests/testflows/aes_encryption/docker-compose/clickhouse-service.yml b/tests/testflows/aes_encryption/docker-compose/clickhouse-service.yml
deleted file mode 100644
index 9787b37abb..0000000000
--- a/tests/testflows/aes_encryption/docker-compose/clickhouse-service.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-version: '2.3'
-
-services:
- clickhouse:
- image: yandex/clickhouse-integration-test
- expose:
- - "9000"
- - "9009"
- - "8123"
- volumes:
- - "${CLICKHOUSE_TESTS_DIR}/configs/clickhouse/config.d:/etc/clickhouse-server/config.d"
- - "${CLICKHOUSE_TESTS_DIR}/configs/clickhouse/users.d/:/etc/clickhouse-server/users.d"
- - "${CLICKHOUSE_TESTS_DIR}/configs/clickhouse/ssl:/etc/clickhouse-server/ssl"
- - "${CLICKHOUSE_TESTS_DIR}/configs/clickhouse/config.xml:/etc/clickhouse-server/config.xml"
- - "${CLICKHOUSE_TESTS_DIR}/configs/clickhouse/users.xml:/etc/clickhouse-server/users.xml"
- - "${CLICKHOUSE_TESTS_SERVER_BIN_PATH:-/usr/bin/clickhouse}:/usr/bin/clickhouse"
- - "${CLICKHOUSE_TESTS_ODBC_BRIDGE_BIN_PATH:-/usr/bin/clickhouse-odbc-bridge}:/usr/bin/clickhouse-odbc-bridge"
- entrypoint: bash -c "clickhouse server --config-file=/etc/clickhouse-server/config.xml --log-file=/var/log/clickhouse-server/clickhouse-server.log --errorlog-file=/var/log/clickhouse-server/clickhouse-server.err.log"
- healthcheck:
- test: clickhouse client --query='select 1'
- interval: 3s
- timeout: 2s
- retries: 40
- start_period: 2s
- cap_add:
- - SYS_PTRACE
- security_opt:
- - label:disable
diff --git a/tests/testflows/aes_encryption/docker-compose/docker-compose.yml b/tests/testflows/aes_encryption/docker-compose/docker-compose.yml
deleted file mode 100644
index 04a51ad7ec..0000000000
--- a/tests/testflows/aes_encryption/docker-compose/docker-compose.yml
+++ /dev/null
@@ -1,73 +0,0 @@
-version: '2.3'
-
-services:
- zookeeper:
- extends:
- file: zookeeper-service.yml
- service: zookeeper
-
- mysql1:
- extends:
- file: mysql-service.yml
- service: mysql
- hostname: mysql1
- volumes:
- - "${CLICKHOUSE_TESTS_DIR}/_instances/mysql1/database:/var/lib/mysql"
-
- clickhouse1:
- extends:
- file: clickhouse-service.yml
- service: clickhouse
- hostname: clickhouse1
- volumes:
- - "${CLICKHOUSE_TESTS_DIR}/_instances/clickhouse1/database/:/var/lib/clickhouse/"
- - "${CLICKHOUSE_TESTS_DIR}/_instances/clickhouse1/logs/:/var/log/clickhouse-server/"
- - "${CLICKHOUSE_TESTS_DIR}/configs/clickhouse1/config.d:/etc/clickhouse-server/config.d"
- - "${CLICKHOUSE_TESTS_DIR}/configs/clickhouse1/users.d:/etc/clickhouse-server/users.d"
- depends_on:
- zookeeper:
- condition: service_healthy
-
- clickhouse2:
- extends:
- file: clickhouse-service.yml
- service: clickhouse
- hostname: clickhouse2
- volumes:
- - "${CLICKHOUSE_TESTS_DIR}/_instances/clickhouse2/database/:/var/lib/clickhouse/"
- - "${CLICKHOUSE_TESTS_DIR}/_instances/clickhouse2/logs/:/var/log/clickhouse-server/"
- - "${CLICKHOUSE_TESTS_DIR}/configs/clickhouse2/config.d:/etc/clickhouse-server/config.d"
- - "${CLICKHOUSE_TESTS_DIR}/configs/clickhouse2/users.d:/etc/clickhouse-server/users.d"
- depends_on:
- zookeeper:
- condition: service_healthy
-
- clickhouse3:
- extends:
- file: clickhouse-service.yml
- service: clickhouse
- hostname: clickhouse3
- volumes:
- - "${CLICKHOUSE_TESTS_DIR}/_instances/clickhouse3/database/:/var/lib/clickhouse/"
- - "${CLICKHOUSE_TESTS_DIR}/_instances/clickhouse3/logs/:/var/log/clickhouse-server/"
- - "${CLICKHOUSE_TESTS_DIR}/configs/clickhouse3/config.d:/etc/clickhouse-server/config.d"
- - "${CLICKHOUSE_TESTS_DIR}/configs/clickhouse3/users.d:/etc/clickhouse-server/users.d"
- depends_on:
- zookeeper:
- condition: service_healthy
-
- # dummy service which does nothing, but allows to postpone
- # 'docker-compose up -d' till all dependecies will go healthy
- all_services_ready:
- image: hello-world
- depends_on:
- mysql1:
- condition: service_healthy
- clickhouse1:
- condition: service_healthy
- clickhouse2:
- condition: service_healthy
- clickhouse3:
- condition: service_healthy
- zookeeper:
- condition: service_healthy
diff --git a/tests/testflows/aes_encryption/docker-compose/mysql-service.yml b/tests/testflows/aes_encryption/docker-compose/mysql-service.yml
deleted file mode 100644
index 6924bccfad..0000000000
--- a/tests/testflows/aes_encryption/docker-compose/mysql-service.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-version: '2.3'
-
-services:
- mysql:
- image: mysql:5.7.30
- restart: always
- environment:
- MYSQL_DATABASE: 'db'
- MYSQL_USER: 'user'
- MYSQL_PASSWORD: 'password'
- MYSQL_ROOT_PASSWORD: 'password'
- expose:
- - '3306'
- healthcheck:
- test: mysql -D db -u user --password=password -e "select 1;"
- interval: 3s
- timeout: 2s
- retries: 40
- start_period: 2s
diff --git a/tests/testflows/aes_encryption/docker-compose/zookeeper-service.yml b/tests/testflows/aes_encryption/docker-compose/zookeeper-service.yml
deleted file mode 100644
index f3df33358b..0000000000
--- a/tests/testflows/aes_encryption/docker-compose/zookeeper-service.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-version: '2.3'
-
-services:
- zookeeper:
- image: zookeeper:3.4.12
- expose:
- - "2181"
- environment:
- ZOO_TICK_TIME: 500
- ZOO_MY_ID: 1
- healthcheck:
- test: echo stat | nc localhost 2181
- interval: 3s
- timeout: 2s
- retries: 5
- start_period: 2s
- security_opt:
- - label:disable
diff --git a/tests/testflows/aes_encryption/regression.py b/tests/testflows/aes_encryption/regression.py
deleted file mode 100755
index 06610f6e42..0000000000
--- a/tests/testflows/aes_encryption/regression.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/env python3
-import sys
-from testflows.core import *
-
-append_path(sys.path, "..")
-
-from helpers.cluster import Cluster
-from helpers.argparser import argparser
-from aes_encryption.requirements import *
-
-xfails = {
- # encrypt
- "encrypt/invalid key or iv length for mode/mode=\"'aes-???-gcm'\", key_len=??, iv_len=12, aad=True/iv is too short":
- [(Fail, "known issue")],
- "encrypt/invalid key or iv length for mode/mode=\"'aes-???-gcm'\", key_len=??, iv_len=12, aad=True/iv is too long":
- [(Fail, "known issue")],
- # encrypt_mysql
- "encrypt_mysql/key or iv length for mode/mode=\"'aes-???-ecb'\", key_len=??, iv_len=None":
- [(Fail, "https://altinity.atlassian.net/browse/CH-190")],
- "encrypt_mysql/invalid parameters/iv not valid for mode":
- [(Fail, "https://altinity.atlassian.net/browse/CH-190")],
- "encrypt_mysql/invalid parameters/no parameters":
- [(Fail, "https://altinity.atlassian.net/browse/CH-191")],
- # decrypt_mysql
- "decrypt_mysql/key or iv length for mode/mode=\"'aes-???-ecb'\", key_len=??, iv_len=None:":
- [(Fail, "https://altinity.atlassian.net/browse/CH-190")],
- # compatibility
- "compatibility/insert/encrypt using materialized view/:":
- [(Fail, "https://altinity.atlassian.net/browse/CH-193")],
- "compatibility/insert/decrypt using materialized view/:":
- [(Error, "https://altinity.atlassian.net/browse/CH-193")],
- "compatibility/insert/aes encrypt mysql using materialized view/:":
- [(Fail, "https://altinity.atlassian.net/browse/CH-193")],
- "compatibility/insert/aes decrypt mysql using materialized view/:":
- [(Error, "https://altinity.atlassian.net/browse/CH-193")],
- "compatibility/select/decrypt unique":
- [(Fail, "https://altinity.atlassian.net/browse/CH-193")],
- "compatibility/mysql/:engine/decrypt/mysql_datatype='TEXT'/:":
- [(Fail, "https://altinity.atlassian.net/browse/CH-194")],
- "compatibility/mysql/:engine/decrypt/mysql_datatype='VARCHAR(100)'/:":
- [(Fail, "https://altinity.atlassian.net/browse/CH-194")],
- "compatibility/mysql/:engine/encrypt/mysql_datatype='TEXT'/:":
- [(Fail, "https://altinity.atlassian.net/browse/CH-194")],
- "compatibility/mysql/:engine/encrypt/mysql_datatype='VARCHAR(100)'/:":
- [(Fail, "https://altinity.atlassian.net/browse/CH-194")]
-}
-
-@TestFeature
-@Name("aes encryption")
-@ArgumentParser(argparser)
-@Specifications(SRS_008_ClickHouse_AES_Encryption_Functions)
-@Requirements(
- RQ_SRS008_AES_Functions("1.0"),
- RQ_SRS008_AES_Functions_DifferentModes("1.0")
-)
-@XFails(xfails)
-def regression(self, local, clickhouse_binary_path, stress=None, parallel=None):
- """ClickHouse AES encryption functions regression module.
- """
- nodes = {
- "clickhouse": ("clickhouse1", "clickhouse2", "clickhouse3"),
- }
-
- with Cluster(local, clickhouse_binary_path, nodes=nodes) as cluster:
- self.context.cluster = cluster
-
- Feature(run=load("aes_encryption.tests.encrypt", "feature"), flags=TE)
- Feature(run=load("aes_encryption.tests.decrypt", "feature"), flags=TE)
- Feature(run=load("aes_encryption.tests.encrypt_mysql", "feature"), flags=TE)
- Feature(run=load("aes_encryption.tests.decrypt_mysql", "feature"), flags=TE)
- Feature(run=load("aes_encryption.tests.compatibility.feature", "feature"), flags=TE)
-
-if main():
- regression()
diff --git a/tests/testflows/aes_encryption/requirements/__init__.py b/tests/testflows/aes_encryption/requirements/__init__.py
deleted file mode 100644
index 02f7d43015..0000000000
--- a/tests/testflows/aes_encryption/requirements/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from .requirements import *
diff --git a/tests/testflows/aes_encryption/requirements/requirements.md b/tests/testflows/aes_encryption/requirements/requirements.md
deleted file mode 100644
index 64396f8ecf..0000000000
--- a/tests/testflows/aes_encryption/requirements/requirements.md
+++ /dev/null
@@ -1,1590 +0,0 @@
-# SRS-008 ClickHouse AES Encryption Functions
-# Software Requirements Specification
-
-## Table of Contents
-* 1 [Revision History](#revision-history)
-* 2 [Introduction](#introduction)
-* 3 [Terminology](#terminology)
-* 4 [Requirements](#requirements)
- * 4.1 [Generic](#generic)
- * 4.1.1 [RQ.SRS008.AES.Functions](#rqsrs008aesfunctions)
- * 4.1.2 [RQ.SRS008.AES.Functions.Compatability.MySQL](#rqsrs008aesfunctionscompatabilitymysql)
- * 4.1.3 [RQ.SRS008.AES.Functions.Compatability.Dictionaries](#rqsrs008aesfunctionscompatabilitydictionaries)
- * 4.1.4 [RQ.SRS008.AES.Functions.Compatability.Engine.Database.MySQL](#rqsrs008aesfunctionscompatabilityenginedatabasemysql)
- * 4.1.5 [RQ.SRS008.AES.Functions.Compatability.Engine.Table.MySQL](#rqsrs008aesfunctionscompatabilityenginetablemysql)
- * 4.1.6 [RQ.SRS008.AES.Functions.Compatability.TableFunction.MySQL](#rqsrs008aesfunctionscompatabilitytablefunctionmysql)
- * 4.1.7 [RQ.SRS008.AES.Functions.DifferentModes](#rqsrs008aesfunctionsdifferentmodes)
- * 4.1.8 [RQ.SRS008.AES.Functions.DataFromMultipleSources](#rqsrs008aesfunctionsdatafrommultiplesources)
- * 4.1.9 [RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues](#rqsrs008aesfunctionssuppressoutputofsensitivevalues)
- * 4.1.10 [RQ.SRS008.AES.Functions.InvalidParameters](#rqsrs008aesfunctionsinvalidparameters)
- * 4.1.11 [RQ.SRS008.AES.Functions.MismatchedKey](#rqsrs008aesfunctionsmismatchedkey)
- * 4.1.12 [RQ.SRS008.AES.Functions.Check.Performance](#rqsrs008aesfunctionscheckperformance)
- * 4.1.13 [RQ.SRS008.AES.Function.Check.Performance.BestCase](#rqsrs008aesfunctioncheckperformancebestcase)
- * 4.1.14 [RQ.SRS008.AES.Function.Check.Performance.WorstCase](#rqsrs008aesfunctioncheckperformanceworstcase)
- * 4.1.15 [RQ.SRS008.AES.Functions.Check.Compression](#rqsrs008aesfunctionscheckcompression)
- * 4.1.16 [RQ.SRS008.AES.Functions.Check.Compression.LowCardinality](#rqsrs008aesfunctionscheckcompressionlowcardinality)
- * 4.2 [Specific](#specific)
- * 4.2.1 [RQ.SRS008.AES.Encrypt.Function](#rqsrs008aesencryptfunction)
- * 4.2.2 [RQ.SRS008.AES.Encrypt.Function.Syntax](#rqsrs008aesencryptfunctionsyntax)
- * 4.2.3 [RQ.SRS008.AES.Encrypt.Function.NIST.TestVectors](#rqsrs008aesencryptfunctionnisttestvectors)
- * 4.2.4 [RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText](#rqsrs008aesencryptfunctionparametersplaintext)
- * 4.2.5 [RQ.SRS008.AES.Encrypt.Function.Parameters.Key](#rqsrs008aesencryptfunctionparameterskey)
- * 4.2.6 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode](#rqsrs008aesencryptfunctionparametersmode)
- * 4.2.7 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesencryptfunctionparametersmodevaluesformat)
- * 4.2.8 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesencryptfunctionparametersmodevalueinvalid)
- * 4.2.9 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-ECB](#rqsrs008aesencryptfunctionparametersmodevalueaes-128-ecb)
- * 4.2.10 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-ECB](#rqsrs008aesencryptfunctionparametersmodevalueaes-192-ecb)
- * 4.2.11 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-ECB](#rqsrs008aesencryptfunctionparametersmodevalueaes-256-ecb)
- * 4.2.12 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CBC](#rqsrs008aesencryptfunctionparametersmodevalueaes-128-cbc)
- * 4.2.13 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CBC](#rqsrs008aesencryptfunctionparametersmodevalueaes-192-cbc)
- * 4.2.14 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CBC](#rqsrs008aesencryptfunctionparametersmodevalueaes-256-cbc)
- * 4.2.21 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CFB128](#rqsrs008aesencryptfunctionparametersmodevalueaes-128-cfb128)
- * 4.2.22 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CFB128](#rqsrs008aesencryptfunctionparametersmodevalueaes-192-cfb128)
- * 4.2.23 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CFB128](#rqsrs008aesencryptfunctionparametersmodevalueaes-256-cfb128)
- * 4.2.24 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-OFB](#rqsrs008aesencryptfunctionparametersmodevalueaes-128-ofb)
- * 4.2.25 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-OFB](#rqsrs008aesencryptfunctionparametersmodevalueaes-192-ofb)
- * 4.2.26 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-OFB](#rqsrs008aesencryptfunctionparametersmodevalueaes-256-ofb)
- * 4.2.27 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-GCM](#rqsrs008aesencryptfunctionparametersmodevalueaes-128-gcm)
- * 4.2.28 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-GCM](#rqsrs008aesencryptfunctionparametersmodevalueaes-192-gcm)
- * 4.2.29 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-GCM](#rqsrs008aesencryptfunctionparametersmodevalueaes-256-gcm)
- * 4.2.30 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CTR](#rqsrs008aesencryptfunctionparametersmodevalueaes-128-ctr)
- * 4.2.31 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CTR](#rqsrs008aesencryptfunctionparametersmodevalueaes-192-ctr)
- * 4.2.32 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CTR](#rqsrs008aesencryptfunctionparametersmodevalueaes-256-ctr)
- * 4.2.33 [RQ.SRS008.AES.Encrypt.Function.Parameters.InitializationVector](#rqsrs008aesencryptfunctionparametersinitializationvector)
- * 4.2.34 [RQ.SRS008.AES.Encrypt.Function.Parameters.AdditionalAuthenticatedData](#rqsrs008aesencryptfunctionparametersadditionalauthenticateddata)
- * 4.2.35 [RQ.SRS008.AES.Encrypt.Function.Parameters.ReturnValue](#rqsrs008aesencryptfunctionparametersreturnvalue)
- * 4.2.36 [RQ.SRS008.AES.Encrypt.Function.Key.Length.InvalidLengthError](#rqsrs008aesencryptfunctionkeylengthinvalidlengtherror)
- * 4.2.37 [RQ.SRS008.AES.Encrypt.Function.InitializationVector.Length.InvalidLengthError](#rqsrs008aesencryptfunctioninitializationvectorlengthinvalidlengtherror)
- * 4.2.38 [RQ.SRS008.AES.Encrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesencryptfunctioninitializationvectornotvalidformode)
- * 4.2.39 [RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.NotValidForMode](#rqsrs008aesencryptfunctionadditionalauthenticationdatanotvalidformode)
- * 4.2.40 [RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.Length](#rqsrs008aesencryptfunctionadditionalauthenticationdatalength)
- * 4.2.41 [RQ.SRS008.AES.Encrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-128-ecbkeyandinitializationvectorlength)
- * 4.2.42 [RQ.SRS008.AES.Encrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-192-ecbkeyandinitializationvectorlength)
- * 4.2.43 [RQ.SRS008.AES.Encrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-256-ecbkeyandinitializationvectorlength)
- * 4.2.44 [RQ.SRS008.AES.Encrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-128-cbckeyandinitializationvectorlength)
- * 4.2.45 [RQ.SRS008.AES.Encrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-192-cbckeyandinitializationvectorlength)
- * 4.2.46 [RQ.SRS008.AES.Encrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-256-cbckeyandinitializationvectorlength)
- * 4.2.53 [RQ.SRS008.AES.Encrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-128-cfb128keyandinitializationvectorlength)
- * 4.2.54 [RQ.SRS008.AES.Encrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-192-cfb128keyandinitializationvectorlength)
- * 4.2.55 [RQ.SRS008.AES.Encrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-256-cfb128keyandinitializationvectorlength)
- * 4.2.56 [RQ.SRS008.AES.Encrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-128-ofbkeyandinitializationvectorlength)
- * 4.2.57 [RQ.SRS008.AES.Encrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-192-ofbkeyandinitializationvectorlength)
- * 4.2.58 [RQ.SRS008.AES.Encrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-256-ofbkeyandinitializationvectorlength)
- * 4.2.59 [RQ.SRS008.AES.Encrypt.Function.AES-128-GCM.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-128-gcmkeyandinitializationvectorlength)
- * 4.2.60 [RQ.SRS008.AES.Encrypt.Function.AES-192-GCM.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-192-gcmkeyandinitializationvectorlength)
- * 4.2.61 [RQ.SRS008.AES.Encrypt.Function.AES-256-GCM.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-256-gcmkeyandinitializationvectorlength)
- * 4.2.62 [RQ.SRS008.AES.Encrypt.Function.AES-128-CTR.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-128-ctrkeyandinitializationvectorlength)
- * 4.2.63 [RQ.SRS008.AES.Encrypt.Function.AES-192-CTR.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-192-ctrkeyandinitializationvectorlength)
- * 4.2.64 [RQ.SRS008.AES.Encrypt.Function.AES-256-CTR.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-256-ctrkeyandinitializationvectorlength)
- * 4.2.65 [RQ.SRS008.AES.Decrypt.Function](#rqsrs008aesdecryptfunction)
- * 4.2.66 [RQ.SRS008.AES.Decrypt.Function.Syntax](#rqsrs008aesdecryptfunctionsyntax)
- * 4.2.67 [RQ.SRS008.AES.Decrypt.Function.Parameters.CipherText](#rqsrs008aesdecryptfunctionparametersciphertext)
- * 4.2.68 [RQ.SRS008.AES.Decrypt.Function.Parameters.Key](#rqsrs008aesdecryptfunctionparameterskey)
- * 4.2.69 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode](#rqsrs008aesdecryptfunctionparametersmode)
- * 4.2.70 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesdecryptfunctionparametersmodevaluesformat)
- * 4.2.71 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesdecryptfunctionparametersmodevalueinvalid)
- * 4.2.72 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-ECB](#rqsrs008aesdecryptfunctionparametersmodevalueaes-128-ecb)
- * 4.2.73 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-ECB](#rqsrs008aesdecryptfunctionparametersmodevalueaes-192-ecb)
- * 4.2.74 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-ECB](#rqsrs008aesdecryptfunctionparametersmodevalueaes-256-ecb)
- * 4.2.75 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CBC](#rqsrs008aesdecryptfunctionparametersmodevalueaes-128-cbc)
- * 4.2.76 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CBC](#rqsrs008aesdecryptfunctionparametersmodevalueaes-192-cbc)
- * 4.2.77 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CBC](#rqsrs008aesdecryptfunctionparametersmodevalueaes-256-cbc)
- * 4.2.84 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CFB128](#rqsrs008aesdecryptfunctionparametersmodevalueaes-128-cfb128)
- * 4.2.85 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CFB128](#rqsrs008aesdecryptfunctionparametersmodevalueaes-192-cfb128)
- * 4.2.86 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CFB128](#rqsrs008aesdecryptfunctionparametersmodevalueaes-256-cfb128)
- * 4.2.87 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-OFB](#rqsrs008aesdecryptfunctionparametersmodevalueaes-128-ofb)
- * 4.2.88 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-OFB](#rqsrs008aesdecryptfunctionparametersmodevalueaes-192-ofb)
- * 4.2.89 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-OFB](#rqsrs008aesdecryptfunctionparametersmodevalueaes-256-ofb)
- * 4.2.90 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-GCM](#rqsrs008aesdecryptfunctionparametersmodevalueaes-128-gcm)
- * 4.2.91 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-GCM](#rqsrs008aesdecryptfunctionparametersmodevalueaes-192-gcm)
- * 4.2.92 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-GCM](#rqsrs008aesdecryptfunctionparametersmodevalueaes-256-gcm)
- * 4.2.93 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CTR](#rqsrs008aesdecryptfunctionparametersmodevalueaes-128-ctr)
- * 4.2.94 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CTR](#rqsrs008aesdecryptfunctionparametersmodevalueaes-192-ctr)
- * 4.2.95 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CTR](#rqsrs008aesdecryptfunctionparametersmodevalueaes-256-ctr)
- * 4.2.96 [RQ.SRS008.AES.Decrypt.Function.Parameters.InitializationVector](#rqsrs008aesdecryptfunctionparametersinitializationvector)
- * 4.2.97 [RQ.SRS008.AES.Decrypt.Function.Parameters.AdditionalAuthenticatedData](#rqsrs008aesdecryptfunctionparametersadditionalauthenticateddata)
- * 4.2.98 [RQ.SRS008.AES.Decrypt.Function.Parameters.ReturnValue](#rqsrs008aesdecryptfunctionparametersreturnvalue)
- * 4.2.99 [RQ.SRS008.AES.Decrypt.Function.Key.Length.InvalidLengthError](#rqsrs008aesdecryptfunctionkeylengthinvalidlengtherror)
- * 4.2.100 [RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError](#rqsrs008aesdecryptfunctioninitializationvectorlengthinvalidlengtherror)
- * 4.2.101 [RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesdecryptfunctioninitializationvectornotvalidformode)
- * 4.2.102 [RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.NotValidForMode](#rqsrs008aesdecryptfunctionadditionalauthenticationdatanotvalidformode)
- * 4.2.103 [RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.Length](#rqsrs008aesdecryptfunctionadditionalauthenticationdatalength)
- * 4.2.104 [RQ.SRS008.AES.Decrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-128-ecbkeyandinitializationvectorlength)
- * 4.2.105 [RQ.SRS008.AES.Decrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-192-ecbkeyandinitializationvectorlength)
- * 4.2.106 [RQ.SRS008.AES.Decrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-256-ecbkeyandinitializationvectorlength)
- * 4.2.107 [RQ.SRS008.AES.Decrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-128-cbckeyandinitializationvectorlength)
- * 4.2.108 [RQ.SRS008.AES.Decrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-192-cbckeyandinitializationvectorlength)
- * 4.2.109 [RQ.SRS008.AES.Decrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-256-cbckeyandinitializationvectorlength)
- * 4.2.116 [RQ.SRS008.AES.Decrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-128-cfb128keyandinitializationvectorlength)
- * 4.2.117 [RQ.SRS008.AES.Decrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-192-cfb128keyandinitializationvectorlength)
- * 4.2.118 [RQ.SRS008.AES.Decrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-256-cfb128keyandinitializationvectorlength)
- * 4.2.119 [RQ.SRS008.AES.Decrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-128-ofbkeyandinitializationvectorlength)
- * 4.2.120 [RQ.SRS008.AES.Decrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-192-ofbkeyandinitializationvectorlength)
- * 4.2.121 [RQ.SRS008.AES.Decrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-256-ofbkeyandinitializationvectorlength)
- * 4.2.122 [RQ.SRS008.AES.Decrypt.Function.AES-128-GCM.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-128-gcmkeyandinitializationvectorlength)
- * 4.2.123 [RQ.SRS008.AES.Decrypt.Function.AES-192-GCM.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-192-gcmkeyandinitializationvectorlength)
- * 4.2.124 [RQ.SRS008.AES.Decrypt.Function.AES-256-GCM.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-256-gcmkeyandinitializationvectorlength)
- * 4.2.125 [RQ.SRS008.AES.Decrypt.Function.AES-128-CTR.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-128-ctrkeyandinitializationvectorlength)
- * 4.2.126 [RQ.SRS008.AES.Decrypt.Function.AES-192-CTR.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-192-ctrkeyandinitializationvectorlength)
- * 4.2.127 [RQ.SRS008.AES.Decrypt.Function.AES-256-CTR.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-256-ctrkeyandinitializationvectorlength)
- * 4.3 [MySQL Specific Functions](#mysql-specific-functions)
- * 4.3.1 [RQ.SRS008.AES.MySQL.Encrypt.Function](#rqsrs008aesmysqlencryptfunction)
- * 4.3.2 [RQ.SRS008.AES.MySQL.Encrypt.Function.Syntax](#rqsrs008aesmysqlencryptfunctionsyntax)
- * 4.3.3 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText](#rqsrs008aesmysqlencryptfunctionparametersplaintext)
- * 4.3.4 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key](#rqsrs008aesmysqlencryptfunctionparameterskey)
- * 4.3.5 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode](#rqsrs008aesmysqlencryptfunctionparametersmode)
- * 4.3.6 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesformat)
- * 4.3.7 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesmysqlencryptfunctionparametersmodevalueinvalid)
- * 4.3.8 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-ECB](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-128-ecb)
- * 4.3.9 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-ECB](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-192-ecb)
- * 4.3.10 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-ECB](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-256-ecb)
- * 4.3.11 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CBC](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-128-cbc)
- * 4.3.12 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CBC](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-192-cbc)
- * 4.3.13 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CBC](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-256-cbc)
- * 4.3.20 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CFB128](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-128-cfb128)
- * 4.3.21 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CFB128](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-192-cfb128)
- * 4.3.22 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CFB128](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-256-cfb128)
- * 4.3.23 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-OFB](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-128-ofb)
- * 4.3.24 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-OFB](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-192-ofb)
- * 4.3.25 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-OFB](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-256-ofb)
- * 4.3.26 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-GCM.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-128-gcmerror)
- * 4.3.27 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-GCM.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-192-gcmerror)
- * 4.3.28 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-GCM.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-256-gcmerror)
- * 4.3.29 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CTR.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-128-ctrerror)
- * 4.3.30 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CTR.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-192-ctrerror)
- * 4.3.31 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CTR.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-256-ctrerror)
- * 4.3.32 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.InitializationVector](#rqsrs008aesmysqlencryptfunctionparametersinitializationvector)
- * 4.3.33 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.ReturnValue](#rqsrs008aesmysqlencryptfunctionparametersreturnvalue)
- * 4.3.34 [RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooShortError](#rqsrs008aesmysqlencryptfunctionkeylengthtooshorterror)
- * 4.3.35 [RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooLong](#rqsrs008aesmysqlencryptfunctionkeylengthtoolong)
- * 4.3.36 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooShortError](#rqsrs008aesmysqlencryptfunctioninitializationvectorlengthtooshorterror)
- * 4.3.37 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooLong](#rqsrs008aesmysqlencryptfunctioninitializationvectorlengthtoolong)
- * 4.3.38 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesmysqlencryptfunctioninitializationvectornotvalidformode)
- * 4.3.39 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-128-ecbkeyandinitializationvectorlength)
- * 4.3.40 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-192-ecbkeyandinitializationvectorlength)
- * 4.3.41 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-256-ecbkeyandinitializationvectorlength)
- * 4.3.42 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-128-cbckeyandinitializationvectorlength)
- * 4.3.43 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-192-cbckeyandinitializationvectorlength)
- * 4.3.44 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-256-cbckeyandinitializationvectorlength)
- * 4.3.51 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-128-cfb128keyandinitializationvectorlength)
- * 4.3.52 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-192-cfb128keyandinitializationvectorlength)
- * 4.3.53 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-256-cfb128keyandinitializationvectorlength)
- * 4.3.54 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-128-ofbkeyandinitializationvectorlength)
- * 4.3.55 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-192-ofbkeyandinitializationvectorlength)
- * 4.3.56 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-256-ofbkeyandinitializationvectorlength)
- * 4.3.57 [RQ.SRS008.AES.MySQL.Decrypt.Function](#rqsrs008aesmysqldecryptfunction)
- * 4.3.58 [RQ.SRS008.AES.MySQL.Decrypt.Function.Syntax](#rqsrs008aesmysqldecryptfunctionsyntax)
- * 4.3.59 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.CipherText](#rqsrs008aesmysqldecryptfunctionparametersciphertext)
- * 4.3.60 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key](#rqsrs008aesmysqldecryptfunctionparameterskey)
- * 4.3.61 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode](#rqsrs008aesmysqldecryptfunctionparametersmode)
- * 4.3.62 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesformat)
- * 4.3.63 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesmysqldecryptfunctionparametersmodevalueinvalid)
- * 4.3.64 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-ECB](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-128-ecb)
- * 4.3.65 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-ECB](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-192-ecb)
- * 4.3.66 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-ECB](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-256-ecb)
- * 4.3.67 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CBC](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-128-cbc)
- * 4.3.68 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CBC](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-192-cbc)
- * 4.3.69 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CBC](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-256-cbc)
- * 4.3.76 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CFB128](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-128-cfb128)
- * 4.3.77 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CFB128](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-192-cfb128)
- * 4.3.78 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CFB128](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-256-cfb128)
- * 4.3.79 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-OFB](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-128-ofb)
- * 4.3.80 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-OFB](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-192-ofb)
- * 4.3.81 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-OFB](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-256-ofb)
- * 4.3.82 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-GCM.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-128-gcmerror)
- * 4.3.83 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-GCM.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-192-gcmerror)
- * 4.3.84 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-GCM.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-256-gcmerror)
- * 4.3.85 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CTR.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-128-ctrerror)
- * 4.3.86 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CTR.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-192-ctrerror)
- * 4.3.87 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CTR.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-256-ctrerror)
- * 4.3.88 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.InitializationVector](#rqsrs008aesmysqldecryptfunctionparametersinitializationvector)
- * 4.3.89 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.ReturnValue](#rqsrs008aesmysqldecryptfunctionparametersreturnvalue)
- * 4.3.90 [RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooShortError](#rqsrs008aesmysqldecryptfunctionkeylengthtooshorterror)
- * 4.3.91 [RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooLong](#rqsrs008aesmysqldecryptfunctionkeylengthtoolong)
- * 4.3.92 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooShortError](#rqsrs008aesmysqldecryptfunctioninitializationvectorlengthtooshorterror)
- * 4.3.93 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooLong](#rqsrs008aesmysqldecryptfunctioninitializationvectorlengthtoolong)
- * 4.3.94 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesmysqldecryptfunctioninitializationvectornotvalidformode)
- * 4.3.95 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-128-ecbkeyandinitializationvectorlength)
- * 4.3.96 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-192-ecbkeyandinitializationvectorlength)
- * 4.3.97 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-256-ecbkeyandinitializationvectorlength)
- * 4.3.98 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-128-cbckeyandinitializationvectorlength)
- * 4.3.99 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-192-cbckeyandinitializationvectorlength)
- * 4.3.100 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-256-cbckeyandinitializationvectorlength)
- * 4.3.107 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-128-cfb128keyandinitializationvectorlength)
- * 4.3.108 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-192-cfb128keyandinitializationvectorlength)
- * 4.3.109 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-256-cfb128keyandinitializationvectorlength)
- * 4.3.110 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-128-ofbkeyandinitializationvectorlength)
- * 4.3.111 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-192-ofbkeyandinitializationvectorlength)
- * 4.3.112 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-256-ofbkeyandinitializationvectorlength)
-* 5 [References](#references)
-
-## Revision History
-
-This document is stored in an electronic form using [Git] source control management software
-hosted in a [GitHub Repository].
-All the updates are tracked using the [Revision History].
-
-## Introduction
-
-Users need an ability to encrypt and decrypt column data with tenant specific keys.
-Use cases include protection of sensitive column values and [GDPR] right to forget policies.
-The implementation will support capabilities of the [MySQL aes_encrypt] and [MySQL aes_decrypt]
-functions which encrypt and decrypt values using the [AES] (Advanced Encryption Standard)
-algorithm. This functionality will enable encryption and decryption of data
-accessed on remote [MySQL] servers via [MySQL Dictionary] or [MySQL Database Engine],
-[MySQL Table Engine], or [MySQL Table Function].
-
-## Terminology
-
-* **AES** -
- Advanced Encryption Standard ([AES])
-
-## Requirements
-
-### Generic
-
-#### RQ.SRS008.AES.Functions
-version: 1.0
-
-[ClickHouse] SHALL support [AES] encryption functions to encrypt and decrypt data.
-
-#### RQ.SRS008.AES.Functions.Compatability.MySQL
-version: 1.0
-
-[ClickHouse] SHALL support [AES] encryption functions compatible with [MySQL 5.7].
-
-#### RQ.SRS008.AES.Functions.Compatability.Dictionaries
-version: 1.0
-
-[ClickHouse] SHALL support encryption and decryption of data accessed on remote
-[MySQL] servers using [MySQL Dictionary].
-
-#### RQ.SRS008.AES.Functions.Compatability.Engine.Database.MySQL
-version: 1.0
-
-[ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Database Engine],
-
-#### RQ.SRS008.AES.Functions.Compatability.Engine.Table.MySQL
-version: 1.0
-
-[ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Table Engine].
-
-#### RQ.SRS008.AES.Functions.Compatability.TableFunction.MySQL
-version: 1.0
-
-[ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Table Function].
-
-#### RQ.SRS008.AES.Functions.DifferentModes
-version: 1.0
-
-[ClickHouse] SHALL allow different modes to be supported in a single SQL statement
-using explicit function parameters.
-
-#### RQ.SRS008.AES.Functions.DataFromMultipleSources
-version: 1.0
-
-[ClickHouse] SHALL support handling encryption and decryption of data from multiple sources
-in the `SELECT` statement, including [ClickHouse] [MergeTree] table as well as [MySQL Dictionary],
-[MySQL Database Engine], [MySQL Table Engine], and [MySQL Table Function]
-with possibly different encryption schemes.
-
-#### RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues
-version: 1.0
-
-[ClickHouse] SHALL suppress output of [AES] `string` and `key` parameters to the system log,
-error log, and `query_log` table to prevent leakage of sensitive values.
-
-#### RQ.SRS008.AES.Functions.InvalidParameters
-version: 1.0
-
-[ClickHouse] SHALL return an error when parameters are invalid.
-
-#### RQ.SRS008.AES.Functions.Mismatched.Key
-version: 1.0
-
-[ClickHouse] SHALL return garbage for mismatched keys.
-
-#### RQ.SRS008.AES.Functions.Mismatched.IV
-version: 1.0
-
-[ClickHouse] SHALL return garbage for mismatched initialization vector for the modes that use it.
-
-#### RQ.SRS008.AES.Functions.Mismatched.AAD
-version: 1.0
-
-[ClickHouse] SHALL return garbage for mismatched additional authentication data for the modes that use it.
-
-#### RQ.SRS008.AES.Functions.Mismatched.Mode
-version: 1.0
-
-[ClickHouse] SHALL return an error or garbage for mismatched mode.
-
-#### RQ.SRS008.AES.Functions.Check.Performance
-version: 1.0
-
-Performance of [AES] encryption functions SHALL be measured.
-
-#### RQ.SRS008.AES.Function.Check.Performance.BestCase
-version: 1.0
-
-Performance of [AES] encryption functions SHALL be checked for the best case
-scenario where there is one key, one initialization vector, and one large stream of data.
-
-#### RQ.SRS008.AES.Function.Check.Performance.WorstCase
-version: 1.0
-
-Performance of [AES] encryption functions SHALL be checked for the worst case
-where there are `N` keys, `N` initialization vectors and `N` very small streams of data.
-
-#### RQ.SRS008.AES.Functions.Check.Compression
-version: 1.0
-
-Effect of [AES] encryption on column compression SHALL be measured.
-
-#### RQ.SRS008.AES.Functions.Check.Compression.LowCardinality
-version: 1.0
-
-Effect of [AES] encryption on the compression of a column with [LowCardinality] data type
-SHALL be measured.
-
-### Specific
-
-#### RQ.SRS008.AES.Encrypt.Function
-version: 1.0
-
-[ClickHouse] SHALL support `aes_encrypt` function to encrypt data using [AES].
-
-#### RQ.SRS008.AES.Encrypt.Function.Syntax
-version: 1.0
-
-[ClickHouse] SHALL support the following syntax for the `aes_encrypt` function
-
-```sql
-aes_encrypt(plaintext, key, mode, [iv, aad])
-```
-
-#### RQ.SRS008.AES.Encrypt.Function.NIST.TestVectors
-version: 1.0
-
-[ClickHouse] `aes_encrypt` function output SHALL produce output that matches [NIST test vectors].
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText
-version: 1.0
-
-[ClickHouse] SHALL support `plaintext` accepting any data type as
-the first parameter to the `aes_encrypt` function that SHALL specify the data to be encrypted.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Key
-version: 1.0
-
-[ClickHouse] SHALL support `key` with `String` or `FixedString` data types
-as the second parameter to the `aes_encrypt` function that SHALL specify the encryption key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode
-version: 1.0
-
-[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter
-to the `aes_encrypt` function that SHALL specify encryption key length and block encryption mode.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat
-version: 1.0
-
-[ClickHouse] SHALL support values of the form `aes-[key length]-[mode]` for the `mode` parameter
-of the `aes_encrypt` function where
-the `key_length` SHALL specifies the length of the key and SHALL accept
-`128`, `192`, or `256` as the values and the `mode` SHALL specify the block encryption
-mode and SHALL accept [ECB], [CBC], [CFB128], or [OFB] as well as
-[CTR] and [GCM] as the values. For example, `aes-256-ofb`.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.Invalid
-version: 1.0
-
-[ClickHouse] SHALL return an error if the specified value for the `mode` parameter of the `aes_encrypt`
-function is not valid with the exception where such a mode is supported by the underlying
-[OpenSSL] implementation.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ecb` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ecb` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ecb` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cbc` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cbc` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cbc` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cfb128` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cfb128` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cfb128` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ofb` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ofb` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ofb` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-GCM
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-gcm` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [GCM] block mode encryption with a 128 bit key.
-An `AEAD` 16-byte tag is appended to the resulting ciphertext according to
-the [RFC5116].
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-GCM
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-gcm` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [GCM] block mode encryption with a 192 bit key.
-An `AEAD` 16-byte tag is appended to the resulting ciphertext according to
-the [RFC5116].
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-GCM
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-gcm` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [GCM] block mode encryption with a 256 bit key.
-An `AEAD` 16-byte tag is appended to the resulting ciphertext according to
-the [RFC5116].
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CTR
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ctr` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CTR] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CTR
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ctr` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CTR] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CTR
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ctr` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CTR] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.InitializationVector
-version: 1.0
-
-[ClickHouse] SHALL support `iv` with `String` or `FixedString` data types as the optional fourth
-parameter to the `aes_encrypt` function that SHALL specify the initialization vector for block modes that require
-it.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.AdditionalAuthenticatedData
-version: 1.0
-
-[ClickHouse] SHALL support `aad` with `String` or `FixedString` data types as the optional fifth
-parameter to the `aes_encrypt` function that SHALL specify the additional authenticated data
-for block modes that require it.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.ReturnValue
-version: 1.0
-
-[ClickHouse] SHALL return the encrypted value of the data
-using `String` data type as the result of `aes_encrypt` function.
-
-#### RQ.SRS008.AES.Encrypt.Function.Key.Length.InvalidLengthError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `key` length is not exact for the `aes_encrypt` function for a given block mode.
-
-#### RQ.SRS008.AES.Encrypt.Function.InitializationVector.Length.InvalidLengthError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` length is specified and not of the exact size for the `aes_encrypt` function for a given block mode.
-
-#### RQ.SRS008.AES.Encrypt.Function.InitializationVector.NotValidForMode
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` is specified for the `aes_encrypt` function for a mode that does not need it.
-
-#### RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.NotValidForMode
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `aad` is specified for the `aes_encrypt` function for a mode that does not need it.
-
-#### RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.Length
-version: 1.0
-
-[ClickHouse] SHALL not limit the size of the `aad` parameter passed to the `aes_encrypt` function.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-ecb` and `key` is not 16 bytes
-or `iv` or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-ecb` and `key` is not 24 bytes
-or `iv` or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-ecb` and `key` is not 32 bytes
-or `iv` or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-cbc` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-cbc` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-cbc` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-cfb128` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-cfb128` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-cfb128` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-ofb` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-ofb` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-ofb` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-128-GCM.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-gcm` and `key` is not 16 bytes
-or `iv` is not specified or is less than 8 bytes.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-192-GCM.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-gcm` and `key` is not 24 bytes
-or `iv` is not specified or is less than 8 bytes.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-256-GCM.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-gcm` and `key` is not 32 bytes
-or `iv` is not specified or is less than 8 bytes.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-128-CTR.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-ctr` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-192-CTR.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-ctr` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-256-CTR.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-ctr` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes.
-
-#### RQ.SRS008.AES.Decrypt.Function
-version: 1.0
-
-[ClickHouse] SHALL support `aes_decrypt` function to decrypt data using [AES].
-
-#### RQ.SRS008.AES.Decrypt.Function.Syntax
-version: 1.0
-
-[ClickHouse] SHALL support the following syntax for the `aes_decrypt` function
-
-```sql
-aes_decrypt(ciphertext, key, mode, [iv, aad])
-```
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.CipherText
-version: 1.0
-
-[ClickHouse] SHALL support `ciphertext` accepting `FixedString` or `String` data types as
-the first parameter to the `aes_decrypt` function that SHALL specify the data to be decrypted.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Key
-version: 1.0
-
-[ClickHouse] SHALL support `key` with `String` or `FixedString` data types
-as the second parameter to the `aes_decrypt` function that SHALL specify the encryption key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode
-version: 1.0
-
-[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter
-to the `aes_decrypt` function that SHALL specify encryption key length and block encryption mode.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat
-version: 1.0
-
-[ClickHouse] SHALL support values of the form `aes-[key length]-[mode]` for the `mode` parameter
-of the `aes_decrypt` function where
-the `key_length` SHALL specifies the length of the key and SHALL accept
-`128`, `192`, or `256` as the values and the `mode` SHALL specify the block encryption
-mode and SHALL accept [ECB], [CBC], [CFB128], or [OFB] as well as
-[CTR] and [GCM] as the values. For example, `aes-256-ofb`.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.Invalid
-version: 1.0
-
-[ClickHouse] SHALL return an error if the specified value for the `mode` parameter of the `aes_decrypt`
-function is not valid with the exception where such a mode is supported by the underlying
-[OpenSSL] implementation.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ecb` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ecb` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ecb` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cbc` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cbc` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cbc` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cfb128` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cfb128` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cfb128` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ofb` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ofb` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ofb` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-GCM
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-gcm` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [GCM] block mode encryption with a 128 bit key.
-An [AEAD] 16-byte tag is expected present at the end of the ciphertext according to
-the [RFC5116].
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-GCM
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-gcm` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [GCM] block mode encryption with a 192 bit key.
-An [AEAD] 16-byte tag is expected present at the end of the ciphertext according to
-the [RFC5116].
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-GCM
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-gcm` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [GCM] block mode encryption with a 256 bit key.
-An [AEAD] 16-byte tag is expected present at the end of the ciphertext according to
-the [RFC5116].
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CTR
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ctr` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CTR] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CTR
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ctr` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CTR] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CTR
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ctr` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CTR] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.InitializationVector
-version: 1.0
-
-[ClickHouse] SHALL support `iv` with `String` or `FixedString` data types as the optional fourth
-parameter to the `aes_decrypt` function that SHALL specify the initialization vector for block modes that require
-it.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.AdditionalAuthenticatedData
-version: 1.0
-
-[ClickHouse] SHALL support `aad` with `String` or `FixedString` data types as the optional fifth
-parameter to the `aes_decrypt` function that SHALL specify the additional authenticated data
-for block modes that require it.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.ReturnValue
-version: 1.0
-
-[ClickHouse] SHALL return the decrypted value of the data
-using `String` data type as the result of `aes_decrypt` function.
-
-#### RQ.SRS008.AES.Decrypt.Function.Key.Length.InvalidLengthError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `key` length is not exact for the `aes_decrypt` function for a given block mode.
-
-#### RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` is speficified and the length is not exact for the `aes_decrypt` function for a given block mode.
-
-#### RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` is specified for the `aes_decrypt` function
-for a mode that does not need it.
-
-#### RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.NotValidForMode
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `aad` is specified for the `aes_decrypt` function
-for a mode that does not need it.
-
-#### RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.Length
-version: 1.0
-
-[ClickHouse] SHALL not limit the size of the `aad` parameter passed to the `aes_decrypt` function.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-ecb` and `key` is not 16 bytes
-or `iv` or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-ecb` and `key` is not 24 bytes
-or `iv` or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-ecb` and `key` is not 32 bytes
-or `iv` or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-cbc` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-cbc` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-cbc` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-cfb128` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-cfb128` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-cfb128` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-ofb` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-ofb` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-ofb` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-128-GCM.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-gcm` and `key` is not 16 bytes
-or `iv` is not specified or is less than 8 bytes.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-192-GCM.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-gcm` and `key` is not 24 bytes
-or `iv` is not specified or is less than 8 bytes.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-256-GCM.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-gcm` and `key` is not 32 bytes
-or `iv` is not specified or is less than 8 bytes.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-128-CTR.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-ctr` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-192-CTR.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-ctr` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-256-CTR.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-ctr` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes.
-
-### MySQL Specific Functions
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function
-version: 1.0
-
-[ClickHouse] SHALL support `aes_encrypt_mysql` function to encrypt data using [AES].
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Syntax
-version: 1.0
-
-[ClickHouse] SHALL support the following syntax for the `aes_encrypt_mysql` function
-
-```sql
-aes_encrypt_mysql(plaintext, key, mode, [iv])
-```
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText
-version: 1.0
-
-[ClickHouse] SHALL support `plaintext` accepting any data type as
-the first parameter to the `aes_encrypt_mysql` function that SHALL specify the data to be encrypted.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key
-version: 1.0
-
-[ClickHouse] SHALL support `key` with `String` or `FixedString` data types
-as the second parameter to the `aes_encrypt_mysql` function that SHALL specify the encryption key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode
-version: 1.0
-
-[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter
-to the `aes_encrypt_mysql` function that SHALL specify encryption key length and block encryption mode.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat
-version: 1.0
-
-[ClickHouse] SHALL support values of the form `aes-[key length]-[mode]` for the `mode` parameter
-of the `aes_encrypt_mysql` function where
-the `key_length` SHALL specifies the length of the key and SHALL accept
-`128`, `192`, or `256` as the values and the `mode` SHALL specify the block encryption
-mode and SHALL accept [ECB], [CBC], [CFB128], or [OFB]. For example, `aes-256-ofb`.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.Invalid
-version: 1.0
-
-[ClickHouse] SHALL return an error if the specified value for the `mode` parameter of the `aes_encrypt_mysql`
-function is not valid with the exception where such a mode is supported by the underlying
-[OpenSSL] implementation.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ecb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ecb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ecb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cbc` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cbc` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cbc` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cfb128` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cfb128` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cfb128` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ofb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ofb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ofb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-GCM.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-128-gcm` is specified as the value for the `mode` parameter of the
-`aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-GCM.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-192-gcm` is specified as the value for the `mode` parameter of the
-`aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-GCM.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-256-gcm` is specified as the value for the `mode` parameter of the
-`aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CTR.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-128-ctr` is specified as the value for the `mode` parameter of the
-`aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CTR.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-192-ctr` is specified as the value for the `mode` parameter of the
-`aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CTR.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-256-ctr` is specified as the value for the `mode` parameter of the
-`aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.InitializationVector
-version: 1.0
-
-[ClickHouse] SHALL support `iv` with `String` or `FixedString` data types as the optional fourth
-parameter to the `aes_encrypt_mysql` function that SHALL specify the initialization vector for block modes that require
-it.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.ReturnValue
-version: 1.0
-
-[ClickHouse] SHALL return the encrypted value of the data
-using `String` data type as the result of `aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooShortError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `key` length is less than the minimum for the `aes_encrypt_mysql`
-function for a given block mode.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooLong
-version: 1.0
-
-[ClickHouse] SHALL use folding algorithm specified below if the `key` length is longer than required
-for the `aes_encrypt_mysql` function for a given block mode.
-
-```python
-def fold_key(key, cipher_key_size):
- key = list(key) if not isinstance(key, (list, tuple)) else key
- folded_key = key[:cipher_key_size]
- for i in range(cipher_key_size, len(key)):
- print(i % cipher_key_size, i)
- folded_key[i % cipher_key_size] ^= key[i]
- return folded_key
-```
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooShortError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` length is specified and is less than the minimum
-that is required for the `aes_encrypt_mysql` function for a given block mode.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooLong
-version: 1.0
-
-[ClickHouse] SHALL use the first `N` bytes that are required if the `iv` is specified and
-its length is longer than required for the `aes_encrypt_mysql` function for a given block mode.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.NotValidForMode
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` is specified for the `aes_encrypt_mysql`
-function for a mode that does not need it.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-128-ecb` and `key` is less than 16 bytes
-or `iv` is specified.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-192-ecb` and `key` is less than 24 bytes
-or `iv` is specified.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-256-ecb` and `key` is less than 32 bytes
-or `iv` is specified.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-128-cbc` and `key` is less than 16 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-192-cbc` and `key` is less than 24 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-256-cbc` and `key` is less than 32 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-128-cfb128` and `key` is less than 16 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-192-cfb128` and `key` is less than 24 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-256-cfb128` and `key` is less than 32 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-128-ofb` and `key` is less than 16 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-192-ofb` and `key` is less than 24 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-256-ofb` and `key` is less than 32 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function
-version: 1.0
-
-[ClickHouse] SHALL support `aes_decrypt_mysql` function to decrypt data using [AES].
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Syntax
-version: 1.0
-
-[ClickHouse] SHALL support the following syntax for the `aes_decrypt_mysql` function
-
-```sql
-aes_decrypt_mysql(ciphertext, key, mode, [iv])
-```
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.CipherText
-version: 1.0
-
-[ClickHouse] SHALL support `ciphertext` accepting any data type as
-the first parameter to the `aes_decrypt_mysql` function that SHALL specify the data to be decrypted.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key
-version: 1.0
-
-[ClickHouse] SHALL support `key` with `String` or `FixedString` data types
-as the second parameter to the `aes_decrypt_mysql` function that SHALL specify the encryption key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode
-version: 1.0
-
-[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter
-to the `aes_decrypt_mysql` function that SHALL specify encryption key length and block encryption mode.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat
-version: 1.0
-
-[ClickHouse] SHALL support values of the form `aes-[key length]-[mode]` for the `mode` parameter
-of the `aes_decrypt_mysql` function where
-the `key_length` SHALL specifies the length of the key and SHALL accept
-`128`, `192`, or `256` as the values and the `mode` SHALL specify the block encryption
-mode and SHALL accept [ECB], [CBC], [CFB128], or [OFB]. For example, `aes-256-ofb`.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.Invalid
-version: 1.0
-
-[ClickHouse] SHALL return an error if the specified value for the `mode` parameter of the `aes_decrypt_mysql`
-function is not valid with the exception where such a mode is supported by the underlying
-[OpenSSL] implementation.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ecb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ecb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ecb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cbc` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cbc` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cbc` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cfb128` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cfb128` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cfb128` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ofb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ofb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ofb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-GCM.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-128-gcm` is specified as the value for the `mode` parameter of the
-`aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-GCM.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-192-gcm` is specified as the value for the `mode` parameter of the
-`aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-GCM.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-256-gcm` is specified as the value for the `mode` parameter of the
-`aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CTR.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-128-ctr` is specified as the value for the `mode` parameter of the
-`aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CTR.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-192-ctr` is specified as the value for the `mode` parameter of the
-`aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CTR.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-256-ctr` is specified as the value for the `mode` parameter of the
-`aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.InitializationVector
-version: 1.0
-
-[ClickHouse] SHALL support `iv` with `String` or `FixedString` data types as the optional fourth
-parameter to the `aes_decrypt_mysql` function that SHALL specify the initialization vector for block modes that require
-it.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.ReturnValue
-version: 1.0
-
-[ClickHouse] SHALL return the decrypted value of the data
-using `String` data type as the result of `aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooShortError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `key` length is less than the minimum for the `aes_decrypt_mysql`
-function for a given block mode.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooLong
-version: 1.0
-
-[ClickHouse] SHALL use folding algorithm specified below if the `key` length is longer than required
-for the `aes_decrypt_mysql` function for a given block mode.
-
-```python
-def fold_key(key, cipher_key_size):
- key = list(key) if not isinstance(key, (list, tuple)) else key
- folded_key = key[:cipher_key_size]
- for i in range(cipher_key_size, len(key)):
- print(i % cipher_key_size, i)
- folded_key[i % cipher_key_size] ^= key[i]
- return folded_key
-```
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooShortError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` length is specified and is less than the minimum
-that is required for the `aes_decrypt_mysql` function for a given block mode.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooLong
-version: 1.0
-
-[ClickHouse] SHALL use the first `N` bytes that are required if the `iv` is specified and
-its length is longer than required for the `aes_decrypt_mysql` function for a given block mode.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.NotValidForMode
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` is specified for the `aes_decrypt_mysql`
-function for a mode that does not need it.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-128-ecb` and `key` is less than 16 bytes
-or `iv` is specified.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-192-ecb` and `key` is less than 24 bytes
-or `iv` is specified.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-256-ecb` and `key` is less than 32 bytes
-or `iv` is specified.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-128-cbc` and `key` is less than 16 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-192-cbc` and `key` is less than 24 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-256-cbc` and `key` is less than 32 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-128-cfb128` and `key` is less than 16 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-192-cfb128` and `key` is less than 24 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-256-cfb128` and `key` is less than 32 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-128-ofb` and `key` is less than 16 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-192-ofb` and `key` is less than 24 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-256-ofb` and `key` is less than 32 bytes
-or if specified `iv` is less than 16 bytes.
-
-## References
-
-* **GDPR:** https://en.wikipedia.org/wiki/General_Data_Protection_Regulation
-* **MySQL:** https://www.mysql.com/
-* **AES:** https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
-* **ClickHouse:** https://clickhouse.tech
-* **Git:** https://git-scm.com/
-
-[OpenSSL]: https://www.openssl.org/
-[LowCardinality]: https://clickhouse.tech/docs/en/sql-reference/data-types/lowcardinality/
-[MergeTree]: https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/mergetree/
-[MySQL Database Engine]: https://clickhouse.tech/docs/en/engines/database-engines/mysql/
-[MySQL Table Engine]: https://clickhouse.tech/docs/en/engines/table-engines/integrations/mysql/
-[MySQL Table Function]: https://clickhouse.tech/docs/en/sql-reference/table-functions/mysql/
-[MySQL Dictionary]: https://clickhouse.tech/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources/#dicts-external_dicts_dict_sources-mysql
-[GCM]: https://en.wikipedia.org/wiki/Galois/Counter_Mode
-[CTR]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_(CTR)
-[CBC]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_block_chaining_(CBC)
-[ECB]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_codebook_(ECB)
-[CFB]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_feedback_(CFB)
-[CFB1]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_feedback_(CFB)
-[CFB8]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_feedback_(CFB)
-[CFB128]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_feedback_(CFB)
-[OFB]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Output_feedback_(OFB)
-[GDPR]: https://en.wikipedia.org/wiki/General_Data_Protection_Regulation
-[RFC5116]: https://tools.ietf.org/html/rfc5116#section-5.1
-[MySQL]: https://www.mysql.com/
-[MySQL 5.7]: https://dev.mysql.com/doc/refman/5.7/en/
-[MySQL aes_encrypt]: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_aes-encrypt
-[MySQL aes_decrypt]: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_aes-decrypt
-[AES]: https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
-[ClickHouse]: https://clickhouse.tech
-[GitHub repository]: https://github.com/ClickHouse/ClickHouse/blob/master/tests/testflows/aes_encryption/requirements/requirements.md
-[Revision history]: https://github.com/ClickHouse/ClickHouse/commits/master/tests/testflows/aes_encryption/requirements/requirements.md
-[Git]: https://git-scm.com/
-[NIST test vectors]: https://csrc.nist.gov/Projects/Cryptographic-Algorithm-Validation-Program
diff --git a/tests/testflows/aes_encryption/requirements/requirements.py b/tests/testflows/aes_encryption/requirements/requirements.py
deleted file mode 100644
index 0b4e814bb8..0000000000
--- a/tests/testflows/aes_encryption/requirements/requirements.py
+++ /dev/null
@@ -1,5455 +0,0 @@
-# These requirements were auto generated
-# from software requirements specification (SRS)
-# document by TestFlows v1.6.201216.1172002.
-# Do not edit by hand but re-generate instead
-# using 'tfs requirements generate' command.
-from testflows.core import Specification
-from testflows.core import Requirement
-
-Heading = Specification.Heading
-
-RQ_SRS008_AES_Functions = Requirement(
- name='RQ.SRS008.AES.Functions',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support [AES] encryption functions to encrypt and decrypt data.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.1')
-
-RQ_SRS008_AES_Functions_Compatability_MySQL = Requirement(
- name='RQ.SRS008.AES.Functions.Compatability.MySQL',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support [AES] encryption functions compatible with [MySQL 5.7].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.2')
-
-RQ_SRS008_AES_Functions_Compatability_Dictionaries = Requirement(
- name='RQ.SRS008.AES.Functions.Compatability.Dictionaries',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support encryption and decryption of data accessed on remote\n'
- '[MySQL] servers using [MySQL Dictionary].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.3')
-
-RQ_SRS008_AES_Functions_Compatability_Engine_Database_MySQL = Requirement(
- name='RQ.SRS008.AES.Functions.Compatability.Engine.Database.MySQL',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Database Engine],\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.4')
-
-RQ_SRS008_AES_Functions_Compatability_Engine_Table_MySQL = Requirement(
- name='RQ.SRS008.AES.Functions.Compatability.Engine.Table.MySQL',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Table Engine].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.5')
-
-RQ_SRS008_AES_Functions_Compatability_TableFunction_MySQL = Requirement(
- name='RQ.SRS008.AES.Functions.Compatability.TableFunction.MySQL',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Table Function].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.6')
-
-RQ_SRS008_AES_Functions_DifferentModes = Requirement(
- name='RQ.SRS008.AES.Functions.DifferentModes',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL allow different modes to be supported in a single SQL statement\n'
- 'using explicit function parameters.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.7')
-
-RQ_SRS008_AES_Functions_DataFromMultipleSources = Requirement(
- name='RQ.SRS008.AES.Functions.DataFromMultipleSources',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support handling encryption and decryption of data from multiple sources\n'
- 'in the `SELECT` statement, including [ClickHouse] [MergeTree] table as well as [MySQL Dictionary],\n'
- '[MySQL Database Engine], [MySQL Table Engine], and [MySQL Table Function]\n'
- 'with possibly different encryption schemes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.8')
-
-RQ_SRS008_AES_Functions_SuppressOutputOfSensitiveValues = Requirement(
- name='RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL suppress output of [AES] `string` and `key` parameters to the system log,\n'
- 'error log, and `query_log` table to prevent leakage of sensitive values.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.9')
-
-RQ_SRS008_AES_Functions_InvalidParameters = Requirement(
- name='RQ.SRS008.AES.Functions.InvalidParameters',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when parameters are invalid.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.10')
-
-RQ_SRS008_AES_Functions_Mismatched_Key = Requirement(
- name='RQ.SRS008.AES.Functions.Mismatched.Key',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return garbage for mismatched keys.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.11')
-
-RQ_SRS008_AES_Functions_Mismatched_IV = Requirement(
- name='RQ.SRS008.AES.Functions.Mismatched.IV',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return garbage for mismatched initialization vector for the modes that use it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.12')
-
-RQ_SRS008_AES_Functions_Mismatched_AAD = Requirement(
- name='RQ.SRS008.AES.Functions.Mismatched.AAD',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return garbage for mismatched additional authentication data for the modes that use it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.13')
-
-RQ_SRS008_AES_Functions_Mismatched_Mode = Requirement(
- name='RQ.SRS008.AES.Functions.Mismatched.Mode',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error or garbage for mismatched mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.14')
-
-RQ_SRS008_AES_Functions_Check_Performance = Requirement(
- name='RQ.SRS008.AES.Functions.Check.Performance',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- 'Performance of [AES] encryption functions SHALL be measured.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.15')
-
-RQ_SRS008_AES_Function_Check_Performance_BestCase = Requirement(
- name='RQ.SRS008.AES.Function.Check.Performance.BestCase',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- 'Performance of [AES] encryption functions SHALL be checked for the best case\n'
- 'scenario where there is one key, one initialization vector, and one large stream of data.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.16')
-
-RQ_SRS008_AES_Function_Check_Performance_WorstCase = Requirement(
- name='RQ.SRS008.AES.Function.Check.Performance.WorstCase',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- 'Performance of [AES] encryption functions SHALL be checked for the worst case\n'
- 'where there are `N` keys, `N` initialization vectors and `N` very small streams of data.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.17')
-
-RQ_SRS008_AES_Functions_Check_Compression = Requirement(
- name='RQ.SRS008.AES.Functions.Check.Compression',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- 'Effect of [AES] encryption on column compression SHALL be measured.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.18')
-
-RQ_SRS008_AES_Functions_Check_Compression_LowCardinality = Requirement(
- name='RQ.SRS008.AES.Functions.Check.Compression.LowCardinality',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- 'Effect of [AES] encryption on the compression of a column with [LowCardinality] data type\n'
- 'SHALL be measured.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.1.19')
-
-RQ_SRS008_AES_Encrypt_Function = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes_encrypt` function to encrypt data using [AES].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.1')
-
-RQ_SRS008_AES_Encrypt_Function_Syntax = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Syntax',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support the following syntax for the `aes_encrypt` function\n'
- '\n'
- '```sql\n'
- 'aes_encrypt(plaintext, key, mode, [iv, aad])\n'
- '```\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.2')
-
-RQ_SRS008_AES_Encrypt_Function_NIST_TestVectors = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.NIST.TestVectors',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] `aes_encrypt` function output SHALL produce output that matches [NIST test vectors].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.3')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_PlainText = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `plaintext` accepting any data type as\n'
- 'the first parameter to the `aes_encrypt` function that SHALL specify the data to be encrypted.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.4')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Key = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Key',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `key` with `String` or `FixedString` data types\n'
- 'as the second parameter to the `aes_encrypt` function that SHALL specify the encryption key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.5')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter\n'
- 'to the `aes_encrypt` function that SHALL specify encryption key length and block encryption mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.6')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_ValuesFormat = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support values of the form `aes-[key length]-[mode]` for the `mode` parameter\n'
- 'of the `aes_encrypt` function where\n'
- 'the `key_length` SHALL specifies the length of the key and SHALL accept\n'
- '`128`, `192`, or `256` as the values and the `mode` SHALL specify the block encryption\n'
- 'mode and SHALL accept [ECB], [CBC], [CFB128], or [OFB] as well as\n'
- '[CTR] and [GCM] as the values. For example, `aes-256-ofb`.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.7')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_Invalid = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.Invalid',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the specified value for the `mode` parameter of the `aes_encrypt`\n'
- 'function is not valid with the exception where such a mode is supported by the underlying\n'
- '[OpenSSL] implementation.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.8')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_128_ECB = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-ECB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-ecb` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [ECB] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.9')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_192_ECB = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-ECB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-ecb` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [ECB] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.10')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_256_ECB = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-ECB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-ecb` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [ECB] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.11')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_128_CBC = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CBC',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-cbc` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [CBC] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.12')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_192_CBC = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CBC',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-cbc` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [CBC] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.13')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_256_CBC = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CBC',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-cbc` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [CBC] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.14')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_128_CFB128 = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CFB128',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-cfb128` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.15')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_192_CFB128 = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CFB128',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-cfb128` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.16')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_256_CFB128 = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CFB128',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-cfb128` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.17')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_128_OFB = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-OFB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-ofb` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [OFB] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.18')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_192_OFB = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-OFB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-ofb` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [OFB] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.19')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_256_OFB = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-OFB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-ofb` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [OFB] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.20')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_128_GCM = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-GCM',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-gcm` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [GCM] block mode encryption with a 128 bit key.\n'
- 'An `AEAD` 16-byte tag is appended to the resulting ciphertext according to\n'
- 'the [RFC5116].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.21')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_192_GCM = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-GCM',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-gcm` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [GCM] block mode encryption with a 192 bit key.\n'
- 'An `AEAD` 16-byte tag is appended to the resulting ciphertext according to\n'
- 'the [RFC5116].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.22')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_256_GCM = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-GCM',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-gcm` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [GCM] block mode encryption with a 256 bit key.\n'
- 'An `AEAD` 16-byte tag is appended to the resulting ciphertext according to\n'
- 'the [RFC5116].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.23')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_128_CTR = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CTR',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-ctr` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [CTR] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.24')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_192_CTR = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CTR',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-ctr` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [CTR] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.25')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_256_CTR = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CTR',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-ctr` as the value for the `mode` parameter of the `aes_encrypt` function\n'
- 'and [AES] algorithm SHALL use the [CTR] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.26')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_InitializationVector = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.InitializationVector',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `iv` with `String` or `FixedString` data types as the optional fourth\n'
- 'parameter to the `aes_encrypt` function that SHALL specify the initialization vector for block modes that require\n'
- 'it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.27')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_AdditionalAuthenticatedData = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.AdditionalAuthenticatedData',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aad` with `String` or `FixedString` data types as the optional fifth\n'
- 'parameter to the `aes_encrypt` function that SHALL specify the additional authenticated data\n'
- 'for block modes that require it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.28')
-
-RQ_SRS008_AES_Encrypt_Function_Parameters_ReturnValue = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Parameters.ReturnValue',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return the encrypted value of the data\n'
- 'using `String` data type as the result of `aes_encrypt` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.29')
-
-RQ_SRS008_AES_Encrypt_Function_Key_Length_InvalidLengthError = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.Key.Length.InvalidLengthError',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `key` length is not exact for the `aes_encrypt` function for a given block mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.30')
-
-RQ_SRS008_AES_Encrypt_Function_InitializationVector_Length_InvalidLengthError = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.InitializationVector.Length.InvalidLengthError',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `iv` length is specified and not of the exact size for the `aes_encrypt` function for a given block mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.31')
-
-RQ_SRS008_AES_Encrypt_Function_InitializationVector_NotValidForMode = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.InitializationVector.NotValidForMode',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `iv` is specified for the `aes_encrypt` function for a mode that does not need it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.32')
-
-RQ_SRS008_AES_Encrypt_Function_AdditionalAuthenticationData_NotValidForMode = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.NotValidForMode',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `aad` is specified for the `aes_encrypt` function for a mode that does not need it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.33')
-
-RQ_SRS008_AES_Encrypt_Function_AdditionalAuthenticationData_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL not limit the size of the `aad` parameter passed to the `aes_encrypt` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.34')
-
-RQ_SRS008_AES_Encrypt_Function_AES_128_ECB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-ecb` and `key` is not 16 bytes\n'
- 'or `iv` or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.35')
-
-RQ_SRS008_AES_Encrypt_Function_AES_192_ECB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-ecb` and `key` is not 24 bytes\n'
- 'or `iv` or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.36')
-
-RQ_SRS008_AES_Encrypt_Function_AES_256_ECB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-ecb` and `key` is not 32 bytes\n'
- 'or `iv` or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.37')
-
-RQ_SRS008_AES_Encrypt_Function_AES_128_CBC_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-cbc` and `key` is not 16 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.38')
-
-RQ_SRS008_AES_Encrypt_Function_AES_192_CBC_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-cbc` and `key` is not 24 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.39')
-
-RQ_SRS008_AES_Encrypt_Function_AES_256_CBC_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-cbc` and `key` is not 32 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.40')
-
-RQ_SRS008_AES_Encrypt_Function_AES_128_CFB128_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-cfb128` and `key` is not 16 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.41')
-
-RQ_SRS008_AES_Encrypt_Function_AES_192_CFB128_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-cfb128` and `key` is not 24 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.42')
-
-RQ_SRS008_AES_Encrypt_Function_AES_256_CFB128_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-cfb128` and `key` is not 32 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.43')
-
-RQ_SRS008_AES_Encrypt_Function_AES_128_OFB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-ofb` and `key` is not 16 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.44')
-
-RQ_SRS008_AES_Encrypt_Function_AES_192_OFB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-ofb` and `key` is not 24 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.45')
-
-RQ_SRS008_AES_Encrypt_Function_AES_256_OFB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-ofb` and `key` is not 32 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.46')
-
-RQ_SRS008_AES_Encrypt_Function_AES_128_GCM_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-128-GCM.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-gcm` and `key` is not 16 bytes\n'
- 'or `iv` is not specified or is less than 8 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.47')
-
-RQ_SRS008_AES_Encrypt_Function_AES_192_GCM_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-192-GCM.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-gcm` and `key` is not 24 bytes\n'
- 'or `iv` is not specified or is less than 8 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.48')
-
-RQ_SRS008_AES_Encrypt_Function_AES_256_GCM_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-256-GCM.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-gcm` and `key` is not 32 bytes\n'
- 'or `iv` is not specified or is less than 8 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.49')
-
-RQ_SRS008_AES_Encrypt_Function_AES_128_CTR_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-128-CTR.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-ctr` and `key` is not 16 bytes\n'
- 'or if specified `iv` is not 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.50')
-
-RQ_SRS008_AES_Encrypt_Function_AES_192_CTR_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-192-CTR.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-ctr` and `key` is not 24 bytes\n'
- 'or if specified `iv` is not 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.51')
-
-RQ_SRS008_AES_Encrypt_Function_AES_256_CTR_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Encrypt.Function.AES-256-CTR.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-ctr` and `key` is not 32 bytes\n'
- 'or if specified `iv` is not 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.52')
-
-RQ_SRS008_AES_Decrypt_Function = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes_decrypt` function to decrypt data using [AES].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.53')
-
-RQ_SRS008_AES_Decrypt_Function_Syntax = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Syntax',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support the following syntax for the `aes_decrypt` function\n'
- '\n'
- '```sql\n'
- 'aes_decrypt(ciphertext, key, mode, [iv, aad])\n'
- '```\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.54')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_CipherText = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.CipherText',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `ciphertext` accepting `FixedString` or `String` data types as\n'
- 'the first parameter to the `aes_decrypt` function that SHALL specify the data to be decrypted.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.55')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Key = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Key',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `key` with `String` or `FixedString` data types\n'
- 'as the second parameter to the `aes_decrypt` function that SHALL specify the encryption key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.56')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter\n'
- 'to the `aes_decrypt` function that SHALL specify encryption key length and block encryption mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.57')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_ValuesFormat = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support values of the form `aes-[key length]-[mode]` for the `mode` parameter\n'
- 'of the `aes_decrypt` function where\n'
- 'the `key_length` SHALL specifies the length of the key and SHALL accept\n'
- '`128`, `192`, or `256` as the values and the `mode` SHALL specify the block encryption\n'
- 'mode and SHALL accept [ECB], [CBC], [CFB128], or [OFB] as well as\n'
- '[CTR] and [GCM] as the values. For example, `aes-256-ofb`.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.58')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_Invalid = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.Invalid',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the specified value for the `mode` parameter of the `aes_decrypt`\n'
- 'function is not valid with the exception where such a mode is supported by the underlying\n'
- '[OpenSSL] implementation.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.59')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_128_ECB = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-ECB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-ecb` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [ECB] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.60')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_192_ECB = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-ECB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-ecb` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [ECB] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.61')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_256_ECB = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-ECB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-ecb` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [ECB] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.62')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_128_CBC = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CBC',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-cbc` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [CBC] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.63')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_192_CBC = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CBC',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-cbc` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [CBC] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.64')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_256_CBC = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CBC',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-cbc` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [CBC] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.65')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_128_CFB128 = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CFB128',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-cfb128` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.66')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_192_CFB128 = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CFB128',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-cfb128` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.67')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_256_CFB128 = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CFB128',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-cfb128` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.68')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_128_OFB = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-OFB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-ofb` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [OFB] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.69')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_192_OFB = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-OFB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-ofb` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [OFB] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.70')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_256_OFB = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-OFB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-ofb` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [OFB] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.71')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_128_GCM = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-GCM',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-gcm` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [GCM] block mode encryption with a 128 bit key.\n'
- 'An [AEAD] 16-byte tag is expected present at the end of the ciphertext according to\n'
- 'the [RFC5116].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.72')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_192_GCM = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-GCM',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-gcm` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [GCM] block mode encryption with a 192 bit key.\n'
- 'An [AEAD] 16-byte tag is expected present at the end of the ciphertext according to\n'
- 'the [RFC5116].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.73')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_256_GCM = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-GCM',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-gcm` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [GCM] block mode encryption with a 256 bit key.\n'
- 'An [AEAD] 16-byte tag is expected present at the end of the ciphertext according to\n'
- 'the [RFC5116].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.74')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_128_CTR = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CTR',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-ctr` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [CTR] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.75')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_192_CTR = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CTR',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-ctr` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [CTR] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.76')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_256_CTR = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CTR',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-ctr` as the value for the `mode` parameter of the `aes_decrypt` function\n'
- 'and [AES] algorithm SHALL use the [CTR] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.77')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_InitializationVector = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.InitializationVector',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `iv` with `String` or `FixedString` data types as the optional fourth\n'
- 'parameter to the `aes_decrypt` function that SHALL specify the initialization vector for block modes that require\n'
- 'it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.78')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_AdditionalAuthenticatedData = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.AdditionalAuthenticatedData',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aad` with `String` or `FixedString` data types as the optional fifth\n'
- 'parameter to the `aes_decrypt` function that SHALL specify the additional authenticated data\n'
- 'for block modes that require it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.79')
-
-RQ_SRS008_AES_Decrypt_Function_Parameters_ReturnValue = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Parameters.ReturnValue',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return the decrypted value of the data\n'
- 'using `String` data type as the result of `aes_decrypt` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.80')
-
-RQ_SRS008_AES_Decrypt_Function_Key_Length_InvalidLengthError = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.Key.Length.InvalidLengthError',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `key` length is not exact for the `aes_decrypt` function for a given block mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.81')
-
-RQ_SRS008_AES_Decrypt_Function_InitializationVector_Length_InvalidLengthError = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `iv` is speficified and the length is not exact for the `aes_decrypt` function for a given block mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.82')
-
-RQ_SRS008_AES_Decrypt_Function_InitializationVector_NotValidForMode = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `iv` is specified for the `aes_decrypt` function\n'
- 'for a mode that does not need it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.83')
-
-RQ_SRS008_AES_Decrypt_Function_AdditionalAuthenticationData_NotValidForMode = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.NotValidForMode',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `aad` is specified for the `aes_decrypt` function\n'
- 'for a mode that does not need it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.84')
-
-RQ_SRS008_AES_Decrypt_Function_AdditionalAuthenticationData_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL not limit the size of the `aad` parameter passed to the `aes_decrypt` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.85')
-
-RQ_SRS008_AES_Decrypt_Function_AES_128_ECB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-ecb` and `key` is not 16 bytes\n'
- 'or `iv` or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.86')
-
-RQ_SRS008_AES_Decrypt_Function_AES_192_ECB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-ecb` and `key` is not 24 bytes\n'
- 'or `iv` or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.87')
-
-RQ_SRS008_AES_Decrypt_Function_AES_256_ECB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-ecb` and `key` is not 32 bytes\n'
- 'or `iv` or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.88')
-
-RQ_SRS008_AES_Decrypt_Function_AES_128_CBC_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-cbc` and `key` is not 16 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.89')
-
-RQ_SRS008_AES_Decrypt_Function_AES_192_CBC_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-cbc` and `key` is not 24 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.90')
-
-RQ_SRS008_AES_Decrypt_Function_AES_256_CBC_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-cbc` and `key` is not 32 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.91')
-
-RQ_SRS008_AES_Decrypt_Function_AES_128_CFB128_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-cfb128` and `key` is not 16 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.92')
-
-RQ_SRS008_AES_Decrypt_Function_AES_192_CFB128_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-cfb128` and `key` is not 24 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.93')
-
-RQ_SRS008_AES_Decrypt_Function_AES_256_CFB128_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-cfb128` and `key` is not 32 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.94')
-
-RQ_SRS008_AES_Decrypt_Function_AES_128_OFB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-ofb` and `key` is not 16 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.95')
-
-RQ_SRS008_AES_Decrypt_Function_AES_192_OFB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-ofb` and `key` is not 24 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.96')
-
-RQ_SRS008_AES_Decrypt_Function_AES_256_OFB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-ofb` and `key` is not 32 bytes\n'
- 'or if specified `iv` is not 16 bytes or `aad` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.97')
-
-RQ_SRS008_AES_Decrypt_Function_AES_128_GCM_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-128-GCM.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-gcm` and `key` is not 16 bytes\n'
- 'or `iv` is not specified or is less than 8 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.98')
-
-RQ_SRS008_AES_Decrypt_Function_AES_192_GCM_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-192-GCM.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-gcm` and `key` is not 24 bytes\n'
- 'or `iv` is not specified or is less than 8 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.99')
-
-RQ_SRS008_AES_Decrypt_Function_AES_256_GCM_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-256-GCM.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-gcm` and `key` is not 32 bytes\n'
- 'or `iv` is not specified or is less than 8 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.100')
-
-RQ_SRS008_AES_Decrypt_Function_AES_128_CTR_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-128-CTR.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-ctr` and `key` is not 16 bytes\n'
- 'or if specified `iv` is not 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.101')
-
-RQ_SRS008_AES_Decrypt_Function_AES_192_CTR_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-192-CTR.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-ctr` and `key` is not 24 bytes\n'
- 'or if specified `iv` is not 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.102')
-
-RQ_SRS008_AES_Decrypt_Function_AES_256_CTR_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.Decrypt.Function.AES-256-CTR.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-ctr` and `key` is not 32 bytes\n'
- 'or if specified `iv` is not 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.2.103')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes_encrypt_mysql` function to encrypt data using [AES].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.1')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Syntax = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Syntax',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support the following syntax for the `aes_encrypt_mysql` function\n'
- '\n'
- '```sql\n'
- 'aes_encrypt_mysql(plaintext, key, mode, [iv])\n'
- '```\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.2')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_PlainText = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `plaintext` accepting any data type as\n'
- 'the first parameter to the `aes_encrypt_mysql` function that SHALL specify the data to be encrypted.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.3')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Key = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `key` with `String` or `FixedString` data types\n'
- 'as the second parameter to the `aes_encrypt_mysql` function that SHALL specify the encryption key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.4')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter\n'
- 'to the `aes_encrypt_mysql` function that SHALL specify encryption key length and block encryption mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.5')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_ValuesFormat = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support values of the form `aes-[key length]-[mode]` for the `mode` parameter\n'
- 'of the `aes_encrypt_mysql` function where\n'
- 'the `key_length` SHALL specifies the length of the key and SHALL accept\n'
- '`128`, `192`, or `256` as the values and the `mode` SHALL specify the block encryption\n'
- 'mode and SHALL accept [ECB], [CBC], [CFB128], or [OFB]. For example, `aes-256-ofb`.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.6')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_Invalid = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.Invalid',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the specified value for the `mode` parameter of the `aes_encrypt_mysql`\n'
- 'function is not valid with the exception where such a mode is supported by the underlying\n'
- '[OpenSSL] implementation.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.7')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_ECB = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-ECB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-ecb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [ECB] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.8')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_ECB = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-ECB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-ecb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [ECB] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.9')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_ECB = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-ECB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-ecb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [ECB] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.10')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_CBC = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CBC',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-cbc` as the value for the `mode` parameter of the `aes_encrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [CBC] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.11')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_CBC = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CBC',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-cbc` as the value for the `mode` parameter of the `aes_encrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [CBC] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.12')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_CBC = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CBC',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-cbc` as the value for the `mode` parameter of the `aes_encrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [CBC] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.13')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_CFB128 = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CFB128',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-cfb128` as the value for the `mode` parameter of the `aes_encrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.14')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_CFB128 = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CFB128',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-cfb128` as the value for the `mode` parameter of the `aes_encrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.15')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_CFB128 = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CFB128',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-cfb128` as the value for the `mode` parameter of the `aes_encrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.16')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_OFB = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-OFB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-ofb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [OFB] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.17')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_OFB = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-OFB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-ofb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [OFB] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.18')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_OFB = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-OFB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-ofb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [OFB] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.19')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_GCM_Error = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-GCM.Error',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if `aes-128-gcm` is specified as the value for the `mode` parameter of the\n'
- '`aes_encrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.20')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_GCM_Error = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-GCM.Error',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if `aes-192-gcm` is specified as the value for the `mode` parameter of the\n'
- '`aes_encrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.21')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_GCM_Error = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-GCM.Error',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if `aes-256-gcm` is specified as the value for the `mode` parameter of the\n'
- '`aes_encrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.22')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_CTR_Error = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CTR.Error',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if `aes-128-ctr` is specified as the value for the `mode` parameter of the\n'
- '`aes_encrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.23')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_CTR_Error = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CTR.Error',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if `aes-192-ctr` is specified as the value for the `mode` parameter of the\n'
- '`aes_encrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.24')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_CTR_Error = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CTR.Error',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if `aes-256-ctr` is specified as the value for the `mode` parameter of the\n'
- '`aes_encrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.25')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_InitializationVector = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.InitializationVector',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `iv` with `String` or `FixedString` data types as the optional fourth\n'
- 'parameter to the `aes_encrypt_mysql` function that SHALL specify the initialization vector for block modes that require\n'
- 'it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.26')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_ReturnValue = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.ReturnValue',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return the encrypted value of the data\n'
- 'using `String` data type as the result of `aes_encrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.27')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Key_Length_TooShortError = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooShortError',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `key` length is less than the minimum for the `aes_encrypt_mysql`\n'
- 'function for a given block mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.28')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_Key_Length_TooLong = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooLong',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL use folding algorithm specified below if the `key` length is longer than required\n'
- 'for the `aes_encrypt_mysql` function for a given block mode.\n'
- '\n'
- '```python\n'
- 'def fold_key(key, cipher_key_size):\n'
- ' key = list(key) if not isinstance(key, (list, tuple)) else key\n'
- '\t folded_key = key[:cipher_key_size]\n'
- '\t for i in range(cipher_key_size, len(key)):\n'
- '\t\t print(i % cipher_key_size, i)\n'
- '\t\t folded_key[i % cipher_key_size] ^= key[i]\n'
- '\t return folded_key\n'
- '```\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.29')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_Length_TooShortError = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooShortError',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `iv` length is specified and is less than the minimum\n'
- 'that is required for the `aes_encrypt_mysql` function for a given block mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.30')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_Length_TooLong = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooLong',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL use the first `N` bytes that are required if the `iv` is specified and\n'
- 'its length is longer than required for the `aes_encrypt_mysql` function for a given block mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.31')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_NotValidForMode = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.NotValidForMode',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `iv` is specified for the `aes_encrypt_mysql`\n'
- 'function for a mode that does not need it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.32')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_AES_128_ECB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-128-ecb` and `key` is less than 16 bytes\n'
- 'or `iv` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.33')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_AES_192_ECB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-192-ecb` and `key` is less than 24 bytes\n'
- 'or `iv` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.34')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_AES_256_ECB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-256-ecb` and `key` is less than 32 bytes\n'
- 'or `iv` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.35')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_AES_128_CBC_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-128-cbc` and `key` is less than 16 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.36')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_AES_192_CBC_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-192-cbc` and `key` is less than 24 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.37')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_AES_256_CBC_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-256-cbc` and `key` is less than 32 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.38')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_AES_128_CFB128_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-128-cfb128` and `key` is less than 16 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.39')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_AES_192_CFB128_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-192-cfb128` and `key` is less than 24 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.40')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_AES_256_CFB128_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-256-cfb128` and `key` is less than 32 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.41')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_AES_128_OFB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-128-ofb` and `key` is less than 16 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.42')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_AES_192_OFB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-192-ofb` and `key` is less than 24 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.43')
-
-RQ_SRS008_AES_MySQL_Encrypt_Function_AES_256_OFB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-256-ofb` and `key` is less than 32 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.44')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes_decrypt_mysql` function to decrypt data using [AES].\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.45')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Syntax = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Syntax',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support the following syntax for the `aes_decrypt_mysql` function\n'
- '\n'
- '```sql\n'
- 'aes_decrypt_mysql(ciphertext, key, mode, [iv])\n'
- '```\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.46')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_CipherText = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.CipherText',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `ciphertext` accepting any data type as\n'
- 'the first parameter to the `aes_decrypt_mysql` function that SHALL specify the data to be decrypted.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.47')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Key = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `key` with `String` or `FixedString` data types\n'
- 'as the second parameter to the `aes_decrypt_mysql` function that SHALL specify the encryption key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.48')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter\n'
- 'to the `aes_decrypt_mysql` function that SHALL specify encryption key length and block encryption mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.49')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_ValuesFormat = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support values of the form `aes-[key length]-[mode]` for the `mode` parameter\n'
- 'of the `aes_decrypt_mysql` function where\n'
- 'the `key_length` SHALL specifies the length of the key and SHALL accept\n'
- '`128`, `192`, or `256` as the values and the `mode` SHALL specify the block encryption\n'
- 'mode and SHALL accept [ECB], [CBC], [CFB128], or [OFB]. For example, `aes-256-ofb`.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.50')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_Invalid = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.Invalid',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the specified value for the `mode` parameter of the `aes_decrypt_mysql`\n'
- 'function is not valid with the exception where such a mode is supported by the underlying\n'
- '[OpenSSL] implementation.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.51')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_ECB = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-ECB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-ecb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [ECB] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.52')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_ECB = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-ECB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-ecb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [ECB] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.53')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_ECB = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-ECB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-ecb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [ECB] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.54')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_CBC = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CBC',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-cbc` as the value for the `mode` parameter of the `aes_decrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [CBC] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.55')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_CBC = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CBC',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-cbc` as the value for the `mode` parameter of the `aes_decrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [CBC] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.56')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_CBC = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CBC',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-cbc` as the value for the `mode` parameter of the `aes_decrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [CBC] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.57')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_CFB128 = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CFB128',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-cfb128` as the value for the `mode` parameter of the `aes_decrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.58')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_CFB128 = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CFB128',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-cfb128` as the value for the `mode` parameter of the `aes_decrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.59')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_CFB128 = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CFB128',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-cfb128` as the value for the `mode` parameter of the `aes_decrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.60')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_OFB = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-OFB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-128-ofb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [OFB] block mode encryption with a 128 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.61')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_OFB = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-OFB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-192-ofb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [OFB] block mode encryption with a 192 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.62')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_OFB = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-OFB',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `aes-256-ofb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function\n'
- 'and [AES] algorithm SHALL use the [OFB] block mode encryption with a 256 bit key.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.63')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_GCM_Error = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-GCM.Error',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if `aes-128-gcm` is specified as the value for the `mode` parameter of the\n'
- '`aes_decrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.64')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_GCM_Error = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-GCM.Error',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if `aes-192-gcm` is specified as the value for the `mode` parameter of the\n'
- '`aes_decrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.65')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_GCM_Error = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-GCM.Error',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if `aes-256-gcm` is specified as the value for the `mode` parameter of the\n'
- '`aes_decrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.66')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_CTR_Error = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CTR.Error',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if `aes-128-ctr` is specified as the value for the `mode` parameter of the\n'
- '`aes_decrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.67')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_CTR_Error = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CTR.Error',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if `aes-192-ctr` is specified as the value for the `mode` parameter of the\n'
- '`aes_decrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.68')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_CTR_Error = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CTR.Error',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if `aes-256-ctr` is specified as the value for the `mode` parameter of the\n'
- '`aes_decrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.69')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_InitializationVector = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.InitializationVector',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL support `iv` with `String` or `FixedString` data types as the optional fourth\n'
- 'parameter to the `aes_decrypt_mysql` function that SHALL specify the initialization vector for block modes that require\n'
- 'it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.70')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_ReturnValue = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.ReturnValue',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return the decrypted value of the data\n'
- 'using `String` data type as the result of `aes_decrypt_mysql` function.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.71')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Key_Length_TooShortError = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooShortError',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `key` length is less than the minimum for the `aes_decrypt_mysql`\n'
- 'function for a given block mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.72')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_Key_Length_TooLong = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooLong',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL use folding algorithm specified below if the `key` length is longer than required\n'
- 'for the `aes_decrypt_mysql` function for a given block mode.\n'
- '\n'
- '```python\n'
- 'def fold_key(key, cipher_key_size):\n'
- ' key = list(key) if not isinstance(key, (list, tuple)) else key\n'
- '\t folded_key = key[:cipher_key_size]\n'
- '\t for i in range(cipher_key_size, len(key)):\n'
- '\t\t print(i % cipher_key_size, i)\n'
- '\t\t folded_key[i % cipher_key_size] ^= key[i]\n'
- '\t return folded_key\n'
- '```\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.73')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_Length_TooShortError = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooShortError',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `iv` length is specified and is less than the minimum\n'
- 'that is required for the `aes_decrypt_mysql` function for a given block mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.74')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_Length_TooLong = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooLong',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL use the first `N` bytes that are required if the `iv` is specified and\n'
- 'its length is longer than required for the `aes_decrypt_mysql` function for a given block mode.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.75')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_NotValidForMode = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.NotValidForMode',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error if the `iv` is specified for the `aes_decrypt_mysql`\n'
- 'function for a mode that does not need it.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.76')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_AES_128_ECB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-128-ecb` and `key` is less than 16 bytes\n'
- 'or `iv` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.77')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_AES_192_ECB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-192-ecb` and `key` is less than 24 bytes\n'
- 'or `iv` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.78')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_AES_256_ECB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-256-ecb` and `key` is less than 32 bytes\n'
- 'or `iv` is specified.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.79')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_AES_128_CBC_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-128-cbc` and `key` is less than 16 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.80')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_AES_192_CBC_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-192-cbc` and `key` is less than 24 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.81')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_AES_256_CBC_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-256-cbc` and `key` is less than 32 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.82')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_AES_128_CFB128_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-128-cfb128` and `key` is less than 16 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.83')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_AES_192_CFB128_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-192-cfb128` and `key` is less than 24 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.84')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_AES_256_CFB128_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-256-cfb128` and `key` is less than 32 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.85')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_AES_128_OFB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-128-ofb` and `key` is less than 16 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.86')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_AES_192_OFB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-192-ofb` and `key` is less than 24 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.87')
-
-RQ_SRS008_AES_MySQL_Decrypt_Function_AES_256_OFB_KeyAndInitializationVector_Length = Requirement(
- name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length',
- version='1.0',
- priority=None,
- group=None,
- type=None,
- uid=None,
- description=(
- '[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-256-ofb` and `key` is less than 32 bytes\n'
- 'or if specified `iv` is less than 16 bytes.\n'
- '\n'
- ),
- link=None,
- level=3,
- num='4.3.88')
-
-SRS_008_ClickHouse_AES_Encryption_Functions = Specification(
- name='SRS-008 ClickHouse AES Encryption Functions',
- description=None,
- author=None,
- date=None,
- status=None,
- approved_by=None,
- approved_date=None,
- approved_version=None,
- version=None,
- group=None,
- type=None,
- link=None,
- uid=None,
- parent=None,
- children=None,
- headings=(
- Heading(name='Revision History', level=1, num='1'),
- Heading(name='Introduction', level=1, num='2'),
- Heading(name='Terminology', level=1, num='3'),
- Heading(name='Requirements', level=1, num='4'),
- Heading(name='Generic', level=2, num='4.1'),
- Heading(name='RQ.SRS008.AES.Functions', level=3, num='4.1.1'),
- Heading(name='RQ.SRS008.AES.Functions.Compatability.MySQL', level=3, num='4.1.2'),
- Heading(name='RQ.SRS008.AES.Functions.Compatability.Dictionaries', level=3, num='4.1.3'),
- Heading(name='RQ.SRS008.AES.Functions.Compatability.Engine.Database.MySQL', level=3, num='4.1.4'),
- Heading(name='RQ.SRS008.AES.Functions.Compatability.Engine.Table.MySQL', level=3, num='4.1.5'),
- Heading(name='RQ.SRS008.AES.Functions.Compatability.TableFunction.MySQL', level=3, num='4.1.6'),
- Heading(name='RQ.SRS008.AES.Functions.DifferentModes', level=3, num='4.1.7'),
- Heading(name='RQ.SRS008.AES.Functions.DataFromMultipleSources', level=3, num='4.1.8'),
- Heading(name='RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues', level=3, num='4.1.9'),
- Heading(name='RQ.SRS008.AES.Functions.InvalidParameters', level=3, num='4.1.10'),
- Heading(name='RQ.SRS008.AES.Functions.Mismatched.Key', level=3, num='4.1.11'),
- Heading(name='RQ.SRS008.AES.Functions.Mismatched.IV', level=3, num='4.1.12'),
- Heading(name='RQ.SRS008.AES.Functions.Mismatched.AAD', level=3, num='4.1.13'),
- Heading(name='RQ.SRS008.AES.Functions.Mismatched.Mode', level=3, num='4.1.14'),
- Heading(name='RQ.SRS008.AES.Functions.Check.Performance', level=3, num='4.1.15'),
- Heading(name='RQ.SRS008.AES.Function.Check.Performance.BestCase', level=3, num='4.1.16'),
- Heading(name='RQ.SRS008.AES.Function.Check.Performance.WorstCase', level=3, num='4.1.17'),
- Heading(name='RQ.SRS008.AES.Functions.Check.Compression', level=3, num='4.1.18'),
- Heading(name='RQ.SRS008.AES.Functions.Check.Compression.LowCardinality', level=3, num='4.1.19'),
- Heading(name='Specific', level=2, num='4.2'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function', level=3, num='4.2.1'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Syntax', level=3, num='4.2.2'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.NIST.TestVectors', level=3, num='4.2.3'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText', level=3, num='4.2.4'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Key', level=3, num='4.2.5'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode', level=3, num='4.2.6'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat', level=3, num='4.2.7'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.Invalid', level=3, num='4.2.8'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-ECB', level=3, num='4.2.9'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-ECB', level=3, num='4.2.10'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-ECB', level=3, num='4.2.11'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CBC', level=3, num='4.2.12'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CBC', level=3, num='4.2.13'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CBC', level=3, num='4.2.14'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CFB128', level=3, num='4.2.15'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CFB128', level=3, num='4.2.16'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CFB128', level=3, num='4.2.17'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-OFB', level=3, num='4.2.18'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-OFB', level=3, num='4.2.19'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-OFB', level=3, num='4.2.20'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-GCM', level=3, num='4.2.21'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-GCM', level=3, num='4.2.22'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-GCM', level=3, num='4.2.23'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CTR', level=3, num='4.2.24'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CTR', level=3, num='4.2.25'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CTR', level=3, num='4.2.26'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.InitializationVector', level=3, num='4.2.27'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.AdditionalAuthenticatedData', level=3, num='4.2.28'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.ReturnValue', level=3, num='4.2.29'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.Key.Length.InvalidLengthError', level=3, num='4.2.30'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.InitializationVector.Length.InvalidLengthError', level=3, num='4.2.31'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.InitializationVector.NotValidForMode', level=3, num='4.2.32'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.NotValidForMode', level=3, num='4.2.33'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.Length', level=3, num='4.2.34'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length', level=3, num='4.2.35'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length', level=3, num='4.2.36'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length', level=3, num='4.2.37'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length', level=3, num='4.2.38'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length', level=3, num='4.2.39'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length', level=3, num='4.2.40'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length', level=3, num='4.2.41'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length', level=3, num='4.2.42'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length', level=3, num='4.2.43'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length', level=3, num='4.2.44'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length', level=3, num='4.2.45'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length', level=3, num='4.2.46'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-128-GCM.KeyAndInitializationVector.Length', level=3, num='4.2.47'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-192-GCM.KeyAndInitializationVector.Length', level=3, num='4.2.48'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-256-GCM.KeyAndInitializationVector.Length', level=3, num='4.2.49'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-128-CTR.KeyAndInitializationVector.Length', level=3, num='4.2.50'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-192-CTR.KeyAndInitializationVector.Length', level=3, num='4.2.51'),
- Heading(name='RQ.SRS008.AES.Encrypt.Function.AES-256-CTR.KeyAndInitializationVector.Length', level=3, num='4.2.52'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function', level=3, num='4.2.53'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Syntax', level=3, num='4.2.54'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.CipherText', level=3, num='4.2.55'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Key', level=3, num='4.2.56'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode', level=3, num='4.2.57'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat', level=3, num='4.2.58'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.Invalid', level=3, num='4.2.59'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-ECB', level=3, num='4.2.60'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-ECB', level=3, num='4.2.61'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-ECB', level=3, num='4.2.62'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CBC', level=3, num='4.2.63'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CBC', level=3, num='4.2.64'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CBC', level=3, num='4.2.65'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CFB128', level=3, num='4.2.66'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CFB128', level=3, num='4.2.67'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CFB128', level=3, num='4.2.68'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-OFB', level=3, num='4.2.69'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-OFB', level=3, num='4.2.70'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-OFB', level=3, num='4.2.71'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-GCM', level=3, num='4.2.72'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-GCM', level=3, num='4.2.73'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-GCM', level=3, num='4.2.74'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CTR', level=3, num='4.2.75'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CTR', level=3, num='4.2.76'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CTR', level=3, num='4.2.77'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.InitializationVector', level=3, num='4.2.78'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.AdditionalAuthenticatedData', level=3, num='4.2.79'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.ReturnValue', level=3, num='4.2.80'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.Key.Length.InvalidLengthError', level=3, num='4.2.81'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError', level=3, num='4.2.82'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode', level=3, num='4.2.83'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.NotValidForMode', level=3, num='4.2.84'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.Length', level=3, num='4.2.85'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length', level=3, num='4.2.86'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length', level=3, num='4.2.87'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length', level=3, num='4.2.88'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length', level=3, num='4.2.89'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length', level=3, num='4.2.90'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length', level=3, num='4.2.91'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length', level=3, num='4.2.92'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length', level=3, num='4.2.93'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length', level=3, num='4.2.94'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length', level=3, num='4.2.95'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length', level=3, num='4.2.96'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length', level=3, num='4.2.97'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-128-GCM.KeyAndInitializationVector.Length', level=3, num='4.2.98'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-192-GCM.KeyAndInitializationVector.Length', level=3, num='4.2.99'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-256-GCM.KeyAndInitializationVector.Length', level=3, num='4.2.100'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-128-CTR.KeyAndInitializationVector.Length', level=3, num='4.2.101'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-192-CTR.KeyAndInitializationVector.Length', level=3, num='4.2.102'),
- Heading(name='RQ.SRS008.AES.Decrypt.Function.AES-256-CTR.KeyAndInitializationVector.Length', level=3, num='4.2.103'),
- Heading(name='MySQL Specific Functions', level=2, num='4.3'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function', level=3, num='4.3.1'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Syntax', level=3, num='4.3.2'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText', level=3, num='4.3.3'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key', level=3, num='4.3.4'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode', level=3, num='4.3.5'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat', level=3, num='4.3.6'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.Invalid', level=3, num='4.3.7'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-ECB', level=3, num='4.3.8'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-ECB', level=3, num='4.3.9'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-ECB', level=3, num='4.3.10'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CBC', level=3, num='4.3.11'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CBC', level=3, num='4.3.12'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CBC', level=3, num='4.3.13'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CFB128', level=3, num='4.3.14'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CFB128', level=3, num='4.3.15'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CFB128', level=3, num='4.3.16'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-OFB', level=3, num='4.3.17'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-OFB', level=3, num='4.3.18'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-OFB', level=3, num='4.3.19'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-GCM.Error', level=3, num='4.3.20'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-GCM.Error', level=3, num='4.3.21'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-GCM.Error', level=3, num='4.3.22'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CTR.Error', level=3, num='4.3.23'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CTR.Error', level=3, num='4.3.24'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CTR.Error', level=3, num='4.3.25'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.InitializationVector', level=3, num='4.3.26'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.ReturnValue', level=3, num='4.3.27'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooShortError', level=3, num='4.3.28'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooLong', level=3, num='4.3.29'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooShortError', level=3, num='4.3.30'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooLong', level=3, num='4.3.31'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.NotValidForMode', level=3, num='4.3.32'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length', level=3, num='4.3.33'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length', level=3, num='4.3.34'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length', level=3, num='4.3.35'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length', level=3, num='4.3.36'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length', level=3, num='4.3.37'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length', level=3, num='4.3.38'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length', level=3, num='4.3.39'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length', level=3, num='4.3.40'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length', level=3, num='4.3.41'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length', level=3, num='4.3.42'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length', level=3, num='4.3.43'),
- Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length', level=3, num='4.3.44'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function', level=3, num='4.3.45'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Syntax', level=3, num='4.3.46'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.CipherText', level=3, num='4.3.47'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key', level=3, num='4.3.48'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode', level=3, num='4.3.49'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat', level=3, num='4.3.50'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.Invalid', level=3, num='4.3.51'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-ECB', level=3, num='4.3.52'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-ECB', level=3, num='4.3.53'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-ECB', level=3, num='4.3.54'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CBC', level=3, num='4.3.55'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CBC', level=3, num='4.3.56'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CBC', level=3, num='4.3.57'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CFB128', level=3, num='4.3.58'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CFB128', level=3, num='4.3.59'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CFB128', level=3, num='4.3.60'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-OFB', level=3, num='4.3.61'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-OFB', level=3, num='4.3.62'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-OFB', level=3, num='4.3.63'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-GCM.Error', level=3, num='4.3.64'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-GCM.Error', level=3, num='4.3.65'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-GCM.Error', level=3, num='4.3.66'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CTR.Error', level=3, num='4.3.67'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CTR.Error', level=3, num='4.3.68'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CTR.Error', level=3, num='4.3.69'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.InitializationVector', level=3, num='4.3.70'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.ReturnValue', level=3, num='4.3.71'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooShortError', level=3, num='4.3.72'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooLong', level=3, num='4.3.73'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooShortError', level=3, num='4.3.74'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooLong', level=3, num='4.3.75'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.NotValidForMode', level=3, num='4.3.76'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length', level=3, num='4.3.77'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length', level=3, num='4.3.78'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length', level=3, num='4.3.79'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length', level=3, num='4.3.80'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length', level=3, num='4.3.81'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length', level=3, num='4.3.82'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length', level=3, num='4.3.83'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length', level=3, num='4.3.84'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length', level=3, num='4.3.85'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length', level=3, num='4.3.86'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length', level=3, num='4.3.87'),
- Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length', level=3, num='4.3.88'),
- Heading(name='References', level=1, num='5'),
- ),
- requirements=(
- RQ_SRS008_AES_Functions,
- RQ_SRS008_AES_Functions_Compatability_MySQL,
- RQ_SRS008_AES_Functions_Compatability_Dictionaries,
- RQ_SRS008_AES_Functions_Compatability_Engine_Database_MySQL,
- RQ_SRS008_AES_Functions_Compatability_Engine_Table_MySQL,
- RQ_SRS008_AES_Functions_Compatability_TableFunction_MySQL,
- RQ_SRS008_AES_Functions_DifferentModes,
- RQ_SRS008_AES_Functions_DataFromMultipleSources,
- RQ_SRS008_AES_Functions_SuppressOutputOfSensitiveValues,
- RQ_SRS008_AES_Functions_InvalidParameters,
- RQ_SRS008_AES_Functions_Mismatched_Key,
- RQ_SRS008_AES_Functions_Mismatched_IV,
- RQ_SRS008_AES_Functions_Mismatched_AAD,
- RQ_SRS008_AES_Functions_Mismatched_Mode,
- RQ_SRS008_AES_Functions_Check_Performance,
- RQ_SRS008_AES_Function_Check_Performance_BestCase,
- RQ_SRS008_AES_Function_Check_Performance_WorstCase,
- RQ_SRS008_AES_Functions_Check_Compression,
- RQ_SRS008_AES_Functions_Check_Compression_LowCardinality,
- RQ_SRS008_AES_Encrypt_Function,
- RQ_SRS008_AES_Encrypt_Function_Syntax,
- RQ_SRS008_AES_Encrypt_Function_NIST_TestVectors,
- RQ_SRS008_AES_Encrypt_Function_Parameters_PlainText,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Key,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_ValuesFormat,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_Invalid,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_128_ECB,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_192_ECB,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_256_ECB,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_128_CBC,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_192_CBC,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_256_CBC,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_128_CFB128,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_192_CFB128,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_256_CFB128,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_128_OFB,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_192_OFB,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_256_OFB,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_128_GCM,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_192_GCM,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_256_GCM,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_128_CTR,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_192_CTR,
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_AES_256_CTR,
- RQ_SRS008_AES_Encrypt_Function_Parameters_InitializationVector,
- RQ_SRS008_AES_Encrypt_Function_Parameters_AdditionalAuthenticatedData,
- RQ_SRS008_AES_Encrypt_Function_Parameters_ReturnValue,
- RQ_SRS008_AES_Encrypt_Function_Key_Length_InvalidLengthError,
- RQ_SRS008_AES_Encrypt_Function_InitializationVector_Length_InvalidLengthError,
- RQ_SRS008_AES_Encrypt_Function_InitializationVector_NotValidForMode,
- RQ_SRS008_AES_Encrypt_Function_AdditionalAuthenticationData_NotValidForMode,
- RQ_SRS008_AES_Encrypt_Function_AdditionalAuthenticationData_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_128_ECB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_192_ECB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_256_ECB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_128_CBC_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_192_CBC_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_256_CBC_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_128_CFB128_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_192_CFB128_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_256_CFB128_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_128_OFB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_192_OFB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_256_OFB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_128_GCM_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_192_GCM_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_256_GCM_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_128_CTR_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_192_CTR_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Encrypt_Function_AES_256_CTR_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function,
- RQ_SRS008_AES_Decrypt_Function_Syntax,
- RQ_SRS008_AES_Decrypt_Function_Parameters_CipherText,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Key,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_ValuesFormat,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_Invalid,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_128_ECB,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_192_ECB,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_256_ECB,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_128_CBC,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_192_CBC,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_256_CBC,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_128_CFB128,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_192_CFB128,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_256_CFB128,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_128_OFB,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_192_OFB,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_256_OFB,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_128_GCM,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_192_GCM,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_256_GCM,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_128_CTR,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_192_CTR,
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_AES_256_CTR,
- RQ_SRS008_AES_Decrypt_Function_Parameters_InitializationVector,
- RQ_SRS008_AES_Decrypt_Function_Parameters_AdditionalAuthenticatedData,
- RQ_SRS008_AES_Decrypt_Function_Parameters_ReturnValue,
- RQ_SRS008_AES_Decrypt_Function_Key_Length_InvalidLengthError,
- RQ_SRS008_AES_Decrypt_Function_InitializationVector_Length_InvalidLengthError,
- RQ_SRS008_AES_Decrypt_Function_InitializationVector_NotValidForMode,
- RQ_SRS008_AES_Decrypt_Function_AdditionalAuthenticationData_NotValidForMode,
- RQ_SRS008_AES_Decrypt_Function_AdditionalAuthenticationData_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_128_ECB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_192_ECB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_256_ECB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_128_CBC_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_192_CBC_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_256_CBC_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_128_CFB128_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_192_CFB128_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_256_CFB128_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_128_OFB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_192_OFB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_256_OFB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_128_GCM_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_192_GCM_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_256_GCM_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_128_CTR_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_192_CTR_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_Decrypt_Function_AES_256_CTR_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Encrypt_Function,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Syntax,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_PlainText,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Key,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_ValuesFormat,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_Invalid,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_ECB,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_ECB,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_ECB,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_CBC,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_CBC,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_CBC,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_CFB128,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_CFB128,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_CFB128,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_OFB,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_OFB,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_OFB,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_GCM_Error,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_GCM_Error,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_GCM_Error,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_CTR_Error,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_CTR_Error,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_CTR_Error,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_InitializationVector,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_ReturnValue,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Key_Length_TooShortError,
- RQ_SRS008_AES_MySQL_Encrypt_Function_Key_Length_TooLong,
- RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_Length_TooShortError,
- RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_Length_TooLong,
- RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_NotValidForMode,
- RQ_SRS008_AES_MySQL_Encrypt_Function_AES_128_ECB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Encrypt_Function_AES_192_ECB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Encrypt_Function_AES_256_ECB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Encrypt_Function_AES_128_CBC_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Encrypt_Function_AES_192_CBC_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Encrypt_Function_AES_256_CBC_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Encrypt_Function_AES_128_CFB128_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Encrypt_Function_AES_192_CFB128_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Encrypt_Function_AES_256_CFB128_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Encrypt_Function_AES_128_OFB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Encrypt_Function_AES_192_OFB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Encrypt_Function_AES_256_OFB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Decrypt_Function,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Syntax,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_CipherText,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Key,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_ValuesFormat,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_Invalid,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_ECB,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_ECB,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_ECB,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_CBC,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_CBC,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_CBC,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_CFB128,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_CFB128,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_CFB128,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_OFB,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_OFB,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_OFB,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_GCM_Error,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_GCM_Error,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_GCM_Error,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_CTR_Error,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_CTR_Error,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_CTR_Error,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_InitializationVector,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_ReturnValue,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Key_Length_TooShortError,
- RQ_SRS008_AES_MySQL_Decrypt_Function_Key_Length_TooLong,
- RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_Length_TooShortError,
- RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_Length_TooLong,
- RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_NotValidForMode,
- RQ_SRS008_AES_MySQL_Decrypt_Function_AES_128_ECB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Decrypt_Function_AES_192_ECB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Decrypt_Function_AES_256_ECB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Decrypt_Function_AES_128_CBC_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Decrypt_Function_AES_192_CBC_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Decrypt_Function_AES_256_CBC_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Decrypt_Function_AES_128_CFB128_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Decrypt_Function_AES_192_CFB128_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Decrypt_Function_AES_256_CFB128_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Decrypt_Function_AES_128_OFB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Decrypt_Function_AES_192_OFB_KeyAndInitializationVector_Length,
- RQ_SRS008_AES_MySQL_Decrypt_Function_AES_256_OFB_KeyAndInitializationVector_Length,
- ),
- content='''
-# SRS-008 ClickHouse AES Encryption Functions
-# Software Requirements Specification
-
-## Table of Contents
-* 1 [Revision History](#revision-history)
-* 2 [Introduction](#introduction)
-* 3 [Terminology](#terminology)
-* 4 [Requirements](#requirements)
- * 4.1 [Generic](#generic)
- * 4.1.1 [RQ.SRS008.AES.Functions](#rqsrs008aesfunctions)
- * 4.1.2 [RQ.SRS008.AES.Functions.Compatability.MySQL](#rqsrs008aesfunctionscompatabilitymysql)
- * 4.1.3 [RQ.SRS008.AES.Functions.Compatability.Dictionaries](#rqsrs008aesfunctionscompatabilitydictionaries)
- * 4.1.4 [RQ.SRS008.AES.Functions.Compatability.Engine.Database.MySQL](#rqsrs008aesfunctionscompatabilityenginedatabasemysql)
- * 4.1.5 [RQ.SRS008.AES.Functions.Compatability.Engine.Table.MySQL](#rqsrs008aesfunctionscompatabilityenginetablemysql)
- * 4.1.6 [RQ.SRS008.AES.Functions.Compatability.TableFunction.MySQL](#rqsrs008aesfunctionscompatabilitytablefunctionmysql)
- * 4.1.7 [RQ.SRS008.AES.Functions.DifferentModes](#rqsrs008aesfunctionsdifferentmodes)
- * 4.1.8 [RQ.SRS008.AES.Functions.DataFromMultipleSources](#rqsrs008aesfunctionsdatafrommultiplesources)
- * 4.1.9 [RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues](#rqsrs008aesfunctionssuppressoutputofsensitivevalues)
- * 4.1.10 [RQ.SRS008.AES.Functions.InvalidParameters](#rqsrs008aesfunctionsinvalidparameters)
- * 4.1.11 [RQ.SRS008.AES.Functions.MismatchedKey](#rqsrs008aesfunctionsmismatchedkey)
- * 4.1.12 [RQ.SRS008.AES.Functions.Check.Performance](#rqsrs008aesfunctionscheckperformance)
- * 4.1.13 [RQ.SRS008.AES.Function.Check.Performance.BestCase](#rqsrs008aesfunctioncheckperformancebestcase)
- * 4.1.14 [RQ.SRS008.AES.Function.Check.Performance.WorstCase](#rqsrs008aesfunctioncheckperformanceworstcase)
- * 4.1.15 [RQ.SRS008.AES.Functions.Check.Compression](#rqsrs008aesfunctionscheckcompression)
- * 4.1.16 [RQ.SRS008.AES.Functions.Check.Compression.LowCardinality](#rqsrs008aesfunctionscheckcompressionlowcardinality)
- * 4.2 [Specific](#specific)
- * 4.2.1 [RQ.SRS008.AES.Encrypt.Function](#rqsrs008aesencryptfunction)
- * 4.2.2 [RQ.SRS008.AES.Encrypt.Function.Syntax](#rqsrs008aesencryptfunctionsyntax)
- * 4.2.3 [RQ.SRS008.AES.Encrypt.Function.NIST.TestVectors](#rqsrs008aesencryptfunctionnisttestvectors)
- * 4.2.4 [RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText](#rqsrs008aesencryptfunctionparametersplaintext)
- * 4.2.5 [RQ.SRS008.AES.Encrypt.Function.Parameters.Key](#rqsrs008aesencryptfunctionparameterskey)
- * 4.2.6 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode](#rqsrs008aesencryptfunctionparametersmode)
- * 4.2.7 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesencryptfunctionparametersmodevaluesformat)
- * 4.2.8 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesencryptfunctionparametersmodevalueinvalid)
- * 4.2.9 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-ECB](#rqsrs008aesencryptfunctionparametersmodevalueaes-128-ecb)
- * 4.2.10 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-ECB](#rqsrs008aesencryptfunctionparametersmodevalueaes-192-ecb)
- * 4.2.11 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-ECB](#rqsrs008aesencryptfunctionparametersmodevalueaes-256-ecb)
- * 4.2.12 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CBC](#rqsrs008aesencryptfunctionparametersmodevalueaes-128-cbc)
- * 4.2.13 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CBC](#rqsrs008aesencryptfunctionparametersmodevalueaes-192-cbc)
- * 4.2.14 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CBC](#rqsrs008aesencryptfunctionparametersmodevalueaes-256-cbc)
- * 4.2.21 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CFB128](#rqsrs008aesencryptfunctionparametersmodevalueaes-128-cfb128)
- * 4.2.22 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CFB128](#rqsrs008aesencryptfunctionparametersmodevalueaes-192-cfb128)
- * 4.2.23 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CFB128](#rqsrs008aesencryptfunctionparametersmodevalueaes-256-cfb128)
- * 4.2.24 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-OFB](#rqsrs008aesencryptfunctionparametersmodevalueaes-128-ofb)
- * 4.2.25 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-OFB](#rqsrs008aesencryptfunctionparametersmodevalueaes-192-ofb)
- * 4.2.26 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-OFB](#rqsrs008aesencryptfunctionparametersmodevalueaes-256-ofb)
- * 4.2.27 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-GCM](#rqsrs008aesencryptfunctionparametersmodevalueaes-128-gcm)
- * 4.2.28 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-GCM](#rqsrs008aesencryptfunctionparametersmodevalueaes-192-gcm)
- * 4.2.29 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-GCM](#rqsrs008aesencryptfunctionparametersmodevalueaes-256-gcm)
- * 4.2.30 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CTR](#rqsrs008aesencryptfunctionparametersmodevalueaes-128-ctr)
- * 4.2.31 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CTR](#rqsrs008aesencryptfunctionparametersmodevalueaes-192-ctr)
- * 4.2.32 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CTR](#rqsrs008aesencryptfunctionparametersmodevalueaes-256-ctr)
- * 4.2.33 [RQ.SRS008.AES.Encrypt.Function.Parameters.InitializationVector](#rqsrs008aesencryptfunctionparametersinitializationvector)
- * 4.2.34 [RQ.SRS008.AES.Encrypt.Function.Parameters.AdditionalAuthenticatedData](#rqsrs008aesencryptfunctionparametersadditionalauthenticateddata)
- * 4.2.35 [RQ.SRS008.AES.Encrypt.Function.Parameters.ReturnValue](#rqsrs008aesencryptfunctionparametersreturnvalue)
- * 4.2.36 [RQ.SRS008.AES.Encrypt.Function.Key.Length.InvalidLengthError](#rqsrs008aesencryptfunctionkeylengthinvalidlengtherror)
- * 4.2.37 [RQ.SRS008.AES.Encrypt.Function.InitializationVector.Length.InvalidLengthError](#rqsrs008aesencryptfunctioninitializationvectorlengthinvalidlengtherror)
- * 4.2.38 [RQ.SRS008.AES.Encrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesencryptfunctioninitializationvectornotvalidformode)
- * 4.2.39 [RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.NotValidForMode](#rqsrs008aesencryptfunctionadditionalauthenticationdatanotvalidformode)
- * 4.2.40 [RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.Length](#rqsrs008aesencryptfunctionadditionalauthenticationdatalength)
- * 4.2.41 [RQ.SRS008.AES.Encrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-128-ecbkeyandinitializationvectorlength)
- * 4.2.42 [RQ.SRS008.AES.Encrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-192-ecbkeyandinitializationvectorlength)
- * 4.2.43 [RQ.SRS008.AES.Encrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-256-ecbkeyandinitializationvectorlength)
- * 4.2.44 [RQ.SRS008.AES.Encrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-128-cbckeyandinitializationvectorlength)
- * 4.2.45 [RQ.SRS008.AES.Encrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-192-cbckeyandinitializationvectorlength)
- * 4.2.46 [RQ.SRS008.AES.Encrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-256-cbckeyandinitializationvectorlength)
- * 4.2.53 [RQ.SRS008.AES.Encrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-128-cfb128keyandinitializationvectorlength)
- * 4.2.54 [RQ.SRS008.AES.Encrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-192-cfb128keyandinitializationvectorlength)
- * 4.2.55 [RQ.SRS008.AES.Encrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-256-cfb128keyandinitializationvectorlength)
- * 4.2.56 [RQ.SRS008.AES.Encrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-128-ofbkeyandinitializationvectorlength)
- * 4.2.57 [RQ.SRS008.AES.Encrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-192-ofbkeyandinitializationvectorlength)
- * 4.2.58 [RQ.SRS008.AES.Encrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-256-ofbkeyandinitializationvectorlength)
- * 4.2.59 [RQ.SRS008.AES.Encrypt.Function.AES-128-GCM.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-128-gcmkeyandinitializationvectorlength)
- * 4.2.60 [RQ.SRS008.AES.Encrypt.Function.AES-192-GCM.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-192-gcmkeyandinitializationvectorlength)
- * 4.2.61 [RQ.SRS008.AES.Encrypt.Function.AES-256-GCM.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-256-gcmkeyandinitializationvectorlength)
- * 4.2.62 [RQ.SRS008.AES.Encrypt.Function.AES-128-CTR.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-128-ctrkeyandinitializationvectorlength)
- * 4.2.63 [RQ.SRS008.AES.Encrypt.Function.AES-192-CTR.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-192-ctrkeyandinitializationvectorlength)
- * 4.2.64 [RQ.SRS008.AES.Encrypt.Function.AES-256-CTR.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionaes-256-ctrkeyandinitializationvectorlength)
- * 4.2.65 [RQ.SRS008.AES.Decrypt.Function](#rqsrs008aesdecryptfunction)
- * 4.2.66 [RQ.SRS008.AES.Decrypt.Function.Syntax](#rqsrs008aesdecryptfunctionsyntax)
- * 4.2.67 [RQ.SRS008.AES.Decrypt.Function.Parameters.CipherText](#rqsrs008aesdecryptfunctionparametersciphertext)
- * 4.2.68 [RQ.SRS008.AES.Decrypt.Function.Parameters.Key](#rqsrs008aesdecryptfunctionparameterskey)
- * 4.2.69 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode](#rqsrs008aesdecryptfunctionparametersmode)
- * 4.2.70 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesdecryptfunctionparametersmodevaluesformat)
- * 4.2.71 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesdecryptfunctionparametersmodevalueinvalid)
- * 4.2.72 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-ECB](#rqsrs008aesdecryptfunctionparametersmodevalueaes-128-ecb)
- * 4.2.73 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-ECB](#rqsrs008aesdecryptfunctionparametersmodevalueaes-192-ecb)
- * 4.2.74 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-ECB](#rqsrs008aesdecryptfunctionparametersmodevalueaes-256-ecb)
- * 4.2.75 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CBC](#rqsrs008aesdecryptfunctionparametersmodevalueaes-128-cbc)
- * 4.2.76 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CBC](#rqsrs008aesdecryptfunctionparametersmodevalueaes-192-cbc)
- * 4.2.77 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CBC](#rqsrs008aesdecryptfunctionparametersmodevalueaes-256-cbc)
- * 4.2.84 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CFB128](#rqsrs008aesdecryptfunctionparametersmodevalueaes-128-cfb128)
- * 4.2.85 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CFB128](#rqsrs008aesdecryptfunctionparametersmodevalueaes-192-cfb128)
- * 4.2.86 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CFB128](#rqsrs008aesdecryptfunctionparametersmodevalueaes-256-cfb128)
- * 4.2.87 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-OFB](#rqsrs008aesdecryptfunctionparametersmodevalueaes-128-ofb)
- * 4.2.88 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-OFB](#rqsrs008aesdecryptfunctionparametersmodevalueaes-192-ofb)
- * 4.2.89 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-OFB](#rqsrs008aesdecryptfunctionparametersmodevalueaes-256-ofb)
- * 4.2.90 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-GCM](#rqsrs008aesdecryptfunctionparametersmodevalueaes-128-gcm)
- * 4.2.91 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-GCM](#rqsrs008aesdecryptfunctionparametersmodevalueaes-192-gcm)
- * 4.2.92 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-GCM](#rqsrs008aesdecryptfunctionparametersmodevalueaes-256-gcm)
- * 4.2.93 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CTR](#rqsrs008aesdecryptfunctionparametersmodevalueaes-128-ctr)
- * 4.2.94 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CTR](#rqsrs008aesdecryptfunctionparametersmodevalueaes-192-ctr)
- * 4.2.95 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CTR](#rqsrs008aesdecryptfunctionparametersmodevalueaes-256-ctr)
- * 4.2.96 [RQ.SRS008.AES.Decrypt.Function.Parameters.InitializationVector](#rqsrs008aesdecryptfunctionparametersinitializationvector)
- * 4.2.97 [RQ.SRS008.AES.Decrypt.Function.Parameters.AdditionalAuthenticatedData](#rqsrs008aesdecryptfunctionparametersadditionalauthenticateddata)
- * 4.2.98 [RQ.SRS008.AES.Decrypt.Function.Parameters.ReturnValue](#rqsrs008aesdecryptfunctionparametersreturnvalue)
- * 4.2.99 [RQ.SRS008.AES.Decrypt.Function.Key.Length.InvalidLengthError](#rqsrs008aesdecryptfunctionkeylengthinvalidlengtherror)
- * 4.2.100 [RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError](#rqsrs008aesdecryptfunctioninitializationvectorlengthinvalidlengtherror)
- * 4.2.101 [RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesdecryptfunctioninitializationvectornotvalidformode)
- * 4.2.102 [RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.NotValidForMode](#rqsrs008aesdecryptfunctionadditionalauthenticationdatanotvalidformode)
- * 4.2.103 [RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.Length](#rqsrs008aesdecryptfunctionadditionalauthenticationdatalength)
- * 4.2.104 [RQ.SRS008.AES.Decrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-128-ecbkeyandinitializationvectorlength)
- * 4.2.105 [RQ.SRS008.AES.Decrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-192-ecbkeyandinitializationvectorlength)
- * 4.2.106 [RQ.SRS008.AES.Decrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-256-ecbkeyandinitializationvectorlength)
- * 4.2.107 [RQ.SRS008.AES.Decrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-128-cbckeyandinitializationvectorlength)
- * 4.2.108 [RQ.SRS008.AES.Decrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-192-cbckeyandinitializationvectorlength)
- * 4.2.109 [RQ.SRS008.AES.Decrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-256-cbckeyandinitializationvectorlength)
- * 4.2.116 [RQ.SRS008.AES.Decrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-128-cfb128keyandinitializationvectorlength)
- * 4.2.117 [RQ.SRS008.AES.Decrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-192-cfb128keyandinitializationvectorlength)
- * 4.2.118 [RQ.SRS008.AES.Decrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-256-cfb128keyandinitializationvectorlength)
- * 4.2.119 [RQ.SRS008.AES.Decrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-128-ofbkeyandinitializationvectorlength)
- * 4.2.120 [RQ.SRS008.AES.Decrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-192-ofbkeyandinitializationvectorlength)
- * 4.2.121 [RQ.SRS008.AES.Decrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-256-ofbkeyandinitializationvectorlength)
- * 4.2.122 [RQ.SRS008.AES.Decrypt.Function.AES-128-GCM.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-128-gcmkeyandinitializationvectorlength)
- * 4.2.123 [RQ.SRS008.AES.Decrypt.Function.AES-192-GCM.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-192-gcmkeyandinitializationvectorlength)
- * 4.2.124 [RQ.SRS008.AES.Decrypt.Function.AES-256-GCM.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-256-gcmkeyandinitializationvectorlength)
- * 4.2.125 [RQ.SRS008.AES.Decrypt.Function.AES-128-CTR.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-128-ctrkeyandinitializationvectorlength)
- * 4.2.126 [RQ.SRS008.AES.Decrypt.Function.AES-192-CTR.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-192-ctrkeyandinitializationvectorlength)
- * 4.2.127 [RQ.SRS008.AES.Decrypt.Function.AES-256-CTR.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionaes-256-ctrkeyandinitializationvectorlength)
- * 4.3 [MySQL Specific Functions](#mysql-specific-functions)
- * 4.3.1 [RQ.SRS008.AES.MySQL.Encrypt.Function](#rqsrs008aesmysqlencryptfunction)
- * 4.3.2 [RQ.SRS008.AES.MySQL.Encrypt.Function.Syntax](#rqsrs008aesmysqlencryptfunctionsyntax)
- * 4.3.3 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText](#rqsrs008aesmysqlencryptfunctionparametersplaintext)
- * 4.3.4 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key](#rqsrs008aesmysqlencryptfunctionparameterskey)
- * 4.3.5 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode](#rqsrs008aesmysqlencryptfunctionparametersmode)
- * 4.3.6 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesformat)
- * 4.3.7 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesmysqlencryptfunctionparametersmodevalueinvalid)
- * 4.3.8 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-ECB](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-128-ecb)
- * 4.3.9 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-ECB](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-192-ecb)
- * 4.3.10 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-ECB](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-256-ecb)
- * 4.3.11 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CBC](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-128-cbc)
- * 4.3.12 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CBC](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-192-cbc)
- * 4.3.13 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CBC](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-256-cbc)
- * 4.3.20 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CFB128](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-128-cfb128)
- * 4.3.21 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CFB128](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-192-cfb128)
- * 4.3.22 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CFB128](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-256-cfb128)
- * 4.3.23 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-OFB](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-128-ofb)
- * 4.3.24 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-OFB](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-192-ofb)
- * 4.3.25 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-OFB](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-256-ofb)
- * 4.3.26 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-GCM.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-128-gcmerror)
- * 4.3.27 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-GCM.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-192-gcmerror)
- * 4.3.28 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-GCM.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-256-gcmerror)
- * 4.3.29 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CTR.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-128-ctrerror)
- * 4.3.30 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CTR.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-192-ctrerror)
- * 4.3.31 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CTR.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevalueaes-256-ctrerror)
- * 4.3.32 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.InitializationVector](#rqsrs008aesmysqlencryptfunctionparametersinitializationvector)
- * 4.3.33 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.ReturnValue](#rqsrs008aesmysqlencryptfunctionparametersreturnvalue)
- * 4.3.34 [RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooShortError](#rqsrs008aesmysqlencryptfunctionkeylengthtooshorterror)
- * 4.3.35 [RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooLong](#rqsrs008aesmysqlencryptfunctionkeylengthtoolong)
- * 4.3.36 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooShortError](#rqsrs008aesmysqlencryptfunctioninitializationvectorlengthtooshorterror)
- * 4.3.37 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooLong](#rqsrs008aesmysqlencryptfunctioninitializationvectorlengthtoolong)
- * 4.3.38 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesmysqlencryptfunctioninitializationvectornotvalidformode)
- * 4.3.39 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-128-ecbkeyandinitializationvectorlength)
- * 4.3.40 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-192-ecbkeyandinitializationvectorlength)
- * 4.3.41 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-256-ecbkeyandinitializationvectorlength)
- * 4.3.42 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-128-cbckeyandinitializationvectorlength)
- * 4.3.43 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-192-cbckeyandinitializationvectorlength)
- * 4.3.44 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-256-cbckeyandinitializationvectorlength)
- * 4.3.51 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-128-cfb128keyandinitializationvectorlength)
- * 4.3.52 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-192-cfb128keyandinitializationvectorlength)
- * 4.3.53 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-256-cfb128keyandinitializationvectorlength)
- * 4.3.54 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-128-ofbkeyandinitializationvectorlength)
- * 4.3.55 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-192-ofbkeyandinitializationvectorlength)
- * 4.3.56 [RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionaes-256-ofbkeyandinitializationvectorlength)
- * 4.3.57 [RQ.SRS008.AES.MySQL.Decrypt.Function](#rqsrs008aesmysqldecryptfunction)
- * 4.3.58 [RQ.SRS008.AES.MySQL.Decrypt.Function.Syntax](#rqsrs008aesmysqldecryptfunctionsyntax)
- * 4.3.59 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.CipherText](#rqsrs008aesmysqldecryptfunctionparametersciphertext)
- * 4.3.60 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key](#rqsrs008aesmysqldecryptfunctionparameterskey)
- * 4.3.61 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode](#rqsrs008aesmysqldecryptfunctionparametersmode)
- * 4.3.62 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesformat)
- * 4.3.63 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesmysqldecryptfunctionparametersmodevalueinvalid)
- * 4.3.64 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-ECB](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-128-ecb)
- * 4.3.65 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-ECB](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-192-ecb)
- * 4.3.66 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-ECB](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-256-ecb)
- * 4.3.67 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CBC](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-128-cbc)
- * 4.3.68 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CBC](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-192-cbc)
- * 4.3.69 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CBC](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-256-cbc)
- * 4.3.76 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CFB128](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-128-cfb128)
- * 4.3.77 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CFB128](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-192-cfb128)
- * 4.3.78 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CFB128](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-256-cfb128)
- * 4.3.79 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-OFB](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-128-ofb)
- * 4.3.80 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-OFB](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-192-ofb)
- * 4.3.81 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-OFB](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-256-ofb)
- * 4.3.82 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-GCM.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-128-gcmerror)
- * 4.3.83 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-GCM.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-192-gcmerror)
- * 4.3.84 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-GCM.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-256-gcmerror)
- * 4.3.85 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CTR.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-128-ctrerror)
- * 4.3.86 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CTR.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-192-ctrerror)
- * 4.3.87 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CTR.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevalueaes-256-ctrerror)
- * 4.3.88 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.InitializationVector](#rqsrs008aesmysqldecryptfunctionparametersinitializationvector)
- * 4.3.89 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.ReturnValue](#rqsrs008aesmysqldecryptfunctionparametersreturnvalue)
- * 4.3.90 [RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooShortError](#rqsrs008aesmysqldecryptfunctionkeylengthtooshorterror)
- * 4.3.91 [RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooLong](#rqsrs008aesmysqldecryptfunctionkeylengthtoolong)
- * 4.3.92 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooShortError](#rqsrs008aesmysqldecryptfunctioninitializationvectorlengthtooshorterror)
- * 4.3.93 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooLong](#rqsrs008aesmysqldecryptfunctioninitializationvectorlengthtoolong)
- * 4.3.94 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesmysqldecryptfunctioninitializationvectornotvalidformode)
- * 4.3.95 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-128-ecbkeyandinitializationvectorlength)
- * 4.3.96 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-192-ecbkeyandinitializationvectorlength)
- * 4.3.97 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-256-ecbkeyandinitializationvectorlength)
- * 4.3.98 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-128-cbckeyandinitializationvectorlength)
- * 4.3.99 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-192-cbckeyandinitializationvectorlength)
- * 4.3.100 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-256-cbckeyandinitializationvectorlength)
- * 4.3.107 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-128-cfb128keyandinitializationvectorlength)
- * 4.3.108 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-192-cfb128keyandinitializationvectorlength)
- * 4.3.109 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-256-cfb128keyandinitializationvectorlength)
- * 4.3.110 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-128-ofbkeyandinitializationvectorlength)
- * 4.3.111 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-192-ofbkeyandinitializationvectorlength)
- * 4.3.112 [RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionaes-256-ofbkeyandinitializationvectorlength)
-* 5 [References](#references)
-
-## Revision History
-
-This document is stored in an electronic form using [Git] source control management software
-hosted in a [GitHub Repository].
-All the updates are tracked using the [Revision History].
-
-## Introduction
-
-Users need an ability to encrypt and decrypt column data with tenant specific keys.
-Use cases include protection of sensitive column values and [GDPR] right to forget policies.
-The implementation will support capabilities of the [MySQL aes_encrypt] and [MySQL aes_decrypt]
-functions which encrypt and decrypt values using the [AES] (Advanced Encryption Standard)
-algorithm. This functionality will enable encryption and decryption of data
-accessed on remote [MySQL] servers via [MySQL Dictionary] or [MySQL Database Engine],
-[MySQL Table Engine], or [MySQL Table Function].
-
-## Terminology
-
-* **AES** -
- Advanced Encryption Standard ([AES])
-
-## Requirements
-
-### Generic
-
-#### RQ.SRS008.AES.Functions
-version: 1.0
-
-[ClickHouse] SHALL support [AES] encryption functions to encrypt and decrypt data.
-
-#### RQ.SRS008.AES.Functions.Compatability.MySQL
-version: 1.0
-
-[ClickHouse] SHALL support [AES] encryption functions compatible with [MySQL 5.7].
-
-#### RQ.SRS008.AES.Functions.Compatability.Dictionaries
-version: 1.0
-
-[ClickHouse] SHALL support encryption and decryption of data accessed on remote
-[MySQL] servers using [MySQL Dictionary].
-
-#### RQ.SRS008.AES.Functions.Compatability.Engine.Database.MySQL
-version: 1.0
-
-[ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Database Engine],
-
-#### RQ.SRS008.AES.Functions.Compatability.Engine.Table.MySQL
-version: 1.0
-
-[ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Table Engine].
-
-#### RQ.SRS008.AES.Functions.Compatability.TableFunction.MySQL
-version: 1.0
-
-[ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Table Function].
-
-#### RQ.SRS008.AES.Functions.DifferentModes
-version: 1.0
-
-[ClickHouse] SHALL allow different modes to be supported in a single SQL statement
-using explicit function parameters.
-
-#### RQ.SRS008.AES.Functions.DataFromMultipleSources
-version: 1.0
-
-[ClickHouse] SHALL support handling encryption and decryption of data from multiple sources
-in the `SELECT` statement, including [ClickHouse] [MergeTree] table as well as [MySQL Dictionary],
-[MySQL Database Engine], [MySQL Table Engine], and [MySQL Table Function]
-with possibly different encryption schemes.
-
-#### RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues
-version: 1.0
-
-[ClickHouse] SHALL suppress output of [AES] `string` and `key` parameters to the system log,
-error log, and `query_log` table to prevent leakage of sensitive values.
-
-#### RQ.SRS008.AES.Functions.InvalidParameters
-version: 1.0
-
-[ClickHouse] SHALL return an error when parameters are invalid.
-
-#### RQ.SRS008.AES.Functions.Mismatched.Key
-version: 1.0
-
-[ClickHouse] SHALL return garbage for mismatched keys.
-
-#### RQ.SRS008.AES.Functions.Mismatched.IV
-version: 1.0
-
-[ClickHouse] SHALL return garbage for mismatched initialization vector for the modes that use it.
-
-#### RQ.SRS008.AES.Functions.Mismatched.AAD
-version: 1.0
-
-[ClickHouse] SHALL return garbage for mismatched additional authentication data for the modes that use it.
-
-#### RQ.SRS008.AES.Functions.Mismatched.Mode
-version: 1.0
-
-[ClickHouse] SHALL return an error or garbage for mismatched mode.
-
-#### RQ.SRS008.AES.Functions.Check.Performance
-version: 1.0
-
-Performance of [AES] encryption functions SHALL be measured.
-
-#### RQ.SRS008.AES.Function.Check.Performance.BestCase
-version: 1.0
-
-Performance of [AES] encryption functions SHALL be checked for the best case
-scenario where there is one key, one initialization vector, and one large stream of data.
-
-#### RQ.SRS008.AES.Function.Check.Performance.WorstCase
-version: 1.0
-
-Performance of [AES] encryption functions SHALL be checked for the worst case
-where there are `N` keys, `N` initialization vectors and `N` very small streams of data.
-
-#### RQ.SRS008.AES.Functions.Check.Compression
-version: 1.0
-
-Effect of [AES] encryption on column compression SHALL be measured.
-
-#### RQ.SRS008.AES.Functions.Check.Compression.LowCardinality
-version: 1.0
-
-Effect of [AES] encryption on the compression of a column with [LowCardinality] data type
-SHALL be measured.
-
-### Specific
-
-#### RQ.SRS008.AES.Encrypt.Function
-version: 1.0
-
-[ClickHouse] SHALL support `aes_encrypt` function to encrypt data using [AES].
-
-#### RQ.SRS008.AES.Encrypt.Function.Syntax
-version: 1.0
-
-[ClickHouse] SHALL support the following syntax for the `aes_encrypt` function
-
-```sql
-aes_encrypt(plaintext, key, mode, [iv, aad])
-```
-
-#### RQ.SRS008.AES.Encrypt.Function.NIST.TestVectors
-version: 1.0
-
-[ClickHouse] `aes_encrypt` function output SHALL produce output that matches [NIST test vectors].
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText
-version: 1.0
-
-[ClickHouse] SHALL support `plaintext` accepting any data type as
-the first parameter to the `aes_encrypt` function that SHALL specify the data to be encrypted.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Key
-version: 1.0
-
-[ClickHouse] SHALL support `key` with `String` or `FixedString` data types
-as the second parameter to the `aes_encrypt` function that SHALL specify the encryption key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode
-version: 1.0
-
-[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter
-to the `aes_encrypt` function that SHALL specify encryption key length and block encryption mode.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat
-version: 1.0
-
-[ClickHouse] SHALL support values of the form `aes-[key length]-[mode]` for the `mode` parameter
-of the `aes_encrypt` function where
-the `key_length` SHALL specifies the length of the key and SHALL accept
-`128`, `192`, or `256` as the values and the `mode` SHALL specify the block encryption
-mode and SHALL accept [ECB], [CBC], [CFB128], or [OFB] as well as
-[CTR] and [GCM] as the values. For example, `aes-256-ofb`.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.Invalid
-version: 1.0
-
-[ClickHouse] SHALL return an error if the specified value for the `mode` parameter of the `aes_encrypt`
-function is not valid with the exception where such a mode is supported by the underlying
-[OpenSSL] implementation.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ecb` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ecb` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ecb` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cbc` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cbc` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cbc` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cfb128` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cfb128` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cfb128` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ofb` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ofb` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ofb` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-GCM
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-gcm` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [GCM] block mode encryption with a 128 bit key.
-An `AEAD` 16-byte tag is appended to the resulting ciphertext according to
-the [RFC5116].
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-GCM
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-gcm` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [GCM] block mode encryption with a 192 bit key.
-An `AEAD` 16-byte tag is appended to the resulting ciphertext according to
-the [RFC5116].
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-GCM
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-gcm` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [GCM] block mode encryption with a 256 bit key.
-An `AEAD` 16-byte tag is appended to the resulting ciphertext according to
-the [RFC5116].
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-128-CTR
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ctr` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CTR] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-192-CTR
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ctr` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CTR] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.AES-256-CTR
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ctr` as the value for the `mode` parameter of the `aes_encrypt` function
-and [AES] algorithm SHALL use the [CTR] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.InitializationVector
-version: 1.0
-
-[ClickHouse] SHALL support `iv` with `String` or `FixedString` data types as the optional fourth
-parameter to the `aes_encrypt` function that SHALL specify the initialization vector for block modes that require
-it.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.AdditionalAuthenticatedData
-version: 1.0
-
-[ClickHouse] SHALL support `aad` with `String` or `FixedString` data types as the optional fifth
-parameter to the `aes_encrypt` function that SHALL specify the additional authenticated data
-for block modes that require it.
-
-#### RQ.SRS008.AES.Encrypt.Function.Parameters.ReturnValue
-version: 1.0
-
-[ClickHouse] SHALL return the encrypted value of the data
-using `String` data type as the result of `aes_encrypt` function.
-
-#### RQ.SRS008.AES.Encrypt.Function.Key.Length.InvalidLengthError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `key` length is not exact for the `aes_encrypt` function for a given block mode.
-
-#### RQ.SRS008.AES.Encrypt.Function.InitializationVector.Length.InvalidLengthError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` length is specified and not of the exact size for the `aes_encrypt` function for a given block mode.
-
-#### RQ.SRS008.AES.Encrypt.Function.InitializationVector.NotValidForMode
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` is specified for the `aes_encrypt` function for a mode that does not need it.
-
-#### RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.NotValidForMode
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `aad` is specified for the `aes_encrypt` function for a mode that does not need it.
-
-#### RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.Length
-version: 1.0
-
-[ClickHouse] SHALL not limit the size of the `aad` parameter passed to the `aes_encrypt` function.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-ecb` and `key` is not 16 bytes
-or `iv` or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-ecb` and `key` is not 24 bytes
-or `iv` or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-ecb` and `key` is not 32 bytes
-or `iv` or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-cbc` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-cbc` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-cbc` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-cfb128` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-cfb128` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-cfb128` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-ofb` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-ofb` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-ofb` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-128-GCM.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-gcm` and `key` is not 16 bytes
-or `iv` is not specified or is less than 8 bytes.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-192-GCM.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-gcm` and `key` is not 24 bytes
-or `iv` is not specified or is less than 8 bytes.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-256-GCM.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-gcm` and `key` is not 32 bytes
-or `iv` is not specified or is less than 8 bytes.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-128-CTR.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-128-ctr` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-192-CTR.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-192-ctr` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes.
-
-#### RQ.SRS008.AES.Encrypt.Function.AES-256-CTR.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt` function is set to `aes-256-ctr` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes.
-
-#### RQ.SRS008.AES.Decrypt.Function
-version: 1.0
-
-[ClickHouse] SHALL support `aes_decrypt` function to decrypt data using [AES].
-
-#### RQ.SRS008.AES.Decrypt.Function.Syntax
-version: 1.0
-
-[ClickHouse] SHALL support the following syntax for the `aes_decrypt` function
-
-```sql
-aes_decrypt(ciphertext, key, mode, [iv, aad])
-```
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.CipherText
-version: 1.0
-
-[ClickHouse] SHALL support `ciphertext` accepting `FixedString` or `String` data types as
-the first parameter to the `aes_decrypt` function that SHALL specify the data to be decrypted.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Key
-version: 1.0
-
-[ClickHouse] SHALL support `key` with `String` or `FixedString` data types
-as the second parameter to the `aes_decrypt` function that SHALL specify the encryption key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode
-version: 1.0
-
-[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter
-to the `aes_decrypt` function that SHALL specify encryption key length and block encryption mode.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat
-version: 1.0
-
-[ClickHouse] SHALL support values of the form `aes-[key length]-[mode]` for the `mode` parameter
-of the `aes_decrypt` function where
-the `key_length` SHALL specifies the length of the key and SHALL accept
-`128`, `192`, or `256` as the values and the `mode` SHALL specify the block encryption
-mode and SHALL accept [ECB], [CBC], [CFB128], or [OFB] as well as
-[CTR] and [GCM] as the values. For example, `aes-256-ofb`.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.Invalid
-version: 1.0
-
-[ClickHouse] SHALL return an error if the specified value for the `mode` parameter of the `aes_decrypt`
-function is not valid with the exception where such a mode is supported by the underlying
-[OpenSSL] implementation.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ecb` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ecb` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ecb` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cbc` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cbc` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cbc` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cfb128` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cfb128` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cfb128` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ofb` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ofb` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ofb` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-GCM
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-gcm` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [GCM] block mode encryption with a 128 bit key.
-An [AEAD] 16-byte tag is expected present at the end of the ciphertext according to
-the [RFC5116].
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-GCM
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-gcm` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [GCM] block mode encryption with a 192 bit key.
-An [AEAD] 16-byte tag is expected present at the end of the ciphertext according to
-the [RFC5116].
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-GCM
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-gcm` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [GCM] block mode encryption with a 256 bit key.
-An [AEAD] 16-byte tag is expected present at the end of the ciphertext according to
-the [RFC5116].
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-128-CTR
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ctr` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CTR] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-192-CTR
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ctr` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CTR] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.AES-256-CTR
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ctr` as the value for the `mode` parameter of the `aes_decrypt` function
-and [AES] algorithm SHALL use the [CTR] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.InitializationVector
-version: 1.0
-
-[ClickHouse] SHALL support `iv` with `String` or `FixedString` data types as the optional fourth
-parameter to the `aes_decrypt` function that SHALL specify the initialization vector for block modes that require
-it.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.AdditionalAuthenticatedData
-version: 1.0
-
-[ClickHouse] SHALL support `aad` with `String` or `FixedString` data types as the optional fifth
-parameter to the `aes_decrypt` function that SHALL specify the additional authenticated data
-for block modes that require it.
-
-#### RQ.SRS008.AES.Decrypt.Function.Parameters.ReturnValue
-version: 1.0
-
-[ClickHouse] SHALL return the decrypted value of the data
-using `String` data type as the result of `aes_decrypt` function.
-
-#### RQ.SRS008.AES.Decrypt.Function.Key.Length.InvalidLengthError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `key` length is not exact for the `aes_decrypt` function for a given block mode.
-
-#### RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` is speficified and the length is not exact for the `aes_decrypt` function for a given block mode.
-
-#### RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` is specified for the `aes_decrypt` function
-for a mode that does not need it.
-
-#### RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.NotValidForMode
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `aad` is specified for the `aes_decrypt` function
-for a mode that does not need it.
-
-#### RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.Length
-version: 1.0
-
-[ClickHouse] SHALL not limit the size of the `aad` parameter passed to the `aes_decrypt` function.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-ecb` and `key` is not 16 bytes
-or `iv` or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-ecb` and `key` is not 24 bytes
-or `iv` or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-ecb` and `key` is not 32 bytes
-or `iv` or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-cbc` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-cbc` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-cbc` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-cfb128` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-cfb128` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-cfb128` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-ofb` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-ofb` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-ofb` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes or `aad` is specified.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-128-GCM.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-gcm` and `key` is not 16 bytes
-or `iv` is not specified or is less than 8 bytes.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-192-GCM.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-gcm` and `key` is not 24 bytes
-or `iv` is not specified or is less than 8 bytes.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-256-GCM.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-gcm` and `key` is not 32 bytes
-or `iv` is not specified or is less than 8 bytes.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-128-CTR.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-128-ctr` and `key` is not 16 bytes
-or if specified `iv` is not 16 bytes.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-192-CTR.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-192-ctr` and `key` is not 24 bytes
-or if specified `iv` is not 16 bytes.
-
-#### RQ.SRS008.AES.Decrypt.Function.AES-256-CTR.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt` function is set to `aes-256-ctr` and `key` is not 32 bytes
-or if specified `iv` is not 16 bytes.
-
-### MySQL Specific Functions
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function
-version: 1.0
-
-[ClickHouse] SHALL support `aes_encrypt_mysql` function to encrypt data using [AES].
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Syntax
-version: 1.0
-
-[ClickHouse] SHALL support the following syntax for the `aes_encrypt_mysql` function
-
-```sql
-aes_encrypt_mysql(plaintext, key, mode, [iv])
-```
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText
-version: 1.0
-
-[ClickHouse] SHALL support `plaintext` accepting any data type as
-the first parameter to the `aes_encrypt_mysql` function that SHALL specify the data to be encrypted.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key
-version: 1.0
-
-[ClickHouse] SHALL support `key` with `String` or `FixedString` data types
-as the second parameter to the `aes_encrypt_mysql` function that SHALL specify the encryption key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode
-version: 1.0
-
-[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter
-to the `aes_encrypt_mysql` function that SHALL specify encryption key length and block encryption mode.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat
-version: 1.0
-
-[ClickHouse] SHALL support values of the form `aes-[key length]-[mode]` for the `mode` parameter
-of the `aes_encrypt_mysql` function where
-the `key_length` SHALL specifies the length of the key and SHALL accept
-`128`, `192`, or `256` as the values and the `mode` SHALL specify the block encryption
-mode and SHALL accept [ECB], [CBC], [CFB128], or [OFB]. For example, `aes-256-ofb`.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.Invalid
-version: 1.0
-
-[ClickHouse] SHALL return an error if the specified value for the `mode` parameter of the `aes_encrypt_mysql`
-function is not valid with the exception where such a mode is supported by the underlying
-[OpenSSL] implementation.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ecb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ecb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ecb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cbc` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cbc` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cbc` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cfb128` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cfb128` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cfb128` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ofb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ofb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ofb` as the value for the `mode` parameter of the `aes_encrypt_mysql` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-GCM.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-128-gcm` is specified as the value for the `mode` parameter of the
-`aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-GCM.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-192-gcm` is specified as the value for the `mode` parameter of the
-`aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-GCM.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-256-gcm` is specified as the value for the `mode` parameter of the
-`aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-128-CTR.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-128-ctr` is specified as the value for the `mode` parameter of the
-`aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-192-CTR.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-192-ctr` is specified as the value for the `mode` parameter of the
-`aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.AES-256-CTR.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-256-ctr` is specified as the value for the `mode` parameter of the
-`aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.InitializationVector
-version: 1.0
-
-[ClickHouse] SHALL support `iv` with `String` or `FixedString` data types as the optional fourth
-parameter to the `aes_encrypt_mysql` function that SHALL specify the initialization vector for block modes that require
-it.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.ReturnValue
-version: 1.0
-
-[ClickHouse] SHALL return the encrypted value of the data
-using `String` data type as the result of `aes_encrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooShortError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `key` length is less than the minimum for the `aes_encrypt_mysql`
-function for a given block mode.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooLong
-version: 1.0
-
-[ClickHouse] SHALL use folding algorithm specified below if the `key` length is longer than required
-for the `aes_encrypt_mysql` function for a given block mode.
-
-```python
-def fold_key(key, cipher_key_size):
- key = list(key) if not isinstance(key, (list, tuple)) else key
- folded_key = key[:cipher_key_size]
- for i in range(cipher_key_size, len(key)):
- print(i % cipher_key_size, i)
- folded_key[i % cipher_key_size] ^= key[i]
- return folded_key
-```
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooShortError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` length is specified and is less than the minimum
-that is required for the `aes_encrypt_mysql` function for a given block mode.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooLong
-version: 1.0
-
-[ClickHouse] SHALL use the first `N` bytes that are required if the `iv` is specified and
-its length is longer than required for the `aes_encrypt_mysql` function for a given block mode.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.NotValidForMode
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` is specified for the `aes_encrypt_mysql`
-function for a mode that does not need it.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-128-ecb` and `key` is less than 16 bytes
-or `iv` is specified.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-192-ecb` and `key` is less than 24 bytes
-or `iv` is specified.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-256-ecb` and `key` is less than 32 bytes
-or `iv` is specified.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-128-cbc` and `key` is less than 16 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-192-cbc` and `key` is less than 24 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-256-cbc` and `key` is less than 32 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-128-cfb128` and `key` is less than 16 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-192-cfb128` and `key` is less than 24 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-256-cfb128` and `key` is less than 32 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-128-ofb` and `key` is less than 16 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-192-ofb` and `key` is less than 24 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Encrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_encrypt_mysql` function is set to `aes-256-ofb` and `key` is less than 32 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function
-version: 1.0
-
-[ClickHouse] SHALL support `aes_decrypt_mysql` function to decrypt data using [AES].
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Syntax
-version: 1.0
-
-[ClickHouse] SHALL support the following syntax for the `aes_decrypt_mysql` function
-
-```sql
-aes_decrypt_mysql(ciphertext, key, mode, [iv])
-```
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.CipherText
-version: 1.0
-
-[ClickHouse] SHALL support `ciphertext` accepting any data type as
-the first parameter to the `aes_decrypt_mysql` function that SHALL specify the data to be decrypted.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key
-version: 1.0
-
-[ClickHouse] SHALL support `key` with `String` or `FixedString` data types
-as the second parameter to the `aes_decrypt_mysql` function that SHALL specify the encryption key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode
-version: 1.0
-
-[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter
-to the `aes_decrypt_mysql` function that SHALL specify encryption key length and block encryption mode.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat
-version: 1.0
-
-[ClickHouse] SHALL support values of the form `aes-[key length]-[mode]` for the `mode` parameter
-of the `aes_decrypt_mysql` function where
-the `key_length` SHALL specifies the length of the key and SHALL accept
-`128`, `192`, or `256` as the values and the `mode` SHALL specify the block encryption
-mode and SHALL accept [ECB], [CBC], [CFB128], or [OFB]. For example, `aes-256-ofb`.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.Invalid
-version: 1.0
-
-[ClickHouse] SHALL return an error if the specified value for the `mode` parameter of the `aes_decrypt_mysql`
-function is not valid with the exception where such a mode is supported by the underlying
-[OpenSSL] implementation.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ecb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ecb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-ECB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ecb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [ECB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cbc` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cbc` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CBC
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cbc` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [CBC] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-cfb128` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-cfb128` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CFB128
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-cfb128` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [CFB128] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-128-ofb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 128 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-192-ofb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 192 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-OFB
-version: 1.0
-
-[ClickHouse] SHALL support `aes-256-ofb` as the value for the `mode` parameter of the `aes_decrypt_mysql` function
-and [AES] algorithm SHALL use the [OFB] block mode encryption with a 256 bit key.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-GCM.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-128-gcm` is specified as the value for the `mode` parameter of the
-`aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-GCM.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-192-gcm` is specified as the value for the `mode` parameter of the
-`aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-GCM.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-256-gcm` is specified as the value for the `mode` parameter of the
-`aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-128-CTR.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-128-ctr` is specified as the value for the `mode` parameter of the
-`aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-192-CTR.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-192-ctr` is specified as the value for the `mode` parameter of the
-`aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.AES-256-CTR.Error
-version: 1.0
-
-[ClickHouse] SHALL return an error if `aes-256-ctr` is specified as the value for the `mode` parameter of the
-`aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.InitializationVector
-version: 1.0
-
-[ClickHouse] SHALL support `iv` with `String` or `FixedString` data types as the optional fourth
-parameter to the `aes_decrypt_mysql` function that SHALL specify the initialization vector for block modes that require
-it.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.ReturnValue
-version: 1.0
-
-[ClickHouse] SHALL return the decrypted value of the data
-using `String` data type as the result of `aes_decrypt_mysql` function.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooShortError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `key` length is less than the minimum for the `aes_decrypt_mysql`
-function for a given block mode.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooLong
-version: 1.0
-
-[ClickHouse] SHALL use folding algorithm specified below if the `key` length is longer than required
-for the `aes_decrypt_mysql` function for a given block mode.
-
-```python
-def fold_key(key, cipher_key_size):
- key = list(key) if not isinstance(key, (list, tuple)) else key
- folded_key = key[:cipher_key_size]
- for i in range(cipher_key_size, len(key)):
- print(i % cipher_key_size, i)
- folded_key[i % cipher_key_size] ^= key[i]
- return folded_key
-```
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooShortError
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` length is specified and is less than the minimum
-that is required for the `aes_decrypt_mysql` function for a given block mode.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooLong
-version: 1.0
-
-[ClickHouse] SHALL use the first `N` bytes that are required if the `iv` is specified and
-its length is longer than required for the `aes_decrypt_mysql` function for a given block mode.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.NotValidForMode
-version: 1.0
-
-[ClickHouse] SHALL return an error if the `iv` is specified for the `aes_decrypt_mysql`
-function for a mode that does not need it.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-128-ecb` and `key` is less than 16 bytes
-or `iv` is specified.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-192-ecb` and `key` is less than 24 bytes
-or `iv` is specified.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-ECB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-256-ecb` and `key` is less than 32 bytes
-or `iv` is specified.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-128-cbc` and `key` is less than 16 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-192-cbc` and `key` is less than 24 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-CBC.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-256-cbc` and `key` is less than 32 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-128-cfb128` and `key` is less than 16 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-192-cfb128` and `key` is less than 24 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-CFB128.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-256-cfb128` and `key` is less than 32 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-128-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-128-ofb` and `key` is less than 16 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-192-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-192-ofb` and `key` is less than 24 bytes
-or if specified `iv` is less than 16 bytes.
-
-#### RQ.SRS008.AES.MySQL.Decrypt.Function.AES-256-OFB.KeyAndInitializationVector.Length
-version: 1.0
-
-[ClickHouse] SHALL return an error when `mode` for the `aes_decrypt_mysql` function is set to `aes-256-ofb` and `key` is less than 32 bytes
-or if specified `iv` is less than 16 bytes.
-
-## References
-
-* **GDPR:** https://en.wikipedia.org/wiki/General_Data_Protection_Regulation
-* **MySQL:** https://www.mysql.com/
-* **AES:** https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
-* **ClickHouse:** https://clickhouse.tech
-* **Git:** https://git-scm.com/
-
-[OpenSSL]: https://www.openssl.org/
-[LowCardinality]: https://clickhouse.tech/docs/en/sql-reference/data-types/lowcardinality/
-[MergeTree]: https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/mergetree/
-[MySQL Database Engine]: https://clickhouse.tech/docs/en/engines/database-engines/mysql/
-[MySQL Table Engine]: https://clickhouse.tech/docs/en/engines/table-engines/integrations/mysql/
-[MySQL Table Function]: https://clickhouse.tech/docs/en/sql-reference/table-functions/mysql/
-[MySQL Dictionary]: https://clickhouse.tech/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources/#dicts-external_dicts_dict_sources-mysql
-[GCM]: https://en.wikipedia.org/wiki/Galois/Counter_Mode
-[CTR]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_(CTR)
-[CBC]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_block_chaining_(CBC)
-[ECB]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_codebook_(ECB)
-[CFB]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_feedback_(CFB)
-[CFB1]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_feedback_(CFB)
-[CFB8]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_feedback_(CFB)
-[CFB128]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_feedback_(CFB)
-[OFB]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Output_feedback_(OFB)
-[GDPR]: https://en.wikipedia.org/wiki/General_Data_Protection_Regulation
-[RFC5116]: https://tools.ietf.org/html/rfc5116#section-5.1
-[MySQL]: https://www.mysql.com/
-[MySQL 5.7]: https://dev.mysql.com/doc/refman/5.7/en/
-[MySQL aes_encrypt]: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_aes-encrypt
-[MySQL aes_decrypt]: https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_aes-decrypt
-[AES]: https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
-[ClickHouse]: https://clickhouse.tech
-[GitHub repository]: https://github.com/ClickHouse/ClickHouse/blob/master/tests/testflows/aes_encryption/requirements/requirements.md
-[Revision history]: https://github.com/ClickHouse/ClickHouse/commits/master/tests/testflows/aes_encryption/requirements/requirements.md
-[Git]: https://git-scm.com/
-[NIST test vectors]: https://csrc.nist.gov/Projects/Cryptographic-Algorithm-Validation-Program
-''')
diff --git a/tests/testflows/aes_encryption/tests/common.py b/tests/testflows/aes_encryption/tests/common.py
deleted file mode 100644
index 9a2391e073..0000000000
--- a/tests/testflows/aes_encryption/tests/common.py
+++ /dev/null
@@ -1,128 +0,0 @@
-# -*- coding: utf-8 -*-
-modes = [
- # mode, key_len, iv_len, aad
- ("'aes-128-ecb'", 16, None, None),
- ("'aes-192-ecb'", 24, None, None),
- ("'aes-256-ecb'", 32, None, None),
- # cbc
- ("'aes-128-cbc'", 16, None, None),
- ("'aes-192-cbc'", 24, None, None),
- ("'aes-256-cbc'", 32, None, None),
- ("'aes-128-cbc'", 16, 16, None),
- ("'aes-192-cbc'", 24, 16, None),
- ("'aes-256-cbc'", 32, 16, None),
- # cfb128
- ("'aes-128-cfb128'", 16, None, None),
- ("'aes-192-cfb128'", 24, None, None),
- ("'aes-256-cfb128'", 32, None, None),
- ("'aes-128-cfb128'", 16, 16, None),
- ("'aes-192-cfb128'", 24, 16, None),
- ("'aes-256-cfb128'", 32, 16, None),
- # ofb
- ("'aes-128-ofb'", 16, None, None),
- ("'aes-192-ofb'", 24, None, None),
- ("'aes-256-ofb'", 32, None, None),
- ("'aes-128-ofb'", 16, 16, None),
- ("'aes-192-ofb'", 24, 16, None),
- ("'aes-256-ofb'", 32, 16, None),
- # gcm
- ("'aes-128-gcm'", 16, 12, None),
- ("'aes-192-gcm'", 24, 12, None),
- ("'aes-256-gcm'", 32, 12, None),
- ("'aes-128-gcm'", 16, 12, True),
- ("'aes-192-gcm'", 24, 12, True),
- ("'aes-256-gcm'", 32, 12, True),
- # ctr
- ("'aes-128-ctr'", 16, None, None),
- ("'aes-192-ctr'", 24, None, None),
- ("'aes-256-ctr'", 32, None, None),
- ("'aes-128-ctr'", 16, 16, None),
- ("'aes-192-ctr'", 24, 16, None),
- ("'aes-256-ctr'", 32, 16, None),
-]
-
-mysql_modes = [
- # mode, key_len, iv_len
- ("'aes-128-ecb'", 16, None),
- ("'aes-128-ecb'", 24, None),
- ("'aes-192-ecb'", 24, None),
- ("'aes-192-ecb'", 32, None),
- ("'aes-256-ecb'", 32, None),
- ("'aes-256-ecb'", 64, None),
- # cbc
- ("'aes-128-cbc'", 16, None),
- ("'aes-192-cbc'", 24, None),
- ("'aes-256-cbc'", 32, None),
- ("'aes-128-cbc'", 16, 16),
- ("'aes-128-cbc'", 24, 24),
- ("'aes-192-cbc'", 24, 16),
- ("'aes-192-cbc'", 32, 32),
- ("'aes-256-cbc'", 32, 16),
- ("'aes-256-cbc'", 64, 64),
- # cfb128
- ("'aes-128-cfb128'", 16, None),
- ("'aes-192-cfb128'", 24, None),
- ("'aes-256-cfb128'", 32, None),
- ("'aes-128-cfb128'", 16, 16),
- ("'aes-128-cfb128'", 24, 24),
- ("'aes-192-cfb128'", 24, 16),
- ("'aes-192-cfb128'", 32, 32),
- ("'aes-256-cfb128'", 32, 16),
- ("'aes-256-cfb128'", 64, 64),
- # ofb
- ("'aes-128-ofb'", 16, None),
- ("'aes-192-ofb'", 24, None),
- ("'aes-256-ofb'", 32, None),
- ("'aes-128-ofb'", 16, 16),
- ("'aes-128-ofb'", 24, 24),
- ("'aes-192-ofb'", 24, 16),
- ("'aes-192-ofb'", 32, 32),
- ("'aes-256-ofb'", 32, 16),
- ("'aes-256-ofb'", 64, 64),
-]
-
-plaintexts = [
- ("bytes", "unhex('0')"),
- ("emptystring", "''"),
- ("utf8string", "'Gãńdåłf_Thê_Gręât'"),
- ("utf8fixedstring", "toFixedString('Gãńdåłf_Thê_Gręât', 24)"),
- ("String", "'1'"),
- ("FixedString", "toFixedString('1', 1)"),
- ("UInt8", "toUInt8('1')"),
- ("UInt16", "toUInt16('1')"),
- ("UInt32", "toUInt32('1')"),
- ("UInt64", "toUInt64('1')"),
- ("Int8", "toInt8('1')"),
- ("Int16", "toInt16('1')"),
- ("Int32", "toInt32('1')"),
- ("Int64", "toInt64('1')"),
- ("Float32", "toFloat32('1')"),
- ("Float64", "toFloat64('1')"),
- ("Decimal32", "toDecimal32(2, 4)"),
- ("Decimal64", "toDecimal64(2, 4)"),
- ("Decimal128", "toDecimal128(2, 4)"),
- ("UUID", "toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0')"),
- ("Date", "toDate('2020-01-01')"),
- ("DateTime", "toDateTime('2020-01-01 20:01:02')"),
- ("DateTime64", "toDateTime64('2020-01-01 20:01:02.123', 3)"),
- ("LowCardinality", "toLowCardinality('1')"),
- ("Array", "[1,2]"),
- #("Tuple", "(1,'a')") - not supported
- #("Nullable, "Nullable(X)") - not supported
- ("NULL", "toDateOrNull('foo')"),
- ("IPv4", "toIPv4('171.225.130.45')"),
- ("IPv6", "toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001')"),
- ("Enum8", r"CAST('a', 'Enum8(\'a\' = 1, \'b\' = 2)')"),
- ("Enum16", r"CAST('a', 'Enum16(\'a\' = 1, \'b\' = 2)')"),
-]
-
-_hex = hex
-
-def hex(s):
- """Convert string to hex.
- """
- if isinstance(s, str):
- return "".join(['%X' % ord(c) for c in s])
- if isinstance(s, bytes):
- return "".join(['%X' % c for c in s])
- return _hex(s)
diff --git a/tests/testflows/aes_encryption/tests/compatibility/__init__.py b/tests/testflows/aes_encryption/tests/compatibility/__init__.py
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/tests/testflows/aes_encryption/tests/compatibility/feature.py b/tests/testflows/aes_encryption/tests/compatibility/feature.py
deleted file mode 100644
index 5ef547e43f..0000000000
--- a/tests/testflows/aes_encryption/tests/compatibility/feature.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from testflows.core import *
-
-from aes_encryption.requirements import *
-
-@TestFeature
-@Name("compatibility")
-@Requirements(
- RQ_SRS008_AES_Functions_DataFromMultipleSources("1.0")
-)
-def feature(self, node="clickhouse1"):
- """Check encryption functions usage compatibility.
- """
- self.context.node = self.context.cluster.node(node)
-
- Feature(run=load("aes_encryption.tests.compatibility.insert", "feature"), flags=TE)
- Feature(run=load("aes_encryption.tests.compatibility.select", "feature"), flags=TE)
- Feature(run=load("aes_encryption.tests.compatibility.mysql.feature", "feature"), flags=TE)
\ No newline at end of file
diff --git a/tests/testflows/aes_encryption/tests/compatibility/insert.py b/tests/testflows/aes_encryption/tests/compatibility/insert.py
deleted file mode 100644
index 6ddcc11b58..0000000000
--- a/tests/testflows/aes_encryption/tests/compatibility/insert.py
+++ /dev/null
@@ -1,414 +0,0 @@
-import os
-import textwrap
-from contextlib import contextmanager
-from importlib.machinery import SourceFileLoader
-
-from testflows.core import *
-from testflows.core.name import basename
-from testflows.asserts.helpers import varname
-from testflows.asserts import values, error, snapshot
-
-from aes_encryption.tests.common import modes, mysql_modes
-
-@contextmanager
-def table(name):
- node = current().context.node
- try:
- with Given("table"):
- sql = f"""
- CREATE TABLE {name}
- (
- date Nullable(Date),
- name Nullable(String),
- secret Nullable(String)
- )
- ENGINE = Memory()
- """
- with By("dropping table if exists"):
- node.query(f"DROP TABLE IF EXISTS {name}")
- with And("creating a table"):
- node.query(textwrap.dedent(sql))
- yield
- finally:
- with Finally("I drop the table", flags=TE):
- node.query(f"DROP TABLE IF EXISTS {name}")
-
-@contextmanager
-def mv_transform(table, transform):
- node = current().context.node
- try:
- with Given("tables for input transformation"):
- with By("creating Null input table"):
- sql = f"""
- CREATE TABLE {table}_input
- (
- date Nullable(Date),
- name Nullable(String),
- secret Nullable(String),
- mode String,
- key String,
- iv String,
- aad String
- )
- ENGINE=Null()
- """
- node.query(textwrap.dedent(sql))
-
- with And("creating materialized view table"):
- sql = f"""
- CREATE MATERIALIZED VIEW {table}_input_mv TO {table} AS
- SELECT date, name, {transform}
- FROM {table}_input
- """
- node.query(textwrap.dedent(sql))
- yield
- finally:
- with Finally("I drop tables for input transformation", flags=TE):
- with By("dropping materialized view table", flags=TE):
- node.query(f"DROP TABLE IF EXISTS {table}_input_mv")
-
- with And("dropping Null input table", flags=TE):
- node.query(f"DROP TABLE IF EXISTS {table}_input")
-
-@TestScenario
-def encrypt_using_materialized_view(self):
- """Check that we can use `encrypt` function when inserting
- data into a table using a materialized view for input
- data transformation.
- """
- node = self.context.node
- key = f"{'1' * 36}"
- iv = f"{'2' * 16}"
- aad = "some random aad"
-
- for mode, key_len, iv_len, aad_len in modes:
- with Example(f"""mode={mode.strip("'")} iv={iv_len} aad={aad_len}""") as example:
- example_key = f"'{key[:key_len]}'"
- example_mode = mode
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- example_aad = None if not aad_len else f"'{aad}'"
- example_transform = f"encrypt(mode, secret, key{', iv' if example_iv else ''}{', aad' if example_aad else ''})"
-
- with table("user_data"):
- with mv_transform("user_data", example_transform):
- with When("I insert encrypted data"):
- node.query(f"""
- INSERT INTO user_data_input
- (date, name, secret, mode, key)
- VALUES
- ('2020-01-01', 'user0', 'user0_secret', {example_mode}, {example_key}{(", " + example_iv) if example_iv else ""}{(", " + example_aad) if example_aad else ""}),
- ('2020-01-02', 'user1', 'user1_secret', {example_mode}, {example_key}{(", " + example_iv) if example_iv else ""}{(", " + example_aad) if example_aad else ""}),
- ('2020-01-03', 'user2', 'user2_secret', {example_mode}, {example_key}{(", " + example_iv) if example_iv else ""}{(", " + example_aad) if example_aad else ""})
- """)
-
- with And("I read inserted data back"):
- node.query("SELECT date, name, hex(secret) FROM user_data ORDER BY date")
-
- with Then("output must match the snapshot"):
- with values() as that:
- assert that(snapshot(r.output.strip(), "insert", name=f"encrypt_mv_example_{varname(basename(self.name))}")), error()
-
-@TestScenario
-def aes_encrypt_mysql_using_materialized_view(self):
- """Check that we can use `aes_encrypt_mysql` function when inserting
- data into a table using a materialized view for input
- data transformation.
- """
- node = self.context.node
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
- aad = "some random aad"
-
- for mode, key_len, iv_len in mysql_modes:
- with Example(f"""mode={mode.strip("'")} key={key_len} iv={iv_len}""") as example:
- example_key = f"'{key[:key_len]}'"
- example_mode = mode
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- example_transform = f"aes_encrypt_mysql(mode, secret, key{', iv' if example_iv else ''})"
-
- with table("user_data"):
- with mv_transform("user_data", example_transform):
- with When("I insert encrypted data"):
- node.query(f"""
- INSERT INTO user_data_input
- (date, name, secret, mode, key)
- VALUES
- ('2020-01-01', 'user0', 'user0_secret', {example_mode}, {example_key}{(", " + example_iv) if example_iv else ""}),
- ('2020-01-02', 'user1', 'user1_secret', {example_mode}, {example_key}{(", " + example_iv) if example_iv else ""}),
- ('2020-01-03', 'user2', 'user2_secret', {example_mode}, {example_key}{(", " + example_iv) if example_iv else ""})
- """)
-
- with And("I read inserted data back"):
- node.query("SELECT date, name, hex(secret) FROM user_data ORDER BY date")
-
- with Then("output must match the snapshot"):
- with values() as that:
- assert that(snapshot(r.output.strip(), "insert", name=f"aes_encrypt_mysql_mv_example_{varname(basename(self.name))}")), error()
-
-@TestScenario
-def encrypt_using_input_table_function(self):
- """Check that we can use `encrypt` function when inserting
- data into a table using insert select and `input()` table
- function.
- """
- node = self.context.node
- key = f"{'1' * 36}"
- iv = f"{'2' * 16}"
- aad = "some random aad"
-
- for mode, key_len, iv_len, aad_len in modes:
- with Example(f"""mode={mode.strip("'")} iv={iv_len} aad={aad_len}""") as example:
- example_key = f"'{key[:key_len]}'"
- example_mode = mode
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- example_aad = None if not aad_len else f"'{aad}'"
- example_transform = f"encrypt({mode}, secret, {example_key}{(', ' + example_iv) if example_iv else ''}{(', ' + example_aad) if example_aad else ''})"
-
- with table("user_data"):
- with When("I insert encrypted data"):
- node.query(f"""
- INSERT INTO
- user_data
- SELECT
- date, name, {example_transform}
- FROM
- input('date Date, name String, secret String')
- FORMAT Values ('2020-01-01', 'user0', 'user0_secret'), ('2020-01-02', 'user1', 'user1_secret'), ('2020-01-03', 'user2', 'user2_secret')
- """)
-
- with And("I read inserted data back"):
- r = node.query("SELECT date, name, hex(secret) FROM user_data ORDER BY date")
-
- with Then("output must match the snapshot"):
- with values() as that:
- assert that(snapshot(r.output.strip(), "insert", name=f"encrypt_input_example_{varname(basename(example.name))}")), error()
-
-@TestScenario
-def aes_encrypt_mysql_using_input_table_function(self):
- """Check that we can use `aes_encrypt_mysql` function when inserting
- data into a table using insert select and `input()` table
- function.
- """
- node = self.context.node
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
- aad = "some random aad"
-
- for mode, key_len, iv_len in mysql_modes:
- with Example(f"""mode={mode.strip("'")} key={key_len} iv={iv_len}""") as example:
- example_key = f"'{key[:key_len]}'"
- example_mode = mode
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- example_transform = f"aes_encrypt_mysql({mode}, secret, {example_key}{(', ' + example_iv) if example_iv else ''})"
-
- with table("user_data"):
- with When("I insert encrypted data"):
- node.query(f"""
- INSERT INTO
- user_data
- SELECT
- date, name, {example_transform}
- FROM
- input('date Date, name String, secret String')
- FORMAT Values ('2020-01-01', 'user0', 'user0_secret'), ('2020-01-02', 'user1', 'user1_secret'), ('2020-01-03', 'user2', 'user2_secret')
- """)
-
- with And("I read inserted data back"):
- r = node.query("SELECT date, name, hex(secret) FROM user_data ORDER BY date")
-
- with Then("output must match the snapshot"):
- with values() as that:
- assert that(snapshot(r.output.strip(), "insert", name=f"aes_encrypt_mysql_input_example_{varname(basename(example.name))}")), error()
-
-@TestScenario
-def decrypt_using_materialized_view(self):
- """Check that we can use `decrypt` function when inserting
- data into a table using a materialized view for input
- data transformation.
- """
- node = self.context.node
- key = f"{'1' * 36}"
- iv = f"{'2' * 16}"
- aad = "some random aad"
-
- with Given("I load encrypt snapshots"):
- snapshot_module = SourceFileLoader("snapshot", os.path.join(current_dir(), "snapshots", "insert.py.insert.snapshot")).load_module()
-
- for mode, key_len, iv_len, aad_len in modes:
- with Example(f"""mode={mode.strip("'")} iv={iv_len} aad={aad_len}""") as example:
- example_key = f"'{key[:key_len]}'"
- example_mode = mode
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- example_aad = None if not aad_len else f"'{aad}'"
- example_transform = f"decrypt(mode, secret, key{', iv' if example_iv else ''}{', aad' if example_aad else ''})"
-
- with Given("I have ciphertexts"):
- example_name = basename(example.name)
- ciphertexts = getattr(snapshot_module, varname(f"encrypt_mv_example_{example_name}"))
- example_ciphertexts = ["'{}'".format(l.split("\t")[-1].strup("'")) for l in ciphertexts.split("\n")]
-
- with table("user_data"):
- with mv_transform("user_data", example_transform):
- with When("I insert encrypted data"):
- node.query(f"""
- INSERT INTO user_data_input
- (date, name, secret, mode, key)
- VALUES
- ('2020-01-01', 'user0', 'unhex({example_ciphertexts[0]})', {example_mode}, {example_key}{(", " + example_iv) if example_iv else ""}{(", " + example_aad) if example_aad else ""}),
- ('2020-01-02', 'user1', 'unhex({example_ciphertexts[1]})', {example_mode}, {example_key}{(", " + example_iv) if example_iv else ""}{(", " + example_aad) if example_aad else ""}),
- ('2020-01-03', 'user2', 'unhex({example_ciphertexts[2]})', {example_mode}, {example_key}{(", " + example_iv) if example_iv else ""}{(", " + example_aad) if example_aad else ""})
- """)
-
- with And("I read inserted data back"):
- r = node.query("SELECT date, name, secret FROM user_data ORDER BY date")
-
- with Then("output must match the expected"):
- expected = r"""'2020-01-01\tuser0\tuser0_secret\n2020-01-02\tuser1\tuser1_secret\n2020-01-03\tuser2\tuser2_secret'"""
- assert r.output == expected, error()
-
-@TestScenario
-def aes_decrypt_mysql_using_materialized_view(self):
- """Check that we can use `aes_decrypt_mysql` function when inserting
- data into a table using a materialized view for input
- data transformation.
- """
- node = self.context.node
- key = f"{'1' * 36}"
- iv = f"{'2' * 16}"
- aad = "some random aad"
-
- with Given("I load encrypt snapshots"):
- snapshot_module = SourceFileLoader("snapshot", os.path.join(current_dir(), "snapshots", "insert.py.insert.snapshot")).load_module()
-
- for mode, key_len, iv_len, aad_len in modes:
- with Example(f"""mode={mode.strip("'")} key={key_len} iv={iv_len}""") as example:
- example_key = f"'{key[:key_len]}'"
- example_mode = mode
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- example_aad = None if not aad_len else f"'{aad}'"
- example_transform = f"aes_decrypt_mysql(mode, secret, key{', iv' if example_iv else ''})"
-
- with Given("I have ciphertexts"):
- example_name = basename(example.name)
- ciphertexts = getattr(snapshot_module, varname(f"aes_encrypt_mysql_mv_example_{example_name}"))
- example_ciphertexts = ["'{}'".format(l.split("\t")[-1].strup("'")) for l in ciphertexts.split("\n")]
-
- with table("user_data"):
- with mv_transform("user_data", example_transform):
- with When("I insert encrypted data"):
- node.query(f"""
- INSERT INTO user_data_input
- (date, name, secret, mode, key)
- VALUES
- ('2020-01-01', 'user0', 'unhex({example_ciphertexts[0]})', {example_mode}, {example_key}{(", " + example_iv) if example_iv else ""}),
- ('2020-01-02', 'user1', 'unhex({example_ciphertexts[1]})', {example_mode}, {example_key}{(", " + example_iv) if example_iv else ""}),
- ('2020-01-03', 'user2', 'unhex({example_ciphertexts[2]})', {example_mode}, {example_key}{(", " + example_iv) if example_iv else ""})
- """)
-
- with And("I read inserted data back"):
- r = node.query("SELECT date, name, secret FROM user_data ORDER BY date")
-
- with Then("output must match the expected"):
- expected = r"""'2020-01-01\tuser0\tuser0_secret\n2020-01-02\tuser1\tuser1_secret\n2020-01-03\tuser2\tuser2_secret'"""
- assert r.output == expected, error()
-
-@TestScenario
-def decrypt_using_input_table_function(self):
- """Check that we can use `decrypt` function when inserting
- data into a table using insert select and `input()` table
- function.
- """
- node = self.context.node
- key = f"{'1' * 36}"
- iv = f"{'2' * 16}"
- aad = "some random aad"
-
- with Given("I load encrypt snapshots"):
- snapshot_module = SourceFileLoader("snapshot", os.path.join(current_dir(), "snapshots", "insert.py.insert.snapshot")).load_module()
-
- for mode, key_len, iv_len, aad_len in modes:
- with Example(f"""mode={mode.strip("'")} iv={iv_len} aad={aad_len}""") as example:
- example_key = f"'{key[:key_len]}'"
- example_mode = mode
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- example_aad = None if not aad_len else f"'{aad}'"
- example_transform = f"decrypt({mode}, unhex(secret), {example_key}{(', ' + example_iv) if example_iv else ''}{(', ' + example_aad) if example_aad else ''})"
-
- with Given("I have ciphertexts"):
- example_name = basename(example.name)
- ciphertexts = getattr(snapshot_module, varname(f"encrypt_input_example_{example_name}"))
- example_ciphertexts = [l.split("\\t")[-1].strip("'") for l in ciphertexts.split("\\n")]
-
- with table("user_data"):
- with When("I insert decrypted data"):
- node.query(textwrap.dedent(f"""
- INSERT INTO
- user_data
- SELECT
- date, name, {example_transform}
- FROM
- input('date Date, name String, secret String')
- FORMAT Values ('2020-01-01', 'user0', '{example_ciphertexts[0]}'), ('2020-01-02', 'user1', '{example_ciphertexts[1]}'), ('2020-01-03', 'user2', '{example_ciphertexts[2]}')
- """))
-
- with And("I read inserted data back"):
- r = node.query("SELECT date, name, secret FROM user_data ORDER BY date")
-
- expected = """2020-01-01\tuser0\tuser0_secret\n2020-01-02\tuser1\tuser1_secret\n2020-01-03\tuser2\tuser2_secret"""
- with Then("output must match the expected", description=expected):
- assert r.output == expected, error()
-
-@TestScenario
-def aes_decrypt_mysql_using_input_table_function(self):
- """Check that we can use `aes_decrypt_mysql` function when inserting
- data into a table using insert select and `input()` table
- function.
- """
- node = self.context.node
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
- aad = "some random aad"
-
- with Given("I load encrypt snapshots"):
- snapshot_module = SourceFileLoader("snapshot", os.path.join(current_dir(), "snapshots", "insert.py.insert.snapshot")).load_module()
-
- for mode, key_len, iv_len in mysql_modes:
- with Example(f"""mode={mode.strip("'")} key={key_len} iv={iv_len}""") as example:
- example_key = f"'{key[:key_len]}'"
- example_mode = mode
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- example_transform = f"aes_decrypt_mysql({mode}, unhex(secret), {example_key}{(', ' + example_iv) if example_iv else ''})"
-
- with Given("I have ciphertexts"):
- example_name = basename(example.name)
- ciphertexts = getattr(snapshot_module, varname(f"aes_encrypt_mysql_input_example_{example_name}"))
- example_ciphertexts = [l.split("\\t")[-1].strip("'") for l in ciphertexts.split("\\n")]
-
- with table("user_data"):
- with When("I insert decrypted data"):
- node.query(textwrap.dedent(f"""
- INSERT INTO
- user_data
- SELECT
- date, name, {example_transform}
- FROM
- input('date Date, name String, secret String')
- FORMAT Values ('2020-01-01', 'user0', '{example_ciphertexts[0]}'), ('2020-01-02', 'user1', '{example_ciphertexts[1]}'), ('2020-01-03', 'user2', '{example_ciphertexts[2]}')
- """))
-
- with And("I read inserted data back"):
- r = node.query("SELECT date, name, secret FROM user_data ORDER BY date")
-
- expected = """2020-01-01\tuser0\tuser0_secret\n2020-01-02\tuser1\tuser1_secret\n2020-01-03\tuser2\tuser2_secret"""
- with Then("output must match the expected", description=expected):
- assert r.output == expected, error()
-
-@TestFeature
-@Name("insert")
-def feature(self, node="clickhouse1"):
- """Check encryption functions when used during data insertion into a table.
- """
- self.context.node = self.context.cluster.node(node)
-
- for scenario in loads(current_module(), Scenario):
- Scenario(run=scenario, flags=TE)
diff --git a/tests/testflows/aes_encryption/tests/compatibility/mysql/__init__.py b/tests/testflows/aes_encryption/tests/compatibility/mysql/__init__.py
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/tests/testflows/aes_encryption/tests/compatibility/mysql/database_engine.py b/tests/testflows/aes_encryption/tests/compatibility/mysql/database_engine.py
deleted file mode 100644
index 3547dc95ab..0000000000
--- a/tests/testflows/aes_encryption/tests/compatibility/mysql/database_engine.py
+++ /dev/null
@@ -1,196 +0,0 @@
-import textwrap
-from contextlib import contextmanager
-
-from testflows.core import *
-from testflows.asserts import error
-
-from aes_encryption.requirements import *
-from aes_encryption.tests.common import mysql_modes, hex
-
-@contextmanager
-def table(name, node, mysql_node, secret_type):
- """Create a table that can be accessed using MySQL database engine.
- """
- try:
- with Given("table in MySQL"):
- sql = f"""
- CREATE TABLE {name}(
- id INT NOT NULL AUTO_INCREMENT,
- date DATE,
- name VARCHAR(100),
- secret {secret_type},
- PRIMARY KEY ( id )
- );
- """
- with When("I drop the table if exists"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"DROP TABLE IF EXISTS {name};\"", exitcode=0)
- with And("I create a table"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
-
- with And("I create a database using MySQL database engine"):
- sql = f"""
- CREATE DATABASE mysql_db
- ENGINE = MySQL('{mysql_node.name}:3306', 'db', 'user', 'password')
- """
- with When("I drop database if exists"):
- node.query(f"DROP DATABASE IF EXISTS mysql_db")
- with And("I create database"):
- node.query(textwrap.dedent(sql))
- yield
-
- finally:
- with And("I drop the database that is using MySQL database engine", flags=TE):
- node.query(f"DROP DATABASE IF EXISTS mysql_db")
-
- with And("I drop a table in MySQL", flags=TE):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"DROP TABLE IF EXISTS {name};\"", exitcode=0)
-
-@TestOutline(Scenario)
-@Examples("mysql_datatype", [
- ("VARBINARY(100)",),
- #("VARCHAR(100)",),
- ("BLOB", ),
- #("TEXT",)
-])
-def decrypt(self, mysql_datatype):
- """Check that when using a table provided by MySQL database engine that
- contains a column encrypted in MySQL stored using specified data type
- I can decrypt data in the column using the `decrypt` and `aes_decrypt_mysql`
- functions in the select query.
- """
- node = self.context.node
- mysql_node = self.context.mysql_node
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
-
- for func in ["decrypt", "aes_decrypt_mysql"]:
- for mode, key_len, iv_len in mysql_modes:
- exact_key_size = int(mode.split("-")[1])//8
-
- if "ecb" not in mode and not iv_len:
- continue
- if func == "decrypt":
- if iv_len and iv_len != 16:
- continue
- if key_len != exact_key_size:
- continue
-
- with Example(f"""{func} mode={mode.strip("'")} key={key_len} iv={iv_len}"""):
- with table("user_data", node, mysql_node, mysql_datatype):
- example_mode = mode
- example_key = f"'{key[:key_len]}'"
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
-
- with When("I insert encrypted data in MySQL"):
- sql = f"""
- SET block_encryption_mode = {example_mode};
- INSERT INTO user_data VALUES (NULL, '2020-01-01', 'user0', AES_ENCRYPT('secret', {example_key}{(", " + example_iv) if example_iv else ", ''"}));
- """
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
-
- with And("I read encrypted data in MySQL to make sure it is valid"):
- sql = f"""
- SET block_encryption_mode = {example_mode};
- SELECT id, date, name, AES_DECRYPT(secret, {example_key}{(", " + example_iv) if example_iv else ", ''"}) AS secret FROM user_data;
- """
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
-
- with And("I read raw encrypted data in MySQL"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"SELECT id, date, name, hex(secret) as secret FROM user_data;\"", exitcode=0)
-
- with And("I read raw data using MySQL database engine"):
- output = node.query("SELECT id, date, name, hex(secret) AS secret FROM mysql_db.user_data")
-
- with And("I read decrypted data using MySQL database engine"):
- output = node.query(f"""SELECT hex({func}({example_mode}, secret, {example_key}{(", " + example_iv) if example_iv else ""})) FROM mysql_db.user_data""").output.strip()
-
- with Then("output should match the original plain text"):
- assert output == hex("secret"), error()
-
-@TestOutline(Scenario)
-@Examples("mysql_datatype", [
- ("VARBINARY(100)",),
- #("VARCHAR(100)",),
- ("BLOB", ),
- #("TEXT",)
-])
-def encrypt(self, mysql_datatype):
- """Check that when using a table provided by MySQL database engine that
- we can encrypt data during insert using the `aes_encrypt_mysql` function
- and decrypt it in MySQL.
- """
- node = self.context.node
- mysql_node = self.context.mysql_node
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
-
- for func in ["encrypt", "aes_encrypt_mysql"]:
- for mode, key_len, iv_len in mysql_modes:
- exact_key_size = int(mode.split("-")[1])//8
-
- if "ecb" not in mode and not iv_len:
- continue
- if func == "encrypt":
- if iv_len and iv_len != 16:
- continue
- if key_len != exact_key_size:
- continue
-
- with Example(f"""{func} mode={mode.strip("'")} key={key_len} iv={iv_len}"""):
- with table("user_data", node, mysql_node, mysql_datatype):
- example_mode = mode
- example_key = f"'{key[:key_len]}'"
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- example_transform = f"{func}({mode}, secret, {example_key}{(', ' + example_iv) if example_iv else ''})"
-
- with When("I insert encrypted data into a table provided by MySQL database engine"):
- node.query(textwrap.dedent(f"""
- INSERT INTO
- mysql_db.user_data
- SELECT
- id, date, name, {example_transform}
- FROM
- input('id Int32, date Date, name String, secret String')
- FORMAT Values (1, '2020-01-01', 'user0', 'secret')
- """))
-
- with And("I read decrypted data using MySQL database engine"):
- output = node.query(f"""SELECT hex(aes_decrypt_mysql({example_mode}, secret, {example_key}{(", " + example_iv) if example_iv else ""})) FROM mysql_db.user_data""").output.strip()
-
- with Then("decrypted data from MySQL database engine should should match the original plain text"):
- assert output == hex("secret"), error()
-
- with And("I read raw data using MySQL database engine to get expected raw data"):
- expected_raw_data = node.query("SELECT hex(secret) AS secret FROM mysql_db.user_data").output.strip()
-
- with And("I read raw encrypted data in MySQL"):
- output = mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"SELECT hex(secret) as secret FROM user_data;\"", exitcode=0).output.strip()
-
- with Then("check that raw encryted data in MySQL matches the expected"):
- assert expected_raw_data in output, error()
-
- with And("I decrypt data in MySQL to make sure it is valid"):
- sql = f"""
- SET block_encryption_mode = {example_mode};
- SELECT id, date, name, hex(AES_DECRYPT(secret, {example_key}{(", " + example_iv) if example_iv else ", ''"})) AS secret FROM user_data;
- """
- output = mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0).output.strip()
-
- with Then("decryted data in MySQL should match the original plain text"):
- assert hex("secret") in output, error()
-
-@TestFeature
-@Name("database engine")
-@Requirements(
- RQ_SRS008_AES_Functions_Compatability_Engine_Database_MySQL("1.0")
-)
-def feature(self, node="clickhouse1", mysql_node="mysql1"):
- """Check usage of encryption functions with [MySQL database engine].
-
- [MySQL database engine]: https://clickhouse.tech/docs/en/engines/database-engines/mysql/
- """
- self.context.node = self.context.cluster.node(node)
- self.context.mysql_node = self.context.cluster.node(mysql_node)
-
- for scenario in loads(current_module(), Scenario):
- Scenario(run=scenario, flags=TE)
diff --git a/tests/testflows/aes_encryption/tests/compatibility/mysql/dictionary.py b/tests/testflows/aes_encryption/tests/compatibility/mysql/dictionary.py
deleted file mode 100644
index 66b9e3acbf..0000000000
--- a/tests/testflows/aes_encryption/tests/compatibility/mysql/dictionary.py
+++ /dev/null
@@ -1,251 +0,0 @@
-import textwrap
-from contextlib import contextmanager
-
-from testflows.core import *
-from testflows.asserts import error
-
-from aes_encryption.requirements import *
-from aes_encryption.tests.common import mysql_modes, hex
-
-@contextmanager
-def dictionary(name, node, mysql_node, secret_type):
- """Create a table in MySQL and use it a source for a dictionary.
- """
- try:
- with Given("table in MySQL"):
- sql = f"""
- CREATE TABLE {name}(
- id INT NOT NULL AUTO_INCREMENT,
- date DATE,
- name VARCHAR(100),
- secret {secret_type},
- PRIMARY KEY ( id )
- );
- """
- with When("I drop the table if exists"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"DROP TABLE IF EXISTS {name};\"", exitcode=0)
- with And("I create a table"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
-
- with And("dictionary that uses MySQL table as the external source"):
- with When("I drop the dictionary if exists"):
- node.query(f"DROP DICTIONARY IF EXISTS dict_{name}")
- with And("I create the dictionary"):
- sql = f"""
- CREATE DICTIONARY dict_{name}
- (
- id Int32,
- date Date,
- name String,
- secret String
- )
- PRIMARY KEY id
- SOURCE(MYSQL(
- USER 'user'
- PASSWORD 'password'
- DB 'db'
- TABLE '{name}'
- REPLICA(PRIORITY 1 HOST '{mysql_node.name}' PORT 3306)
- ))
- LAYOUT(HASHED())
- LIFETIME(0)
- """
- node.query(textwrap.dedent(sql))
-
- yield f"dict_{name}"
-
- finally:
- with Finally("I drop the dictionary", flags=TE):
- node.query(f"DROP DICTIONARY IF EXISTS dict_{name}")
-
- with And("I drop a table in MySQL", flags=TE):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"DROP TABLE IF EXISTS {name};\"", exitcode=0)
-
-@contextmanager
-def parameters_dictionary(name, node, mysql_node):
- """Create a table in MySQL and use it a source for a dictionary
- that stores parameters for the encryption functions.
- """
- try:
- with Given("table in MySQL"):
- sql = f"""
- CREATE TABLE {name}(
- `id` INT NOT NULL AUTO_INCREMENT,
- `name` VARCHAR(100),
- `mode` VARCHAR(100),
- `key` BLOB,
- `iv` BLOB,
- `text` BLOB,
- PRIMARY KEY ( id )
- );
- """
- with When("I drop the table if exists"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"DROP TABLE IF EXISTS {name};\"", exitcode=0)
- with And("I create a table"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
-
- with And("dictionary that uses MySQL table as the external source"):
- with When("I drop the dictionary if exists"):
- node.query(f"DROP DICTIONARY IF EXISTS dict_{name}")
- with And("I create the dictionary"):
- sql = f"""
- CREATE DICTIONARY dict_{name}
- (
- id Int32,
- name String,
- mode String,
- key String,
- iv String,
- text String
- )
- PRIMARY KEY id
- SOURCE(MYSQL(
- USER 'user'
- PASSWORD 'password'
- DB 'db'
- TABLE '{name}'
- REPLICA(PRIORITY 1 HOST '{mysql_node.name}' PORT 3306)
- ))
- LAYOUT(HASHED())
- LIFETIME(0)
- """
- node.query(textwrap.dedent(sql))
-
- yield f"dict_{name}"
-
- finally:
- with Finally("I drop the dictionary", flags=TE):
- node.query(f"DROP DICTIONARY IF EXISTS dict_{name}")
-
- with And("I drop a table in MySQL", flags=TE):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"DROP TABLE IF EXISTS {name};\"", exitcode=0)
-
-@TestScenario
-def parameter_values(self):
- """Check that we can use a dictionary that uses MySQL table as a source
- can be used as a parameters store for the `encrypt`, `decrypt`, and
- `aes_encrypt_mysql`, `aes_decrypt_mysql` functions.
- """
- node = self.context.node
- mysql_node = self.context.mysql_node
- mode = "'aes-128-cbc'"
- key = f"'{'1' * 16}'"
- iv = f"'{'2' * 16}'"
- plaintext = "'secret'"
-
- for encrypt, decrypt in [
- ("encrypt", "decrypt"),
- ("aes_encrypt_mysql", "aes_decrypt_mysql")
- ]:
- with Example(f"{encrypt} and {decrypt}", description=f"Check using dictionary for parameters of {encrypt} and {decrypt} functions."):
- with parameters_dictionary("parameters_data", node, mysql_node) as dict_name:
- with When("I insert parameters values in MySQL"):
- sql = f"""
- INSERT INTO parameters_data VALUES (1, 'user0', {mode}, {key}, {iv}, {plaintext});
- """
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
-
- with And("I use dictionary values as parameters"):
- sql = f"""
- SELECT {decrypt}(
- dictGet('default.{dict_name}', 'mode', toUInt64(1)),
- {encrypt}(
- dictGet('default.{dict_name}', 'mode', toUInt64(1)),
- dictGet('default.{dict_name}', 'text', toUInt64(1)),
- dictGet('default.{dict_name}', 'key', toUInt64(1)),
- dictGet('default.{dict_name}', 'iv', toUInt64(1))
- ),
- dictGet('default.{dict_name}', 'key', toUInt64(1)),
- dictGet('default.{dict_name}', 'iv', toUInt64(1))
- )
- """
- output = node.query(textwrap.dedent(sql)).output.strip()
-
- with Then("output should match the plain text"):
- assert f"'{output}'" == plaintext, error()
-
-@TestOutline(Scenario)
-@Examples("mysql_datatype", [
- ("VARBINARY(100)",),
- #("VARCHAR(100)",),
- ("BLOB", ),
- #("TEXT",)
-])
-def decrypt(self, mysql_datatype):
- """Check that when using a dictionary that uses MySQL table as a source and
- contains a data encrypted in MySQL and stored using specified data type
- that we can decrypt data from the dictionary using
- the `aes_decrypt_mysql` or `decrypt` functions in the select query.
- """
- node = self.context.node
- mysql_node = self.context.mysql_node
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
-
- for func in ["decrypt", "aes_decrypt_mysql"]:
- for mode, key_len, iv_len in mysql_modes:
- exact_key_size = int(mode.split("-")[1])//8
-
- if "ecb" not in mode and not iv_len:
- continue
- if func == "decrypt":
- if iv_len and iv_len != 16:
- continue
- if key_len != exact_key_size:
- continue
-
- with Example(f"""{func} mode={mode.strip("'")} key={key_len} iv={iv_len}"""):
- with dictionary("user_data", node, mysql_node, mysql_datatype) as dict_name:
- example_mode = mode
- example_key = f"'{key[:key_len]}'"
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
-
- with When("I insert encrypted data in MySQL"):
- sql = f"""
- SET block_encryption_mode = {example_mode};
- INSERT INTO user_data VALUES (NULL, '2020-01-01', 'user0', AES_ENCRYPT('secret', {example_key}{(", " + example_iv) if example_iv else ", ''"}));
- """
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
-
- with And("I read encrypted data in MySQL to make sure it is valid"):
- sql = f"""
- SET block_encryption_mode = {example_mode};
- SELECT id, date, name, AES_DECRYPT(secret, {example_key}{(", " + example_iv) if example_iv else ", ''"}) AS secret FROM user_data;
- """
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
-
- with And("I read raw encrypted data in MySQL"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"SELECT id, date, name, hex(secret) as secret FROM user_data;\"", exitcode=0)
-
- with And("I read raw data using MySQL dictionary"):
- output = node.query(f"SELECT hex(dictGet('default.{dict_name}', 'secret', toUInt64(1))) AS secret")
-
- with And("I read decrypted data using MySQL dictionary"):
- output = node.query(textwrap.dedent(f"""
- SELECT hex(
- {func}(
- {example_mode},
- dictGet('default.{dict_name}', 'secret', toUInt64(1)),
- {example_key}{(", " + example_iv) if example_iv else ""}
- )
- )
- """)).output.strip()
-
- with Then("output should match the original plain text"):
- assert output == hex("secret"), error()
-
-@TestFeature
-@Name("dictionary")
-@Requirements(
- RQ_SRS008_AES_Functions_Compatability_Dictionaries("1.0")
-)
-def feature(self, node="clickhouse1", mysql_node="mysql1"):
- """Check usage of encryption functions with [MySQL dictionary].
-
- [MySQL dictionary]: https://clickhouse.tech/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources/#dicts-external_dicts_dict_sources-mysql
- """
- self.context.node = self.context.cluster.node(node)
- self.context.mysql_node = self.context.cluster.node(mysql_node)
-
- for scenario in loads(current_module(), Scenario):
- Scenario(run=scenario, flags=TE)
diff --git a/tests/testflows/aes_encryption/tests/compatibility/mysql/feature.py b/tests/testflows/aes_encryption/tests/compatibility/mysql/feature.py
deleted file mode 100644
index 5c6338bfdf..0000000000
--- a/tests/testflows/aes_encryption/tests/compatibility/mysql/feature.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from testflows.core import *
-
-from aes_encryption.requirements import *
-
-@TestFeature
-@Name("mysql")
-@Requirements(
- RQ_SRS008_AES_Functions_Compatability_MySQL("1.0")
-)
-def feature(self, node="clickhouse1"):
- """Check encryption functions usage compatibility with MySQL.
- """
- self.context.node = self.context.cluster.node(node)
-
- Feature(run=load("aes_encryption.tests.compatibility.mysql.table_engine", "feature"), flags=TE)
- Feature(run=load("aes_encryption.tests.compatibility.mysql.database_engine", "feature"), flags=TE)
- Feature(run=load("aes_encryption.tests.compatibility.mysql.table_function", "feature"), flags=TE)
- Feature(run=load("aes_encryption.tests.compatibility.mysql.dictionary", "feature"), flags=TE)
diff --git a/tests/testflows/aes_encryption/tests/compatibility/mysql/table_engine.py b/tests/testflows/aes_encryption/tests/compatibility/mysql/table_engine.py
deleted file mode 100644
index 5a5c7d9d58..0000000000
--- a/tests/testflows/aes_encryption/tests/compatibility/mysql/table_engine.py
+++ /dev/null
@@ -1,202 +0,0 @@
-import textwrap
-from contextlib import contextmanager
-
-from testflows.core import *
-from testflows.asserts import error
-
-from aes_encryption.requirements import *
-from aes_encryption.tests.common import mysql_modes, hex
-
-@contextmanager
-def table(name, node, mysql_node, secret_type):
- """Create a table that can be accessed using MySQL table engine.
- """
- try:
- with Given("table in MySQL"):
- sql = f"""
- CREATE TABLE {name}(
- id INT NOT NULL AUTO_INCREMENT,
- date DATE,
- name VARCHAR(100),
- secret {secret_type},
- PRIMARY KEY ( id )
- );
- """
- with When("I drop the table if exists"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"DROP TABLE IF EXISTS {name};\"", exitcode=0)
- with And("I create a table"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
-
- with And("I create a table using MySQL table engine"):
- sql = f"""
- CREATE TABLE mysql_{name}
- (
- id Nullable(Int32),
- date Nullable(Date),
- name Nullable(String),
- secret Nullable(String)
- )
- ENGINE = MySQL('{mysql_node.name}:3306', 'db', '{name}', 'user', 'password')
- """
- with When("I drop table if exists"):
- node.query(f"DROP TABLE IF EXISTS mysql_{name}")
- with And("I create table"):
- node.query(textwrap.dedent(sql))
- yield
-
- finally:
- with And("I drop a table using MySQL table engine", flags=TE):
- node.query(f"DROP TABLE IF EXISTS mysql_{name}")
-
- with And("I drop a table in MySQL", flags=TE):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"DROP TABLE IF EXISTS {name};\"", exitcode=0)
-
-@TestOutline(Scenario)
-@Examples("mysql_datatype", [
- ("VARBINARY(100)",),
- #("VARCHAR(100)",),
- ("BLOB", ),
- #("TEXT",)
-])
-def decrypt(self, mysql_datatype):
- """Check that when using a table with MySQL table engine that
- contains a column encrypted in MySQL stored using specified data type
- I can decrypt data in the column using the `decrypt` and `aes_decrypt_mysql`
- functions in the select query.
- """
- node = self.context.node
- mysql_node = self.context.mysql_node
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
-
- for func in ["decrypt", "aes_decrypt_mysql"]:
- for mode, key_len, iv_len in mysql_modes:
- exact_key_size = int(mode.split("-")[1])//8
-
- if "ecb" not in mode and not iv_len:
- continue
- if func == "decrypt":
- if iv_len and iv_len != 16:
- continue
- if key_len != exact_key_size:
- continue
-
- with Example(f"""{func} mode={mode.strip("'")} key={key_len} iv={iv_len}"""):
- with table("user_data", node, mysql_node, mysql_datatype):
- example_mode = mode
- example_key = f"'{key[:key_len]}'"
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
-
- with When("I insert encrypted data in MySQL"):
- sql = f"""
- SET block_encryption_mode = {example_mode};
- INSERT INTO user_data VALUES (NULL, '2020-01-01', 'user0', AES_ENCRYPT('secret', {example_key}{(", " + example_iv) if example_iv else ", ''"}));
- """
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
-
- with And("I read encrypted data in MySQL to make sure it is valid"):
- sql = f"""
- SET block_encryption_mode = {example_mode};
- SELECT id, date, name, AES_DECRYPT(secret, {example_key}{(", " + example_iv) if example_iv else ", ''"}) AS secret FROM user_data;
- """
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
-
- with And("I read raw encrypted data in MySQL"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"SELECT id, date, name, hex(secret) as secret FROM user_data;\"", exitcode=0)
-
- with And("I read raw data using MySQL table engine"):
- output = node.query("SELECT id, date, name, hex(secret) AS secret FROM mysql_user_data")
-
- with And("I read decrypted data via MySQL table engine"):
- output = node.query(f"""SELECT hex({func}({example_mode}, secret, {example_key}{(", " + example_iv) if example_iv else ""})) FROM mysql_user_data""").output.strip()
-
- with Then("the output should match the original plain text"):
- assert output == hex("secret"), error()
-
-@TestOutline(Scenario)
-@Examples("mysql_datatype", [
- ("VARBINARY(100)",),
- #("VARCHAR(100)",),
- ("BLOB", ),
- #("TEXT",)
-])
-def encrypt(self, mysql_datatype):
- """Check that when using a table with MySQL table engine that
- we can encrypt data during insert using the `encrypt` and `aes_encrypt_mysql`
- functions and decrypt it in MySQL.
- """
- node = self.context.node
- mysql_node = self.context.mysql_node
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
-
- for func in ["encrypt", "aes_encrypt_mysql"]:
- for mode, key_len, iv_len in mysql_modes:
- exact_key_size = int(mode.split("-")[1])//8
-
- if "ecb" not in mode and not iv_len:
- continue
- if func == "encrypt":
- if iv_len and iv_len != 16:
- continue
- if key_len != exact_key_size:
- continue
-
- with Example(f"""mode={mode.strip("'")} key={key_len} iv={iv_len}"""):
- with table("user_data", node, mysql_node, mysql_datatype):
- example_mode = mode
- example_key = f"'{key[:key_len]}'"
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- example_transform = f"{func}({mode}, secret, {example_key}{(', ' + example_iv) if example_iv else ''})"
-
- with When("I insert encrypted data into MySQL table engine"):
- node.query(textwrap.dedent(f"""
- INSERT INTO
- mysql_user_data
- SELECT
- id, date, name, {example_transform}
- FROM
- input('id Nullable(Int32), date Date, name String, secret String')
- FORMAT Values (null, '2020-01-01', 'user0', 'secret')
- """))
-
- with And("I read decrypted data via MySQL table engine"):
- output = node.query(f"""SELECT hex(aes_decrypt_mysql({example_mode}, secret, {example_key}{(", " + example_iv) if example_iv else ""})) FROM mysql_user_data""").output.strip()
-
- with Then("decrypted data from MySQL table engine should should match the original plain text"):
- assert output == hex("secret"), error()
-
- with And("I read raw data using MySQL table engine to get expected raw data"):
- expected_raw_data = node.query("SELECT hex(secret) AS secret FROM mysql_user_data").output.strip()
-
- with And("I read raw encrypted data in MySQL"):
- output = mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"SELECT hex(secret) as secret FROM user_data;\"", exitcode=0).output.strip()
-
- with Then("check that raw encryted data in MySQL matches the expected"):
- assert expected_raw_data in output, error()
-
- with And("I decrypt data in MySQL to make sure it is valid"):
- sql = f"""
- SET block_encryption_mode = {example_mode};
- SELECT id, date, name, hex(AES_DECRYPT(secret, {example_key}{(", " + example_iv) if example_iv else ", ''"})) AS secret FROM user_data;
- """
- output = mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0).output.strip()
-
- with Then("decryted data in MySQL should match the original plain text"):
- assert hex("secret") in output, error()
-
-@TestFeature
-@Name("table engine")
-@Requirements(
- RQ_SRS008_AES_Functions_Compatability_Engine_Table_MySQL("1.0")
-)
-def feature(self, node="clickhouse1", mysql_node="mysql1"):
- """Check usage of encryption functions with [MySQL table engine].
-
- [MySQL table engine]: https://clickhouse.tech/docs/en/engines/table-engines/integrations/mysql/
- """
- self.context.node = self.context.cluster.node(node)
- self.context.mysql_node = self.context.cluster.node(mysql_node)
-
- for scenario in loads(current_module(), Scenario):
- Scenario(run=scenario, flags=TE)
diff --git a/tests/testflows/aes_encryption/tests/compatibility/mysql/table_function.py b/tests/testflows/aes_encryption/tests/compatibility/mysql/table_function.py
deleted file mode 100644
index cd3487c5c7..0000000000
--- a/tests/testflows/aes_encryption/tests/compatibility/mysql/table_function.py
+++ /dev/null
@@ -1,183 +0,0 @@
-import textwrap
-from contextlib import contextmanager
-
-from testflows.core import *
-from testflows.asserts import error
-
-from aes_encryption.requirements import *
-from aes_encryption.tests.common import mysql_modes, hex
-
-@contextmanager
-def table(name, node, mysql_node, secret_type):
- """Create a table that can be accessed using MySQL table function.
- """
- try:
- with Given("table in MySQL"):
- sql = f"""
- CREATE TABLE {name}(
- id INT NOT NULL AUTO_INCREMENT,
- date DATE,
- name VARCHAR(100),
- secret {secret_type},
- PRIMARY KEY ( id )
- );
- """
- with When("I drop the table if exists"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"DROP TABLE IF EXISTS {name};\"", exitcode=0)
- with And("I create a table"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
- yield f"mysql('{mysql_node.name}:3306', 'db', 'user_data', 'user', 'password')"
-
- finally:
- with And("I drop a table in MySQL", flags=TE):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"DROP TABLE IF EXISTS {name};\"", exitcode=0)
-
-@TestOutline(Scenario)
-@Examples("mysql_datatype", [
- ("VARBINARY(100)",),
- #("VARCHAR(100)",),
- ("BLOB", ),
- #("TEXT",)
-])
-def decrypt(self, mysql_datatype):
- """Check that when using a table accessed through MySQL table function that
- contains a column encrypted in MySQL stored using specified data type
- I can decrypt data in the column using the `decrypt` and `aes_decrypt_mysql`
- functions in the select query.
- """
- node = self.context.node
- mysql_node = self.context.mysql_node
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
-
- for func in ["decrypt", "aes_decrypt_mysql"]:
- for mode, key_len, iv_len in mysql_modes:
- exact_key_size = int(mode.split("-")[1])//8
-
- if "ecb" not in mode and not iv_len:
- continue
- if func == "decrypt":
- if iv_len and iv_len != 16:
- continue
- if key_len != exact_key_size:
- continue
-
- with Example(f"""{func} mode={mode.strip("'")} key={key_len} iv={iv_len}"""):
- with table("user_data", node, mysql_node, mysql_datatype) as table_function:
- example_mode = mode
- example_key = f"'{key[:key_len]}'"
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
-
- with When("I insert encrypted data in MySQL"):
- sql = f"""
- SET block_encryption_mode = {example_mode};
- INSERT INTO user_data VALUES (NULL, '2020-01-01', 'user0', AES_ENCRYPT('secret', {example_key}{(", " + example_iv) if example_iv else ", ''"}));
- """
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
-
- with And("I read encrypted data in MySQL to make sure it is valid"):
- sql = f"""
- SET block_encryption_mode = {example_mode};
- SELECT id, date, name, AES_DECRYPT(secret, {example_key}{(", " + example_iv) if example_iv else ", ''"}) AS secret FROM user_data;
- """
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0)
-
- with And("I read raw encrypted data in MySQL"):
- mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"SELECT id, date, name, hex(secret) as secret FROM user_data;\"", exitcode=0)
-
- with And("I read raw data using MySQL table function"):
- output = node.query(f"SELECT id, date, name, hex(secret) AS secret FROM {table_function}")
-
- with And("I read decrypted data using MySQL table function"):
- output = node.query(f"""SELECT hex({func}({example_mode}, secret, {example_key}{(", " + example_iv) if example_iv else ""})) FROM {table_function}""").output.strip()
-
- with Then("output should match the original plain text"):
- assert output == hex("secret"), error()
-
-@TestOutline(Scenario)
-@Examples("mysql_datatype", [
- ("VARBINARY(100)",),
- #("VARCHAR(100)",),
- ("BLOB", ),
- #("TEXT",)
-])
-def encrypt(self, mysql_datatype):
- """Check that when using a table accessed through MySQL table function that
- we can encrypt data during insert using the `aes_encrypt_mysql` function
- and decrypt it in MySQL.
- """
- node = self.context.node
- mysql_node = self.context.mysql_node
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
-
- for func in ["encrypt", "aes_encrypt_mysql"]:
- for mode, key_len, iv_len in mysql_modes:
- exact_key_size = int(mode.split("-")[1])//8
-
- if "ecb" not in mode and not iv_len:
- continue
- if func == "encrypt":
- if iv_len and iv_len != 16:
- continue
- if key_len != exact_key_size:
- continue
-
- with Example(f"""{func} mode={mode.strip("'")} key={key_len} iv={iv_len}"""):
- with table("user_data", node, mysql_node, mysql_datatype) as table_function:
- example_mode = mode
- example_key = f"'{key[:key_len]}'"
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- example_transform = f"{func}({mode}, secret, {example_key}{(', ' + example_iv) if example_iv else ''})"
-
- with When("I insert encrypted data into a table provided by MySQL database engine"):
- node.query(textwrap.dedent(f"""
- INSERT INTO TABLE FUNCTION
- {table_function}
- SELECT
- id, date, name, {example_transform}
- FROM
- input('id Int32, date Date, name String, secret String')
- FORMAT Values (1, '2020-01-01', 'user0', 'secret')
- """))
-
- with And("I read decrypted data using MySQL database engine"):
- output = node.query(f"""SELECT hex(aes_decrypt_mysql({example_mode}, secret, {example_key}{(", " + example_iv) if example_iv else ""})) FROM {table_function}""").output.strip()
-
- with Then("decrypted data from MySQL database engine should should match the original plain text"):
- assert output == hex("secret"), error()
-
- with And("I read raw data using MySQL database engine to get expected raw data"):
- expected_raw_data = node.query(f"SELECT hex(secret) AS secret FROM {table_function}").output.strip()
-
- with And("I read raw encrypted data in MySQL"):
- output = mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user -e \"SELECT hex(secret) as secret FROM user_data;\"", exitcode=0).output.strip()
-
- with Then("check that raw encryted data in MySQL matches the expected"):
- assert expected_raw_data in output, error()
-
- with And("I decrypt data in MySQL to make sure it is valid"):
- sql = f"""
- SET block_encryption_mode = {example_mode};
- SELECT id, date, name, hex(AES_DECRYPT(secret, {example_key}{(", " + example_iv) if example_iv else ", ''"})) AS secret FROM user_data;
- """
- output = mysql_node.command(f"MYSQL_PWD=password mysql -D db -u user <<'EOF'{textwrap.dedent(sql)}\nEOF", exitcode=0).output.strip()
-
- with Then("decryted data in MySQL should match the original plain text"):
- assert hex("secret") in output, error()
-
-@TestFeature
-@Name("table function")
-@Requirements(
- RQ_SRS008_AES_Functions_Compatability_TableFunction_MySQL("1.0")
-)
-def feature(self, node="clickhouse1", mysql_node="mysql1"):
- """Check usage of encryption functions with [MySQL table function].
-
- [MySQL table function]: https://clickhouse.tech/docs/en/sql-reference/table-functions/mysql/
- """
- self.context.node = self.context.cluster.node(node)
- self.context.mysql_node = self.context.cluster.node(mysql_node)
-
- for scenario in loads(current_module(), Scenario):
- Scenario(run=scenario, flags=TE)
\ No newline at end of file
diff --git a/tests/testflows/aes_encryption/tests/compatibility/select.py b/tests/testflows/aes_encryption/tests/compatibility/select.py
deleted file mode 100644
index f81920c65d..0000000000
--- a/tests/testflows/aes_encryption/tests/compatibility/select.py
+++ /dev/null
@@ -1,186 +0,0 @@
-import textwrap
-from contextlib import contextmanager
-
-from testflows.core import *
-from testflows.asserts.helpers import varname
-from testflows.asserts import values, error, snapshot
-
-from aes_encryption.tests.common import modes, mysql_modes
-
-@contextmanager
-def table(name, sql):
- node = current().context.node
- try:
- with Given("table"):
-
- with By("dropping table if exists"):
- node.query(f"DROP TABLE IF EXISTS {name}")
- with And("creating a table"):
- node.query(textwrap.dedent(sql.format(name=name)))
- yield
- finally:
- with Finally("I drop the table", flags=TE):
- node.query(f"DROP TABLE IF EXISTS {name}")
-
-@TestScenario
-def decrypt(self):
- """Check decrypting column when reading data from a table.
- """
- node = self.context.node
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
- aad = "some random aad"
-
- for mode, key_len, iv_len, aad_len in modes:
- with Example(f"""mode={mode.strip("'")} key={key_len} iv={iv_len} aad={aad_len}""") as example:
- with table("user_table", """
- CREATE TABLE {name}
- (
- date Nullable(Date),
- name Nullable(String),
- secret Nullable(String)
- )
- ENGINE = Memory()
- """):
-
- example_mode = mode
- example_key = f"'{key[:key_len]}'"
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- example_aad = None if not aad_len else f"'{aad}'"
-
- with When("I insert encrypted data"):
- encrypted_secret = node.query(f"""SELECT hex(encrypt({example_mode}, 'secret', {example_key}{(", " + example_iv) if example_iv else ""}{(", " + example_aad) if example_aad else ""}))""").output.strip()
- node.query(textwrap.dedent(f"""
- INSERT INTO user_table
- (date, name, secret)
- VALUES
- ('2020-01-01', 'user0', unhex('{encrypted_secret}'))
- """))
-
- with And("I decrypt data during query"):
- output = node.query(f"""SELECT name, decrypt({example_mode}, secret, {example_key}{(", " + example_iv) if example_iv else ""}{(", " + example_aad) if example_aad else ""}) AS secret FROM user_table FORMAT JSONEachRow""").output.strip()
-
- with Then("I should get back the original plain text"):
- assert output == '{"name":"user0","secret":"secret"}', error()
-
-@TestScenario
-def decrypt_multiple(self, count=1000):
- """Check decrypting column when reading multiple entries
- encrypted with the same parameters for the same user
- from a table.
- """
- node = self.context.node
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
- aad = "some random aad"
-
- for mode, key_len, iv_len, aad_len in modes:
- with Example(f"""mode={mode.strip("'")} key={key_len} iv={iv_len} aad={aad_len}""") as example:
- with table("user_table", """
- CREATE TABLE {name}
- (
- date Nullable(Date),
- name Nullable(String),
- secret Nullable(String)
- )
- ENGINE = Memory()
- """):
-
- example_mode = mode
- example_key = f"'{key[:key_len]}'"
- example_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- example_aad = None if not aad_len else f"'{aad}'"
-
- with When("I insert encrypted data"):
- encrypted_secret = node.query(f"""SELECT hex(encrypt({example_mode}, 'secret', {example_key}{(", " + example_iv) if example_iv else ""}{(", " + example_aad) if example_aad else ""}))""").output.strip()
- values = [f"('2020-01-01', 'user0', unhex('{encrypted_secret}'))"] * count
- node.query(
- "INSERT INTO user_table\n"
- " (date, name, secret)\n"
- f"VALUES {', '.join(values)}")
-
- with And("I decrypt data", description="using a subquery and get the number of entries that match the plaintext"):
- output = node.query(f"""SELECT count() AS count FROM (SELECT name, decrypt({example_mode}, secret, {example_key}{(", " + example_iv) if example_iv else ""}{(", " + example_aad) if example_aad else ""}) AS secret FROM user_table) WHERE secret = 'secret' FORMAT JSONEachRow""").output.strip()
-
- with Then("I should get back the expected result", description=f"{count}"):
- assert output == f'{{"count":"{count}"}}', error()
-
-@TestScenario
-def decrypt_unique(self):
- """Check decrypting column when reading multiple entries
- encrypted with the different parameters for each user
- from a table.
- """
- node = self.context.node
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
- aad = "some random aad"
-
- with table("user_table", """
- CREATE TABLE {name}
- (
- id UInt64,
- date Nullable(Date),
- name Nullable(String),
- secret Nullable(String)
- )
- ENGINE = Memory()
- """):
-
- user_modes = []
- user_keys = []
-
- with When("I get encrypted data"):
- user_id = 0
- values = []
-
- for mode, key_len, iv_len, aad_len in modes:
- if "gcm" in mode:
- continue
- user_modes.append(mode)
- user_keys.append(f"'{key[:key_len]}'")
-
- with When(f"I get encrypted data for user {user_id}"):
- encrypted_secret = node.query(
- f"""SELECT hex(encrypt({user_modes[-1]}, 'secret', {user_keys[-1]}))"""
- ).output.strip()
- values.append(f"({user_id}, '2020-01-01', 'user{user_id}', unhex('{encrypted_secret}'))")
-
- user_id += 1
-
- with And("I insert encrypted data for all users"):
- node.query(
- "INSERT INTO user_table\n"
- " (id, date, name, secret)\n"
- f"VALUES {', '.join(values)}")
-
- with And("I read decrypted data for all users"):
- output = node.query(textwrap.dedent(f"""
- SELECT
- count() AS count
- FROM
- (
- SELECT
- [{",".join(user_modes)}] AS modes,
- [{",".join(user_keys)}] AS keys,
- name,
- decrypt(modes[id], secret, keys[id]) AS secret
- FROM user_table
- )
- WHERE
- secret = 'secret'
- FORMAT JSONEachRow
- """)).output.strip()
-
- with Then("I should get back the expected result", description=f"{count}"):
- assert output == f'{{"count":"{count}"}}', error()
-
-@TestFeature
-@Name("select")
-def feature(self, node="clickhouse1"):
- """Check encryption functions when used during table querying.
- """
- self.context.node = self.context.cluster.node(node)
-
- for scenario in loads(current_module(), Scenario):
- Scenario(run=scenario, flags=TE)
diff --git a/tests/testflows/aes_encryption/tests/compatibility/snapshots/insert.py.insert.snapshot b/tests/testflows/aes_encryption/tests/compatibility/snapshots/insert.py.insert.snapshot
deleted file mode 100644
index 0387924fd7..0000000000
--- a/tests/testflows/aes_encryption/tests/compatibility/snapshots/insert.py.insert.snapshot
+++ /dev/null
@@ -1,132 +0,0 @@
-aes_encrypt_mysql_input_example_mode_aes_128_ecb_key_16_iv_None = r"""'2020-01-01\tuser0\t8C9598C3C8D8AC241DDF0D1B22020104\n2020-01-02\tuser1\tC5ECE31A240069D8F169B9F8CF687779\n2020-01-03\tuser2\t9FCFA4B05DD49D2B24BA61091F963CE3'"""
-
-aes_encrypt_mysql_input_example_mode_aes_128_ecb_key_24_iv_None = r"""'2020-01-01\tuser0\tB418FF12BCBF9E42FA7C19D6EE26BF0B\n2020-01-02\tuser1\t3147A3FEE47DF418D1D75CBC1BC14DE6\n2020-01-03\tuser2\tAECEFD40C6632A0FC033D040E44CCBCC'"""
-
-aes_encrypt_mysql_input_example_mode_aes_192_ecb_key_24_iv_None = r"""'2020-01-01\tuser0\t897F14C4E497962D986A7E7EA57AA043\n2020-01-02\tuser1\tED84AF2B3447113DA451E4577F649E36\n2020-01-03\tuser2\t4976F9D5AE195E61694A9ADCDD8A076F'"""
-
-aes_encrypt_mysql_input_example_mode_aes_192_ecb_key_32_iv_None = r"""'2020-01-01\tuser0\t044E715357AF77234FD95359666CAFF3\n2020-01-02\tuser1\tB633EF852CE85B4C97827401FD9B606B\n2020-01-03\tuser2\t2AFF7052C748E4BC3BDA8460AFD5A21D'"""
-
-aes_encrypt_mysql_input_example_mode_aes_256_ecb_key_32_iv_None = r"""'2020-01-01\tuser0\tBABD6C071FDEE1C9A33877006FBB0BE6\n2020-01-02\tuser1\t7753E81D1DB9DC91FC8148E88B3E9526\n2020-01-03\tuser2\tD77D1A8DF82C2273BF0D19A14526531F'"""
-
-aes_encrypt_mysql_input_example_mode_aes_256_ecb_key_64_iv_None = r"""'2020-01-01\tuser0\tBFFEC9DF7285A3EC799C941E1450839C\n2020-01-02\tuser1\t3EA0ECBD06326D227A7B9519B1A2955D\n2020-01-03\tuser2\t1478C57DD49523ABDB83A0917F0EDA60'"""
-
-aes_encrypt_mysql_input_example_mode_aes_128_cbc_key_16_iv_None = r"""'2020-01-01\tuser0\t8C9598C3C8D8AC241DDF0D1B22020104\n2020-01-02\tuser1\tC5ECE31A240069D8F169B9F8CF687779\n2020-01-03\tuser2\t9FCFA4B05DD49D2B24BA61091F963CE3'"""
-
-aes_encrypt_mysql_input_example_mode_aes_192_cbc_key_24_iv_None = r"""'2020-01-01\tuser0\t897F14C4E497962D986A7E7EA57AA043\n2020-01-02\tuser1\tED84AF2B3447113DA451E4577F649E36\n2020-01-03\tuser2\t4976F9D5AE195E61694A9ADCDD8A076F'"""
-
-aes_encrypt_mysql_input_example_mode_aes_256_cbc_key_32_iv_None = r"""'2020-01-01\tuser0\tBABD6C071FDEE1C9A33877006FBB0BE6\n2020-01-02\tuser1\t7753E81D1DB9DC91FC8148E88B3E9526\n2020-01-03\tuser2\tD77D1A8DF82C2273BF0D19A14526531F'"""
-
-aes_encrypt_mysql_input_example_mode_aes_128_cbc_key_16_iv_16 = r"""'2020-01-01\tuser0\tFC93C1D5E5E3B054C1F3A5692AAC0A61\n2020-01-02\tuser1\tD6DBC76ABCB14B7C6D93F1A5FCA66B9C\n2020-01-03\tuser2\tD4F4158A650D01EB505CC72EFE455486'"""
-
-aes_encrypt_mysql_input_example_mode_aes_128_cbc_key_24_iv_24 = r"""'2020-01-01\tuser0\t26CEE6B6EBDDE1BF887FDEB75F28FB52\n2020-01-02\tuser1\tF9EC1A75BEEFF70B4DEB39AAD075CEFF\n2020-01-03\tuser2\t3FF84AB3BD40FAEEF70F06BCF6AF9C42'"""
-
-aes_encrypt_mysql_input_example_mode_aes_192_cbc_key_24_iv_16 = r"""'2020-01-01\tuser0\t0E3BAF7F4E0BFCFFAE2589B67F71E277\n2020-01-02\tuser1\t2581CCEE9ABE5770480901D65B3D9222\n2020-01-03\tuser2\tED9F3BD8DB12FDF9F2462FFA572361E7'"""
-
-aes_encrypt_mysql_input_example_mode_aes_192_cbc_key_32_iv_32 = r"""'2020-01-01\tuser0\t07371B5DE2E378EE08A3A8B6B9FEAD13\n2020-01-02\tuser1\t3C0BF5D187421ECFFD3E00474A154452\n2020-01-03\tuser2\t05B253FA783D78D864AF7C4D5E6A492D'"""
-
-aes_encrypt_mysql_input_example_mode_aes_256_cbc_key_32_iv_16 = r"""'2020-01-01\tuser0\t72AC7BA6F283EA94A3C33C4D3E51C7D3\n2020-01-02\tuser1\tDACBBE79062F1C721A01CEEE3E85524F\n2020-01-03\tuser2\tFF5A09D19E5EB2ADD94581308588E44A'"""
-
-aes_encrypt_mysql_input_example_mode_aes_256_cbc_key_64_iv_64 = r"""'2020-01-01\tuser0\t573924F0BB4AA1780D45DB6451F123D6\n2020-01-02\tuser1\t007A54AA7ADE8EF844D28936486D75BC\n2020-01-03\tuser2\tAA7249B514398FE1EE827C44402BCE57'"""
-
-aes_encrypt_mysql_input_example_mode_aes_128_cfb128_key_16_iv_None = r"""'2020-01-01\tuser0\t65ACA4C7C6338E0F7EB60812\n2020-01-02\tuser1\t65ACA4C7C7338E0F7EB60812\n2020-01-03\tuser2\t65ACA4C7C4338E0F7EB60812'"""
-
-aes_encrypt_mysql_input_example_mode_aes_192_cfb128_key_24_iv_None = r"""'2020-01-01\tuser0\t72C47CEF0D63D2FB4FBC3CE4\n2020-01-02\tuser1\t72C47CEF0C63D2FB4FBC3CE4\n2020-01-03\tuser2\t72C47CEF0F63D2FB4FBC3CE4'"""
-
-aes_encrypt_mysql_input_example_mode_aes_256_cfb128_key_32_iv_None = r"""'2020-01-01\tuser0\tC5FDAAECF7B42C68180AA151\n2020-01-02\tuser1\tC5FDAAECF6B42C68180AA151\n2020-01-03\tuser2\tC5FDAAECF5B42C68180AA151'"""
-
-aes_encrypt_mysql_input_example_mode_aes_128_cfb128_key_16_iv_16 = r"""'2020-01-01\tuser0\t47FBCCF6ED598C3D8A4B05C5\n2020-01-02\tuser1\t47FBCCF6EC598C3D8A4B05C5\n2020-01-03\tuser2\t47FBCCF6EF598C3D8A4B05C5'"""
-
-aes_encrypt_mysql_input_example_mode_aes_128_cfb128_key_24_iv_24 = r"""'2020-01-01\tuser0\t2E046787D9EFFED25D69C908\n2020-01-02\tuser1\t2E046787D8EFFED25D69C908\n2020-01-03\tuser2\t2E046787DBEFFED25D69C908'"""
-
-aes_encrypt_mysql_input_example_mode_aes_192_cfb128_key_24_iv_16 = r"""'2020-01-01\tuser0\t1DB482E0874F04D4E734607A\n2020-01-02\tuser1\t1DB482E0864F04D4E734607A\n2020-01-03\tuser2\t1DB482E0854F04D4E734607A'"""
-
-aes_encrypt_mysql_input_example_mode_aes_192_cfb128_key_32_iv_32 = r"""'2020-01-01\tuser0\t44D3EB069FF443A121590842\n2020-01-02\tuser1\t44D3EB069EF443A121590842\n2020-01-03\tuser2\t44D3EB069DF443A121590842'"""
-
-aes_encrypt_mysql_input_example_mode_aes_256_cfb128_key_32_iv_16 = r"""'2020-01-01\tuser0\t1C2BED650C8137ED139226D3\n2020-01-02\tuser1\t1C2BED650D8137ED139226D3\n2020-01-03\tuser2\t1C2BED650E8137ED139226D3'"""
-
-aes_encrypt_mysql_input_example_mode_aes_256_cfb128_key_64_iv_64 = r"""'2020-01-01\tuser0\tA69DAA2E8B265618D25D5FE4\n2020-01-02\tuser1\tA69DAA2E8A265618D25D5FE4\n2020-01-03\tuser2\tA69DAA2E89265618D25D5FE4'"""
-
-aes_encrypt_mysql_input_example_mode_aes_128_ofb_key_16_iv_None = r"""'2020-01-01\tuser0\t65ACA4C7C6338E0F7EB60812\n2020-01-02\tuser1\t65ACA4C7C7338E0F7EB60812\n2020-01-03\tuser2\t65ACA4C7C4338E0F7EB60812'"""
-
-aes_encrypt_mysql_input_example_mode_aes_192_ofb_key_24_iv_None = r"""'2020-01-01\tuser0\t72C47CEF0D63D2FB4FBC3CE4\n2020-01-02\tuser1\t72C47CEF0C63D2FB4FBC3CE4\n2020-01-03\tuser2\t72C47CEF0F63D2FB4FBC3CE4'"""
-
-aes_encrypt_mysql_input_example_mode_aes_256_ofb_key_32_iv_None = r"""'2020-01-01\tuser0\tC5FDAAECF7B42C68180AA151\n2020-01-02\tuser1\tC5FDAAECF6B42C68180AA151\n2020-01-03\tuser2\tC5FDAAECF5B42C68180AA151'"""
-
-aes_encrypt_mysql_input_example_mode_aes_128_ofb_key_16_iv_16 = r"""'2020-01-01\tuser0\t47FBCCF6ED598C3D8A4B05C5\n2020-01-02\tuser1\t47FBCCF6EC598C3D8A4B05C5\n2020-01-03\tuser2\t47FBCCF6EF598C3D8A4B05C5'"""
-
-aes_encrypt_mysql_input_example_mode_aes_128_ofb_key_24_iv_24 = r"""'2020-01-01\tuser0\t2E046787D9EFFED25D69C908\n2020-01-02\tuser1\t2E046787D8EFFED25D69C908\n2020-01-03\tuser2\t2E046787DBEFFED25D69C908'"""
-
-aes_encrypt_mysql_input_example_mode_aes_192_ofb_key_24_iv_16 = r"""'2020-01-01\tuser0\t1DB482E0874F04D4E734607A\n2020-01-02\tuser1\t1DB482E0864F04D4E734607A\n2020-01-03\tuser2\t1DB482E0854F04D4E734607A'"""
-
-aes_encrypt_mysql_input_example_mode_aes_192_ofb_key_32_iv_32 = r"""'2020-01-01\tuser0\t44D3EB069FF443A121590842\n2020-01-02\tuser1\t44D3EB069EF443A121590842\n2020-01-03\tuser2\t44D3EB069DF443A121590842'"""
-
-aes_encrypt_mysql_input_example_mode_aes_256_ofb_key_32_iv_16 = r"""'2020-01-01\tuser0\t1C2BED650C8137ED139226D3\n2020-01-02\tuser1\t1C2BED650D8137ED139226D3\n2020-01-03\tuser2\t1C2BED650E8137ED139226D3'"""
-
-aes_encrypt_mysql_input_example_mode_aes_256_ofb_key_64_iv_64 = r"""'2020-01-01\tuser0\tA69DAA2E8B265618D25D5FE4\n2020-01-02\tuser1\tA69DAA2E8A265618D25D5FE4\n2020-01-03\tuser2\tA69DAA2E89265618D25D5FE4'"""
-
-encrypt_input_example_mode_aes_128_ecb_iv_None_aad_None = r"""'2020-01-01\tuser0\t8C9598C3C8D8AC241DDF0D1B22020104\n2020-01-02\tuser1\tC5ECE31A240069D8F169B9F8CF687779\n2020-01-03\tuser2\t9FCFA4B05DD49D2B24BA61091F963CE3'"""
-
-encrypt_input_example_mode_aes_192_ecb_iv_None_aad_None = r"""'2020-01-01\tuser0\t897F14C4E497962D986A7E7EA57AA043\n2020-01-02\tuser1\tED84AF2B3447113DA451E4577F649E36\n2020-01-03\tuser2\t4976F9D5AE195E61694A9ADCDD8A076F'"""
-
-encrypt_input_example_mode_aes_256_ecb_iv_None_aad_None = r"""'2020-01-01\tuser0\tBABD6C071FDEE1C9A33877006FBB0BE6\n2020-01-02\tuser1\t7753E81D1DB9DC91FC8148E88B3E9526\n2020-01-03\tuser2\tD77D1A8DF82C2273BF0D19A14526531F'"""
-
-encrypt_input_example_mode_aes_128_cbc_iv_None_aad_None = r"""'2020-01-01\tuser0\t8C9598C3C8D8AC241DDF0D1B22020104\n2020-01-02\tuser1\tC5ECE31A240069D8F169B9F8CF687779\n2020-01-03\tuser2\t9FCFA4B05DD49D2B24BA61091F963CE3'"""
-
-encrypt_input_example_mode_aes_192_cbc_iv_None_aad_None = r"""'2020-01-01\tuser0\t897F14C4E497962D986A7E7EA57AA043\n2020-01-02\tuser1\tED84AF2B3447113DA451E4577F649E36\n2020-01-03\tuser2\t4976F9D5AE195E61694A9ADCDD8A076F'"""
-
-encrypt_input_example_mode_aes_256_cbc_iv_None_aad_None = r"""'2020-01-01\tuser0\tBABD6C071FDEE1C9A33877006FBB0BE6\n2020-01-02\tuser1\t7753E81D1DB9DC91FC8148E88B3E9526\n2020-01-03\tuser2\tD77D1A8DF82C2273BF0D19A14526531F'"""
-
-encrypt_input_example_mode_aes_128_cbc_iv_16_aad_None = r"""'2020-01-01\tuser0\tFC93C1D5E5E3B054C1F3A5692AAC0A61\n2020-01-02\tuser1\tD6DBC76ABCB14B7C6D93F1A5FCA66B9C\n2020-01-03\tuser2\tD4F4158A650D01EB505CC72EFE455486'"""
-
-encrypt_input_example_mode_aes_192_cbc_iv_16_aad_None = r"""'2020-01-01\tuser0\t0E3BAF7F4E0BFCFFAE2589B67F71E277\n2020-01-02\tuser1\t2581CCEE9ABE5770480901D65B3D9222\n2020-01-03\tuser2\tED9F3BD8DB12FDF9F2462FFA572361E7'"""
-
-encrypt_input_example_mode_aes_256_cbc_iv_16_aad_None = r"""'2020-01-01\tuser0\t72AC7BA6F283EA94A3C33C4D3E51C7D3\n2020-01-02\tuser1\tDACBBE79062F1C721A01CEEE3E85524F\n2020-01-03\tuser2\tFF5A09D19E5EB2ADD94581308588E44A'"""
-
-encrypt_input_example_mode_aes_128_cfb128_iv_None_aad_None = r"""'2020-01-01\tuser0\t65ACA4C7C6338E0F7EB60812\n2020-01-02\tuser1\t65ACA4C7C7338E0F7EB60812\n2020-01-03\tuser2\t65ACA4C7C4338E0F7EB60812'"""
-
-encrypt_input_example_mode_aes_192_cfb128_iv_None_aad_None = r"""'2020-01-01\tuser0\t72C47CEF0D63D2FB4FBC3CE4\n2020-01-02\tuser1\t72C47CEF0C63D2FB4FBC3CE4\n2020-01-03\tuser2\t72C47CEF0F63D2FB4FBC3CE4'"""
-
-encrypt_input_example_mode_aes_256_cfb128_iv_None_aad_None = r"""'2020-01-01\tuser0\tC5FDAAECF7B42C68180AA151\n2020-01-02\tuser1\tC5FDAAECF6B42C68180AA151\n2020-01-03\tuser2\tC5FDAAECF5B42C68180AA151'"""
-
-encrypt_input_example_mode_aes_128_cfb128_iv_16_aad_None = r"""'2020-01-01\tuser0\t47FBCCF6ED598C3D8A4B05C5\n2020-01-02\tuser1\t47FBCCF6EC598C3D8A4B05C5\n2020-01-03\tuser2\t47FBCCF6EF598C3D8A4B05C5'"""
-
-encrypt_input_example_mode_aes_192_cfb128_iv_16_aad_None = r"""'2020-01-01\tuser0\t1DB482E0874F04D4E734607A\n2020-01-02\tuser1\t1DB482E0864F04D4E734607A\n2020-01-03\tuser2\t1DB482E0854F04D4E734607A'"""
-
-encrypt_input_example_mode_aes_256_cfb128_iv_16_aad_None = r"""'2020-01-01\tuser0\t1C2BED650C8137ED139226D3\n2020-01-02\tuser1\t1C2BED650D8137ED139226D3\n2020-01-03\tuser2\t1C2BED650E8137ED139226D3'"""
-
-encrypt_input_example_mode_aes_128_ofb_iv_None_aad_None = r"""'2020-01-01\tuser0\t65ACA4C7C6338E0F7EB60812\n2020-01-02\tuser1\t65ACA4C7C7338E0F7EB60812\n2020-01-03\tuser2\t65ACA4C7C4338E0F7EB60812'"""
-
-encrypt_input_example_mode_aes_192_ofb_iv_None_aad_None = r"""'2020-01-01\tuser0\t72C47CEF0D63D2FB4FBC3CE4\n2020-01-02\tuser1\t72C47CEF0C63D2FB4FBC3CE4\n2020-01-03\tuser2\t72C47CEF0F63D2FB4FBC3CE4'"""
-
-encrypt_input_example_mode_aes_256_ofb_iv_None_aad_None = r"""'2020-01-01\tuser0\tC5FDAAECF7B42C68180AA151\n2020-01-02\tuser1\tC5FDAAECF6B42C68180AA151\n2020-01-03\tuser2\tC5FDAAECF5B42C68180AA151'"""
-
-encrypt_input_example_mode_aes_128_ofb_iv_16_aad_None = r"""'2020-01-01\tuser0\t47FBCCF6ED598C3D8A4B05C5\n2020-01-02\tuser1\t47FBCCF6EC598C3D8A4B05C5\n2020-01-03\tuser2\t47FBCCF6EF598C3D8A4B05C5'"""
-
-encrypt_input_example_mode_aes_192_ofb_iv_16_aad_None = r"""'2020-01-01\tuser0\t1DB482E0874F04D4E734607A\n2020-01-02\tuser1\t1DB482E0864F04D4E734607A\n2020-01-03\tuser2\t1DB482E0854F04D4E734607A'"""
-
-encrypt_input_example_mode_aes_256_ofb_iv_16_aad_None = r"""'2020-01-01\tuser0\t1C2BED650C8137ED139226D3\n2020-01-02\tuser1\t1C2BED650D8137ED139226D3\n2020-01-03\tuser2\t1C2BED650E8137ED139226D3'"""
-
-encrypt_input_example_mode_aes_128_gcm_iv_12_aad_None = r"""'2020-01-01\tuser0\t98E5A430C4A01C4429B0F37A4B3CDBC2BDB491651A36D7F904E231E0\n2020-01-02\tuser1\t98E5A430C5A01C4429B0F37A6E108322C2863C1ABF9BC7098CD369DB\n2020-01-03\tuser2\t98E5A430C6A01C4429B0F37A01646A0243D1CB9A516CF61814808196'"""
-
-encrypt_input_example_mode_aes_192_gcm_iv_12_aad_None = r"""'2020-01-01\tuser0\t3F89C3B657596C86202B59F4350807B364DA1E94682EAB679617575D\n2020-01-02\tuser1\t3F89C3B656596C86202B59F4FA03602ED37788B312FDE2AFDBB7F097\n2020-01-03\tuser2\t3F89C3B655596C86202B59F4691EC8880B8132DA9D8838F70D5618C8'"""
-
-encrypt_input_example_mode_aes_256_gcm_iv_12_aad_None = r"""'2020-01-01\tuser0\t23B80948CCDB54DC6D0B62F215132A07B30BA6F15593B4F946726B11\n2020-01-02\tuser1\t23B80948CDDB54DC6D0B62F2A01C1BAE07B8D6B26F60116040CDDB55\n2020-01-03\tuser2\t23B80948CEDB54DC6D0B62F2BD0D4954DA6D46772074FFCB4B0D0B98'"""
-
-encrypt_input_example_mode_aes_128_gcm_iv_12_aad_True = r"""'2020-01-01\tuser0\t98E5A430C4A01C4429B0F37AF9758E0EA4B44A50A7F964C8E51A913C\n2020-01-02\tuser1\t98E5A430C5A01C4429B0F37ADC59D6EEDB86E72F025474386D2BC907\n2020-01-03\tuser2\t98E5A430C6A01C4429B0F37AB32D3FCE5AD110AFECA34529F578214A'"""
-
-encrypt_input_example_mode_aes_192_gcm_iv_12_aad_True = r"""'2020-01-01\tuser0\t3F89C3B657596C86202B59F4B6C662DFF6347EF3B46C170A2F80E946\n2020-01-02\tuser1\t3F89C3B656596C86202B59F479CD05424199E8D4CEBF5EC262204E8C\n2020-01-03\tuser2\t3F89C3B655596C86202B59F4EAD0ADE4996F52BD41CA849AB4C1A6D3'"""
-
-encrypt_input_example_mode_aes_256_gcm_iv_12_aad_True = r"""'2020-01-01\tuser0\t23B80948CCDB54DC6D0B62F28787710BBF3F9A594C387B9F7CA2372B\n2020-01-02\tuser1\t23B80948CDDB54DC6D0B62F2328840A20B8CEA1A76CBDE067A1D876F\n2020-01-03\tuser2\t23B80948CEDB54DC6D0B62F22F991258D6597ADF39DF30AD71DD57A2'"""
-
-encrypt_input_example_mode_aes_128_ctr_iv_None_aad_None = r"""'2020-01-01\tuser0\t65ACA4C7C6338E0F7EB60812\n2020-01-02\tuser1\t65ACA4C7C7338E0F7EB60812\n2020-01-03\tuser2\t65ACA4C7C4338E0F7EB60812'"""
-
-encrypt_input_example_mode_aes_192_ctr_iv_None_aad_None = r"""'2020-01-01\tuser0\t72C47CEF0D63D2FB4FBC3CE4\n2020-01-02\tuser1\t72C47CEF0C63D2FB4FBC3CE4\n2020-01-03\tuser2\t72C47CEF0F63D2FB4FBC3CE4'"""
-
-encrypt_input_example_mode_aes_256_ctr_iv_None_aad_None = r"""'2020-01-01\tuser0\tC5FDAAECF7B42C68180AA151\n2020-01-02\tuser1\tC5FDAAECF6B42C68180AA151\n2020-01-03\tuser2\tC5FDAAECF5B42C68180AA151'"""
-
-encrypt_input_example_mode_aes_128_ctr_iv_16_aad_None = r"""'2020-01-01\tuser0\t47FBCCF6ED598C3D8A4B05C5\n2020-01-02\tuser1\t47FBCCF6EC598C3D8A4B05C5\n2020-01-03\tuser2\t47FBCCF6EF598C3D8A4B05C5'"""
-
-encrypt_input_example_mode_aes_192_ctr_iv_16_aad_None = r"""'2020-01-01\tuser0\t1DB482E0874F04D4E734607A\n2020-01-02\tuser1\t1DB482E0864F04D4E734607A\n2020-01-03\tuser2\t1DB482E0854F04D4E734607A'"""
-
-encrypt_input_example_mode_aes_256_ctr_iv_16_aad_None = r"""'2020-01-01\tuser0\t1C2BED650C8137ED139226D3\n2020-01-02\tuser1\t1C2BED650D8137ED139226D3\n2020-01-03\tuser2\t1C2BED650E8137ED139226D3'"""
-
diff --git a/tests/testflows/aes_encryption/tests/decrypt.py b/tests/testflows/aes_encryption/tests/decrypt.py
deleted file mode 100644
index 7c98281228..0000000000
--- a/tests/testflows/aes_encryption/tests/decrypt.py
+++ /dev/null
@@ -1,620 +0,0 @@
-# -*- coding: utf-8 -*-
-import os
-from importlib.machinery import SourceFileLoader
-
-from testflows.core import *
-from testflows.core.name import basename
-from testflows.asserts.helpers import varname
-from testflows.asserts import error
-
-from aes_encryption.requirements.requirements import *
-from aes_encryption.tests.common import *
-
-@TestOutline
-def decrypt(self, ciphertext=None, key=None, mode=None, iv=None, aad=None, exitcode=0, message=None, step=When, cast=None, endcast=None, compare=None, no_checks=False):
- """Execute `decrypt` function with the specified parameters.
- """
- params = []
- if mode is not None:
- params.append(mode)
- if ciphertext is not None:
- params.append(ciphertext)
- if key is not None:
- params.append(key)
- if iv is not None:
- params.append(iv)
- if aad is not None:
- params.append(aad)
-
- sql = f"decrypt(" + ", ".join(params) + ")"
- if cast:
- sql = f"{cast}({sql}){endcast or ''}"
- if compare:
- sql = f"{compare} = {sql}"
- sql = f"SELECT {sql}"
-
- return current().context.node.query(sql, step=step, exitcode=exitcode, message=message, no_checks=no_checks)
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Decrypt_Function_Parameters_CipherText("1.0"),
-)
-def invalid_ciphertext(self):
- """Check that `decrypt` function does not crash when invalid
- `ciphertext` is passed as the first parameter.
- """
- key = f"{'1' * 36}"
- iv = f"{'2' * 16}"
- aad = "some random aad"
- invalid_ciphertexts = plaintexts
-
- for mode, key_len, iv_len, aad_len in modes:
- with Example(f"""mode={mode.strip("'")} iv={iv_len} aad={aad_len}"""):
- d_iv = None if not iv_len else f"'{iv[:iv_len]}'"
- d_aad = None if not aad_len else f"'{aad}'"
-
- for datatype, ciphertext in invalid_ciphertexts:
- if datatype in ["NULL"]:
- continue
- with When(f"invalid ciphertext={ciphertext}"):
- if "cfb" in mode or "ofb" in mode or "ctr" in mode:
- decrypt(ciphertext=ciphertext, key=f"'{key[:key_len]}'", mode=mode, iv=d_iv, aad=d_aad, cast="hex")
- else:
- with When("I execute decrypt function"):
- r = decrypt(ciphertext=ciphertext, key=f"'{key[:key_len]}'", mode=mode, iv=d_iv, aad=d_aad, no_checks=True, step=By)
- with Then("exitcode is not zero"):
- assert r.exitcode in [198, 36]
- with And("exception is present in the output"):
- assert "DB::Exception:" in r.output
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Functions_InvalidParameters("1.0")
-)
-def invalid_parameters(self):
- """Check that `decrypt` function returns an error when
- we call it with invalid parameters.
- """
- ciphertext = "unhex('AA1826B5F66A903C888D5DCDA9FB63D1D9CCA10EC55F59D6C00D37')"
-
- with Example("no parameters"):
- decrypt(exitcode=42, message="DB::Exception: Incorrect number of arguments for function decrypt provided 0, expected 3 to 5")
-
- with Example("missing key and mode"):
- decrypt(ciphertext=ciphertext, exitcode=42,
- message="DB::Exception: Incorrect number of arguments for function decrypt provided 1")
-
- with Example("missing mode"):
- decrypt(ciphertext=ciphertext, key="'123'", exitcode=42,
- message="DB::Exception: Incorrect number of arguments for function decrypt provided 2")
-
- with Example("bad key type - UInt8"):
- decrypt(ciphertext=ciphertext, key="123", mode="'aes-128-ecb'", exitcode=43,
- message="DB::Exception: Received from localhost:9000. DB::Exception: Illegal type of argument #3")
-
- with Example("bad mode type - forgot quotes"):
- decrypt(ciphertext=ciphertext, key="'0123456789123456'", mode="aes-128-ecb", exitcode=47,
- message="DB::Exception: Missing columns: 'ecb' 'aes' while processing query")
-
- with Example("bad mode type - UInt8"):
- decrypt(ciphertext=ciphertext, key="'0123456789123456'", mode="128", exitcode=43,
- message="DB::Exception: Illegal type of argument #1 'mode'")
-
- with Example("bad iv type - UInt8"):
- decrypt(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes-128-cbc'", iv='128', exitcode=43,
- message="DB::Exception: Illegal type of argument")
-
- with Example("bad aad type - UInt8"):
- decrypt(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes-128-gcm'", iv="'012345678912'", aad="123", exitcode=43,
- message="DB::Exception: Illegal type of argument")
-
- with Example("iv not valid for mode", requirements=[RQ_SRS008_AES_Decrypt_Function_InitializationVector_NotValidForMode("1.0")]):
- decrypt(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes-128-ecb'", iv="'012345678912'", exitcode=36,
- message="DB::Exception: aes-128-ecb does not support IV")
-
- with Example("iv not valid for mode - size 0", requirements=[RQ_SRS008_AES_Decrypt_Function_InitializationVector_NotValidForMode("1.0")]):
- decrypt(ciphertext="unhex('49C9ADB81BA9B58C485E7ADB90E70576')", key="'0123456789123456'", mode="'aes-128-ecb'", iv="''", exitcode=36,
- message="DB::Exception: aes-128-ecb does not support IV")
-
- with Example("aad not valid for mode", requirements=[RQ_SRS008_AES_Decrypt_Function_AdditionalAuthenticationData_NotValidForMode("1.0")]):
- decrypt(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes-128-cbc'", iv="'0123456789123456'", aad="'aad'", exitcode=36,
- message="DB::Exception: AAD can be only set for GCM-mode")
-
- with Example("invalid mode value", requirements=[RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_Invalid("1.0")]):
- with When("typo in the block algorithm"):
- decrypt(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes-128-eeb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes-128-eeb")
-
- with When("typo in the key size"):
- decrypt(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes-127-ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes-127-ecb")
-
- with When("typo in the aes prefix"):
- decrypt(ciphertext=ciphertext, key="'0123456789123456'", mode="'aee-128-ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aee-128-ecb")
-
- with When("missing last dash"):
- decrypt(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes-128ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes-128ecb")
-
- with When("missing first dash"):
- decrypt(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes128-ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes128-ecb")
-
- with When("all capitals"):
- decrypt(ciphertext=ciphertext, key="'0123456789123456'", mode="'AES-128-ECB'", exitcode=36,
- message="DB::Exception: Invalid mode: AES-128-ECB")
-
-@TestOutline(Scenario)
-@Requirements(
- RQ_SRS008_AES_Decrypt_Function_Key_Length_InvalidLengthError("1.0"),
- RQ_SRS008_AES_Decrypt_Function_InitializationVector_Length_InvalidLengthError("1.0"),
- RQ_SRS008_AES_Decrypt_Function_AdditionalAuthenticationData_NotValidForMode("1.0")
-)
-@Examples("mode key_len iv_len aad", [
- # ECB
- ("'aes-128-ecb'", 16, None, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_128_ECB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-ecb'", 24, None, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_192_ECB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-ecb'", 32, None, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_256_ECB_KeyAndInitializationVector_Length("1.0"))),
- # CBC
- ("'aes-128-cbc'", 16, 16, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_128_CBC_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-cbc'", 24, 16, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_192_CBC_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-cbc'", 32, 16, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_256_CBC_KeyAndInitializationVector_Length("1.0"))),
- # CFB128
- ("'aes-128-cfb128'", 16, 16, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_128_CFB128_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-cfb128'", 24, 16, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_192_CFB128_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-cfb128'", 32, 16, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_256_CFB128_KeyAndInitializationVector_Length("1.0"))),
- # OFB
- ("'aes-128-ofb'", 16, 16, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_128_OFB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-ofb'", 24, 16, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_192_OFB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-ofb'", 32, 16, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_256_OFB_KeyAndInitializationVector_Length("1.0"))),
- # CTR
- ("'aes-128-ctr'", 16, 16, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_128_CTR_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-ctr'", 24, 16, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_192_CTR_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-ctr'", 32, 16, None,
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_256_CTR_KeyAndInitializationVector_Length("1.0"))),
-], "%-16s %-10s %-10s %-10s")
-def invalid_key_or_iv_length_for_mode_non_gcm(self, mode, key_len, iv_len, aad):
- """Check that an error is returned when key or iv length does not match
- the expected value for the mode.
- """
- ciphertext = "unhex('AA1826B5F66A903C888D5DCDA9FB63D1D9CCA10EC55F59D6C00D37')"
- key = "0123456789" * 4
- iv = "0123456789" * 4
-
- with When("key is too short"):
- decrypt(ciphertext=ciphertext, key=f"'{key[:key_len-1]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid key size")
-
- with When("key is too long"):
- decrypt(ciphertext=ciphertext, key=f"'{key[:key_len+1]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid key size")
-
- if iv_len is not None:
- with When("iv is too short"):
- decrypt(ciphertext=ciphertext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len-1]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid IV size")
-
- with When("iv is too long"):
- decrypt(ciphertext=ciphertext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len+1]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid IV size")
-
- if aad is None:
- with When("aad is specified but not needed"):
- decrypt(ciphertext=ciphertext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len+1] if iv_len is not None else ''}'", aad="'AAD'", mode=mode, exitcode=36, message="DB::Exception: AAD can be only set for GCM-mode")
-
- else:
- with When("iv is specified but not needed"):
- decrypt(ciphertext=ciphertext, key=f"'{key[:key_len]}'", iv=f"'{iv}'", mode=mode, exitcode=36, message="DB::Exception: {} does not support IV".format(mode.strip("'")))
-
-@TestOutline(Scenario)
-@Requirements(
- RQ_SRS008_AES_Decrypt_Function_Key_Length_InvalidLengthError("1.0"),
- RQ_SRS008_AES_Decrypt_Function_InitializationVector_Length_InvalidLengthError("1.0"),
- RQ_SRS008_AES_Decrypt_Function_AdditionalAuthenticationData_NotValidForMode("1.0")
-)
-@Examples("mode key_len iv_len aad", [
- # GCM
- ("'aes-128-gcm'", 16, 8, "'hello there aad'",
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_128_GCM_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-128-gcm'", 16, None, "'hello there aad'",
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_128_GCM_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-gcm'", 24, 8, "''",
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_192_GCM_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-gcm'", 24, None, "''",
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_192_GCM_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-gcm'", 32, 8, "'a'",
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_256_GCM_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-gcm'", 32, None, "'a'",
- Requirements(RQ_SRS008_AES_Decrypt_Function_AES_256_GCM_KeyAndInitializationVector_Length("1.0"))),
-], "%-16s %-10s %-10s %-10s")
-def invalid_key_or_iv_length_for_gcm(self, mode, key_len, iv_len, aad):
- """Check that an error is returned when key or iv length does not match
- the expected value for the GCM mode.
- """
- ciphertext = "'hello there'"
- plaintext = "hello there"
- key = "0123456789" * 4
- iv = "0123456789" * 4
-
- with When("key is too short"):
- ciphertext = "unhex('AA1826B5F66A903C888D5DCDA9FB63D1D9CCA10EC55F59D6C00D37')"
- decrypt(ciphertext=ciphertext, key=f"'{key[:key_len-1]}'", iv=f"'{iv[:iv_len]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid key size")
-
- with When("key is too long"):
- ciphertext = "unhex('24AEBFEA049D6F4CF85AAB8CADEDF39CCCAA1C3C2AFF99E194789D')"
- decrypt(ciphertext=ciphertext, key=f"'{key[:key_len+1]}'", iv=f"'{iv[:iv_len]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid key size")
-
- if iv_len is not None:
- with When(f"iv is too short"):
- ciphertext = "unhex('24AEBFEA049D6F4CF85AAB8CADEDF39CCCAA1C3C2AFF99E194789D')"
- decrypt(ciphertext=ciphertext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len-1]}'", mode=mode, exitcode=198, message="DB::Exception:")
- else:
- with When("iv is not specified"):
- ciphertext = "unhex('1CD4EC93A4B0C687926E8F8C2AA3B4CE1943D006DAE3A774CB1AE5')"
- decrypt(ciphertext=ciphertext, key=f"'{key[:key_len]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid IV size 0 != expected size 12")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Decrypt_Function_Parameters_AdditionalAuthenticatedData("1.0"),
- RQ_SRS008_AES_Decrypt_Function_AdditionalAuthenticationData_Length("1.0")
-)
-def aad_parameter_types_and_length(self):
- """Check that `decrypt` function accepts `aad` parameter as the fifth argument
- of either `String` or `FixedString` types and that the length is not limited.
- """
- plaintext = "hello there"
- iv = "'012345678912'"
- mode = "'aes-128-gcm'"
- key = "'0123456789123456'"
-
- with When("aad is specified using String type"):
- ciphertext = "unhex('19A1183335B374C626B24208AAEC97F148732CE05621AC87B21526')"
- decrypt(ciphertext=ciphertext, key=key, mode=mode, iv=iv, aad="'aad'", message=plaintext)
-
- with When("aad is specified using String with UTF8 characters"):
- ciphertext = "unhex('19A1183335B374C626B242C68D9618A8C2664D7B6A3FE978104B39')"
- decrypt(ciphertext=ciphertext, key=key, mode=mode, iv=iv, aad="'Gãńdåłf_Thê_Gręât'", message=plaintext)
-
- with When("aad is specified using FixedString type"):
- ciphertext = "unhex('19A1183335B374C626B24208AAEC97F148732CE05621AC87B21526')"
- decrypt(ciphertext=ciphertext, key=key, mode=mode, iv=iv, aad="toFixedString('aad', 3)", message=plaintext)
-
- with When("aad is specified using FixedString with UTF8 characters"):
- ciphertext = "unhex('19A1183335B374C626B242C68D9618A8C2664D7B6A3FE978104B39')"
- decrypt(ciphertext=ciphertext, key=key, mode=mode, iv=iv, aad="toFixedString('Gãńdåłf_Thê_Gręât', 24)", message=plaintext)
-
- with When("aad is 0 bytes"):
- ciphertext = "unhex('19A1183335B374C626B242DF92BB3F57F5D82BEDF41FD5D49F8BC9')"
- decrypt(ciphertext=ciphertext, key=key, mode=mode, iv=iv, aad="''", message=plaintext)
-
- with When("aad is 1 byte"):
- ciphertext = "unhex('19A1183335B374C626B242D1BCFC63B09CFE9EAD20285044A01035')"
- decrypt(ciphertext=ciphertext, key=key, mode=mode, iv=iv, aad="'1'", message=plaintext)
-
- with When("aad is 256 bytes"):
- ciphertext = "unhex('19A1183335B374C626B242355AD3DD2C5D7E36AEECBB847BF9E8A7')"
- decrypt(ciphertext=ciphertext, key=key, mode=mode, iv=iv, aad=f"'{'1' * 256}'", message=plaintext)
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Decrypt_Function_Parameters_InitializationVector("1.0")
-)
-def iv_parameter_types(self):
- """Check that `decrypt` function accepts `iv` parameter as the fourth argument
- of either `String` or `FixedString` types.
- """
- iv = "'0123456789123456'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("iv is specified using String type"):
- decrypt(ciphertext="unhex('F024F9372FA0D8B974894D29FFB8A7F7')", key=key, mode=mode, iv=iv, message="hello there")
-
- with When("iv is specified using String with UTF8 characters"):
- decrypt(ciphertext="unhex('7A4EC0FF3796F46BED281F4778ACE1DC')", key=key, mode=mode, iv="'Gãńdåłf_Thê'", message="hello there")
-
- with When("iv is specified using FixedString type"):
- decrypt(ciphertext="unhex('F024F9372FA0D8B974894D29FFB8A7F7')", key=key, mode=mode, iv=f"toFixedString({iv}, 16)", message="hello there")
-
- with When("iv is specified using FixedString with UTF8 characters"):
- decrypt(ciphertext="unhex('7A4EC0FF3796F46BED281F4778ACE1DC')", key=key, mode=mode, iv=f"toFixedString('Gãńdåłf_Thê', 16)", message="hello there")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Decrypt_Function_Parameters_Key("1.0")
-)
-def key_parameter_types(self):
- """Check that `decrypt` function accepts `key` parameter as the second argument
- of either `String` or `FixedString` types.
- """
- iv = "'0123456789123456'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("key is specified using String type"):
- decrypt(ciphertext="unhex('49C9ADB81BA9B58C485E7ADB90E70576')", key=key, mode=mode, message="hello there")
-
- with When("key is specified using String with UTF8 characters"):
- decrypt(ciphertext="unhex('180086AA42AD57B71C706EEC372D0C3D')", key="'Gãńdåłf_Thê'", mode=mode, message="hello there")
-
- with When("key is specified using FixedString type"):
- decrypt(ciphertext="unhex('49C9ADB81BA9B58C485E7ADB90E70576')", key=f"toFixedString({key}, 16)", mode=mode, message="hello there")
-
- with When("key is specified using FixedString with UTF8 characters"):
- decrypt(ciphertext="unhex('180086AA42AD57B71C706EEC372D0C3D')", key=f"toFixedString('Gãńdåłf_Thê', 16)", mode=mode, message="hello there")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode("1.0"),
-)
-def mode_parameter_types(self):
- """Check that `decrypt` function accepts `mode` parameter as the third argument
- of either `String` or `FixedString` types.
- """
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("mode is specified using String type"):
- decrypt(ciphertext="unhex('49C9ADB81BA9B58C485E7ADB90E70576')", key=key, mode=mode, message="hello there")
-
- with When("mode is specified using FixedString type"):
- decrypt(ciphertext="unhex('49C9ADB81BA9B58C485E7ADB90E70576')", key=key, mode=f"toFixedString({mode}, 12)", message="hello there")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Decrypt_Function_Parameters_ReturnValue("1.0")
-)
-def return_value(self):
- """Check that `decrypt` functions returns String data type.
- """
- ciphertext = "unhex('F024F9372FA0D8B974894D29FFB8A7F7')"
- iv = "'0123456789123456'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("I get type of the return value"):
- sql = "SELECT toTypeName(decrypt(" + mode + "," + ciphertext + "," + key + "," + iv + "))"
- r = self.context.node.query(sql)
-
- with Then("type should be String"):
- assert r.output.strip() == "String", error()
-
- with When("I get the return value"):
- decrypt(ciphertext=ciphertext, key=key, mode=mode, iv=iv, message="hello there")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Decrypt_Function_Syntax("1.0"),
-)
-def syntax(self):
- """Check that `decrypt` function supports syntax
-
- ```sql
- decrypt(ciphertext, key, mode, [iv, aad])
- ```
- """
- ciphertext = "19A1183335B374C626B242A6F6E8712E2B64DCDC6A468B2F654614"
- sql = f"SELECT decrypt('aes-128-gcm', unhex('{ciphertext}'), '0123456789123456', '012345678912', 'AAD')"
- self.context.node.query(sql, step=When, message="hello there")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Decrypt_Function_Parameters_CipherText("1.0"),
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode("1.0"),
- RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_ValuesFormat("1.0"),
-)
-def decryption(self):
- """Check that `decrypt` functions accepts `ciphertext` as the second parameter
- and `mode` as the first parameter and we can convert the decrypted value into the original
- value with the original data type.
- """
- key = f"{'1' * 36}"
- iv = f"{'2' * 16}"
- aad = "some random aad"
-
- with Given("I load encrypt snapshots"):
- snapshot_module = SourceFileLoader("snapshot", os.path.join(current_dir(), "snapshots", "encrypt.py.encrypt.snapshot")).load_module()
-
- for mode, key_len, iv_len, aad_len in modes:
- for datatype, plaintext in plaintexts:
-
- requirement = globals().get(f"""RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_{mode.strip("'").replace("-","_").upper()}""")("1.0")
-
- with Example(f"""mode={mode.strip("'")} datatype={datatype.strip("'")} iv={iv_len} aad={aad_len}""",
- requirements=[requirement]) as example:
-
- with Given("I have ciphertext"):
- example_name = basename(example.name)
- ciphertext = getattr(snapshot_module, varname(f"example_{example_name}"))
-
- cast = None
- endcast = None
- ciphertext = f"unhex({ciphertext})"
- compare = plaintext
-
- if datatype == "IPv4":
- cast = "toIPv4(IPv4NumToString(reinterpretAsUInt32"
- endcast = "))"
- elif datatype in ["DateTime64", "UUID", "IPv6", "LowCardinality", "Enum8", "Enum16", "Decimal32", "Decimal64", "Decimal128", "Array"]:
- xfail(reason="no conversion")
- elif datatype == "NULL":
- ciphertext = "NULL"
- cast = "isNull"
- compare = None
- elif datatype in ["Float32", "Float64", "Date", "DateTime"] or "Int" in datatype:
- cast = f"reinterpretAs{datatype}"
-
- decrypt(ciphertext=ciphertext, key=f"'{key[:key_len]}'", mode=mode,
- iv=(None if not iv_len else f"'{iv[:iv_len]}'"),
- aad=(None if not aad_len else f"'{aad}'"),
- cast=cast, endcast=endcast, compare=compare, message="1")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Functions_Mismatched_Key("1.0")
-)
-def mismatched_key(self):
- """Check that `decrypt` function returns garbage or an error when key parameter does not match.
- """
- key = f"{'1' * 36}"
- iv = f"{'2' * 16}"
- aad = "some random aad"
- datatype = "String"
- plaintext = "'1'"
-
- with Given("I load encrypt snapshots"):
- snapshot_module = SourceFileLoader("snapshot", os.path.join(current_dir(), "snapshots", "encrypt.py.encrypt.snapshot")).load_module()
-
- for mode, key_len, iv_len, aad_len in modes:
- with Example(f"""mode={mode.strip("'")} datatype={datatype.strip("'")} iv={iv_len} aad={aad_len}""") as example:
- with Given("I have ciphertext"):
- example_name = basename(example.name)
- ciphertext = getattr(snapshot_module, varname(f"example_{example_name}"))
-
- with When("I decrypt using a mismatched key"):
- r = decrypt(ciphertext=f"unhex({ciphertext})", key=f"'a{key[:key_len-1]}'", mode=mode,
- iv=(None if not iv_len else f"'{iv[:iv_len]}'"),
- aad=(None if not aad_len else f"'{aad}'"), no_checks=True, cast="hex")
-
- with Then("exitcode shoud be 0 or 198"):
- assert r.exitcode in [0, 198], error()
-
- with And("output should be garbage or an error"):
- output = r.output.strip()
- assert "Exception: Failed to decrypt" in output or output != "31", error()
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Functions_Mismatched_IV("1.0")
-)
-def mismatched_iv(self):
- """Check that `decrypt` function returns garbage or an error when iv parameter does not match.
- """
- key = f"{'1' * 36}"
- iv = f"{'2' * 16}"
- aad = "some random aad"
- datatype = "String"
- plaintext = "'1'"
-
- with Given("I load encrypt snapshots"):
- snapshot_module = SourceFileLoader("snapshot", os.path.join(current_dir(), "snapshots", "encrypt.py.encrypt.snapshot")).load_module()
-
- for mode, key_len, iv_len, aad_len in modes:
- if not iv_len:
- continue
- with Example(f"""mode={mode.strip("'")} datatype={datatype.strip("'")} iv={iv_len} aad={aad_len}""") as example:
- with Given("I have ciphertext"):
- example_name = basename(example.name)
- ciphertext = getattr(snapshot_module, varname(f"example_{example_name}"))
-
- with When("I decrypt using a mismatched iv"):
- r = decrypt(ciphertext=f"unhex({ciphertext})", key=f"'{key[:key_len]}'", mode=mode,
- iv=f"'a{iv[:iv_len-1]}'",
- aad=(None if not aad_len else f"'{aad}'"), no_checks=True, cast="hex")
-
- with Then("exitcode shoud be 0 or 198"):
- assert r.exitcode in [0, 198], error()
-
- with And("output should be garbage or an error"):
- output = r.output.strip()
- assert "Exception: Failed to decrypt" in output or output != "31", error()
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Functions_Mismatched_AAD("1.0")
-)
-def mismatched_aad(self):
- """Check that `decrypt` function returns garbage or an error when aad parameter does not match.
- """
- key = f"{'1' * 36}"
- iv = f"{'2' * 16}"
- aad = "some random aad"
- datatype = "String"
- plaintext = "'1'"
-
- with Given("I load encrypt snapshots"):
- snapshot_module = SourceFileLoader("snapshot", os.path.join(current_dir(), "snapshots", "encrypt.py.encrypt.snapshot")).load_module()
-
- for mode, key_len, iv_len, aad_len in modes:
- if not aad_len:
- continue
- with Example(f"""mode={mode.strip("'")} datatype={datatype.strip("'")} iv={iv_len} aad={aad_len}""") as example:
- with Given("I have ciphertext"):
- example_name = basename(example.name)
- ciphertext = getattr(snapshot_module, varname(f"example_{example_name}"))
-
- with When("I decrypt using a mismatched aad"):
- r = decrypt(ciphertext=f"unhex({ciphertext})", key=f"'{key[:key_len]}'", mode=mode,
- iv=(None if not iv_len else f"'{iv[:iv_len]}'"),
- aad=(None if not aad_len else f"'a{aad}'"), no_checks=True, cast="hex")
-
- with Then("exitcode shoud be 0 or 198"):
- assert r.exitcode in [0, 198], error()
-
- with And("output should be garbage or an error"):
- output = r.output.strip()
- assert "Exception: Failed to decrypt" in output or output != "31", error()
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Functions_Mismatched_Mode("1.0")
-)
-def mismatched_mode(self):
- """Check that `decrypt` function returns garbage or an error when mode parameter does not match.
- """
- key = f"{'1' * 36}"
- iv = f"{'2' * 16}"
- aad = "some random aad"
- plaintext = hex('Gãńdåłf_Thê_Gręât'.encode("utf-8"))
-
- with Given("I load encrypt snapshots"):
- snapshot_module = SourceFileLoader("snapshot", os.path.join(current_dir(), "snapshots", "encrypt.py.encrypt.snapshot")).load_module()
-
- for mode, key_len, iv_len, aad_len in modes:
- with Example(f"""mode={mode.strip("'")} datatype=utf8string iv={iv_len} aad={aad_len}""") as example:
- with Given("I have ciphertext"):
- example_name = basename(example.name)
- ciphertext = getattr(snapshot_module, varname(f"example_{example_name}"))
-
- for mismatched_mode, _, _, _ in modes:
- if mismatched_mode == mode:
- continue
-
- with When(f"I decrypt using mismatched mode {mismatched_mode}"):
- r = decrypt(ciphertext=f"unhex({ciphertext})", key=f"'{key[:key_len]}'", mode=mismatched_mode,
- iv=(None if not iv_len else f"'{iv[:iv_len]}'"),
- aad=(None if not aad_len else f"'{aad}'"), no_checks=True, cast="hex")
-
- with Then("exitcode shoud be 0 or 36 or 198"):
- assert r.exitcode in [0, 36, 198], error()
-
- with And("output should be garbage or an error"):
- output = r.output.strip()
- condition = "Exception: Failed to decrypt" in output \
- or 'Exception: Invalid key size' in output \
- or output != plaintext
- assert condition, error()
-
-@TestFeature
-@Name("decrypt")
-@Requirements(
- RQ_SRS008_AES_Decrypt_Function("1.0")
-)
-def feature(self, node="clickhouse1"):
- """Check the behavior of the `decrypt` function.
- """
- self.context.node = self.context.cluster.node(node)
-
- for scenario in loads(current_module(), Scenario):
- Scenario(run=scenario, flags=TE)
diff --git a/tests/testflows/aes_encryption/tests/decrypt_mysql.py b/tests/testflows/aes_encryption/tests/decrypt_mysql.py
deleted file mode 100644
index b92e421012..0000000000
--- a/tests/testflows/aes_encryption/tests/decrypt_mysql.py
+++ /dev/null
@@ -1,507 +0,0 @@
-# -*- coding: utf-8 -*-
-import os
-from importlib.machinery import SourceFileLoader
-
-from testflows.core import *
-from testflows.core.name import basename
-from testflows.asserts.helpers import varname
-from testflows.asserts import error
-
-from aes_encryption.requirements.requirements import *
-from aes_encryption.tests.common import *
-
-@TestOutline
-def aes_decrypt_mysql(self, ciphertext=None, key=None, mode=None, iv=None, aad=None, exitcode=0, message=None,
- step=When, cast=None, endcast=None, compare=None, no_checks=False):
- """Execute `aes_decrypt_mysql` function with the specified parameters.
- """
- params = []
- if mode is not None:
- params.append(mode)
- if ciphertext is not None:
- params.append(ciphertext)
- if key is not None:
- params.append(key)
- if iv is not None:
- params.append(iv)
- if aad is not None:
- params.append(aad)
-
- sql = f"aes_decrypt_mysql(" + ", ".join(params) + ")"
- if cast:
- sql = f"{cast}({sql}){endcast or ''}"
- if compare:
- sql = f"{compare} = {sql}"
- sql = f"SELECT {sql}"
-
- return current().context.node.query(sql, step=step, exitcode=exitcode, message=message, no_checks=no_checks)
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_CipherText("1.0"),
-)
-def invalid_ciphertext(self):
- """Check that `aes_decrypt_mysql` function does not crash when invalid
- `ciphertext` is passed as the first parameter.
- """
- key = f"{'1' * 36}"
- iv = f"{'2' * 16}"
- invalid_ciphertexts = plaintexts
-
- for mode, key_len, iv_len in mysql_modes:
- with Example(f"""mode={mode.strip("'")} iv={iv_len}"""):
- d_iv = None if not iv_len else f"'{iv[:iv_len]}'"
-
- for datatype, ciphertext in invalid_ciphertexts:
- if datatype in ["NULL"]:
- continue
- with When(f"invalid ciphertext={ciphertext}"):
- if "cfb" in mode or "ofb" in mode or "ctr" in mode:
- aes_decrypt_mysql(ciphertext=ciphertext, key=f"'{key[:key_len]}'", mode=mode, iv=d_iv, cast="hex")
- else:
- with When("I execute aes_decrypt_mysql function"):
- r = aes_decrypt_mysql(ciphertext=ciphertext, key=f"'{key[:key_len]}'", mode=mode, iv=d_iv, no_checks=True, step=By)
- with Then("exitcode is not zero"):
- assert r.exitcode in [198, 36]
- with And("exception is present in the output"):
- assert "DB::Exception:" in r.output
-
-@TestOutline(Scenario)
-@Examples("mode", [
- ("'aes-128-gcm'", Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_GCM_Error("1.0"))),
- ("'aes-192-gcm'", Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_GCM_Error("1.0"))),
- ("'aes-256-gcm'", Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_GCM_Error("1.0"))),
- ("'aes-128-ctr'", Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_128_CTR_Error("1.0"))),
- ("'aes-192-ctr'", Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_192_CTR_Error("1.0"))),
- ("'aes-256-ctr'", Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_AES_256_CTR_Error("1.0"))),
-])
-def unsupported_modes(self, mode):
- """Check that `aes_decrypt_mysql` function returns an error when unsupported modes are specified.
- """
- ciphertext = "unhex('AA1826B5F66A903C888D5DCDA9FB63D1D9CCA10EC55F59D6C00D37')"
-
- aes_decrypt_mysql(ciphertext=ciphertext, mode=mode, key=f"'{'1'* 32}'", exitcode=36, message="DB::Exception: Unsupported cipher mode")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Functions_InvalidParameters("1.0")
-)
-def invalid_parameters(self):
- """Check that `aes_decrypt_mysql` function returns an error when
- we call it with invalid parameters.
- """
- ciphertext = "unhex('AA1826B5F66A903C888D5DCDA9FB63D1D9CCA10EC55F59D6C00D37')"
-
- with Example("no parameters"):
- aes_decrypt_mysql(exitcode=42, message="DB::Exception: Incorrect number of arguments for function aes_decrypt_mysql provided 0, expected 3 to 4")
-
- with Example("missing key and mode"):
- aes_decrypt_mysql(ciphertext=ciphertext, exitcode=42,
- message="DB::Exception: Incorrect number of arguments for function aes_decrypt_mysql provided 1")
-
- with Example("missing mode"):
- aes_decrypt_mysql(ciphertext=ciphertext, key="'123'", exitcode=42,
- message="DB::Exception: Incorrect number of arguments for function aes_decrypt_mysql provided 2")
-
- with Example("bad key type - UInt8"):
- aes_decrypt_mysql(ciphertext=ciphertext, key="123", mode="'aes-128-ecb'", exitcode=43,
- message="DB::Exception: Received from localhost:9000. DB::Exception: Illegal type of argument #3")
-
- with Example("bad mode type - forgot quotes"):
- aes_decrypt_mysql(ciphertext=ciphertext, key="'0123456789123456'", mode="aes-128-ecb", exitcode=47,
- message="DB::Exception: Missing columns: 'ecb' 'aes' while processing query")
-
- with Example("bad mode type - UInt8"):
- aes_decrypt_mysql(ciphertext=ciphertext, key="'0123456789123456'", mode="128", exitcode=43,
- message="DB::Exception: Illegal type of argument #1 'mode'")
-
- with Example("bad iv type - UInt8"):
- aes_decrypt_mysql(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes-128-cbc'", iv='128', exitcode=43,
- message="DB::Exception: Illegal type of argument")
-
- with Example("iv not valid for mode", requirements=[RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_NotValidForMode("1.0")]):
- aes_decrypt_mysql(ciphertext="unhex('49C9ADB81BA9B58C485E7ADB90E70576')", key="'0123456789123456'", mode="'aes-128-ecb'", iv="'012345678912'", exitcode=0,
- message=None)
-
- with Example("iv not valid for mode - size 0", requirements=[RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_NotValidForMode("1.0")]):
- aes_decrypt_mysql(ciphertext="unhex('49C9ADB81BA9B58C485E7ADB90E70576')", key="'0123456789123456'", mode="'aes-128-ecb'", iv="''", exitcode=0,
- message=None)
-
- with Example("aad passed by mistake"):
- aes_decrypt_mysql(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes-128-cbc'", iv="'0123456789123456'", aad="'aad'", exitcode=42,
- message="DB::Exception: Incorrect number of arguments for function aes_decrypt_mysql provided 5")
-
- with Example("aad passed by mistake type - UInt8"):
- aes_decrypt_mysql(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes-128-gcm'", iv="'012345678912'", aad="123", exitcode=42,
- message="DB::Exception: Incorrect number of arguments for function aes_decrypt_mysql provided 5")
-
- with Example("invalid mode value", requirements=[RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_Invalid("1.0")]):
- with When("typo in the block algorithm"):
- aes_decrypt_mysql(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes-128-eeb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes-128-eeb")
-
- with When("typo in the key size"):
- aes_decrypt_mysql(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes-127-ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes-127-ecb")
-
- with When("typo in the aes prefix"):
- aes_decrypt_mysql(ciphertext=ciphertext, key="'0123456789123456'", mode="'aee-128-ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aee-128-ecb")
-
- with When("missing last dash"):
- aes_decrypt_mysql(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes-128ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes-128ecb")
-
- with When("missing first dash"):
- aes_decrypt_mysql(ciphertext=ciphertext, key="'0123456789123456'", mode="'aes128-ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes128-ecb")
-
- with When("all capitals"):
- aes_decrypt_mysql(ciphertext=ciphertext, key="'0123456789123456'", mode="'AES-128-ECB'", exitcode=36,
- message="DB::Exception: Invalid mode: AES-128-ECB")
-
-@TestOutline(Scenario)
-@Requirements(
- RQ_SRS008_AES_MySQL_Decrypt_Function_Key_Length_TooShortError("1.0"),
- RQ_SRS008_AES_MySQL_Decrypt_Function_Key_Length_TooLong("1.0"),
- RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_Length_TooShortError("1.0"),
- RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_Length_TooLong("1.0"),
- RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_NotValidForMode("1.0")
-)
-@Examples("mode key_len iv_len", [
- # ECB
- ("'aes-128-ecb'", 16, None,
- Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_AES_128_ECB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-ecb'", 24, None,
- Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_AES_192_ECB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-ecb'", 32, None,
- Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_AES_256_ECB_KeyAndInitializationVector_Length("1.0"))),
- # CBC
- ("'aes-128-cbc'", 16, 16,
- Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_AES_128_CBC_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-cbc'", 24, 16,
- Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_AES_192_CBC_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-cbc'", 32, 16,
- Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_AES_256_CBC_KeyAndInitializationVector_Length("1.0"))),
- # CFB128
- ("'aes-128-cfb128'", 16, 16,
- Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_AES_128_CFB128_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-cfb128'", 24, 16,
- Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_AES_192_CFB128_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-cfb128'", 32, 16,
- Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_AES_256_CFB128_KeyAndInitializationVector_Length("1.0"))),
- # OFB
- ("'aes-128-ofb'", 16, 16,
- Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_AES_128_OFB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-ofb'", 24, 16,
- Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_AES_192_OFB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-ofb'", 32, 16,
- Requirements(RQ_SRS008_AES_MySQL_Decrypt_Function_AES_256_OFB_KeyAndInitializationVector_Length("1.0"))),
-], "%-16s %-10s %-10s")
-def key_or_iv_length_for_mode(self, mode, key_len, iv_len):
- """Check that key or iv length for mode.
- """
- ciphertext = "unhex('31F4C847CAB873AB34584368E3E85E3A')"
- if mode == "'aes-128-ecb'":
- ciphertext = "unhex('31F4C847CAB873AB34584368E3E85E3B')"
- elif mode == "'aes-192-ecb'":
- ciphertext = "unhex('073868ECDECA94133A61A0FFA282E877')"
- elif mode == "'aes-256-ecb'":
- ciphertext = "unhex('1729E5354D6EC44D89900ABDB09DC297')"
- key = "0123456789" * 4
- iv = "0123456789" * 4
-
- with When("key is too short"):
- aes_decrypt_mysql(ciphertext=ciphertext, key=f"'{key[:key_len-1]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid key size")
-
- with When("key is too long"):
- if "ecb" in mode or "cbc" in mode:
- aes_decrypt_mysql(ciphertext=ciphertext, key=f"'{key[:key_len+1]}'", mode=mode, exitcode=198, message="DB::Exception: Failed to decrypt")
- else:
- aes_decrypt_mysql(ciphertext=ciphertext, key=f"'{key[:key_len+1]}'", mode=mode, cast="hex")
-
- if iv_len is not None:
- with When("iv is too short"):
- aes_decrypt_mysql(ciphertext=ciphertext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len-1]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid IV size")
-
- with When("iv is too long"):
- if "ecb" in mode or "cbc" in mode:
- aes_decrypt_mysql(ciphertext=ciphertext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len+1]}'", mode=mode, exitcode=198, message="DB::Exception: Failed to decrypt")
- else:
- aes_decrypt_mysql(ciphertext=ciphertext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len+1]}'", mode=mode, cast="hex")
- else:
- with When("iv is specified but not needed"):
- if "ecb" in mode or "cbc" in mode:
- aes_decrypt_mysql(ciphertext=ciphertext, key=f"'{key[:key_len]}'", iv=f"'{iv}'", mode=mode, exitcode=198, message="DB::Exception: Failed to decrypt")
- else:
- aes_decrypt_mysql(ciphertext=ciphertext, key=f"'{key[:key_len]}'", iv=f"'{iv}'", mode=mode)
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_InitializationVector("1.0")
-)
-def iv_parameter_types(self):
- """Check that `aes_decrypt_mysql` function accepts `iv` parameter as the fourth argument
- of either `String` or `FixedString` types.
- """
- iv = "'0123456789123456'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("iv is specified using String type"):
- aes_decrypt_mysql(ciphertext="unhex('F024F9372FA0D8B974894D29FFB8A7F7')", key=key, mode=mode, iv=iv, message="hello there")
-
- with When("iv is specified using String with UTF8 characters"):
- aes_decrypt_mysql(ciphertext="unhex('7A4EC0FF3796F46BED281F4778ACE1DC')", key=key, mode=mode, iv="'Gãńdåłf_Thê'", message="hello there")
-
- with When("iv is specified using FixedString type"):
- aes_decrypt_mysql(ciphertext="unhex('F024F9372FA0D8B974894D29FFB8A7F7')", key=key, mode=mode, iv=f"toFixedString({iv}, 16)", message="hello there")
-
- with When("iv is specified using FixedString with UTF8 characters"):
- aes_decrypt_mysql(ciphertext="unhex('7A4EC0FF3796F46BED281F4778ACE1DC')", key=key, mode=mode, iv=f"toFixedString('Gãńdåłf_Thê', 16)", message="hello there")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Key("1.0")
-)
-def key_parameter_types(self):
- """Check that `aes_decrypt` function accepts `key` parameter as the second argument
- of either `String` or `FixedString` types.
- """
- iv = "'0123456789123456'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("key is specified using String type"):
- aes_decrypt_mysql(ciphertext="unhex('49C9ADB81BA9B58C485E7ADB90E70576')", key=key, mode=mode, message="hello there")
-
- with When("key is specified using String with UTF8 characters"):
- aes_decrypt_mysql(ciphertext="unhex('180086AA42AD57B71C706EEC372D0C3D')", key="'Gãńdåłf_Thê'", mode=mode, message="hello there")
-
- with When("key is specified using FixedString type"):
- aes_decrypt_mysql(ciphertext="unhex('49C9ADB81BA9B58C485E7ADB90E70576')", key=f"toFixedString({key}, 16)", mode=mode, message="hello there")
-
- with When("key is specified using FixedString with UTF8 characters"):
- aes_decrypt_mysql(ciphertext="unhex('180086AA42AD57B71C706EEC372D0C3D')", key=f"toFixedString('Gãńdåłf_Thê', 16)", mode=mode, message="hello there")
-
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode("1.0"),
-)
-def mode_parameter_types(self):
- """Check that `aes_decrypt_mysql` function accepts `mode` parameter as the third argument
- of either `String` or `FixedString` types.
- """
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("mode is specified using String type"):
- aes_decrypt_mysql(ciphertext="unhex('49C9ADB81BA9B58C485E7ADB90E70576')", key=key, mode=mode, message="hello there")
-
- with When("mode is specified using FixedString type"):
- aes_decrypt_mysql(ciphertext="unhex('49C9ADB81BA9B58C485E7ADB90E70576')", key=key, mode=f"toFixedString({mode}, 12)", message="hello there")
-
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_ReturnValue("1.0")
-)
-def return_value(self):
- """Check that `aes_decrypt_mysql` functions returns String data type.
- """
- ciphertext = "unhex('F024F9372FA0D8B974894D29FFB8A7F7')"
- iv = "'0123456789123456'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("I get type of the return value"):
- sql = "SELECT toTypeName(aes_decrypt_mysql(" + mode + "," + ciphertext + "," + key + "," + iv + "))"
- r = self.context.node.query(sql)
-
- with Then("type should be String"):
- assert r.output.strip() == "String", error()
-
- with When("I get the return value"):
- aes_decrypt_mysql(ciphertext=ciphertext, key=key, mode=mode, iv=iv, message="hello there")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_MySQL_Decrypt_Function_Syntax("1.0"),
-)
-def syntax(self):
- """Check that `aes_decrypt_mysql` function supports syntax
-
- ```sql
- aes_decrypt_mysql(ciphertext, key, mode, [iv])
- ```
- """
- ciphertext = "70FE78410D6EE237C2DE4A"
- sql = f"SELECT aes_decrypt_mysql('aes-128-ofb', unhex('{ciphertext}'), '0123456789123456', '0123456789123456')"
- self.context.node.query(sql, step=When, message="hello there")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_CipherText("1.0"),
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode("1.0"),
- RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_ValuesFormat("1.0"),
-)
-def decryption(self):
- """Check that `aes_decrypt_mysql` functions accepts `mode` as the first parameter
- and `ciphertext` as the second parameter and we can convert the decrypted value into the original
- value with the original data type.
- """
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
-
- with Given("I load encrypt snapshots"):
- snapshot_module = SourceFileLoader("snapshot", os.path.join(current_dir(), "snapshots", "encrypt_mysql.py.encrypt_mysql.snapshot")).load_module()
-
- for mode, key_len, iv_len in mysql_modes:
- for datatype, plaintext in plaintexts:
-
- requirement = globals().get(f"""RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_{mode.strip("'").replace("-","_").upper()}""")("1.0")
-
- with Example(f"""mode={mode.strip("'")} datatype={datatype.strip("'")} key={key_len} iv={iv_len}""",
- requirements=[requirement]) as example:
-
- with Given("I have ciphertext"):
- example_name = basename(example.name)
- ciphertext = getattr(snapshot_module, varname(f"example_{example_name}"))
-
- cast = None
- endcast = None
- ciphertext = f"unhex({ciphertext})"
- compare = plaintext
-
- if datatype == "IPv4":
- cast = "toIPv4(IPv4NumToString(reinterpretAsUInt32"
- endcast = "))"
- elif datatype in ["DateTime64", "UUID", "IPv6", "LowCardinality", "Enum8", "Enum16", "Decimal32", "Decimal64", "Decimal128", "Array"]:
- xfail(reason="no conversion")
- elif datatype == "NULL":
- ciphertext = "NULL"
- cast = "isNull"
- compare = None
- elif datatype in ["Float32", "Float64", "Date", "DateTime"] or "Int" in datatype:
- cast = f"reinterpretAs{datatype}"
-
- aes_decrypt_mysql(ciphertext=ciphertext, key=f"'{key[:key_len]}'", mode=mode,
- iv=(None if not iv_len else f"'{iv[:iv_len]}'"),
- cast=cast, endcast=endcast, compare=compare, message="1")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Functions_Mismatched_Key("1.0")
-)
-def mismatched_key(self):
- """Check that `aes_decrypt_mysql` function returns garbage or an error when key parameter does not match.
- """
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
-
- with Given("I load encrypt snapshots"):
- snapshot_module = SourceFileLoader("snapshot", os.path.join(current_dir(), "snapshots", "encrypt_mysql.py.encrypt_mysql.snapshot")).load_module()
-
- for mode, key_len, iv_len in mysql_modes:
- with Example(f"""mode={mode.strip("'")} datatype=String key={key_len} iv={iv_len}""") as example:
- with Given("I have ciphertext"):
- example_name = basename(example.name)
- ciphertext = getattr(snapshot_module, varname(f"example_{example_name}"))
-
- with When("I decrypt using a mismatched key"):
- r = aes_decrypt_mysql(ciphertext=f"unhex({ciphertext})", key=f"'a{key[:key_len-1]}'", mode=mode,
- iv=(None if not iv_len else f"'{iv[:iv_len]}'"),
- cast="hex", no_checks=True)
-
- with Then("exitcode shoud be 0 or 198"):
- assert r.exitcode in [0, 198], error()
-
- with And("output should be garbage or an error"):
- output = r.output.strip()
- assert "Exception: Failed to decrypt" in output or output != "31", error()
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Functions_Mismatched_IV("1.0")
-)
-def mismatched_iv(self):
- """Check that `aes_decrypt_mysql` function returns garbage or an error when iv parameter does not match.
- """
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
-
- with Given("I load encrypt snapshots"):
- snapshot_module = SourceFileLoader("snapshot", os.path.join(current_dir(), "snapshots", "encrypt_mysql.py.encrypt_mysql.snapshot")).load_module()
-
- for mode, key_len, iv_len in mysql_modes:
- if not iv_len:
- continue
- with Example(f"""mode={mode.strip("'")} datatype=String key={key_len} iv={iv_len}""") as example:
- with Given("I have ciphertext"):
- example_name = basename(example.name)
- ciphertext = getattr(snapshot_module, varname(f"example_{example_name}"))
-
- with When("I decrypt using a mismatched key"):
- r = aes_decrypt_mysql(ciphertext=f"unhex({ciphertext})", key=f"'{key[:key_len]}'", mode=mode,
- iv=f"'a{iv[:iv_len-1]}'",
- cast="hex", no_checks=True)
-
- with Then("exitcode shoud be 0 or 198"):
- assert r.exitcode in [0, 198], error()
-
- with And("output should be garbage or an error"):
- output = r.output.strip()
- assert "Exception: Failed to decrypt" in output or output != "31", error()
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Functions_Mismatched_Mode("1.0")
-)
-def mismatched_mode(self):
- """Check that `aes_decrypt_mysql` function returns garbage or an error when mode parameter does not match.
- """
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
- plaintext = hex('Gãńdåłf_Thê_Gręât'.encode("utf-8"))
-
- with Given("I load encrypt snapshots"):
- snapshot_module = SourceFileLoader("snapshot", os.path.join(current_dir(), "snapshots", "encrypt_mysql.py.encrypt_mysql.snapshot")).load_module()
-
- for mode, key_len, iv_len in mysql_modes:
- if not iv_len:
- continue
-
- with Example(f"""mode={mode.strip("'")} datatype=utf8string key={key_len} iv={iv_len}""") as example:
- with Given("I have ciphertext"):
- example_name = basename(example.name)
- ciphertext = getattr(snapshot_module, varname(f"example_{example_name}"))
-
- for mismatched_mode, _, _ in mysql_modes:
- if mismatched_mode == mode:
- continue
-
- with When(f"I decrypt using a mismatched mode {mismatched_mode}"):
- r = aes_decrypt_mysql(ciphertext=f"unhex({ciphertext})", key=f"'{key[:key_len]}'", mode=mismatched_mode,
- iv=f"'{iv[:iv_len]}'",
- cast="hex", no_checks=True)
-
- with Then("exitcode shoud be 0 or 36 or 198"):
- assert r.exitcode in [0, 36, 198], error()
-
- with And("output should be garbage or an error"):
- output = r.output.strip()
- assert "Exception: Failed to decrypt" in output or output != plaintext, error()
-
-@TestFeature
-@Name("decrypt_mysql")
-@Requirements(
- RQ_SRS008_AES_MySQL_Decrypt_Function("1.0")
-)
-def feature(self, node="clickhouse1"):
- """Check the behavior of the `aes_decrypt_mysql` function.
- """
- self.context.node = self.context.cluster.node(node)
-
- for scenario in loads(current_module(), Scenario):
- Scenario(run=scenario, flags=TE)
diff --git a/tests/testflows/aes_encryption/tests/encrypt.py b/tests/testflows/aes_encryption/tests/encrypt.py
deleted file mode 100644
index 82b866ce8c..0000000000
--- a/tests/testflows/aes_encryption/tests/encrypt.py
+++ /dev/null
@@ -1,394 +0,0 @@
-# -*- coding: utf-8 -*-
-from testflows.core import *
-from testflows.core.name import basename
-from testflows.asserts import values, error, snapshot
-
-from aes_encryption.requirements.requirements import *
-from aes_encryption.tests.common import *
-
-@TestOutline
-def encrypt(self, plaintext=None, key=None, mode=None, iv=None, aad=None, exitcode=0, message=None, step=When):
- """Execute `encrypt` function with the specified parameters.
- """
- params = []
- if mode is not None:
- params.append(mode)
- if plaintext is not None:
- params.append(plaintext)
- if key is not None:
- params.append(key)
- if iv is not None:
- params.append(iv)
- if aad is not None:
- params.append(aad)
-
- sql = "SELECT hex(encrypt(" + ", ".join(params) + "))"
-
- return current().context.node.query(sql, step=step, exitcode=exitcode, message=message)
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Functions_InvalidParameters("1.0")
-)
-def invalid_parameters(self):
- """Check that `encrypt` function returns an error when
- we call it with invalid parameters.
- """
- with Example("no parameters"):
- encrypt(exitcode=42, message="DB::Exception: Incorrect number of arguments for function encrypt provided 0, expected 3 to 5")
-
- with Example("missing key and mode"):
- encrypt(plaintext="'hello there'", exitcode=42, message="DB::Exception: Incorrect number of arguments for function encrypt provided 1")
-
- with Example("missing mode"):
- encrypt(plaintext="'hello there'", key="'123'", exitcode=42, message="DB::Exception: Incorrect number of arguments for function encrypt provided 2")
-
- with Example("bad key type - UInt8"):
- encrypt(plaintext="'hello there'", key="123", mode="'aes-128-ecb'", exitcode=43,
- message="DB::Exception: Received from localhost:9000. DB::Exception: Illegal type of argument #3")
-
- with Example("bad mode type - forgot quotes"):
- encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="aes-128-ecb", exitcode=47,
- message="DB::Exception: Missing columns: 'ecb' 'aes' while processing query")
-
- with Example("bad mode type - UInt8"):
- encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="128", exitcode=43,
- message="DB::Exception: Illegal type of argument #1 'mode'")
-
- with Example("bad iv type - UInt8"):
- encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-128-cbc'", iv='128', exitcode=43,
- message="DB::Exception: Illegal type of argument")
-
- with Example("bad aad type - UInt8"):
- encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-128-gcm'", iv="'012345678912'", aad="123", exitcode=43,
- message="DB::Exception: Illegal type of argument")
-
- with Example("iv not valid for mode", requirements=[RQ_SRS008_AES_Encrypt_Function_InitializationVector_NotValidForMode("1.0")]):
- encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-128-ecb'", iv="'012345678912'", exitcode=36,
- message="DB::Exception: aes-128-ecb does not support IV")
-
- with Example("iv not valid for mode - size 0", requirements=[RQ_SRS008_AES_Encrypt_Function_InitializationVector_NotValidForMode("1.0")]):
- encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-128-ecb'", iv="''", exitcode=36,
- message="DB::Exception: aes-128-ecb does not support IV")
-
- with Example("aad not valid for mode", requirements=[RQ_SRS008_AES_Encrypt_Function_AdditionalAuthenticationData_NotValidForMode("1.0")]):
- encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-128-cbc'", iv="'0123456789123456'", aad="'aad'", exitcode=36,
- message="DB::Exception: AAD can be only set for GCM-mode")
-
- with Example("invalid mode value", requirements=[RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_Invalid("1.0")]):
- with When("typo in the block algorithm"):
- encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-128-eeb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes-128-eeb")
-
- with When("typo in the key size"):
- encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-127-ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes-127-ecb")
-
- with When("typo in the aes prefix"):
- encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="'aee-128-ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aee-128-ecb")
-
- with When("missing last dash"):
- encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-128ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes-128ecb")
-
- with When("missing first dash"):
- encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="'aes128-ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes128-ecb")
-
- with When("all capitals"):
- encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="'AES-128-ECB'", exitcode=36,
- message="DB::Exception: Invalid mode: AES-128-ECB")
-
-@TestOutline(Scenario)
-@Requirements(
- RQ_SRS008_AES_Encrypt_Function_Key_Length_InvalidLengthError("1.0"),
- RQ_SRS008_AES_Encrypt_Function_InitializationVector_Length_InvalidLengthError("1.0"),
- RQ_SRS008_AES_Encrypt_Function_AdditionalAuthenticationData_NotValidForMode("1.0")
-)
-@Examples("mode key_len iv_len aad", [
- # ECB
- ("'aes-128-ecb'", 16, None, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_128_ECB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-ecb'", 24, None, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_192_ECB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-ecb'", 32, None, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_256_ECB_KeyAndInitializationVector_Length("1.0"))),
- # CBC
- ("'aes-128-cbc'", 16, 16, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_128_CBC_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-cbc'", 24, 16, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_192_CBC_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-cbc'", 32, 16, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_256_CBC_KeyAndInitializationVector_Length("1.0"))),
- # CFB128
- ("'aes-128-cfb128'", 16, 16, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_128_CFB128_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-cfb128'", 24, 16, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_192_CFB128_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-cfb128'", 32, 16, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_256_CFB128_KeyAndInitializationVector_Length("1.0"))),
- # OFB
- ("'aes-128-ofb'", 16, 16, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_128_OFB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-ofb'", 24, 16, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_192_OFB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-ofb'", 32, 16, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_256_OFB_KeyAndInitializationVector_Length("1.0"))),
- # CTR
- ("'aes-128-ctr'", 16, 16, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_128_CTR_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-ctr'", 24, 16, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_192_CTR_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-ctr'", 32, 16, None,
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_256_CTR_KeyAndInitializationVector_Length("1.0"))),
-], "%-16s %-10s %-10s %-10s")
-def invalid_key_or_iv_length_for_mode_non_gcm(self, mode, key_len, iv_len, aad):
- """Check that an error is returned when key or iv length does not match
- the expected value for the mode.
- """
- plaintext = "'hello there'"
- key = "0123456789" * 4
- iv = "0123456789" * 4
-
- with When("key is too short"):
- encrypt(plaintext=plaintext, key=f"'{key[:key_len-1]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid key size")
-
- with When("key is too long"):
- encrypt(plaintext=plaintext, key=f"'{key[:key_len+1]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid key size")
-
- if iv_len is not None:
- with When("iv is too short"):
- encrypt(plaintext=plaintext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len-1]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid IV size")
-
- with When("iv is too long"):
- encrypt(plaintext=plaintext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len+1]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid IV size")
-
- if aad is None:
- with When("aad is specified but not needed"):
- encrypt(plaintext=plaintext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len+1] if iv_len is not None else ''}'", aad="'AAD'", mode=mode, exitcode=36, message="DB::Exception: AAD can be only set for GCM-mode")
-
- else:
- with When("iv is specified but not needed"):
- encrypt(plaintext=plaintext, key=f"'{key[:key_len]}'", iv=f"'{iv}'", mode=mode, exitcode=36, message="DB::Exception: {} does not support IV".format(mode.strip("'")))
-
-@TestOutline(Scenario)
-@Requirements(
- RQ_SRS008_AES_Encrypt_Function_Key_Length_InvalidLengthError("1.0"),
- RQ_SRS008_AES_Encrypt_Function_InitializationVector_Length_InvalidLengthError("1.0"),
- RQ_SRS008_AES_Encrypt_Function_AdditionalAuthenticationData_NotValidForMode("1.0")
-)
-@Examples("mode key_len iv_len aad", [
- # GCM
- ("'aes-128-gcm'", 16, 8, "'hello there aad'",
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_128_GCM_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-gcm'", 24, 8, "''",
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_192_GCM_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-gcm'", 32, 8, "'a'",
- Requirements(RQ_SRS008_AES_Encrypt_Function_AES_256_GCM_KeyAndInitializationVector_Length("1.0"))),
-], "%-16s %-10s %-10s %-10s")
-def invalid_key_or_iv_length_for_gcm(self, mode, key_len, iv_len, aad):
- """Check that an error is returned when key or iv length does not match
- the expected value for the GCM mode.
- """
- plaintext = "'hello there'"
- key = "0123456789" * 4
- iv = "0123456789" * 4
-
- with When("key is too short"):
- encrypt(plaintext=plaintext, key=f"'{key[:key_len-1]}'", iv=f"'{iv[:iv_len]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid key size")
-
- with When("key is too long"):
- encrypt(plaintext=plaintext, key=f"'{key[:key_len+1]}'", iv=f"'{iv[:iv_len]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid key size")
-
- if iv_len is not None:
- with When(f"iv is too short"):
- encrypt(plaintext=plaintext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len-1]}'", mode=mode, exitcode=198, message="DB::Exception:")
- else:
- with When("iv is not specified"):
- encrypt(plaintext=plaintext, key=f"'{key[:key_len]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid IV size")
-
- if aad is not None:
- with When(f"aad is {aad}"):
- encrypt(plaintext=plaintext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len]}'", aad=f"{aad}", mode=mode)
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Encrypt_Function_Parameters_AdditionalAuthenticatedData("1.0"),
- RQ_SRS008_AES_Encrypt_Function_AdditionalAuthenticationData_Length("1.0")
-)
-def aad_parameter_types_and_length(self):
- """Check that `encrypt` function accepts `aad` parameter as the fifth argument
- of either `String` or `FixedString` types and that the length is not limited.
- """
- plaintext = "'hello there'"
- iv = "'012345678912'"
- mode = "'aes-128-gcm'"
- key = "'0123456789123456'"
-
- with When("aad is specified using String type"):
- encrypt(plaintext=plaintext, key=key, mode=mode, iv=iv, aad="'aad'", message="19A1183335B374C626B24208AAEC97F148732CE05621AC87B21526")
-
- with When("aad is specified using String with UTF8 characters"):
- encrypt(plaintext=plaintext, key=key, mode=mode, iv=iv, aad="'Gãńdåłf_Thê_Gręât'", message="19A1183335B374C626B242C68D9618A8C2664D7B6A3FE978104B39")
-
- with When("aad is specified using FixedString type"):
- encrypt(plaintext=plaintext, key=key, mode=mode, iv=iv, aad="toFixedString('aad', 3)", message="19A1183335B374C626B24208AAEC97F148732CE05621AC87B21526")
-
- with When("aad is specified using FixedString with UTF8 characters"):
- encrypt(plaintext=plaintext, key=key, mode=mode, iv=iv, aad="toFixedString('Gãńdåłf_Thê_Gręât', 24)", message="19A1183335B374C626B242C68D9618A8C2664D7B6A3FE978104B39")
-
- with When("aad is 0 bytes"):
- encrypt(plaintext=plaintext, key=key, mode=mode, iv=iv, aad="''", message="19A1183335B374C626B242DF92BB3F57F5D82BEDF41FD5D49F8BC9")
-
- with When("aad is 1 byte"):
- encrypt(plaintext=plaintext, key=key, mode=mode, iv=iv, aad="'1'", message="19A1183335B374C626B242D1BCFC63B09CFE9EAD20285044A01035")
-
- with When("aad is 256 bytes"):
- encrypt(plaintext=plaintext, key=key, mode=mode, iv=iv, aad=f"'{'1' * 256}'", message="19A1183335B374C626B242355AD3DD2C5D7E36AEECBB847BF9E8A7")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Encrypt_Function_Parameters_InitializationVector("1.0")
-)
-def iv_parameter_types(self):
- """Check that `encrypt` function accepts `iv` parameter as the fourth argument
- of either `String` or `FixedString` types.
- """
- plaintext = "'hello there'"
- iv = "'0123456789123456'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("iv is specified using String type"):
- encrypt(plaintext=plaintext, key=key, mode=mode, iv=iv, message="F024F9372FA0D8B974894D29FFB8A7F7")
-
- with When("iv is specified using String with UTF8 characters"):
- encrypt(plaintext=plaintext, key=key, mode=mode, iv="'Gãńdåłf_Thê'", message="7A4EC0FF3796F46BED281F4778ACE1DC")
-
- with When("iv is specified using FixedString type"):
- encrypt(plaintext=plaintext, key=key, mode=mode, iv=f"toFixedString({iv}, 16)", message="F024F9372FA0D8B974894D29FFB8A7F7")
-
- with When("iv is specified using FixedString with UTF8 characters"):
- encrypt(plaintext=plaintext, key=key, mode=mode, iv="toFixedString('Gãńdåłf_Thê', 16)", message="7A4EC0FF3796F46BED281F4778ACE1DC")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Encrypt_Function_Parameters_Key("1.0")
-)
-def key_parameter_types(self):
- """Check that `encrypt` function accepts `key` parameter as the second argument
- of either `String` or `FixedString` types.
- """
- plaintext = "'hello there'"
- iv = "'0123456789123456'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("key is specified using String type"):
- encrypt(plaintext=plaintext, key=key, mode=mode, message="49C9ADB81BA9B58C485E7ADB90E70576")
-
- with When("key is specified using String with UTF8 characters"):
- encrypt(plaintext=plaintext, key="'Gãńdåłf_Thê'", mode=mode, message="180086AA42AD57B71C706EEC372D0C3D")
-
- with When("key is specified using FixedString type"):
- encrypt(plaintext=plaintext, key=f"toFixedString({key}, 16)", mode=mode, message="49C9ADB81BA9B58C485E7ADB90E70576")
-
- with When("key is specified using FixedString with UTF8 characters"):
- encrypt(plaintext=plaintext, key="toFixedString('Gãńdåłf_Thê', 16)", mode=mode, message="180086AA42AD57B71C706EEC372D0C3D")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode("1.0"),
-)
-def mode_parameter_types(self):
- """Check that `encrypt` function accepts `mode` parameter as the third argument
- of either `String` or `FixedString` types.
- """
- plaintext = "'hello there'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("mode is specified using String type"):
- encrypt(plaintext=plaintext, key=key, mode=mode, message="49C9ADB81BA9B58C485E7ADB90E70576")
-
- with When("mode is specified using FixedString type"):
- encrypt(plaintext=plaintext, key=key, mode=f"toFixedString({mode}, 12)", message="49C9ADB81BA9B58C485E7ADB90E70576")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Encrypt_Function_Parameters_PlainText("1.0"),
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode("1.0"),
- RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_ValuesFormat("1.0"),
-)
-def encryption(self):
- """Check that `encrypt` functions accepts `plaintext` as the second parameter
- with any data type and `mode` as the first parameter.
- """
- key = f"{'1' * 36}"
- iv = f"{'2' * 16}"
- aad = "some random aad"
-
- for mode, key_len, iv_len, aad_len in modes:
- for datatype, plaintext in plaintexts:
-
- requirement = globals().get(f"""RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_{mode.strip("'").replace("-","_").upper()}""")("1.0")
-
- with Example(f"""mode={mode.strip("'")} datatype={datatype.strip("'")} iv={iv_len} aad={aad_len}""",
- requirements=[requirement]) as example:
- r = encrypt(plaintext=plaintext, key=f"'{key[:key_len]}'", mode=mode,
- iv=(None if not iv_len else f"'{iv[:iv_len]}'"), aad=(None if not aad_len else f"'{aad}'"))
-
- with Then("I check output against snapshot"):
- with values() as that:
- example_name = basename(example.name)
- assert that(snapshot(r.output.strip(), "encrypt", name=f"example_{example_name.replace(' ', '_')}")), error()
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Encrypt_Function_Parameters_ReturnValue("1.0")
-)
-def return_value(self):
- """Check that `encrypt` functions returns String data type.
- """
- plaintext = "'hello there'"
- iv = "'0123456789123456'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("I get type of the return value"):
- sql = "SELECT toTypeName(encrypt(" + mode + "," + plaintext + "," + key + "," + iv + "))"
- r = self.context.node.query(sql)
-
- with Then("type should be String"):
- assert r.output.strip() == "String", error()
-
- with When("I get return ciphertext as hex"):
- encrypt(plaintext=plaintext, key=key, mode=mode, iv=iv, message="F024F9372FA0D8B974894D29FFB8A7F7")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Encrypt_Function_Syntax("1.0"),
-)
-def syntax(self):
- """Check that `encrypt` function supports syntax
-
- ```sql
- encrypt(plaintext, key, mode, [iv, aad])
- ```
- """
- sql = "SELECT hex(encrypt('aes-128-gcm', 'hello there', '0123456789123456', '012345678912', 'AAD'))"
- self.context.node.query(sql, step=When, message="19A1183335B374C626B242A6F6E8712E2B64DCDC6A468B2F654614")
-
-@TestFeature
-@Name("encrypt")
-@Requirements(
- RQ_SRS008_AES_Encrypt_Function("1.0")
-)
-def feature(self, node="clickhouse1"):
- """Check the behavior of the `encrypt` function.
- """
- self.context.node = self.context.cluster.node(node)
-
- for scenario in loads(current_module(), Scenario):
- Scenario(run=scenario, flags=TE)
diff --git a/tests/testflows/aes_encryption/tests/encrypt_mysql.py b/tests/testflows/aes_encryption/tests/encrypt_mysql.py
deleted file mode 100644
index f1c5196256..0000000000
--- a/tests/testflows/aes_encryption/tests/encrypt_mysql.py
+++ /dev/null
@@ -1,312 +0,0 @@
-from testflows.core import *
-from testflows.core.name import basename
-from testflows.asserts import values, error, snapshot
-
-from aes_encryption.requirements.requirements import *
-from aes_encryption.tests.common import *
-
-@TestOutline
-def aes_encrypt_mysql(self, plaintext=None, key=None, mode=None, iv=None, exitcode=0, message=None, step=When):
- """Execute `aes_encrypt_mysql` function with the specified parameters.
- """
- params = []
- if mode is not None:
- params.append(mode)
- if plaintext is not None:
- params.append(plaintext)
- if key is not None:
- params.append(key)
- if iv is not None:
- params.append(iv)
-
- sql = "SELECT hex(aes_encrypt_mysql(" + ", ".join(params) + "))"
-
- return current().context.node.query(sql, step=step, exitcode=exitcode, message=message)
-
-@TestOutline(Scenario)
-@Examples("mode", [
- ("'aes-128-gcm'", Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_GCM_Error("1.0"))),
- ("'aes-192-gcm'", Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_GCM_Error("1.0"))),
- ("'aes-256-gcm'", Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_GCM_Error("1.0"))),
- ("'aes-128-ctr'", Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_128_CTR_Error("1.0"))),
- ("'aes-192-ctr'", Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_192_CTR_Error("1.0"))),
- ("'aes-256-ctr'", Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_AES_256_CTR_Error("1.0"))),
-])
-def unsupported_modes(self, mode):
- """Check that `aes_encrypt_mysql` function returns an error when unsupported modes are specified.
- """
- aes_encrypt_mysql(plaintext="'hello there'", mode=mode, key=f"'{'1'* 32}'", exitcode=36, message="DB::Exception: Unsupported cipher mode")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_Functions_InvalidParameters("1.0")
-)
-def invalid_parameters(self):
- """Check that `aes_encrypt_mysql` function returns an error when
- we call it with invalid parameters.
- """
- with Example("no parameters"):
- aes_encrypt_mysql(exitcode=42, message="DB::Exception: Incorrect number of arguments for function aes_encrypt provided 0, expected 3 to 4")
-
- with Example("missing key and mode"):
- aes_encrypt_mysql(plaintext="'hello there'", exitcode=42, message="DB::Exception: Incorrect number of arguments for function aes_encrypt_mysql provided 1")
-
- with Example("missing mode"):
- aes_encrypt_mysql(plaintext="'hello there'", key="'123'", exitcode=42, message="DB::Exception: Incorrect number of arguments for function aes_encrypt_mysql provided 2")
-
- with Example("bad key type - UInt8"):
- aes_encrypt_mysql(plaintext="'hello there'", key="123", mode="'aes-128-ecb'", exitcode=43,
- message="DB::Exception: Received from localhost:9000. DB::Exception: Illegal type of argument #3")
-
- with Example("bad mode type - forgot quotes"):
- aes_encrypt_mysql(plaintext="'hello there'", key="'0123456789123456'", mode="aes-128-ecb", exitcode=47,
- message="DB::Exception: Missing columns: 'ecb' 'aes' while processing query")
-
- with Example("bad mode type - UInt8"):
- aes_encrypt_mysql(plaintext="'hello there'", key="'0123456789123456'", mode="128", exitcode=43,
- message="DB::Exception: Illegal type of argument #1 'mode'")
-
- with Example("bad iv type - UInt8"):
- aes_encrypt_mysql(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-128-cbc'", iv='128', exitcode=43,
- message="DB::Exception: Illegal type of argument")
-
- with Example("iv not valid for mode", requirements=[RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_NotValidForMode("1.0")]):
- aes_encrypt_mysql(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-128-ecb'", iv="'012345678912'", exitcode=36,
- message="DB::Exception: aes-128-ecb does not support IV")
-
- with Example("iv not valid for mode - size 0", requirements=[RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_NotValidForMode("1.0")]):
- aes_encrypt_mysql(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-128-ecb'", iv="''", exitcode=0,
- message=None)
-
- with Example("invalid mode value", requirements=[RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_Invalid("1.0")]):
- with When("typo in the block algorithm"):
- aes_encrypt_mysql(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-128-eeb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes-128-eeb")
-
- with When("typo in the key size"):
- aes_encrypt_mysql(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-127-ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes-127-ecb")
-
- with When("typo in the aes prefix"):
- aes_encrypt_mysql(plaintext="'hello there'", key="'0123456789123456'", mode="'aee-128-ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aee-128-ecb")
-
- with When("missing last dash"):
- aes_encrypt_mysql(plaintext="'hello there'", key="'0123456789123456'", mode="'aes-128ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes-128ecb")
-
- with When("missing first dash"):
- aes_encrypt_mysql(plaintext="'hello there'", key="'0123456789123456'", mode="'aes128-ecb'", exitcode=36,
- message="DB::Exception: Invalid mode: aes128-ecb")
-
- with When("all capitals"):
- aes_encrypt_mysql(plaintext="'hello there'", key="'0123456789123456'", mode="'AES-128-ECB'", exitcode=36,
- message="DB::Exception: Invalid mode: AES-128-ECB")
-
-@TestOutline(Scenario)
-@Requirements(
- RQ_SRS008_AES_MySQL_Encrypt_Function_Key_Length_TooShortError("1.0"),
- RQ_SRS008_AES_MySQL_Encrypt_Function_Key_Length_TooLong("1.0"),
- RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_Length_TooShortError("1.0"),
- RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_Length_TooLong("1.0"),
- RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_NotValidForMode("1.0")
-)
-@Examples("mode key_len iv_len", [
- # ECB
- ("'aes-128-ecb'", 16, None,
- Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_AES_128_ECB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-ecb'", 24, None,
- Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_AES_192_ECB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-ecb'", 32, None,
- Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_AES_256_ECB_KeyAndInitializationVector_Length("1.0"))),
- # CBC
- ("'aes-128-cbc'", 16, 16,
- Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_AES_128_CBC_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-cbc'", 24, 16,
- Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_AES_192_CBC_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-cbc'", 32, 16,
- Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_AES_256_CBC_KeyAndInitializationVector_Length("1.0"))),
- # CFB128
- ("'aes-128-cfb128'", 16, 16,
- Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_AES_128_CFB128_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-cfb128'", 24, 16,
- Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_AES_192_CFB128_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-cfb128'", 32, 16,
- Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_AES_256_CFB128_KeyAndInitializationVector_Length("1.0"))),
- # OFB
- ("'aes-128-ofb'", 16, 16,
- Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_AES_128_OFB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-192-ofb'", 24, 16,
- Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_AES_192_OFB_KeyAndInitializationVector_Length("1.0"))),
- ("'aes-256-ofb'", 32, 16,
- Requirements(RQ_SRS008_AES_MySQL_Encrypt_Function_AES_256_OFB_KeyAndInitializationVector_Length("1.0"))),
-], "%-16s %-10s %-10s")
-def key_or_iv_length_for_mode(self, mode, key_len, iv_len):
- """Check that key or iv length for mode.
- """
- plaintext = "'hello there'"
- key = "0123456789" * 4
- iv = "0123456789" * 4
-
- with When("key is too short"):
- aes_encrypt_mysql(plaintext=plaintext, key=f"'{key[:key_len-1]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid key size")
-
- with When("key is too long"):
- aes_encrypt_mysql(plaintext=plaintext, key=f"'{key[:key_len+1]}'", mode=mode)
-
- if iv_len is not None:
- with When("iv is too short"):
- aes_encrypt_mysql(plaintext=plaintext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len-1]}'", mode=mode, exitcode=36, message="DB::Exception: Invalid IV size")
-
- with When("iv is too long"):
- aes_encrypt_mysql(plaintext=plaintext, key=f"'{key[:key_len]}'", iv=f"'{iv[:iv_len+1]}'", mode=mode)
- else:
- with When("iv is specified but not needed"):
- aes_encrypt_mysql(plaintext=plaintext, key=f"'{key[:key_len]}'", iv=f"'{iv}'", mode=mode, exitcode=36, message="DB::Exception: Invalid IV size")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_InitializationVector("1.0")
-)
-def iv_parameter_types(self):
- """Check that `aes_encrypt_mysql` function accepts `iv` parameter as the fourth argument
- of either `String` or `FixedString` types.
- """
- plaintext = "'hello there'"
- iv = "'0123456789123456'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("iv is specified using String type"):
- aes_encrypt_mysql(plaintext=plaintext, key=key, mode=mode, iv=iv, message="F024F9372FA0D8B974894D29FFB8A7F7")
-
- with When("iv is specified using String with UTF8 characters"):
- aes_encrypt_mysql(plaintext=plaintext, key=key, mode=mode, iv="'Gãńdåłf_Thê'", message="7A4EC0FF3796F46BED281F4778ACE1DC")
-
- with When("iv is specified using FixedString type"):
- aes_encrypt_mysql(plaintext=plaintext, key=key, mode=mode, iv=f"toFixedString({iv}, 16)", message="F024F9372FA0D8B974894D29FFB8A7F7")
-
- with When("iv is specified using FixedString with UTF8 characters"):
- aes_encrypt_mysql(plaintext=plaintext, key=key, mode=mode, iv="toFixedString('Gãńdåłf_Thê', 16)", message="7A4EC0FF3796F46BED281F4778ACE1DC")
-
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Key("1.0")
-)
-def key_parameter_types(self):
- """Check that `aes_encrypt_mysql` function accepts `key` parameter as the second argument
- of either `String` or `FixedString` types.
- """
- plaintext = "'hello there'"
- iv = "'0123456789123456'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("key is specified using String type"):
- aes_encrypt_mysql(plaintext=plaintext, key=key, mode=mode, message="49C9ADB81BA9B58C485E7ADB90E70576")
-
- with When("key is specified using String with UTF8 characters"):
- aes_encrypt_mysql(plaintext=plaintext, key="'Gãńdåłf_Thê'", mode=mode, message="180086AA42AD57B71C706EEC372D0C3D")
-
- with When("key is specified using FixedString type"):
- aes_encrypt_mysql(plaintext=plaintext, key=f"toFixedString({key}, 16)", mode=mode, message="49C9ADB81BA9B58C485E7ADB90E70576")
-
- with When("key is specified using FixedString with UTF8 characters"):
- aes_encrypt_mysql(plaintext=plaintext, key="toFixedString('Gãńdåłf_Thê', 16)", mode=mode, message="180086AA42AD57B71C706EEC372D0C3D")
-
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode("1.0"),
-)
-def mode_parameter_types(self):
- """Check that `aes_encrypt_mysql` function accepts `mode` parameter as the third argument
- of either `String` or `FixedString` types.
- """
- plaintext = "'hello there'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("mode is specified using String type"):
- aes_encrypt_mysql(plaintext=plaintext, key=key, mode=mode, message="49C9ADB81BA9B58C485E7ADB90E70576")
-
- with When("mode is specified using FixedString type"):
- aes_encrypt_mysql(plaintext=plaintext, key=key, mode=f"toFixedString({mode}, 12)", message="49C9ADB81BA9B58C485E7ADB90E70576")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_ReturnValue("1.0")
-)
-def return_value(self):
- """Check that `aes_encrypt_mysql` functions returns String data type.
- """
- plaintext = "'hello there'"
- iv = "'0123456789123456'"
- mode = "'aes-128-cbc'"
- key = "'0123456789123456'"
-
- with When("I get type of the return value"):
- sql = "SELECT toTypeName(aes_encrypt_mysql("+ mode + "," + plaintext + "," + key + "," + iv + "))"
- r = self.context.node.query(sql)
-
- with Then("type should be String"):
- assert r.output.strip() == "String", error()
-
- with When("I get return ciphertext as hex"):
- aes_encrypt_mysql(plaintext=plaintext, key=key, mode=mode, iv=iv, message="F024F9372FA0D8B974894D29FFB8A7F7")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_MySQL_Encrypt_Function_Syntax("1.0"),
-)
-def syntax(self):
- """Check that `aes_encrypt_mysql` function supports syntax
-
- ```sql
- aes_encrypt_mysql(plaintext, key, mode, [iv])
- ```
- """
- sql = "SELECT hex(aes_encrypt_mysql('aes-128-ofb', 'hello there', '0123456789123456', '0123456789123456'))"
- self.context.node.query(sql, step=When, message="70FE78410D6EE237C2DE4A")
-
-@TestScenario
-@Requirements(
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_PlainText("1.0"),
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode("1.0"),
- RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_ValuesFormat("1.0"),
-)
-def encryption(self):
- """Check that `aes_encrypt_mysql` functions accepts `plaintext` as the second parameter
- with any data type and `mode` as the first parameter.
- """
- key = f"{'1' * 64}"
- iv = f"{'2' * 64}"
-
- for mode, key_len, iv_len in mysql_modes:
- for datatype, plaintext in plaintexts:
- requirement = globals().get(f"""RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_{mode.strip("'").replace("-","_").upper()}""")("1.0")
-
- with Example(f"""mode={mode.strip("'")} datatype={datatype.strip("'")} key={key_len} iv={iv_len}""",
- requirements=[requirement]) as example:
-
- r = aes_encrypt_mysql(plaintext=plaintext, key=f"'{key[:key_len]}'", mode=mode,
- iv=(None if not iv_len else f"'{iv[:iv_len]}'"))
-
- with Then("I check output against snapshot"):
- with values() as that:
- example_name = basename(example.name)
- assert that(snapshot(r.output.strip(), "encrypt_mysql", name=f"example_{example_name.replace(' ', '_')}")), error()
-
-@TestFeature
-@Name("encrypt_mysql")
-@Requirements(
- RQ_SRS008_AES_MySQL_Encrypt_Function("1.0")
-)
-def feature(self, node="clickhouse1"):
- """Check the behavior of the `aes_encrypt_mysql` function.
- """
- self.context.node = self.context.cluster.node(node)
-
- for scenario in loads(current_module(), Scenario):
- Scenario(run=scenario, flags=TE)
diff --git a/tests/testflows/aes_encryption/tests/snapshots/encrypt.py.encrypt.snapshot b/tests/testflows/aes_encryption/tests/snapshots/encrypt.py.encrypt.snapshot
deleted file mode 100644
index 4327740fcb..0000000000
--- a/tests/testflows/aes_encryption/tests/snapshots/encrypt.py.encrypt.snapshot
+++ /dev/null
@@ -1,1980 +0,0 @@
-example_mode_aes_128_ecb_datatype_String_iv_None_aad_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'"""
-
-example_mode_aes_128_ecb_datatype_FixedString_iv_None_aad_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'"""
-
-example_mode_aes_128_ecb_datatype_UInt8_iv_None_aad_None = r"""'4CDF8A192A06AC6EDBDCE2BFB53B7D73'"""
-
-example_mode_aes_128_ecb_datatype_UInt16_iv_None_aad_None = r"""'12FB5B75B1CB5DF0DC70D8039758691D'"""
-
-example_mode_aes_128_ecb_datatype_UInt32_iv_None_aad_None = r"""'E86C0858C6D9CCD970BA6DC320038306'"""
-
-example_mode_aes_128_ecb_datatype_UInt64_iv_None_aad_None = r"""'2D43D83E0250AE8AC4403551B639F694'"""
-
-example_mode_aes_128_ecb_datatype_Int8_iv_None_aad_None = r"""'4CDF8A192A06AC6EDBDCE2BFB53B7D73'"""
-
-example_mode_aes_128_ecb_datatype_Int16_iv_None_aad_None = r"""'12FB5B75B1CB5DF0DC70D8039758691D'"""
-
-example_mode_aes_128_ecb_datatype_Int32_iv_None_aad_None = r"""'E86C0858C6D9CCD970BA6DC320038306'"""
-
-example_mode_aes_128_ecb_datatype_Int64_iv_None_aad_None = r"""'2D43D83E0250AE8AC4403551B639F694'"""
-
-example_mode_aes_128_ecb_datatype_Float32_iv_None_aad_None = r"""'FF4D70D9A1050E6BBDD0325FC45CC22D'"""
-
-example_mode_aes_128_ecb_datatype_Float64_iv_None_aad_None = r"""'75FE6B4A722A31D7760680CC1B9F131D'"""
-
-example_mode_aes_128_ecb_datatype_Decimal32_iv_None_aad_None = r"""'83BBD7CCE7E5A38071653870475D48D2'"""
-
-example_mode_aes_128_ecb_datatype_Decimal64_iv_None_aad_None = r"""'BE0DD9302B2952CE9CC3721DD85C8E66'"""
-
-example_mode_aes_128_ecb_datatype_Decimal128_iv_None_aad_None = r"""'5F3DBFA74809E45E03980357B26787AFF30C69C4F945E654EBD4B388B1C8F790'"""
-
-example_mode_aes_128_ecb_datatype_UUID_iv_None_aad_None = r"""'FF9161B222B4A67481271035745F06D9F30C69C4F945E654EBD4B388B1C8F790'"""
-
-example_mode_aes_128_ecb_datatype_Date_iv_None_aad_None = r"""'1E4FBE33752D96D147E890C29A409BFE'"""
-
-example_mode_aes_128_ecb_datatype_DateTime_iv_None_aad_None = r"""'384F3D97B78D52C73CD06C0E1B6DE399'"""
-
-example_mode_aes_128_ecb_datatype_DateTime64_iv_None_aad_None = r"""'C7F50A2D0175F3ED280AD42FF01FF5F2'"""
-
-example_mode_aes_128_ecb_datatype_LowCardinality_iv_None_aad_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'"""
-
-example_mode_aes_128_ecb_datatype_Array_iv_None_aad_None = r"""'D9152D05CFA9E162983A5A2E883109B4'"""
-
-example_mode_aes_128_ecb_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_128_ecb_datatype_IPv4_iv_None_aad_None = r"""'4F32782638C1F33C6A7202CA83F0C12C'"""
-
-example_mode_aes_128_ecb_datatype_IPv6_iv_None_aad_None = r"""'F54700FF04ADAD342BA6830DB12AD7E9F30C69C4F945E654EBD4B388B1C8F790'"""
-
-example_mode_aes_128_ecb_datatype_Enum8_iv_None_aad_None = r"""'4CDF8A192A06AC6EDBDCE2BFB53B7D73'"""
-
-example_mode_aes_128_ecb_datatype_Enum16_iv_None_aad_None = r"""'12FB5B75B1CB5DF0DC70D8039758691D'"""
-
-example_mode_aes_192_ecb_datatype_String_iv_None_aad_None = r"""'1AE38A541D466EDFED572EE839B0907F'"""
-
-example_mode_aes_192_ecb_datatype_FixedString_iv_None_aad_None = r"""'1AE38A541D466EDFED572EE839B0907F'"""
-
-example_mode_aes_192_ecb_datatype_UInt8_iv_None_aad_None = r"""'01CC3C67F07C3FA6E5EFB7AE5F19130B'"""
-
-example_mode_aes_192_ecb_datatype_UInt16_iv_None_aad_None = r"""'B50A3019F16B9C643FB40259E4B09308'"""
-
-example_mode_aes_192_ecb_datatype_UInt32_iv_None_aad_None = r"""'9F32F3F6B3C3B1830F56B5B94C93875D'"""
-
-example_mode_aes_192_ecb_datatype_UInt64_iv_None_aad_None = r"""'8DE807D54B7717BFC773567D9FFE292D'"""
-
-example_mode_aes_192_ecb_datatype_Int8_iv_None_aad_None = r"""'01CC3C67F07C3FA6E5EFB7AE5F19130B'"""
-
-example_mode_aes_192_ecb_datatype_Int16_iv_None_aad_None = r"""'B50A3019F16B9C643FB40259E4B09308'"""
-
-example_mode_aes_192_ecb_datatype_Int32_iv_None_aad_None = r"""'9F32F3F6B3C3B1830F56B5B94C93875D'"""
-
-example_mode_aes_192_ecb_datatype_Int64_iv_None_aad_None = r"""'8DE807D54B7717BFC773567D9FFE292D'"""
-
-example_mode_aes_192_ecb_datatype_Float32_iv_None_aad_None = r"""'4E0C122631ED64EAD726833291A81878'"""
-
-example_mode_aes_192_ecb_datatype_Float64_iv_None_aad_None = r"""'3F723599278E22E4692CE7D7D5F9A12F'"""
-
-example_mode_aes_192_ecb_datatype_Decimal32_iv_None_aad_None = r"""'2420D49DBAA5CEF7D853C98DA1BD33BF'"""
-
-example_mode_aes_192_ecb_datatype_Decimal64_iv_None_aad_None = r"""'FDF594113FCC2776653ED109A51FADF1'"""
-
-example_mode_aes_192_ecb_datatype_Decimal128_iv_None_aad_None = r"""'79207931793E374FB5A3A2AC1ECA857AD8ED6FC305C161EFCF57A383DAF31A83'"""
-
-example_mode_aes_192_ecb_datatype_UUID_iv_None_aad_None = r"""'9FDB738E78D0D2F774C484ED82A854E4D8ED6FC305C161EFCF57A383DAF31A83'"""
-
-example_mode_aes_192_ecb_datatype_Date_iv_None_aad_None = r"""'2CDD4685168FA3E2A7FA2092E86F44D4'"""
-
-example_mode_aes_192_ecb_datatype_DateTime_iv_None_aad_None = r"""'A4BEE097872E44FAD94D6707D6643DF5'"""
-
-example_mode_aes_192_ecb_datatype_DateTime64_iv_None_aad_None = r"""'1798B23C09F783623943560DF142E0F3'"""
-
-example_mode_aes_192_ecb_datatype_LowCardinality_iv_None_aad_None = r"""'1AE38A541D466EDFED572EE839B0907F'"""
-
-example_mode_aes_192_ecb_datatype_Array_iv_None_aad_None = r"""'7C0B9021CAF2CBBB06DBF589740DCC65'"""
-
-example_mode_aes_192_ecb_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_192_ecb_datatype_IPv4_iv_None_aad_None = r"""'B20465C932A0719BA04E2F76371510D8'"""
-
-example_mode_aes_192_ecb_datatype_IPv6_iv_None_aad_None = r"""'CCCDC9B9C3F182254591DFEDDCE9F232D8ED6FC305C161EFCF57A383DAF31A83'"""
-
-example_mode_aes_192_ecb_datatype_Enum8_iv_None_aad_None = r"""'01CC3C67F07C3FA6E5EFB7AE5F19130B'"""
-
-example_mode_aes_192_ecb_datatype_Enum16_iv_None_aad_None = r"""'B50A3019F16B9C643FB40259E4B09308'"""
-
-example_mode_aes_256_ecb_datatype_String_iv_None_aad_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'"""
-
-example_mode_aes_256_ecb_datatype_FixedString_iv_None_aad_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'"""
-
-example_mode_aes_256_ecb_datatype_UInt8_iv_None_aad_None = r"""'3605C5E38A448F5FEFABADF3B9983FDF'"""
-
-example_mode_aes_256_ecb_datatype_UInt16_iv_None_aad_None = r"""'2E5299C7A5672D8779BA9DDDE1DBCE00'"""
-
-example_mode_aes_256_ecb_datatype_UInt32_iv_None_aad_None = r"""'D8876CDF9B97DD110E780F958C1EA2AA'"""
-
-example_mode_aes_256_ecb_datatype_UInt64_iv_None_aad_None = r"""'F6E11A48B6D830F7B8D0817885C05D3C'"""
-
-example_mode_aes_256_ecb_datatype_Int8_iv_None_aad_None = r"""'3605C5E38A448F5FEFABADF3B9983FDF'"""
-
-example_mode_aes_256_ecb_datatype_Int16_iv_None_aad_None = r"""'2E5299C7A5672D8779BA9DDDE1DBCE00'"""
-
-example_mode_aes_256_ecb_datatype_Int32_iv_None_aad_None = r"""'D8876CDF9B97DD110E780F958C1EA2AA'"""
-
-example_mode_aes_256_ecb_datatype_Int64_iv_None_aad_None = r"""'F6E11A48B6D830F7B8D0817885C05D3C'"""
-
-example_mode_aes_256_ecb_datatype_Float32_iv_None_aad_None = r"""'A11ED1B75CF1C04C6CA3A31E76627D4C'"""
-
-example_mode_aes_256_ecb_datatype_Float64_iv_None_aad_None = r"""'464C85EB7DB36D95CF48A3431CC7B2BC'"""
-
-example_mode_aes_256_ecb_datatype_Decimal32_iv_None_aad_None = r"""'988C793BD81036C1D05EC47F43851269'"""
-
-example_mode_aes_256_ecb_datatype_Decimal64_iv_None_aad_None = r"""'50FFB9C104DBFF3F415F12BA73D6FF1C'"""
-
-example_mode_aes_256_ecb_datatype_Decimal128_iv_None_aad_None = r"""'B04C40C085A262E3AA27F8E7F6831DCB217E121CBD32CEC1F6FD3EBDF414BC34'"""
-
-example_mode_aes_256_ecb_datatype_UUID_iv_None_aad_None = r"""'6A36D74ACB38B95FA77BC757A7AB2C34217E121CBD32CEC1F6FD3EBDF414BC34'"""
-
-example_mode_aes_256_ecb_datatype_Date_iv_None_aad_None = r"""'F1CFA361A9B08FC101F3A4707A3E04D2'"""
-
-example_mode_aes_256_ecb_datatype_DateTime_iv_None_aad_None = r"""'D58178485CD1AE1C30F68383307B8BC5'"""
-
-example_mode_aes_256_ecb_datatype_DateTime64_iv_None_aad_None = r"""'A19B65BCB740B2AF4D421CE1DEC43608'"""
-
-example_mode_aes_256_ecb_datatype_LowCardinality_iv_None_aad_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'"""
-
-example_mode_aes_256_ecb_datatype_Array_iv_None_aad_None = r"""'C4071E4FD44F004347EA9932326B7038'"""
-
-example_mode_aes_256_ecb_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_256_ecb_datatype_IPv4_iv_None_aad_None = r"""'6C7950041CB4041D4D8036FCD22E3B06'"""
-
-example_mode_aes_256_ecb_datatype_IPv6_iv_None_aad_None = r"""'8CBF2DC164F4086B8DD14B75E3065621217E121CBD32CEC1F6FD3EBDF414BC34'"""
-
-example_mode_aes_256_ecb_datatype_Enum8_iv_None_aad_None = r"""'3605C5E38A448F5FEFABADF3B9983FDF'"""
-
-example_mode_aes_256_ecb_datatype_Enum16_iv_None_aad_None = r"""'2E5299C7A5672D8779BA9DDDE1DBCE00'"""
-
-example_mode_aes_128_cbc_datatype_String_iv_None_aad_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'"""
-
-example_mode_aes_128_cbc_datatype_FixedString_iv_None_aad_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'"""
-
-example_mode_aes_128_cbc_datatype_UInt8_iv_None_aad_None = r"""'4CDF8A192A06AC6EDBDCE2BFB53B7D73'"""
-
-example_mode_aes_128_cbc_datatype_UInt16_iv_None_aad_None = r"""'12FB5B75B1CB5DF0DC70D8039758691D'"""
-
-example_mode_aes_128_cbc_datatype_UInt32_iv_None_aad_None = r"""'E86C0858C6D9CCD970BA6DC320038306'"""
-
-example_mode_aes_128_cbc_datatype_UInt64_iv_None_aad_None = r"""'2D43D83E0250AE8AC4403551B639F694'"""
-
-example_mode_aes_128_cbc_datatype_Int8_iv_None_aad_None = r"""'4CDF8A192A06AC6EDBDCE2BFB53B7D73'"""
-
-example_mode_aes_128_cbc_datatype_Int16_iv_None_aad_None = r"""'12FB5B75B1CB5DF0DC70D8039758691D'"""
-
-example_mode_aes_128_cbc_datatype_Int32_iv_None_aad_None = r"""'E86C0858C6D9CCD970BA6DC320038306'"""
-
-example_mode_aes_128_cbc_datatype_Int64_iv_None_aad_None = r"""'2D43D83E0250AE8AC4403551B639F694'"""
-
-example_mode_aes_128_cbc_datatype_Float32_iv_None_aad_None = r"""'FF4D70D9A1050E6BBDD0325FC45CC22D'"""
-
-example_mode_aes_128_cbc_datatype_Float64_iv_None_aad_None = r"""'75FE6B4A722A31D7760680CC1B9F131D'"""
-
-example_mode_aes_128_cbc_datatype_Decimal32_iv_None_aad_None = r"""'83BBD7CCE7E5A38071653870475D48D2'"""
-
-example_mode_aes_128_cbc_datatype_Decimal64_iv_None_aad_None = r"""'BE0DD9302B2952CE9CC3721DD85C8E66'"""
-
-example_mode_aes_128_cbc_datatype_Decimal128_iv_None_aad_None = r"""'5F3DBFA74809E45E03980357B26787AF0D55B905F5525D3F5916FF811D8A6E7E'"""
-
-example_mode_aes_128_cbc_datatype_UUID_iv_None_aad_None = r"""'FF9161B222B4A67481271035745F06D991B6833DF67CBA9BC6E1AAEADBE363BB'"""
-
-example_mode_aes_128_cbc_datatype_Date_iv_None_aad_None = r"""'1E4FBE33752D96D147E890C29A409BFE'"""
-
-example_mode_aes_128_cbc_datatype_DateTime_iv_None_aad_None = r"""'384F3D97B78D52C73CD06C0E1B6DE399'"""
-
-example_mode_aes_128_cbc_datatype_DateTime64_iv_None_aad_None = r"""'C7F50A2D0175F3ED280AD42FF01FF5F2'"""
-
-example_mode_aes_128_cbc_datatype_LowCardinality_iv_None_aad_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'"""
-
-example_mode_aes_128_cbc_datatype_Array_iv_None_aad_None = r"""'D9152D05CFA9E162983A5A2E883109B4'"""
-
-example_mode_aes_128_cbc_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_128_cbc_datatype_IPv4_iv_None_aad_None = r"""'4F32782638C1F33C6A7202CA83F0C12C'"""
-
-example_mode_aes_128_cbc_datatype_IPv6_iv_None_aad_None = r"""'F54700FF04ADAD342BA6830DB12AD7E9B1B4BE8B15BAE0B2C9196D69E3D53C6C'"""
-
-example_mode_aes_128_cbc_datatype_Enum8_iv_None_aad_None = r"""'4CDF8A192A06AC6EDBDCE2BFB53B7D73'"""
-
-example_mode_aes_128_cbc_datatype_Enum16_iv_None_aad_None = r"""'12FB5B75B1CB5DF0DC70D8039758691D'"""
-
-example_mode_aes_192_cbc_datatype_String_iv_None_aad_None = r"""'1AE38A541D466EDFED572EE839B0907F'"""
-
-example_mode_aes_192_cbc_datatype_FixedString_iv_None_aad_None = r"""'1AE38A541D466EDFED572EE839B0907F'"""
-
-example_mode_aes_192_cbc_datatype_UInt8_iv_None_aad_None = r"""'01CC3C67F07C3FA6E5EFB7AE5F19130B'"""
-
-example_mode_aes_192_cbc_datatype_UInt16_iv_None_aad_None = r"""'B50A3019F16B9C643FB40259E4B09308'"""
-
-example_mode_aes_192_cbc_datatype_UInt32_iv_None_aad_None = r"""'9F32F3F6B3C3B1830F56B5B94C93875D'"""
-
-example_mode_aes_192_cbc_datatype_UInt64_iv_None_aad_None = r"""'8DE807D54B7717BFC773567D9FFE292D'"""
-
-example_mode_aes_192_cbc_datatype_Int8_iv_None_aad_None = r"""'01CC3C67F07C3FA6E5EFB7AE5F19130B'"""
-
-example_mode_aes_192_cbc_datatype_Int16_iv_None_aad_None = r"""'B50A3019F16B9C643FB40259E4B09308'"""
-
-example_mode_aes_192_cbc_datatype_Int32_iv_None_aad_None = r"""'9F32F3F6B3C3B1830F56B5B94C93875D'"""
-
-example_mode_aes_192_cbc_datatype_Int64_iv_None_aad_None = r"""'8DE807D54B7717BFC773567D9FFE292D'"""
-
-example_mode_aes_192_cbc_datatype_Float32_iv_None_aad_None = r"""'4E0C122631ED64EAD726833291A81878'"""
-
-example_mode_aes_192_cbc_datatype_Float64_iv_None_aad_None = r"""'3F723599278E22E4692CE7D7D5F9A12F'"""
-
-example_mode_aes_192_cbc_datatype_Decimal32_iv_None_aad_None = r"""'2420D49DBAA5CEF7D853C98DA1BD33BF'"""
-
-example_mode_aes_192_cbc_datatype_Decimal64_iv_None_aad_None = r"""'FDF594113FCC2776653ED109A51FADF1'"""
-
-example_mode_aes_192_cbc_datatype_Decimal128_iv_None_aad_None = r"""'79207931793E374FB5A3A2AC1ECA857A583603B3047000A843425EECA4C35311'"""
-
-example_mode_aes_192_cbc_datatype_UUID_iv_None_aad_None = r"""'9FDB738E78D0D2F774C484ED82A854E46B580C61DBE08478DC523DA6AD605078'"""
-
-example_mode_aes_192_cbc_datatype_Date_iv_None_aad_None = r"""'2CDD4685168FA3E2A7FA2092E86F44D4'"""
-
-example_mode_aes_192_cbc_datatype_DateTime_iv_None_aad_None = r"""'A4BEE097872E44FAD94D6707D6643DF5'"""
-
-example_mode_aes_192_cbc_datatype_DateTime64_iv_None_aad_None = r"""'1798B23C09F783623943560DF142E0F3'"""
-
-example_mode_aes_192_cbc_datatype_LowCardinality_iv_None_aad_None = r"""'1AE38A541D466EDFED572EE839B0907F'"""
-
-example_mode_aes_192_cbc_datatype_Array_iv_None_aad_None = r"""'7C0B9021CAF2CBBB06DBF589740DCC65'"""
-
-example_mode_aes_192_cbc_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_192_cbc_datatype_IPv4_iv_None_aad_None = r"""'B20465C932A0719BA04E2F76371510D8'"""
-
-example_mode_aes_192_cbc_datatype_IPv6_iv_None_aad_None = r"""'CCCDC9B9C3F182254591DFEDDCE9F2326879326F3973401A6293A92BCB8EDFC4'"""
-
-example_mode_aes_192_cbc_datatype_Enum8_iv_None_aad_None = r"""'01CC3C67F07C3FA6E5EFB7AE5F19130B'"""
-
-example_mode_aes_192_cbc_datatype_Enum16_iv_None_aad_None = r"""'B50A3019F16B9C643FB40259E4B09308'"""
-
-example_mode_aes_256_cbc_datatype_String_iv_None_aad_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'"""
-
-example_mode_aes_256_cbc_datatype_FixedString_iv_None_aad_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'"""
-
-example_mode_aes_256_cbc_datatype_UInt8_iv_None_aad_None = r"""'3605C5E38A448F5FEFABADF3B9983FDF'"""
-
-example_mode_aes_256_cbc_datatype_UInt16_iv_None_aad_None = r"""'2E5299C7A5672D8779BA9DDDE1DBCE00'"""
-
-example_mode_aes_256_cbc_datatype_UInt32_iv_None_aad_None = r"""'D8876CDF9B97DD110E780F958C1EA2AA'"""
-
-example_mode_aes_256_cbc_datatype_UInt64_iv_None_aad_None = r"""'F6E11A48B6D830F7B8D0817885C05D3C'"""
-
-example_mode_aes_256_cbc_datatype_Int8_iv_None_aad_None = r"""'3605C5E38A448F5FEFABADF3B9983FDF'"""
-
-example_mode_aes_256_cbc_datatype_Int16_iv_None_aad_None = r"""'2E5299C7A5672D8779BA9DDDE1DBCE00'"""
-
-example_mode_aes_256_cbc_datatype_Int32_iv_None_aad_None = r"""'D8876CDF9B97DD110E780F958C1EA2AA'"""
-
-example_mode_aes_256_cbc_datatype_Int64_iv_None_aad_None = r"""'F6E11A48B6D830F7B8D0817885C05D3C'"""
-
-example_mode_aes_256_cbc_datatype_Float32_iv_None_aad_None = r"""'A11ED1B75CF1C04C6CA3A31E76627D4C'"""
-
-example_mode_aes_256_cbc_datatype_Float64_iv_None_aad_None = r"""'464C85EB7DB36D95CF48A3431CC7B2BC'"""
-
-example_mode_aes_256_cbc_datatype_Decimal32_iv_None_aad_None = r"""'988C793BD81036C1D05EC47F43851269'"""
-
-example_mode_aes_256_cbc_datatype_Decimal64_iv_None_aad_None = r"""'50FFB9C104DBFF3F415F12BA73D6FF1C'"""
-
-example_mode_aes_256_cbc_datatype_Decimal128_iv_None_aad_None = r"""'B04C40C085A262E3AA27F8E7F6831DCB36585C228B0286E7A8D8DBAF754C4C38'"""
-
-example_mode_aes_256_cbc_datatype_UUID_iv_None_aad_None = r"""'6A36D74ACB38B95FA77BC757A7AB2C3428548E6132D69A22B320775A21ABA11F'"""
-
-example_mode_aes_256_cbc_datatype_Date_iv_None_aad_None = r"""'F1CFA361A9B08FC101F3A4707A3E04D2'"""
-
-example_mode_aes_256_cbc_datatype_DateTime_iv_None_aad_None = r"""'D58178485CD1AE1C30F68383307B8BC5'"""
-
-example_mode_aes_256_cbc_datatype_DateTime64_iv_None_aad_None = r"""'A19B65BCB740B2AF4D421CE1DEC43608'"""
-
-example_mode_aes_256_cbc_datatype_LowCardinality_iv_None_aad_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'"""
-
-example_mode_aes_256_cbc_datatype_Array_iv_None_aad_None = r"""'C4071E4FD44F004347EA9932326B7038'"""
-
-example_mode_aes_256_cbc_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_256_cbc_datatype_IPv4_iv_None_aad_None = r"""'6C7950041CB4041D4D8036FCD22E3B06'"""
-
-example_mode_aes_256_cbc_datatype_IPv6_iv_None_aad_None = r"""'8CBF2DC164F4086B8DD14B75E3065621393DE8421BAA5AE5E87096AEA7087507'"""
-
-example_mode_aes_256_cbc_datatype_Enum8_iv_None_aad_None = r"""'3605C5E38A448F5FEFABADF3B9983FDF'"""
-
-example_mode_aes_256_cbc_datatype_Enum16_iv_None_aad_None = r"""'2E5299C7A5672D8779BA9DDDE1DBCE00'"""
-
-example_mode_aes_128_cbc_datatype_String_iv_16_aad_None = r"""'D017D171B3865D6EA347E14167261F41'"""
-
-example_mode_aes_128_cbc_datatype_FixedString_iv_16_aad_None = r"""'D017D171B3865D6EA347E14167261F41'"""
-
-example_mode_aes_128_cbc_datatype_UInt8_iv_16_aad_None = r"""'A5BD67663C14A01DC9AB3B5F7B0F9383'"""
-
-example_mode_aes_128_cbc_datatype_UInt16_iv_16_aad_None = r"""'02D98283BEADCA1AC6EF925F9BF86960'"""
-
-example_mode_aes_128_cbc_datatype_UInt32_iv_16_aad_None = r"""'E72BD2245C3B2B7474300D09DBD85F3F'"""
-
-example_mode_aes_128_cbc_datatype_UInt64_iv_16_aad_None = r"""'C9032C59328DEA2EE03ACDBEDFAE7475'"""
-
-example_mode_aes_128_cbc_datatype_Int8_iv_16_aad_None = r"""'A5BD67663C14A01DC9AB3B5F7B0F9383'"""
-
-example_mode_aes_128_cbc_datatype_Int16_iv_16_aad_None = r"""'02D98283BEADCA1AC6EF925F9BF86960'"""
-
-example_mode_aes_128_cbc_datatype_Int32_iv_16_aad_None = r"""'E72BD2245C3B2B7474300D09DBD85F3F'"""
-
-example_mode_aes_128_cbc_datatype_Int64_iv_16_aad_None = r"""'C9032C59328DEA2EE03ACDBEDFAE7475'"""
-
-example_mode_aes_128_cbc_datatype_Float32_iv_16_aad_None = r"""'A5425BDEB6B83E311C45249DAF3153F5'"""
-
-example_mode_aes_128_cbc_datatype_Float64_iv_16_aad_None = r"""'EEDA98EC4045C7D351F3905313073B79'"""
-
-example_mode_aes_128_cbc_datatype_Decimal32_iv_16_aad_None = r"""'52EBB74292ECD37A29E9809166CC77DB'"""
-
-example_mode_aes_128_cbc_datatype_Decimal64_iv_16_aad_None = r"""'95EF455767EC8FBD32BAAEFFB44FEEB7'"""
-
-example_mode_aes_128_cbc_datatype_Decimal128_iv_16_aad_None = r"""'94C066884FA09B0D3C750F20A2823304A2FE20B6B69AB18373E3F58623E0D7FB'"""
-
-example_mode_aes_128_cbc_datatype_UUID_iv_16_aad_None = r"""'1D909C15BB882E89AD68B1EFEAC72148DCD05E2303B6BE19007A945AFB778B42'"""
-
-example_mode_aes_128_cbc_datatype_Date_iv_16_aad_None = r"""'24A4F8CE8A9FAE48A0AFEB8A6203EFEA'"""
-
-example_mode_aes_128_cbc_datatype_DateTime_iv_16_aad_None = r"""'0DD5554819E3995B1B6B00362AEE9424'"""
-
-example_mode_aes_128_cbc_datatype_DateTime64_iv_16_aad_None = r"""'0E55319903957C9D1FDA4FB65C3871CB'"""
-
-example_mode_aes_128_cbc_datatype_LowCardinality_iv_16_aad_None = r"""'D017D171B3865D6EA347E14167261F41'"""
-
-example_mode_aes_128_cbc_datatype_Array_iv_16_aad_None = r"""'D53C82A5D13256B88DF41C1C1D924E40'"""
-
-example_mode_aes_128_cbc_datatype_NULL_iv_16_aad_None = r"""'\\N'"""
-
-example_mode_aes_128_cbc_datatype_IPv4_iv_16_aad_None = r"""'C0D81AAB3134EAB5B1F190958C6A29F9'"""
-
-example_mode_aes_128_cbc_datatype_IPv6_iv_16_aad_None = r"""'AE1A36F75C9BB387121445069A9968CA247FA4459ED3C8809089FEE334EB1EC7'"""
-
-example_mode_aes_128_cbc_datatype_Enum8_iv_16_aad_None = r"""'A5BD67663C14A01DC9AB3B5F7B0F9383'"""
-
-example_mode_aes_128_cbc_datatype_Enum16_iv_16_aad_None = r"""'02D98283BEADCA1AC6EF925F9BF86960'"""
-
-example_mode_aes_192_cbc_datatype_String_iv_16_aad_None = r"""'A3DB45D129A5C9FDB5ED66E782B28BD2'"""
-
-example_mode_aes_192_cbc_datatype_FixedString_iv_16_aad_None = r"""'A3DB45D129A5C9FDB5ED66E782B28BD2'"""
-
-example_mode_aes_192_cbc_datatype_UInt8_iv_16_aad_None = r"""'F2A751470B32C58822F23B1417C11279'"""
-
-example_mode_aes_192_cbc_datatype_UInt16_iv_16_aad_None = r"""'CA1ECFEA89CF520D8FA14A38235E5FA5'"""
-
-example_mode_aes_192_cbc_datatype_UInt32_iv_16_aad_None = r"""'57F211370522621F23B59C8304878904'"""
-
-example_mode_aes_192_cbc_datatype_UInt64_iv_16_aad_None = r"""'DCF974CD88752B215284625F9164F5D4'"""
-
-example_mode_aes_192_cbc_datatype_Int8_iv_16_aad_None = r"""'F2A751470B32C58822F23B1417C11279'"""
-
-example_mode_aes_192_cbc_datatype_Int16_iv_16_aad_None = r"""'CA1ECFEA89CF520D8FA14A38235E5FA5'"""
-
-example_mode_aes_192_cbc_datatype_Int32_iv_16_aad_None = r"""'57F211370522621F23B59C8304878904'"""
-
-example_mode_aes_192_cbc_datatype_Int64_iv_16_aad_None = r"""'DCF974CD88752B215284625F9164F5D4'"""
-
-example_mode_aes_192_cbc_datatype_Float32_iv_16_aad_None = r"""'62EBE4FD1035D405BBD6C41436780E13'"""
-
-example_mode_aes_192_cbc_datatype_Float64_iv_16_aad_None = r"""'5706FC9892A4C1AB48FC93E13C9C72FE'"""
-
-example_mode_aes_192_cbc_datatype_Decimal32_iv_16_aad_None = r"""'BB056843D369A5E55982C92AD52EEC07'"""
-
-example_mode_aes_192_cbc_datatype_Decimal64_iv_16_aad_None = r"""'70ACD4156F9AC1444A75EFCB9202CA00'"""
-
-example_mode_aes_192_cbc_datatype_Decimal128_iv_16_aad_None = r"""'04748A45840A0CAAC83F139DB01C504B01FC56631A8B2FFBE68F2FC85B6FEEDE'"""
-
-example_mode_aes_192_cbc_datatype_UUID_iv_16_aad_None = r"""'D7B2ABC08F67823F61C3E8F680C12B3A8AA3E3711D412CB55ACFBC89C14949A8'"""
-
-example_mode_aes_192_cbc_datatype_Date_iv_16_aad_None = r"""'734BBE526E56B280E90E53DDEA7DB69B'"""
-
-example_mode_aes_192_cbc_datatype_DateTime_iv_16_aad_None = r"""'9B9BE7CC20F75DA3F39F688DE3A1ADAA'"""
-
-example_mode_aes_192_cbc_datatype_DateTime64_iv_16_aad_None = r"""'554FCAAF985378A561F7C6ED91E20C89'"""
-
-example_mode_aes_192_cbc_datatype_LowCardinality_iv_16_aad_None = r"""'A3DB45D129A5C9FDB5ED66E782B28BD2'"""
-
-example_mode_aes_192_cbc_datatype_Array_iv_16_aad_None = r"""'D85AF1078F110329896EFC462340171E'"""
-
-example_mode_aes_192_cbc_datatype_NULL_iv_16_aad_None = r"""'\\N'"""
-
-example_mode_aes_192_cbc_datatype_IPv4_iv_16_aad_None = r"""'6AF45078B1E924B6C107D4C0236EA937'"""
-
-example_mode_aes_192_cbc_datatype_IPv6_iv_16_aad_None = r"""'9E4F8E54B265A340090DC7FE4F53BB50048442F5632A7B1630AE80DFD938E9AA'"""
-
-example_mode_aes_192_cbc_datatype_Enum8_iv_16_aad_None = r"""'F2A751470B32C58822F23B1417C11279'"""
-
-example_mode_aes_192_cbc_datatype_Enum16_iv_16_aad_None = r"""'CA1ECFEA89CF520D8FA14A38235E5FA5'"""
-
-example_mode_aes_256_cbc_datatype_String_iv_16_aad_None = r"""'5E22454D9AC4F1A47B04E2FD98A76140'"""
-
-example_mode_aes_256_cbc_datatype_FixedString_iv_16_aad_None = r"""'5E22454D9AC4F1A47B04E2FD98A76140'"""
-
-example_mode_aes_256_cbc_datatype_UInt8_iv_16_aad_None = r"""'FE35EEF14D6AA67AA2EBA474253CA19A'"""
-
-example_mode_aes_256_cbc_datatype_UInt16_iv_16_aad_None = r"""'2D22C6B58140E591BEF7986C7770FF21'"""
-
-example_mode_aes_256_cbc_datatype_UInt32_iv_16_aad_None = r"""'4EB4923E19AA24206B135D5B25CB31AB'"""
-
-example_mode_aes_256_cbc_datatype_UInt64_iv_16_aad_None = r"""'173B7CAFFCBED9B814C0ECD50A9477F6'"""
-
-example_mode_aes_256_cbc_datatype_Int8_iv_16_aad_None = r"""'FE35EEF14D6AA67AA2EBA474253CA19A'"""
-
-example_mode_aes_256_cbc_datatype_Int16_iv_16_aad_None = r"""'2D22C6B58140E591BEF7986C7770FF21'"""
-
-example_mode_aes_256_cbc_datatype_Int32_iv_16_aad_None = r"""'4EB4923E19AA24206B135D5B25CB31AB'"""
-
-example_mode_aes_256_cbc_datatype_Int64_iv_16_aad_None = r"""'173B7CAFFCBED9B814C0ECD50A9477F6'"""
-
-example_mode_aes_256_cbc_datatype_Float32_iv_16_aad_None = r"""'E639AA3E45D8C2759181FD736CD58EDC'"""
-
-example_mode_aes_256_cbc_datatype_Float64_iv_16_aad_None = r"""'CFEF3FDC054997559DF5DCFB5F215B58'"""
-
-example_mode_aes_256_cbc_datatype_Decimal32_iv_16_aad_None = r"""'E2F57A092A1759D39F4AE67C9543FAB8'"""
-
-example_mode_aes_256_cbc_datatype_Decimal64_iv_16_aad_None = r"""'6259A2CFD3D83352A44C03DB050077B3'"""
-
-example_mode_aes_256_cbc_datatype_Decimal128_iv_16_aad_None = r"""'AEC71CA2D87098392689F9EB2ED93A84FA5787E643E28CB3C2013F8FCC24E387'"""
-
-example_mode_aes_256_cbc_datatype_UUID_iv_16_aad_None = r"""'88BA86B14A468DC92084B7152B172E142D88CBFB639A8FF2F480F1727972251C'"""
-
-example_mode_aes_256_cbc_datatype_Date_iv_16_aad_None = r"""'C67C84B1C6BF4527A7E730499FF39C86'"""
-
-example_mode_aes_256_cbc_datatype_DateTime_iv_16_aad_None = r"""'7FDC1B0797A5F3C04CDA82729A1EA4AA'"""
-
-example_mode_aes_256_cbc_datatype_DateTime64_iv_16_aad_None = r"""'B1B7401FB2B65BCB3448C1BE179F6AA6'"""
-
-example_mode_aes_256_cbc_datatype_LowCardinality_iv_16_aad_None = r"""'5E22454D9AC4F1A47B04E2FD98A76140'"""
-
-example_mode_aes_256_cbc_datatype_Array_iv_16_aad_None = r"""'6BB1E8429CC612B0AA74282B81D4FE8A'"""
-
-example_mode_aes_256_cbc_datatype_NULL_iv_16_aad_None = r"""'\\N'"""
-
-example_mode_aes_256_cbc_datatype_IPv4_iv_16_aad_None = r"""'51364C8DC6882CA1F03CF7FB45117EEF'"""
-
-example_mode_aes_256_cbc_datatype_IPv6_iv_16_aad_None = r"""'87A1C4D4672EFE64DC98E040EAD6B3126C899C263577B3D8EE8A3952BE5CDC1B'"""
-
-example_mode_aes_256_cbc_datatype_Enum8_iv_16_aad_None = r"""'FE35EEF14D6AA67AA2EBA474253CA19A'"""
-
-example_mode_aes_256_cbc_datatype_Enum16_iv_16_aad_None = r"""'2D22C6B58140E591BEF7986C7770FF21'"""
-
-example_mode_aes_128_cfb128_datatype_String_iv_None_aad_None = r"""'21'"""
-
-example_mode_aes_128_cfb128_datatype_FixedString_iv_None_aad_None = r"""'21'"""
-
-example_mode_aes_128_cfb128_datatype_UInt8_iv_None_aad_None = r"""'11'"""
-
-example_mode_aes_128_cfb128_datatype_UInt16_iv_None_aad_None = r"""'11DF'"""
-
-example_mode_aes_128_cfb128_datatype_UInt32_iv_None_aad_None = r"""'11DFC1B5'"""
-
-example_mode_aes_128_cfb128_datatype_UInt64_iv_None_aad_None = r"""'11DFC1B5F66CFD6A'"""
-
-example_mode_aes_128_cfb128_datatype_Int8_iv_None_aad_None = r"""'11'"""
-
-example_mode_aes_128_cfb128_datatype_Int16_iv_None_aad_None = r"""'11DF'"""
-
-example_mode_aes_128_cfb128_datatype_Int32_iv_None_aad_None = r"""'11DFC1B5'"""
-
-example_mode_aes_128_cfb128_datatype_Int64_iv_None_aad_None = r"""'11DFC1B5F66CFD6A'"""
-
-example_mode_aes_128_cfb128_datatype_Float32_iv_None_aad_None = r"""'10DF418A'"""
-
-example_mode_aes_128_cfb128_datatype_Float64_iv_None_aad_None = r"""'10DFC1B5F66C0D55'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal32_iv_None_aad_None = r"""'3091C1B5'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal64_iv_None_aad_None = r"""'3091C1B5F66CFD6A'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal128_iv_None_aad_None = r"""'3091C1B5F66CFD6A1DC46D66907BEEB1'"""
-
-example_mode_aes_128_cfb128_datatype_UUID_iv_None_aad_None = r"""'F7CE72E9F2A80D0BBD1FBE0C90DD9521'"""
-
-example_mode_aes_128_cfb128_datatype_Date_iv_None_aad_None = r"""'4698'"""
-
-example_mode_aes_128_cfb128_datatype_DateTime_iv_None_aad_None = r"""'5E0FCDEB'"""
-
-example_mode_aes_128_cfb128_datatype_DateTime64_iv_None_aad_None = r"""'3B6ECCD7996DFD6A'"""
-
-example_mode_aes_128_cfb128_datatype_LowCardinality_iv_None_aad_None = r"""'21'"""
-
-example_mode_aes_128_cfb128_datatype_Array_iv_None_aad_None = r"""'11DD'"""
-
-example_mode_aes_128_cfb128_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_128_cfb128_datatype_IPv4_iv_None_aad_None = r"""'3D5D201E'"""
-
-example_mode_aes_128_cfb128_datatype_IPv6_iv_None_aad_None = r"""'30DECC0DF66C78C91DC46D663C646EB0'"""
-
-example_mode_aes_128_cfb128_datatype_Enum8_iv_None_aad_None = r"""'11'"""
-
-example_mode_aes_128_cfb128_datatype_Enum16_iv_None_aad_None = r"""'11DF'"""
-
-example_mode_aes_192_cfb128_datatype_String_iv_None_aad_None = r"""'36'"""
-
-example_mode_aes_192_cfb128_datatype_FixedString_iv_None_aad_None = r"""'36'"""
-
-example_mode_aes_192_cfb128_datatype_UInt8_iv_None_aad_None = r"""'06'"""
-
-example_mode_aes_192_cfb128_datatype_UInt16_iv_None_aad_None = r"""'06B7'"""
-
-example_mode_aes_192_cfb128_datatype_UInt32_iv_None_aad_None = r"""'06B7199D'"""
-
-example_mode_aes_192_cfb128_datatype_UInt64_iv_None_aad_None = r"""'06B7199D3D3CA19E'"""
-
-example_mode_aes_192_cfb128_datatype_Int8_iv_None_aad_None = r"""'06'"""
-
-example_mode_aes_192_cfb128_datatype_Int16_iv_None_aad_None = r"""'06B7'"""
-
-example_mode_aes_192_cfb128_datatype_Int32_iv_None_aad_None = r"""'06B7199D'"""
-
-example_mode_aes_192_cfb128_datatype_Int64_iv_None_aad_None = r"""'06B7199D3D3CA19E'"""
-
-example_mode_aes_192_cfb128_datatype_Float32_iv_None_aad_None = r"""'07B799A2'"""
-
-example_mode_aes_192_cfb128_datatype_Float64_iv_None_aad_None = r"""'07B7199D3D3C51A1'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal32_iv_None_aad_None = r"""'27F9199D'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal64_iv_None_aad_None = r"""'27F9199D3D3CA19E'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal128_iv_None_aad_None = r"""'27F9199D3D3CA19E2CCE5990D7551E73'"""
-
-example_mode_aes_192_cfb128_datatype_UUID_iv_None_aad_None = r"""'E0A6AAC139F851FF8C158AFAD7F365E3'"""
-
-example_mode_aes_192_cfb128_datatype_Date_iv_None_aad_None = r"""'51F0'"""
-
-example_mode_aes_192_cfb128_datatype_DateTime_iv_None_aad_None = r"""'496715C3'"""
-
-example_mode_aes_192_cfb128_datatype_DateTime64_iv_None_aad_None = r"""'2C0614FF523DA19E'"""
-
-example_mode_aes_192_cfb128_datatype_LowCardinality_iv_None_aad_None = r"""'36'"""
-
-example_mode_aes_192_cfb128_datatype_Array_iv_None_aad_None = r"""'06B5'"""
-
-example_mode_aes_192_cfb128_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_192_cfb128_datatype_IPv4_iv_None_aad_None = r"""'2A35F836'"""
-
-example_mode_aes_192_cfb128_datatype_IPv6_iv_None_aad_None = r"""'27B614253D3C243D2CCE59907B4A9E72'"""
-
-example_mode_aes_192_cfb128_datatype_Enum8_iv_None_aad_None = r"""'06'"""
-
-example_mode_aes_192_cfb128_datatype_Enum16_iv_None_aad_None = r"""'06B7'"""
-
-example_mode_aes_256_cfb128_datatype_String_iv_None_aad_None = r"""'81'"""
-
-example_mode_aes_256_cfb128_datatype_FixedString_iv_None_aad_None = r"""'81'"""
-
-example_mode_aes_256_cfb128_datatype_UInt8_iv_None_aad_None = r"""'B1'"""
-
-example_mode_aes_256_cfb128_datatype_UInt16_iv_None_aad_None = r"""'B18E'"""
-
-example_mode_aes_256_cfb128_datatype_UInt32_iv_None_aad_None = r"""'B18ECF9E'"""
-
-example_mode_aes_256_cfb128_datatype_UInt64_iv_None_aad_None = r"""'B18ECF9EC7EB5F0D'"""
-
-example_mode_aes_256_cfb128_datatype_Int8_iv_None_aad_None = r"""'B1'"""
-
-example_mode_aes_256_cfb128_datatype_Int16_iv_None_aad_None = r"""'B18E'"""
-
-example_mode_aes_256_cfb128_datatype_Int32_iv_None_aad_None = r"""'B18ECF9E'"""
-
-example_mode_aes_256_cfb128_datatype_Int64_iv_None_aad_None = r"""'B18ECF9EC7EB5F0D'"""
-
-example_mode_aes_256_cfb128_datatype_Float32_iv_None_aad_None = r"""'B08E4FA1'"""
-
-example_mode_aes_256_cfb128_datatype_Float64_iv_None_aad_None = r"""'B08ECF9EC7EBAF32'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal32_iv_None_aad_None = r"""'90C0CF9E'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal64_iv_None_aad_None = r"""'90C0CF9EC7EB5F0D'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal128_iv_None_aad_None = r"""'90C0CF9EC7EB5F0D7B78C42556D668AC'"""
-
-example_mode_aes_256_cfb128_datatype_UUID_iv_None_aad_None = r"""'579F7CC2C32FAF6CDBA3174F5670133C'"""
-
-example_mode_aes_256_cfb128_datatype_Date_iv_None_aad_None = r"""'E6C9'"""
-
-example_mode_aes_256_cfb128_datatype_DateTime_iv_None_aad_None = r"""'FE5EC3C0'"""
-
-example_mode_aes_256_cfb128_datatype_DateTime64_iv_None_aad_None = r"""'9B3FC2FCA8EA5F0D'"""
-
-example_mode_aes_256_cfb128_datatype_LowCardinality_iv_None_aad_None = r"""'81'"""
-
-example_mode_aes_256_cfb128_datatype_Array_iv_None_aad_None = r"""'B18C'"""
-
-example_mode_aes_256_cfb128_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_256_cfb128_datatype_IPv4_iv_None_aad_None = r"""'9D0C2E35'"""
-
-example_mode_aes_256_cfb128_datatype_IPv6_iv_None_aad_None = r"""'908FC226C7EBDAAE7B78C425FAC9E8AD'"""
-
-example_mode_aes_256_cfb128_datatype_Enum8_iv_None_aad_None = r"""'B1'"""
-
-example_mode_aes_256_cfb128_datatype_Enum16_iv_None_aad_None = r"""'B18E'"""
-
-example_mode_aes_128_cfb128_datatype_String_iv_16_aad_None = r"""'03'"""
-
-example_mode_aes_128_cfb128_datatype_FixedString_iv_16_aad_None = r"""'03'"""
-
-example_mode_aes_128_cfb128_datatype_UInt8_iv_16_aad_None = r"""'33'"""
-
-example_mode_aes_128_cfb128_datatype_UInt16_iv_16_aad_None = r"""'3388'"""
-
-example_mode_aes_128_cfb128_datatype_UInt32_iv_16_aad_None = r"""'3388A984'"""
-
-example_mode_aes_128_cfb128_datatype_UInt64_iv_16_aad_None = r"""'3388A984DD06FF58'"""
-
-example_mode_aes_128_cfb128_datatype_Int8_iv_16_aad_None = r"""'33'"""
-
-example_mode_aes_128_cfb128_datatype_Int16_iv_16_aad_None = r"""'3388'"""
-
-example_mode_aes_128_cfb128_datatype_Int32_iv_16_aad_None = r"""'3388A984'"""
-
-example_mode_aes_128_cfb128_datatype_Int64_iv_16_aad_None = r"""'3388A984DD06FF58'"""
-
-example_mode_aes_128_cfb128_datatype_Float32_iv_16_aad_None = r"""'328829BB'"""
-
-example_mode_aes_128_cfb128_datatype_Float64_iv_16_aad_None = r"""'3288A984DD060F67'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal32_iv_16_aad_None = r"""'12C6A984'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal64_iv_16_aad_None = r"""'12C6A984DD06FF58'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal128_iv_16_aad_None = r"""'12C6A984DD06FF58E93960B1DEC50F1E'"""
-
-example_mode_aes_128_cfb128_datatype_UUID_iv_16_aad_None = r"""'D5991AD8D9C20F3949E2B3DBDE63748E'"""
-
-example_mode_aes_128_cfb128_datatype_Date_iv_16_aad_None = r"""'64CF'"""
-
-example_mode_aes_128_cfb128_datatype_DateTime_iv_16_aad_None = r"""'7C58A5DA'"""
-
-example_mode_aes_128_cfb128_datatype_DateTime64_iv_16_aad_None = r"""'1939A4E6B207FF58'"""
-
-example_mode_aes_128_cfb128_datatype_LowCardinality_iv_16_aad_None = r"""'03'"""
-
-example_mode_aes_128_cfb128_datatype_Array_iv_16_aad_None = r"""'338A'"""
-
-example_mode_aes_128_cfb128_datatype_NULL_iv_16_aad_None = r"""'\\N'"""
-
-example_mode_aes_128_cfb128_datatype_IPv4_iv_16_aad_None = r"""'1F0A482F'"""
-
-example_mode_aes_128_cfb128_datatype_IPv6_iv_16_aad_None = r"""'1289A43CDD067AFBE93960B172DA8F1F'"""
-
-example_mode_aes_128_cfb128_datatype_Enum8_iv_16_aad_None = r"""'33'"""
-
-example_mode_aes_128_cfb128_datatype_Enum16_iv_16_aad_None = r"""'3388'"""
-
-example_mode_aes_192_cfb128_datatype_String_iv_16_aad_None = r"""'59'"""
-
-example_mode_aes_192_cfb128_datatype_FixedString_iv_16_aad_None = r"""'59'"""
-
-example_mode_aes_192_cfb128_datatype_UInt8_iv_16_aad_None = r"""'69'"""
-
-example_mode_aes_192_cfb128_datatype_UInt16_iv_16_aad_None = r"""'69C7'"""
-
-example_mode_aes_192_cfb128_datatype_UInt32_iv_16_aad_None = r"""'69C7E792'"""
-
-example_mode_aes_192_cfb128_datatype_UInt64_iv_16_aad_None = r"""'69C7E792B71077B1'"""
-
-example_mode_aes_192_cfb128_datatype_Int8_iv_16_aad_None = r"""'69'"""
-
-example_mode_aes_192_cfb128_datatype_Int16_iv_16_aad_None = r"""'69C7'"""
-
-example_mode_aes_192_cfb128_datatype_Int32_iv_16_aad_None = r"""'69C7E792'"""
-
-example_mode_aes_192_cfb128_datatype_Int64_iv_16_aad_None = r"""'69C7E792B71077B1'"""
-
-example_mode_aes_192_cfb128_datatype_Float32_iv_16_aad_None = r"""'68C767AD'"""
-
-example_mode_aes_192_cfb128_datatype_Float64_iv_16_aad_None = r"""'68C7E792B710878E'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal32_iv_16_aad_None = r"""'4889E792'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal64_iv_16_aad_None = r"""'4889E792B71077B1'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal128_iv_16_aad_None = r"""'4889E792B71077B18446050EBFD861B5'"""
-
-example_mode_aes_192_cfb128_datatype_UUID_iv_16_aad_None = r"""'8FD654CEB3D487D0249DD664BF7E1A25'"""
-
-example_mode_aes_192_cfb128_datatype_Date_iv_16_aad_None = r"""'3E80'"""
-
-example_mode_aes_192_cfb128_datatype_DateTime_iv_16_aad_None = r"""'2617EBCC'"""
-
-example_mode_aes_192_cfb128_datatype_DateTime64_iv_16_aad_None = r"""'4376EAF0D81177B1'"""
-
-example_mode_aes_192_cfb128_datatype_LowCardinality_iv_16_aad_None = r"""'59'"""
-
-example_mode_aes_192_cfb128_datatype_Array_iv_16_aad_None = r"""'69C5'"""
-
-example_mode_aes_192_cfb128_datatype_NULL_iv_16_aad_None = r"""'\\N'"""
-
-example_mode_aes_192_cfb128_datatype_IPv4_iv_16_aad_None = r"""'45450639'"""
-
-example_mode_aes_192_cfb128_datatype_IPv6_iv_16_aad_None = r"""'48C6EA2AB710F2128446050E13C7E1B4'"""
-
-example_mode_aes_192_cfb128_datatype_Enum8_iv_16_aad_None = r"""'69'"""
-
-example_mode_aes_192_cfb128_datatype_Enum16_iv_16_aad_None = r"""'69C7'"""
-
-example_mode_aes_256_cfb128_datatype_String_iv_16_aad_None = r"""'58'"""
-
-example_mode_aes_256_cfb128_datatype_FixedString_iv_16_aad_None = r"""'58'"""
-
-example_mode_aes_256_cfb128_datatype_UInt8_iv_16_aad_None = r"""'68'"""
-
-example_mode_aes_256_cfb128_datatype_UInt16_iv_16_aad_None = r"""'6858'"""
-
-example_mode_aes_256_cfb128_datatype_UInt32_iv_16_aad_None = r"""'68588817'"""
-
-example_mode_aes_256_cfb128_datatype_UInt64_iv_16_aad_None = r"""'685888173CDE4488'"""
-
-example_mode_aes_256_cfb128_datatype_Int8_iv_16_aad_None = r"""'68'"""
-
-example_mode_aes_256_cfb128_datatype_Int16_iv_16_aad_None = r"""'6858'"""
-
-example_mode_aes_256_cfb128_datatype_Int32_iv_16_aad_None = r"""'68588817'"""
-
-example_mode_aes_256_cfb128_datatype_Int64_iv_16_aad_None = r"""'685888173CDE4488'"""
-
-example_mode_aes_256_cfb128_datatype_Float32_iv_16_aad_None = r"""'69580828'"""
-
-example_mode_aes_256_cfb128_datatype_Float64_iv_16_aad_None = r"""'695888173CDEB4B7'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal32_iv_16_aad_None = r"""'49168817'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal64_iv_16_aad_None = r"""'491688173CDE4488'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal128_iv_16_aad_None = r"""'491688173CDE448870E043A7733CC726'"""
-
-example_mode_aes_256_cfb128_datatype_UUID_iv_16_aad_None = r"""'8E493B4B381AB4E9D03B90CD739ABCB6'"""
-
-example_mode_aes_256_cfb128_datatype_Date_iv_16_aad_None = r"""'3F1F'"""
-
-example_mode_aes_256_cfb128_datatype_DateTime_iv_16_aad_None = r"""'27888449'"""
-
-example_mode_aes_256_cfb128_datatype_DateTime64_iv_16_aad_None = r"""'42E9857553DF4488'"""
-
-example_mode_aes_256_cfb128_datatype_LowCardinality_iv_16_aad_None = r"""'58'"""
-
-example_mode_aes_256_cfb128_datatype_Array_iv_16_aad_None = r"""'685A'"""
-
-example_mode_aes_256_cfb128_datatype_NULL_iv_16_aad_None = r"""'\\N'"""
-
-example_mode_aes_256_cfb128_datatype_IPv4_iv_16_aad_None = r"""'44DA69BC'"""
-
-example_mode_aes_256_cfb128_datatype_IPv6_iv_16_aad_None = r"""'495985AF3CDEC12B70E043A7DF234727'"""
-
-example_mode_aes_256_cfb128_datatype_Enum8_iv_16_aad_None = r"""'68'"""
-
-example_mode_aes_256_cfb128_datatype_Enum16_iv_16_aad_None = r"""'6858'"""
-
-example_mode_aes_128_ofb_datatype_String_iv_None_aad_None = r"""'21'"""
-
-example_mode_aes_128_ofb_datatype_FixedString_iv_None_aad_None = r"""'21'"""
-
-example_mode_aes_128_ofb_datatype_UInt8_iv_None_aad_None = r"""'11'"""
-
-example_mode_aes_128_ofb_datatype_UInt16_iv_None_aad_None = r"""'11DF'"""
-
-example_mode_aes_128_ofb_datatype_UInt32_iv_None_aad_None = r"""'11DFC1B5'"""
-
-example_mode_aes_128_ofb_datatype_UInt64_iv_None_aad_None = r"""'11DFC1B5F66CFD6A'"""
-
-example_mode_aes_128_ofb_datatype_Int8_iv_None_aad_None = r"""'11'"""
-
-example_mode_aes_128_ofb_datatype_Int16_iv_None_aad_None = r"""'11DF'"""
-
-example_mode_aes_128_ofb_datatype_Int32_iv_None_aad_None = r"""'11DFC1B5'"""
-
-example_mode_aes_128_ofb_datatype_Int64_iv_None_aad_None = r"""'11DFC1B5F66CFD6A'"""
-
-example_mode_aes_128_ofb_datatype_Float32_iv_None_aad_None = r"""'10DF418A'"""
-
-example_mode_aes_128_ofb_datatype_Float64_iv_None_aad_None = r"""'10DFC1B5F66C0D55'"""
-
-example_mode_aes_128_ofb_datatype_Decimal32_iv_None_aad_None = r"""'3091C1B5'"""
-
-example_mode_aes_128_ofb_datatype_Decimal64_iv_None_aad_None = r"""'3091C1B5F66CFD6A'"""
-
-example_mode_aes_128_ofb_datatype_Decimal128_iv_None_aad_None = r"""'3091C1B5F66CFD6A1DC46D66907BEEB1'"""
-
-example_mode_aes_128_ofb_datatype_UUID_iv_None_aad_None = r"""'F7CE72E9F2A80D0BBD1FBE0C90DD9521'"""
-
-example_mode_aes_128_ofb_datatype_Date_iv_None_aad_None = r"""'4698'"""
-
-example_mode_aes_128_ofb_datatype_DateTime_iv_None_aad_None = r"""'5E0FCDEB'"""
-
-example_mode_aes_128_ofb_datatype_DateTime64_iv_None_aad_None = r"""'3B6ECCD7996DFD6A'"""
-
-example_mode_aes_128_ofb_datatype_LowCardinality_iv_None_aad_None = r"""'21'"""
-
-example_mode_aes_128_ofb_datatype_Array_iv_None_aad_None = r"""'11DD'"""
-
-example_mode_aes_128_ofb_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_128_ofb_datatype_IPv4_iv_None_aad_None = r"""'3D5D201E'"""
-
-example_mode_aes_128_ofb_datatype_IPv6_iv_None_aad_None = r"""'30DECC0DF66C78C91DC46D663C646EB0'"""
-
-example_mode_aes_128_ofb_datatype_Enum8_iv_None_aad_None = r"""'11'"""
-
-example_mode_aes_128_ofb_datatype_Enum16_iv_None_aad_None = r"""'11DF'"""
-
-example_mode_aes_192_ofb_datatype_String_iv_None_aad_None = r"""'36'"""
-
-example_mode_aes_192_ofb_datatype_FixedString_iv_None_aad_None = r"""'36'"""
-
-example_mode_aes_192_ofb_datatype_UInt8_iv_None_aad_None = r"""'06'"""
-
-example_mode_aes_192_ofb_datatype_UInt16_iv_None_aad_None = r"""'06B7'"""
-
-example_mode_aes_192_ofb_datatype_UInt32_iv_None_aad_None = r"""'06B7199D'"""
-
-example_mode_aes_192_ofb_datatype_UInt64_iv_None_aad_None = r"""'06B7199D3D3CA19E'"""
-
-example_mode_aes_192_ofb_datatype_Int8_iv_None_aad_None = r"""'06'"""
-
-example_mode_aes_192_ofb_datatype_Int16_iv_None_aad_None = r"""'06B7'"""
-
-example_mode_aes_192_ofb_datatype_Int32_iv_None_aad_None = r"""'06B7199D'"""
-
-example_mode_aes_192_ofb_datatype_Int64_iv_None_aad_None = r"""'06B7199D3D3CA19E'"""
-
-example_mode_aes_192_ofb_datatype_Float32_iv_None_aad_None = r"""'07B799A2'"""
-
-example_mode_aes_192_ofb_datatype_Float64_iv_None_aad_None = r"""'07B7199D3D3C51A1'"""
-
-example_mode_aes_192_ofb_datatype_Decimal32_iv_None_aad_None = r"""'27F9199D'"""
-
-example_mode_aes_192_ofb_datatype_Decimal64_iv_None_aad_None = r"""'27F9199D3D3CA19E'"""
-
-example_mode_aes_192_ofb_datatype_Decimal128_iv_None_aad_None = r"""'27F9199D3D3CA19E2CCE5990D7551E73'"""
-
-example_mode_aes_192_ofb_datatype_UUID_iv_None_aad_None = r"""'E0A6AAC139F851FF8C158AFAD7F365E3'"""
-
-example_mode_aes_192_ofb_datatype_Date_iv_None_aad_None = r"""'51F0'"""
-
-example_mode_aes_192_ofb_datatype_DateTime_iv_None_aad_None = r"""'496715C3'"""
-
-example_mode_aes_192_ofb_datatype_DateTime64_iv_None_aad_None = r"""'2C0614FF523DA19E'"""
-
-example_mode_aes_192_ofb_datatype_LowCardinality_iv_None_aad_None = r"""'36'"""
-
-example_mode_aes_192_ofb_datatype_Array_iv_None_aad_None = r"""'06B5'"""
-
-example_mode_aes_192_ofb_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_192_ofb_datatype_IPv4_iv_None_aad_None = r"""'2A35F836'"""
-
-example_mode_aes_192_ofb_datatype_IPv6_iv_None_aad_None = r"""'27B614253D3C243D2CCE59907B4A9E72'"""
-
-example_mode_aes_192_ofb_datatype_Enum8_iv_None_aad_None = r"""'06'"""
-
-example_mode_aes_192_ofb_datatype_Enum16_iv_None_aad_None = r"""'06B7'"""
-
-example_mode_aes_256_ofb_datatype_String_iv_None_aad_None = r"""'81'"""
-
-example_mode_aes_256_ofb_datatype_FixedString_iv_None_aad_None = r"""'81'"""
-
-example_mode_aes_256_ofb_datatype_UInt8_iv_None_aad_None = r"""'B1'"""
-
-example_mode_aes_256_ofb_datatype_UInt16_iv_None_aad_None = r"""'B18E'"""
-
-example_mode_aes_256_ofb_datatype_UInt32_iv_None_aad_None = r"""'B18ECF9E'"""
-
-example_mode_aes_256_ofb_datatype_UInt64_iv_None_aad_None = r"""'B18ECF9EC7EB5F0D'"""
-
-example_mode_aes_256_ofb_datatype_Int8_iv_None_aad_None = r"""'B1'"""
-
-example_mode_aes_256_ofb_datatype_Int16_iv_None_aad_None = r"""'B18E'"""
-
-example_mode_aes_256_ofb_datatype_Int32_iv_None_aad_None = r"""'B18ECF9E'"""
-
-example_mode_aes_256_ofb_datatype_Int64_iv_None_aad_None = r"""'B18ECF9EC7EB5F0D'"""
-
-example_mode_aes_256_ofb_datatype_Float32_iv_None_aad_None = r"""'B08E4FA1'"""
-
-example_mode_aes_256_ofb_datatype_Float64_iv_None_aad_None = r"""'B08ECF9EC7EBAF32'"""
-
-example_mode_aes_256_ofb_datatype_Decimal32_iv_None_aad_None = r"""'90C0CF9E'"""
-
-example_mode_aes_256_ofb_datatype_Decimal64_iv_None_aad_None = r"""'90C0CF9EC7EB5F0D'"""
-
-example_mode_aes_256_ofb_datatype_Decimal128_iv_None_aad_None = r"""'90C0CF9EC7EB5F0D7B78C42556D668AC'"""
-
-example_mode_aes_256_ofb_datatype_UUID_iv_None_aad_None = r"""'579F7CC2C32FAF6CDBA3174F5670133C'"""
-
-example_mode_aes_256_ofb_datatype_Date_iv_None_aad_None = r"""'E6C9'"""
-
-example_mode_aes_256_ofb_datatype_DateTime_iv_None_aad_None = r"""'FE5EC3C0'"""
-
-example_mode_aes_256_ofb_datatype_DateTime64_iv_None_aad_None = r"""'9B3FC2FCA8EA5F0D'"""
-
-example_mode_aes_256_ofb_datatype_LowCardinality_iv_None_aad_None = r"""'81'"""
-
-example_mode_aes_256_ofb_datatype_Array_iv_None_aad_None = r"""'B18C'"""
-
-example_mode_aes_256_ofb_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_256_ofb_datatype_IPv4_iv_None_aad_None = r"""'9D0C2E35'"""
-
-example_mode_aes_256_ofb_datatype_IPv6_iv_None_aad_None = r"""'908FC226C7EBDAAE7B78C425FAC9E8AD'"""
-
-example_mode_aes_256_ofb_datatype_Enum8_iv_None_aad_None = r"""'B1'"""
-
-example_mode_aes_256_ofb_datatype_Enum16_iv_None_aad_None = r"""'B18E'"""
-
-example_mode_aes_128_ofb_datatype_String_iv_16_aad_None = r"""'03'"""
-
-example_mode_aes_128_ofb_datatype_FixedString_iv_16_aad_None = r"""'03'"""
-
-example_mode_aes_128_ofb_datatype_UInt8_iv_16_aad_None = r"""'33'"""
-
-example_mode_aes_128_ofb_datatype_UInt16_iv_16_aad_None = r"""'3388'"""
-
-example_mode_aes_128_ofb_datatype_UInt32_iv_16_aad_None = r"""'3388A984'"""
-
-example_mode_aes_128_ofb_datatype_UInt64_iv_16_aad_None = r"""'3388A984DD06FF58'"""
-
-example_mode_aes_128_ofb_datatype_Int8_iv_16_aad_None = r"""'33'"""
-
-example_mode_aes_128_ofb_datatype_Int16_iv_16_aad_None = r"""'3388'"""
-
-example_mode_aes_128_ofb_datatype_Int32_iv_16_aad_None = r"""'3388A984'"""
-
-example_mode_aes_128_ofb_datatype_Int64_iv_16_aad_None = r"""'3388A984DD06FF58'"""
-
-example_mode_aes_128_ofb_datatype_Float32_iv_16_aad_None = r"""'328829BB'"""
-
-example_mode_aes_128_ofb_datatype_Float64_iv_16_aad_None = r"""'3288A984DD060F67'"""
-
-example_mode_aes_128_ofb_datatype_Decimal32_iv_16_aad_None = r"""'12C6A984'"""
-
-example_mode_aes_128_ofb_datatype_Decimal64_iv_16_aad_None = r"""'12C6A984DD06FF58'"""
-
-example_mode_aes_128_ofb_datatype_Decimal128_iv_16_aad_None = r"""'12C6A984DD06FF58E93960B1DEC50F1E'"""
-
-example_mode_aes_128_ofb_datatype_UUID_iv_16_aad_None = r"""'D5991AD8D9C20F3949E2B3DBDE63748E'"""
-
-example_mode_aes_128_ofb_datatype_Date_iv_16_aad_None = r"""'64CF'"""
-
-example_mode_aes_128_ofb_datatype_DateTime_iv_16_aad_None = r"""'7C58A5DA'"""
-
-example_mode_aes_128_ofb_datatype_DateTime64_iv_16_aad_None = r"""'1939A4E6B207FF58'"""
-
-example_mode_aes_128_ofb_datatype_LowCardinality_iv_16_aad_None = r"""'03'"""
-
-example_mode_aes_128_ofb_datatype_Array_iv_16_aad_None = r"""'338A'"""
-
-example_mode_aes_128_ofb_datatype_NULL_iv_16_aad_None = r"""'\\N'"""
-
-example_mode_aes_128_ofb_datatype_IPv4_iv_16_aad_None = r"""'1F0A482F'"""
-
-example_mode_aes_128_ofb_datatype_IPv6_iv_16_aad_None = r"""'1289A43CDD067AFBE93960B172DA8F1F'"""
-
-example_mode_aes_128_ofb_datatype_Enum8_iv_16_aad_None = r"""'33'"""
-
-example_mode_aes_128_ofb_datatype_Enum16_iv_16_aad_None = r"""'3388'"""
-
-example_mode_aes_192_ofb_datatype_String_iv_16_aad_None = r"""'59'"""
-
-example_mode_aes_192_ofb_datatype_FixedString_iv_16_aad_None = r"""'59'"""
-
-example_mode_aes_192_ofb_datatype_UInt8_iv_16_aad_None = r"""'69'"""
-
-example_mode_aes_192_ofb_datatype_UInt16_iv_16_aad_None = r"""'69C7'"""
-
-example_mode_aes_192_ofb_datatype_UInt32_iv_16_aad_None = r"""'69C7E792'"""
-
-example_mode_aes_192_ofb_datatype_UInt64_iv_16_aad_None = r"""'69C7E792B71077B1'"""
-
-example_mode_aes_192_ofb_datatype_Int8_iv_16_aad_None = r"""'69'"""
-
-example_mode_aes_192_ofb_datatype_Int16_iv_16_aad_None = r"""'69C7'"""
-
-example_mode_aes_192_ofb_datatype_Int32_iv_16_aad_None = r"""'69C7E792'"""
-
-example_mode_aes_192_ofb_datatype_Int64_iv_16_aad_None = r"""'69C7E792B71077B1'"""
-
-example_mode_aes_192_ofb_datatype_Float32_iv_16_aad_None = r"""'68C767AD'"""
-
-example_mode_aes_192_ofb_datatype_Float64_iv_16_aad_None = r"""'68C7E792B710878E'"""
-
-example_mode_aes_192_ofb_datatype_Decimal32_iv_16_aad_None = r"""'4889E792'"""
-
-example_mode_aes_192_ofb_datatype_Decimal64_iv_16_aad_None = r"""'4889E792B71077B1'"""
-
-example_mode_aes_192_ofb_datatype_Decimal128_iv_16_aad_None = r"""'4889E792B71077B18446050EBFD861B5'"""
-
-example_mode_aes_192_ofb_datatype_UUID_iv_16_aad_None = r"""'8FD654CEB3D487D0249DD664BF7E1A25'"""
-
-example_mode_aes_192_ofb_datatype_Date_iv_16_aad_None = r"""'3E80'"""
-
-example_mode_aes_192_ofb_datatype_DateTime_iv_16_aad_None = r"""'2617EBCC'"""
-
-example_mode_aes_192_ofb_datatype_DateTime64_iv_16_aad_None = r"""'4376EAF0D81177B1'"""
-
-example_mode_aes_192_ofb_datatype_LowCardinality_iv_16_aad_None = r"""'59'"""
-
-example_mode_aes_192_ofb_datatype_Array_iv_16_aad_None = r"""'69C5'"""
-
-example_mode_aes_192_ofb_datatype_NULL_iv_16_aad_None = r"""'\\N'"""
-
-example_mode_aes_192_ofb_datatype_IPv4_iv_16_aad_None = r"""'45450639'"""
-
-example_mode_aes_192_ofb_datatype_IPv6_iv_16_aad_None = r"""'48C6EA2AB710F2128446050E13C7E1B4'"""
-
-example_mode_aes_192_ofb_datatype_Enum8_iv_16_aad_None = r"""'69'"""
-
-example_mode_aes_192_ofb_datatype_Enum16_iv_16_aad_None = r"""'69C7'"""
-
-example_mode_aes_256_ofb_datatype_String_iv_16_aad_None = r"""'58'"""
-
-example_mode_aes_256_ofb_datatype_FixedString_iv_16_aad_None = r"""'58'"""
-
-example_mode_aes_256_ofb_datatype_UInt8_iv_16_aad_None = r"""'68'"""
-
-example_mode_aes_256_ofb_datatype_UInt16_iv_16_aad_None = r"""'6858'"""
-
-example_mode_aes_256_ofb_datatype_UInt32_iv_16_aad_None = r"""'68588817'"""
-
-example_mode_aes_256_ofb_datatype_UInt64_iv_16_aad_None = r"""'685888173CDE4488'"""
-
-example_mode_aes_256_ofb_datatype_Int8_iv_16_aad_None = r"""'68'"""
-
-example_mode_aes_256_ofb_datatype_Int16_iv_16_aad_None = r"""'6858'"""
-
-example_mode_aes_256_ofb_datatype_Int32_iv_16_aad_None = r"""'68588817'"""
-
-example_mode_aes_256_ofb_datatype_Int64_iv_16_aad_None = r"""'685888173CDE4488'"""
-
-example_mode_aes_256_ofb_datatype_Float32_iv_16_aad_None = r"""'69580828'"""
-
-example_mode_aes_256_ofb_datatype_Float64_iv_16_aad_None = r"""'695888173CDEB4B7'"""
-
-example_mode_aes_256_ofb_datatype_Decimal32_iv_16_aad_None = r"""'49168817'"""
-
-example_mode_aes_256_ofb_datatype_Decimal64_iv_16_aad_None = r"""'491688173CDE4488'"""
-
-example_mode_aes_256_ofb_datatype_Decimal128_iv_16_aad_None = r"""'491688173CDE448870E043A7733CC726'"""
-
-example_mode_aes_256_ofb_datatype_UUID_iv_16_aad_None = r"""'8E493B4B381AB4E9D03B90CD739ABCB6'"""
-
-example_mode_aes_256_ofb_datatype_Date_iv_16_aad_None = r"""'3F1F'"""
-
-example_mode_aes_256_ofb_datatype_DateTime_iv_16_aad_None = r"""'27888449'"""
-
-example_mode_aes_256_ofb_datatype_DateTime64_iv_16_aad_None = r"""'42E9857553DF4488'"""
-
-example_mode_aes_256_ofb_datatype_LowCardinality_iv_16_aad_None = r"""'58'"""
-
-example_mode_aes_256_ofb_datatype_Array_iv_16_aad_None = r"""'685A'"""
-
-example_mode_aes_256_ofb_datatype_NULL_iv_16_aad_None = r"""'\\N'"""
-
-example_mode_aes_256_ofb_datatype_IPv4_iv_16_aad_None = r"""'44DA69BC'"""
-
-example_mode_aes_256_ofb_datatype_IPv6_iv_16_aad_None = r"""'495985AF3CDEC12B70E043A7DF234727'"""
-
-example_mode_aes_256_ofb_datatype_Enum8_iv_16_aad_None = r"""'68'"""
-
-example_mode_aes_256_ofb_datatype_Enum16_iv_16_aad_None = r"""'6858'"""
-
-example_mode_aes_128_gcm_datatype_String_iv_12_aad_None = r"""'DC48B85D412AEF42C46DA18E25139D5D9D'"""
-
-example_mode_aes_128_gcm_datatype_FixedString_iv_12_aad_None = r"""'DC48B85D412AEF42C46DA18E25139D5D9D'"""
-
-example_mode_aes_128_gcm_datatype_UInt8_iv_12_aad_None = r"""'EC55C7254FC59C53DDE89F0AF034F08A19'"""
-
-example_mode_aes_128_gcm_datatype_UInt16_iv_12_aad_None = r"""'EC9644C4CEFA3BB71CD48C619B03BD238C18'"""
-
-example_mode_aes_128_gcm_datatype_UInt32_iv_12_aad_None = r"""'EC96C142DE5B4B621603E2ADD041DBAEB3F54F50'"""
-
-example_mode_aes_128_gcm_datatype_UInt64_iv_12_aad_None = r"""'EC96C142F4FF6F21DA0515DBB392E4C83187679A10F9D879'"""
-
-example_mode_aes_128_gcm_datatype_Int8_iv_12_aad_None = r"""'EC55C7254FC59C53DDE89F0AF034F08A19'"""
-
-example_mode_aes_128_gcm_datatype_Int16_iv_12_aad_None = r"""'EC9644C4CEFA3BB71CD48C619B03BD238C18'"""
-
-example_mode_aes_128_gcm_datatype_Int32_iv_12_aad_None = r"""'EC96C142DE5B4B621603E2ADD041DBAEB3F54F50'"""
-
-example_mode_aes_128_gcm_datatype_Int64_iv_12_aad_None = r"""'EC96C142F4FF6F21DA0515DBB392E4C83187679A10F9D879'"""
-
-example_mode_aes_128_gcm_datatype_Float32_iv_12_aad_None = r"""'ED96417D9A89D5DA7B2DA96F78D0D545BD724061'"""
-
-example_mode_aes_128_gcm_datatype_Float64_iv_12_aad_None = r"""'ED96C142F4FF9F1E36E4396725C81E2B56D2E0A42CB04CE9'"""
-
-example_mode_aes_128_gcm_datatype_Decimal32_iv_12_aad_None = r"""'CDD8C142960BD83213972E95DB26FFEC37308C56'"""
-
-example_mode_aes_128_gcm_datatype_Decimal64_iv_12_aad_None = r"""'CDD8C142F4FF6F219255868BB60628F03AE043D8943C1B7F'"""
-
-example_mode_aes_128_gcm_datatype_Decimal128_iv_12_aad_None = r"""'CDD8C142F4FF6F214AC2960E7EA36A6B1B1FC500659A9E81A843F13DCFC70751'"""
-
-example_mode_aes_128_gcm_datatype_UUID_iv_12_aad_None = r"""'0A87721EF03B9F40EA1945647E0511FB0552FE1E5264499B02AE50562A94AFF7'"""
-
-example_mode_aes_128_gcm_datatype_Date_iv_12_aad_None = r"""'BBD12669328AE5725A634A005E5B2C4BA877'"""
-
-example_mode_aes_128_gcm_datatype_DateTime_iv_12_aad_None = r"""'A346CD1C097FB5A48C84628E9C0C9F3BF4E3CBB2'"""
-
-example_mode_aes_128_gcm_datatype_DateTime64_iv_12_aad_None = r"""'C627CC209BFE6F21638D7F1465C11D12578CF38254273DC9'"""
-
-example_mode_aes_128_gcm_datatype_LowCardinality_iv_12_aad_None = r"""'DC48B85D412AEF42C46DA18E25139D5D9D'"""
-
-example_mode_aes_128_gcm_datatype_Array_iv_12_aad_None = r"""'EC94283AABA0C4FC46F56D71F9B3CB40288E'"""
-
-example_mode_aes_128_gcm_datatype_NULL_iv_12_aad_None = r"""'\\N'"""
-
-example_mode_aes_128_gcm_datatype_IPv4_iv_12_aad_None = r"""'C01420E9B1BBD6ED16DC1CC0ED7AE9773CD72297'"""
-
-example_mode_aes_128_gcm_datatype_IPv6_iv_12_aad_None = r"""'CD97CCFAF4FFEA824AC2960ED2BCEA6AC9427AAD6328E977BF356C8AEF93B556'"""
-
-example_mode_aes_128_gcm_datatype_Enum8_iv_12_aad_None = r"""'EC55C7254FC59C53DDE89F0AF034F08A19'"""
-
-example_mode_aes_128_gcm_datatype_Enum16_iv_12_aad_None = r"""'EC9644C4CEFA3BB71CD48C619B03BD238C18'"""
-
-example_mode_aes_192_gcm_datatype_String_iv_12_aad_None = r"""'7B34E3F4BAFCD2F3D493F843FFEBF9A415'"""
-
-example_mode_aes_192_gcm_datatype_FixedString_iv_12_aad_None = r"""'7B34E3F4BAFCD2F3D493F843FFEBF9A415'"""
-
-example_mode_aes_192_gcm_datatype_UInt8_iv_12_aad_None = r"""'4B5F8852220B8F5659FDE6C603D1C7E127'"""
-
-example_mode_aes_192_gcm_datatype_UInt16_iv_12_aad_None = r"""'4BFA728CD0043E08485EF39EEFEF8554BDD1'"""
-
-example_mode_aes_192_gcm_datatype_UInt32_iv_12_aad_None = r"""'4BFAA6C499D3637CF257889C690120FA80FBDBFD'"""
-
-example_mode_aes_192_gcm_datatype_UInt64_iv_12_aad_None = r"""'4BFAA6C467061FE32600E6AE21DD8A6D7AA0A38D2BE318EE'"""
-
-example_mode_aes_192_gcm_datatype_Int8_iv_12_aad_None = r"""'4B5F8852220B8F5659FDE6C603D1C7E127'"""
-
-example_mode_aes_192_gcm_datatype_Int16_iv_12_aad_None = r"""'4BFA728CD0043E08485EF39EEFEF8554BDD1'"""
-
-example_mode_aes_192_gcm_datatype_Int32_iv_12_aad_None = r"""'4BFAA6C499D3637CF257889C690120FA80FBDBFD'"""
-
-example_mode_aes_192_gcm_datatype_Int64_iv_12_aad_None = r"""'4BFAA6C467061FE32600E6AE21DD8A6D7AA0A38D2BE318EE'"""
-
-example_mode_aes_192_gcm_datatype_Float32_iv_12_aad_None = r"""'4AFA26FB812573A4DCCCFFB53F91E180A3F6EB95'"""
-
-example_mode_aes_192_gcm_datatype_Float64_iv_12_aad_None = r"""'4AFAA6C46706EFDC2968FA31495521544C0E792959D3DBA7'"""
-
-example_mode_aes_192_gcm_datatype_Decimal32_iv_12_aad_None = r"""'6AB4A6C4382BD5F8E4915BD5701D917BA8651BCA'"""
-
-example_mode_aes_192_gcm_datatype_Decimal64_iv_12_aad_None = r"""'6AB4A6C467061FE387F8502A371B592463BC120C037DD8D9'"""
-
-example_mode_aes_192_gcm_datatype_Decimal128_iv_12_aad_None = r"""'6AB4A6C467061FE343593C80B73515B94130370E40D09BDBE9EDB5BEAF29C541'"""
-
-example_mode_aes_192_gcm_datatype_UUID_iv_12_aad_None = r"""'ADEB159863C2EF82E382EFEAB7936E296A91D29B6A49269870CC866604C82451'"""
-
-example_mode_aes_192_gcm_datatype_Date_iv_12_aad_None = r"""'1CBD949DFC326906B13FCB565C1B28516877'"""
-
-example_mode_aes_192_gcm_datatype_DateTime_iv_12_aad_None = r"""'042AAA9AB3B5BBD234DF77B8C35BD4EBF561AEC0'"""
-
-example_mode_aes_192_gcm_datatype_DateTime64_iv_12_aad_None = r"""'614BABA608071FE304B3939091C0CFC91D1371D5FBD3F6BE'"""
-
-example_mode_aes_192_gcm_datatype_LowCardinality_iv_12_aad_None = r"""'7B34E3F4BAFCD2F3D493F843FFEBF9A415'"""
-
-example_mode_aes_192_gcm_datatype_Array_iv_12_aad_None = r"""'4BF887E38B2870FDEECD6305AEA010298096'"""
-
-example_mode_aes_192_gcm_datatype_NULL_iv_12_aad_None = r"""'\\N'"""
-
-example_mode_aes_192_gcm_datatype_IPv4_iv_12_aad_None = r"""'6778476F9B3687FD4D022727F4641E697D35D8D5'"""
-
-example_mode_aes_192_gcm_datatype_IPv6_iv_12_aad_None = r"""'6AFBAB7C67069A4043593C801B2A95B81CF6DF4E6D63A84A0DF7939A3FBE5B2D'"""
-
-example_mode_aes_192_gcm_datatype_Enum8_iv_12_aad_None = r"""'4B5F8852220B8F5659FDE6C603D1C7E127'"""
-
-example_mode_aes_192_gcm_datatype_Enum16_iv_12_aad_None = r"""'4BFA728CD0043E08485EF39EEFEF8554BDD1'"""
-
-example_mode_aes_256_gcm_datatype_String_iv_12_aad_None = r"""'67B83EFC31C169D7613D6881E954F624C2'"""
-
-example_mode_aes_256_gcm_datatype_FixedString_iv_12_aad_None = r"""'67B83EFC31C169D7613D6881E954F624C2'"""
-
-example_mode_aes_256_gcm_datatype_UInt8_iv_12_aad_None = r"""'574B67F06530273DD181658D384D73A2F5'"""
-
-example_mode_aes_256_gcm_datatype_UInt16_iv_12_aad_None = r"""'57CBC5BA7DF134BBAE0153E139EB9D7B8D18'"""
-
-example_mode_aes_256_gcm_datatype_UInt32_iv_12_aad_None = r"""'57CB6C3A286A4C6BDCEBF8ECEE345F12B5F44729'"""
-
-example_mode_aes_256_gcm_datatype_UInt64_iv_12_aad_None = r"""'57CB6C3AFC8427B9E3A61ABE0A227F1C2ADB2694F324393D'"""
-
-example_mode_aes_256_gcm_datatype_Int8_iv_12_aad_None = r"""'574B67F06530273DD181658D384D73A2F5'"""
-
-example_mode_aes_256_gcm_datatype_Int16_iv_12_aad_None = r"""'57CBC5BA7DF134BBAE0153E139EB9D7B8D18'"""
-
-example_mode_aes_256_gcm_datatype_Int32_iv_12_aad_None = r"""'57CB6C3A286A4C6BDCEBF8ECEE345F12B5F44729'"""
-
-example_mode_aes_256_gcm_datatype_Int64_iv_12_aad_None = r"""'57CB6C3AFC8427B9E3A61ABE0A227F1C2ADB2694F324393D'"""
-
-example_mode_aes_256_gcm_datatype_Float32_iv_12_aad_None = r"""'56CBEC055F35D9E71D5AA0252DB60716A99B1CA2'"""
-
-example_mode_aes_256_gcm_datatype_Float64_iv_12_aad_None = r"""'56CB6C3AFC84D786DF3A9796E0FDCECFCBBC26274A60F542'"""
-
-example_mode_aes_256_gcm_datatype_Decimal32_iv_12_aad_None = r"""'76856C3AE585D8FCE599B3C2E0F077FAD5FFF7D4'"""
-
-example_mode_aes_256_gcm_datatype_Decimal64_iv_12_aad_None = r"""'76856C3AFC8427B92E498E2933503432241F0E7C932F89C0'"""
-
-example_mode_aes_256_gcm_datatype_Decimal128_iv_12_aad_None = r"""'76856C3AFC8427B90E79078689172F14CAA5CA7BDC5F7FCD915CAE4EC302FF1C'"""
-
-example_mode_aes_256_gcm_datatype_UUID_iv_12_aad_None = r"""'B1DADF66F840D7D8AEA2D4EC89B1548437C22BB5B8D92A3A139ACED61DB3F2B3'"""
-
-example_mode_aes_256_gcm_datatype_Date_iv_12_aad_None = r"""'008CFC6AFC8484AADA010876EF4686BC3528'"""
-
-example_mode_aes_256_gcm_datatype_DateTime_iv_12_aad_None = r"""'181B606489B8E56FEB8D9950EAE27205E36C94FB'"""
-
-example_mode_aes_256_gcm_datatype_DateTime64_iv_12_aad_None = r"""'7D7A6158938527B9F938A05622B5957BD801AE303908AD22'"""
-
-example_mode_aes_256_gcm_datatype_LowCardinality_iv_12_aad_None = r"""'67B83EFC31C169D7613D6881E954F624C2'"""
-
-example_mode_aes_256_gcm_datatype_Array_iv_12_aad_None = r"""'57C908D31B11B2CE494A61EC468B149A9D77'"""
-
-example_mode_aes_256_gcm_datatype_NULL_iv_12_aad_None = r"""'\\N'"""
-
-example_mode_aes_256_gcm_datatype_IPv4_iv_12_aad_None = r"""'7B498D91B274D5D6748C43E4345552318BD05DA6'"""
-
-example_mode_aes_256_gcm_datatype_IPv6_iv_12_aad_None = r"""'76CA6182FC84A21A0E7907862508AF15CCE4089698265E4B0656598079CE56CC'"""
-
-example_mode_aes_256_gcm_datatype_Enum8_iv_12_aad_None = r"""'574B67F06530273DD181658D384D73A2F5'"""
-
-example_mode_aes_256_gcm_datatype_Enum16_iv_12_aad_None = r"""'57CBC5BA7DF134BBAE0153E139EB9D7B8D18'"""
-
-example_mode_aes_128_gcm_datatype_String_iv_12_aad_True = r"""'DCFAF1088D33EF99F1D06E3D14F265FD41'"""
-
-example_mode_aes_128_gcm_datatype_FixedString_iv_12_aad_True = r"""'DCFAF1088D33EF99F1D06E3D14F265FD41'"""
-
-example_mode_aes_128_gcm_datatype_UInt8_iv_12_aad_True = r"""'ECE78E7083DC9C88E85550B9C1D5082AC5'"""
-
-example_mode_aes_128_gcm_datatype_UInt16_iv_12_aad_True = r"""'EC96F68D9B3622B7C7E131AE28325CDB2CC4'"""
-
-example_mode_aes_128_gcm_datatype_UInt32_iv_12_aad_True = r"""'EC96C1426C121EAE0F0339986D8E689F520DEF8C'"""
-
-example_mode_aes_128_gcm_datatype_UInt64_iv_12_aad_True = r"""'EC96C142F4FF6F21684C4017AA923FFD8C48D4ABF10178A5'"""
-
-example_mode_aes_128_gcm_datatype_Int8_iv_12_aad_True = r"""'ECE78E7083DC9C88E85550B9C1D5082AC5'"""
-
-example_mode_aes_128_gcm_datatype_Int16_iv_12_aad_True = r"""'EC96F68D9B3622B7C7E131AE28325CDB2CC4'"""
-
-example_mode_aes_128_gcm_datatype_Int32_iv_12_aad_True = r"""'EC96C1426C121EAE0F0339986D8E689F520DEF8C'"""
-
-example_mode_aes_128_gcm_datatype_Int64_iv_12_aad_True = r"""'EC96C142F4FF6F21684C4017AA923FFD8C48D4ABF10178A5'"""
-
-example_mode_aes_128_gcm_datatype_Float32_iv_12_aad_True = r"""'ED96417D28C08016622D725AC51F66745C8AE0BD'"""
-
-example_mode_aes_128_gcm_datatype_Float64_iv_12_aad_True = r"""'ED96C142F4FF9F1E84AD6CAB3CC8C51EEB1D5395CD48EC35'"""
-
-example_mode_aes_128_gcm_datatype_Decimal32_iv_12_aad_True = r"""'CDD8C14224428DFE0A97F5A066E94CDDD6C82C8A'"""
-
-example_mode_aes_128_gcm_datatype_Decimal64_iv_12_aad_True = r"""'CDD8C142F4FF6F21201CD347AF06F3C5872FF0E975C4BBA3'"""
-
-example_mode_aes_128_gcm_datatype_Decimal128_iv_12_aad_True = r"""'CDD8C142F4FF6F214AC2960E7EA36A6BA95690CC7C9A45B4158C420C2E3FA78D'"""
-
-example_mode_aes_128_gcm_datatype_UUID_iv_12_aad_True = r"""'0A87721EF03B9F40EA1945647E0511FBB71BABD24B6492AEBF61E367CB6C0F2B'"""
-
-example_mode_aes_128_gcm_datatype_Date_iv_12_aad_True = r"""'BBD194206746FC728156F7CFED6ACDB308AB'"""
-
-example_mode_aes_128_gcm_datatype_DateTime_iv_12_aad_True = r"""'A346CD1CBB36E0689584B9BB21C32C0A151B6B6E'"""
-
-example_mode_aes_128_gcm_datatype_DateTime64_iv_12_aad_True = r"""'C627CC209BFE6F21D1C42AD87CC1C627EA4340B3B5DF9D15'"""
-
-example_mode_aes_128_gcm_datatype_LowCardinality_iv_12_aad_True = r"""'DCFAF1088D33EF99F1D06E3D14F265FD41'"""
-
-example_mode_aes_128_gcm_datatype_Array_iv_12_aad_True = r"""'EC949A73FE6CDDFC9DC0D0BE4A822AB88852'"""
-
-example_mode_aes_128_gcm_datatype_NULL_iv_12_aad_True = r"""'\\N'"""
-
-example_mode_aes_128_gcm_datatype_IPv4_iv_12_aad_True = r"""'C01420E903F283210FDCC7F550B55A46DD2F824B'"""
-
-example_mode_aes_128_gcm_datatype_IPv6_iv_12_aad_True = r"""'CD97CCFAF4FFEA824AC2960ED2BCEA6A7B0B2F617A28324202FADFBB0E6B158A'"""
-
-example_mode_aes_128_gcm_datatype_Enum8_iv_12_aad_True = r"""'ECE78E7083DC9C88E85550B9C1D5082AC5'"""
-
-example_mode_aes_128_gcm_datatype_Enum16_iv_12_aad_True = r"""'EC96F68D9B3622B7C7E131AE28325CDB2CC4'"""
-
-example_mode_aes_192_gcm_datatype_String_iv_12_aad_True = r"""'7BB72D91D66E3C93B34FBAFF92526E1A0E'"""
-
-example_mode_aes_192_gcm_datatype_FixedString_iv_12_aad_True = r"""'7BB72D91D66E3C93B34FBAFF92526E1A0E'"""
-
-example_mode_aes_192_gcm_datatype_UInt8_iv_12_aad_True = r"""'4BDC46374E9961363E21A47A6E68505F3C'"""
-
-example_mode_aes_192_gcm_datatype_UInt16_iv_12_aad_True = r"""'4BFAF142B568ACE628392FDC53823CC303CA'"""
-
-example_mode_aes_192_gcm_datatype_UInt32_iv_12_aad_True = r"""'4BFAA6C41A1D061060B9E8FBB5439C97396C65E6'"""
-
-example_mode_aes_192_gcm_datatype_UInt64_iv_12_aad_True = r"""'4BFAA6C467061FE3A5CE83C2B333EA0AA6E21FE09274A6F5'"""
-
-example_mode_aes_192_gcm_datatype_Int8_iv_12_aad_True = r"""'4BDC46374E9961363E21A47A6E68505F3C'"""
-
-example_mode_aes_192_gcm_datatype_Int16_iv_12_aad_True = r"""'4BFAF142B568ACE628392FDC53823CC303CA'"""
-
-example_mode_aes_192_gcm_datatype_Int32_iv_12_aad_True = r"""'4BFAA6C41A1D061060B9E8FBB5439C97396C65E6'"""
-
-example_mode_aes_192_gcm_datatype_Int64_iv_12_aad_True = r"""'4BFAA6C467061FE3A5CE83C2B333EA0AA6E21FE09274A6F5'"""
-
-example_mode_aes_192_gcm_datatype_Float32_iv_12_aad_True = r"""'4AFA26FB02EB16C84E229FD2E3D35DED1A61558E'"""
-
-example_mode_aes_192_gcm_datatype_Float64_iv_12_aad_True = r"""'4AFAA6C46706EFDCAAA69F5DDBBB4133904CC544E04465BC'"""
-
-example_mode_aes_192_gcm_datatype_Decimal32_iv_12_aad_True = r"""'6AB4A6C4BBE5B094767F3BB2AC5F2D1611F2A5D1'"""
-
-example_mode_aes_192_gcm_datatype_Decimal64_iv_12_aad_True = r"""'6AB4A6C467061FE304363546A5F53943BFFEAE61BAEA66C2'"""
-
-example_mode_aes_192_gcm_datatype_Decimal128_iv_12_aad_True = r"""'6AB4A6C467061FE343593C80B73515B9C2FE5262D23EFBBC35AF09D316BE7B5A'"""
-
-example_mode_aes_192_gcm_datatype_UUID_iv_12_aad_True = r"""'ADEB159863C2EF82E382EFEAB7936E29E95FB7F7F8A746FFAC8E3A0BBD5F9A4A'"""
-
-example_mode_aes_192_gcm_datatype_Date_iv_12_aad_True = r"""'1CBD1753995EFBE8D1581714E07691C6D66C'"""
-
-example_mode_aes_192_gcm_datatype_DateTime_iv_12_aad_True = r"""'042AAA9A307BDEBEA63117DF1F1968864CF610DB'"""
-
-example_mode_aes_192_gcm_datatype_DateTime64_iv_12_aad_True = r"""'614BABA608071FE3877DF6FC032EAFAEC151CDB8424448A5'"""
-
-example_mode_aes_192_gcm_datatype_LowCardinality_iv_12_aad_True = r"""'7BB72D91D66E3C93B34FBAFF92526E1A0E'"""
-
-example_mode_aes_192_gcm_datatype_Array_iv_12_aad_True = r"""'4BF8042DEE44E2138EAABF4712CDA9BE3E8D'"""
-
-example_mode_aes_192_gcm_datatype_NULL_iv_12_aad_True = r"""'\\N'"""
-
-example_mode_aes_192_gcm_datatype_IPv4_iv_12_aad_True = r"""'6778476F18F8E291DFEC47402826A204C4A266CE'"""
-
-example_mode_aes_192_gcm_datatype_IPv6_iv_12_aad_True = r"""'6AFBAB7C67069A4043593C801B2A95B89F38BA22FF8DC82DD1B52FF78629E536'"""
-
-example_mode_aes_192_gcm_datatype_Enum8_iv_12_aad_True = r"""'4BDC46374E9961363E21A47A6E68505F3C'"""
-
-example_mode_aes_192_gcm_datatype_Enum16_iv_12_aad_True = r"""'4BFAF142B568ACE628392FDC53823CC303CA'"""
-
-example_mode_aes_256_gcm_datatype_String_iv_12_aad_True = r"""'672AAAA73DCD5DEBC924C34E8F6E2678F8'"""
-
-example_mode_aes_256_gcm_datatype_FixedString_iv_12_aad_True = r"""'672AAAA73DCD5DEBC924C34E8F6E2678F8'"""
-
-example_mode_aes_256_gcm_datatype_UInt8_iv_12_aad_True = r"""'57D9F3AB693C13017998CE425E77A3FECF'"""
-
-example_mode_aes_256_gcm_datatype_UInt16_iv_12_aad_True = r"""'57CB572E26FD388F92A94A4AF68DA7ABD122'"""
-
-example_mode_aes_256_gcm_datatype_UInt32_iv_12_aad_True = r"""'57CB6C3ABAFE1767D0DFC444F79F90748F241B13'"""
-
-example_mode_aes_256_gcm_datatype_UInt64_iv_12_aad_True = r"""'57CB6C3AFC8427B9713241B2061643B43370E9F2C9F46507'"""
-
-example_mode_aes_256_gcm_datatype_Int8_iv_12_aad_True = r"""'57D9F3AB693C13017998CE425E77A3FECF'"""
-
-example_mode_aes_256_gcm_datatype_Int16_iv_12_aad_True = r"""'57CB572E26FD388F92A94A4AF68DA7ABD122'"""
-
-example_mode_aes_256_gcm_datatype_Int32_iv_12_aad_True = r"""'57CB6C3ABAFE1767D0DFC444F79F90748F241B13'"""
-
-example_mode_aes_256_gcm_datatype_Int64_iv_12_aad_True = r"""'57CB6C3AFC8427B9713241B2061643B43370E9F2C9F46507'"""
-
-example_mode_aes_256_gcm_datatype_Float32_iv_12_aad_True = r"""'56CBEC05CDA182EB116E9C8D341DC870934B4098'"""
-
-example_mode_aes_256_gcm_datatype_Float64_iv_12_aad_True = r"""'56CB6C3AFC84D7864DAECC9AECC9F267D217E94170B0A978'"""
-
-example_mode_aes_256_gcm_datatype_Decimal32_iv_12_aad_True = r"""'76856C3A771183F0E9AD8F6AF95BB89CEF2FABEE'"""
-
-example_mode_aes_256_gcm_datatype_Decimal64_iv_12_aad_True = r"""'76856C3AFC8427B9BCDDD5253F64089A3DB4C11AA9FFD5FA'"""
-
-example_mode_aes_256_gcm_datatype_Decimal128_iv_12_aad_True = r"""'76856C3AFC8427B90E79078689172F1458319177D06B436588F76128F9D2A326'"""
-
-example_mode_aes_256_gcm_datatype_UUID_iv_12_aad_True = r"""'B1DADF66F840D7D8AEA2D4EC89B15484A55670B9B4ED16920A3101B02763AE89'"""
-
-example_mode_aes_256_gcm_datatype_Date_iv_12_aad_True = r"""'008C6EFEA788889EE6A911DD2020BC6C6912'"""
-
-example_mode_aes_256_gcm_datatype_DateTime_iv_12_aad_True = r"""'181B60641B2CBE63E7B9A5F8F349BD63D9BCC8C1'"""
-
-example_mode_aes_256_gcm_datatype_DateTime64_iv_12_aad_True = r"""'7D7A6158938527B96BACFB5A2E81A9D3C1AA615603D8F118'"""
-
-example_mode_aes_256_gcm_datatype_LowCardinality_iv_12_aad_True = r"""'672AAAA73DCD5DEBC924C34E8F6E2678F8'"""
-
-example_mode_aes_256_gcm_datatype_Array_iv_12_aad_True = r"""'57C99A47401DBEFA75E2784789ED2E4AC14D'"""
-
-example_mode_aes_256_gcm_datatype_NULL_iv_12_aad_True = r"""'\\N'"""
-
-example_mode_aes_256_gcm_datatype_IPv4_iv_12_aad_True = r"""'7B498D9120E08EDA78B87F4C2DFE9D57B100019C'"""
-
-example_mode_aes_256_gcm_datatype_IPv6_iv_12_aad_True = r"""'76CA6182FC84A21A0E7907862508AF155E70539A941262E31FFD96E6431E0AF6'"""
-
-example_mode_aes_256_gcm_datatype_Enum8_iv_12_aad_True = r"""'57D9F3AB693C13017998CE425E77A3FECF'"""
-
-example_mode_aes_256_gcm_datatype_Enum16_iv_12_aad_True = r"""'57CB572E26FD388F92A94A4AF68DA7ABD122'"""
-
-example_mode_aes_128_ctr_datatype_String_iv_None_aad_None = r"""'21'"""
-
-example_mode_aes_128_ctr_datatype_FixedString_iv_None_aad_None = r"""'21'"""
-
-example_mode_aes_128_ctr_datatype_UInt8_iv_None_aad_None = r"""'11'"""
-
-example_mode_aes_128_ctr_datatype_UInt16_iv_None_aad_None = r"""'11DF'"""
-
-example_mode_aes_128_ctr_datatype_UInt32_iv_None_aad_None = r"""'11DFC1B5'"""
-
-example_mode_aes_128_ctr_datatype_UInt64_iv_None_aad_None = r"""'11DFC1B5F66CFD6A'"""
-
-example_mode_aes_128_ctr_datatype_Int8_iv_None_aad_None = r"""'11'"""
-
-example_mode_aes_128_ctr_datatype_Int16_iv_None_aad_None = r"""'11DF'"""
-
-example_mode_aes_128_ctr_datatype_Int32_iv_None_aad_None = r"""'11DFC1B5'"""
-
-example_mode_aes_128_ctr_datatype_Int64_iv_None_aad_None = r"""'11DFC1B5F66CFD6A'"""
-
-example_mode_aes_128_ctr_datatype_Float32_iv_None_aad_None = r"""'10DF418A'"""
-
-example_mode_aes_128_ctr_datatype_Float64_iv_None_aad_None = r"""'10DFC1B5F66C0D55'"""
-
-example_mode_aes_128_ctr_datatype_Decimal32_iv_None_aad_None = r"""'3091C1B5'"""
-
-example_mode_aes_128_ctr_datatype_Decimal64_iv_None_aad_None = r"""'3091C1B5F66CFD6A'"""
-
-example_mode_aes_128_ctr_datatype_Decimal128_iv_None_aad_None = r"""'3091C1B5F66CFD6A1DC46D66907BEEB1'"""
-
-example_mode_aes_128_ctr_datatype_UUID_iv_None_aad_None = r"""'F7CE72E9F2A80D0BBD1FBE0C90DD9521'"""
-
-example_mode_aes_128_ctr_datatype_Date_iv_None_aad_None = r"""'4698'"""
-
-example_mode_aes_128_ctr_datatype_DateTime_iv_None_aad_None = r"""'5E0FCDEB'"""
-
-example_mode_aes_128_ctr_datatype_DateTime64_iv_None_aad_None = r"""'3B6ECCD7996DFD6A'"""
-
-example_mode_aes_128_ctr_datatype_LowCardinality_iv_None_aad_None = r"""'21'"""
-
-example_mode_aes_128_ctr_datatype_Array_iv_None_aad_None = r"""'11DD'"""
-
-example_mode_aes_128_ctr_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_128_ctr_datatype_IPv4_iv_None_aad_None = r"""'3D5D201E'"""
-
-example_mode_aes_128_ctr_datatype_IPv6_iv_None_aad_None = r"""'30DECC0DF66C78C91DC46D663C646EB0'"""
-
-example_mode_aes_128_ctr_datatype_Enum8_iv_None_aad_None = r"""'11'"""
-
-example_mode_aes_128_ctr_datatype_Enum16_iv_None_aad_None = r"""'11DF'"""
-
-example_mode_aes_192_ctr_datatype_String_iv_None_aad_None = r"""'36'"""
-
-example_mode_aes_192_ctr_datatype_FixedString_iv_None_aad_None = r"""'36'"""
-
-example_mode_aes_192_ctr_datatype_UInt8_iv_None_aad_None = r"""'06'"""
-
-example_mode_aes_192_ctr_datatype_UInt16_iv_None_aad_None = r"""'06B7'"""
-
-example_mode_aes_192_ctr_datatype_UInt32_iv_None_aad_None = r"""'06B7199D'"""
-
-example_mode_aes_192_ctr_datatype_UInt64_iv_None_aad_None = r"""'06B7199D3D3CA19E'"""
-
-example_mode_aes_192_ctr_datatype_Int8_iv_None_aad_None = r"""'06'"""
-
-example_mode_aes_192_ctr_datatype_Int16_iv_None_aad_None = r"""'06B7'"""
-
-example_mode_aes_192_ctr_datatype_Int32_iv_None_aad_None = r"""'06B7199D'"""
-
-example_mode_aes_192_ctr_datatype_Int64_iv_None_aad_None = r"""'06B7199D3D3CA19E'"""
-
-example_mode_aes_192_ctr_datatype_Float32_iv_None_aad_None = r"""'07B799A2'"""
-
-example_mode_aes_192_ctr_datatype_Float64_iv_None_aad_None = r"""'07B7199D3D3C51A1'"""
-
-example_mode_aes_192_ctr_datatype_Decimal32_iv_None_aad_None = r"""'27F9199D'"""
-
-example_mode_aes_192_ctr_datatype_Decimal64_iv_None_aad_None = r"""'27F9199D3D3CA19E'"""
-
-example_mode_aes_192_ctr_datatype_Decimal128_iv_None_aad_None = r"""'27F9199D3D3CA19E2CCE5990D7551E73'"""
-
-example_mode_aes_192_ctr_datatype_UUID_iv_None_aad_None = r"""'E0A6AAC139F851FF8C158AFAD7F365E3'"""
-
-example_mode_aes_192_ctr_datatype_Date_iv_None_aad_None = r"""'51F0'"""
-
-example_mode_aes_192_ctr_datatype_DateTime_iv_None_aad_None = r"""'496715C3'"""
-
-example_mode_aes_192_ctr_datatype_DateTime64_iv_None_aad_None = r"""'2C0614FF523DA19E'"""
-
-example_mode_aes_192_ctr_datatype_LowCardinality_iv_None_aad_None = r"""'36'"""
-
-example_mode_aes_192_ctr_datatype_Array_iv_None_aad_None = r"""'06B5'"""
-
-example_mode_aes_192_ctr_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_192_ctr_datatype_IPv4_iv_None_aad_None = r"""'2A35F836'"""
-
-example_mode_aes_192_ctr_datatype_IPv6_iv_None_aad_None = r"""'27B614253D3C243D2CCE59907B4A9E72'"""
-
-example_mode_aes_192_ctr_datatype_Enum8_iv_None_aad_None = r"""'06'"""
-
-example_mode_aes_192_ctr_datatype_Enum16_iv_None_aad_None = r"""'06B7'"""
-
-example_mode_aes_256_ctr_datatype_String_iv_None_aad_None = r"""'81'"""
-
-example_mode_aes_256_ctr_datatype_FixedString_iv_None_aad_None = r"""'81'"""
-
-example_mode_aes_256_ctr_datatype_UInt8_iv_None_aad_None = r"""'B1'"""
-
-example_mode_aes_256_ctr_datatype_UInt16_iv_None_aad_None = r"""'B18E'"""
-
-example_mode_aes_256_ctr_datatype_UInt32_iv_None_aad_None = r"""'B18ECF9E'"""
-
-example_mode_aes_256_ctr_datatype_UInt64_iv_None_aad_None = r"""'B18ECF9EC7EB5F0D'"""
-
-example_mode_aes_256_ctr_datatype_Int8_iv_None_aad_None = r"""'B1'"""
-
-example_mode_aes_256_ctr_datatype_Int16_iv_None_aad_None = r"""'B18E'"""
-
-example_mode_aes_256_ctr_datatype_Int32_iv_None_aad_None = r"""'B18ECF9E'"""
-
-example_mode_aes_256_ctr_datatype_Int64_iv_None_aad_None = r"""'B18ECF9EC7EB5F0D'"""
-
-example_mode_aes_256_ctr_datatype_Float32_iv_None_aad_None = r"""'B08E4FA1'"""
-
-example_mode_aes_256_ctr_datatype_Float64_iv_None_aad_None = r"""'B08ECF9EC7EBAF32'"""
-
-example_mode_aes_256_ctr_datatype_Decimal32_iv_None_aad_None = r"""'90C0CF9E'"""
-
-example_mode_aes_256_ctr_datatype_Decimal64_iv_None_aad_None = r"""'90C0CF9EC7EB5F0D'"""
-
-example_mode_aes_256_ctr_datatype_Decimal128_iv_None_aad_None = r"""'90C0CF9EC7EB5F0D7B78C42556D668AC'"""
-
-example_mode_aes_256_ctr_datatype_UUID_iv_None_aad_None = r"""'579F7CC2C32FAF6CDBA3174F5670133C'"""
-
-example_mode_aes_256_ctr_datatype_Date_iv_None_aad_None = r"""'E6C9'"""
-
-example_mode_aes_256_ctr_datatype_DateTime_iv_None_aad_None = r"""'FE5EC3C0'"""
-
-example_mode_aes_256_ctr_datatype_DateTime64_iv_None_aad_None = r"""'9B3FC2FCA8EA5F0D'"""
-
-example_mode_aes_256_ctr_datatype_LowCardinality_iv_None_aad_None = r"""'81'"""
-
-example_mode_aes_256_ctr_datatype_Array_iv_None_aad_None = r"""'B18C'"""
-
-example_mode_aes_256_ctr_datatype_NULL_iv_None_aad_None = r"""'\\N'"""
-
-example_mode_aes_256_ctr_datatype_IPv4_iv_None_aad_None = r"""'9D0C2E35'"""
-
-example_mode_aes_256_ctr_datatype_IPv6_iv_None_aad_None = r"""'908FC226C7EBDAAE7B78C425FAC9E8AD'"""
-
-example_mode_aes_256_ctr_datatype_Enum8_iv_None_aad_None = r"""'B1'"""
-
-example_mode_aes_256_ctr_datatype_Enum16_iv_None_aad_None = r"""'B18E'"""
-
-example_mode_aes_128_ctr_datatype_String_iv_16_aad_None = r"""'03'"""
-
-example_mode_aes_128_ctr_datatype_FixedString_iv_16_aad_None = r"""'03'"""
-
-example_mode_aes_128_ctr_datatype_UInt8_iv_16_aad_None = r"""'33'"""
-
-example_mode_aes_128_ctr_datatype_UInt16_iv_16_aad_None = r"""'3388'"""
-
-example_mode_aes_128_ctr_datatype_UInt32_iv_16_aad_None = r"""'3388A984'"""
-
-example_mode_aes_128_ctr_datatype_UInt64_iv_16_aad_None = r"""'3388A984DD06FF58'"""
-
-example_mode_aes_128_ctr_datatype_Int8_iv_16_aad_None = r"""'33'"""
-
-example_mode_aes_128_ctr_datatype_Int16_iv_16_aad_None = r"""'3388'"""
-
-example_mode_aes_128_ctr_datatype_Int32_iv_16_aad_None = r"""'3388A984'"""
-
-example_mode_aes_128_ctr_datatype_Int64_iv_16_aad_None = r"""'3388A984DD06FF58'"""
-
-example_mode_aes_128_ctr_datatype_Float32_iv_16_aad_None = r"""'328829BB'"""
-
-example_mode_aes_128_ctr_datatype_Float64_iv_16_aad_None = r"""'3288A984DD060F67'"""
-
-example_mode_aes_128_ctr_datatype_Decimal32_iv_16_aad_None = r"""'12C6A984'"""
-
-example_mode_aes_128_ctr_datatype_Decimal64_iv_16_aad_None = r"""'12C6A984DD06FF58'"""
-
-example_mode_aes_128_ctr_datatype_Decimal128_iv_16_aad_None = r"""'12C6A984DD06FF58E93960B1DEC50F1E'"""
-
-example_mode_aes_128_ctr_datatype_UUID_iv_16_aad_None = r"""'D5991AD8D9C20F3949E2B3DBDE63748E'"""
-
-example_mode_aes_128_ctr_datatype_Date_iv_16_aad_None = r"""'64CF'"""
-
-example_mode_aes_128_ctr_datatype_DateTime_iv_16_aad_None = r"""'7C58A5DA'"""
-
-example_mode_aes_128_ctr_datatype_DateTime64_iv_16_aad_None = r"""'1939A4E6B207FF58'"""
-
-example_mode_aes_128_ctr_datatype_LowCardinality_iv_16_aad_None = r"""'03'"""
-
-example_mode_aes_128_ctr_datatype_Array_iv_16_aad_None = r"""'338A'"""
-
-example_mode_aes_128_ctr_datatype_NULL_iv_16_aad_None = r"""'\\N'"""
-
-example_mode_aes_128_ctr_datatype_IPv4_iv_16_aad_None = r"""'1F0A482F'"""
-
-example_mode_aes_128_ctr_datatype_IPv6_iv_16_aad_None = r"""'1289A43CDD067AFBE93960B172DA8F1F'"""
-
-example_mode_aes_128_ctr_datatype_Enum8_iv_16_aad_None = r"""'33'"""
-
-example_mode_aes_128_ctr_datatype_Enum16_iv_16_aad_None = r"""'3388'"""
-
-example_mode_aes_192_ctr_datatype_String_iv_16_aad_None = r"""'59'"""
-
-example_mode_aes_192_ctr_datatype_FixedString_iv_16_aad_None = r"""'59'"""
-
-example_mode_aes_192_ctr_datatype_UInt8_iv_16_aad_None = r"""'69'"""
-
-example_mode_aes_192_ctr_datatype_UInt16_iv_16_aad_None = r"""'69C7'"""
-
-example_mode_aes_192_ctr_datatype_UInt32_iv_16_aad_None = r"""'69C7E792'"""
-
-example_mode_aes_192_ctr_datatype_UInt64_iv_16_aad_None = r"""'69C7E792B71077B1'"""
-
-example_mode_aes_192_ctr_datatype_Int8_iv_16_aad_None = r"""'69'"""
-
-example_mode_aes_192_ctr_datatype_Int16_iv_16_aad_None = r"""'69C7'"""
-
-example_mode_aes_192_ctr_datatype_Int32_iv_16_aad_None = r"""'69C7E792'"""
-
-example_mode_aes_192_ctr_datatype_Int64_iv_16_aad_None = r"""'69C7E792B71077B1'"""
-
-example_mode_aes_192_ctr_datatype_Float32_iv_16_aad_None = r"""'68C767AD'"""
-
-example_mode_aes_192_ctr_datatype_Float64_iv_16_aad_None = r"""'68C7E792B710878E'"""
-
-example_mode_aes_192_ctr_datatype_Decimal32_iv_16_aad_None = r"""'4889E792'"""
-
-example_mode_aes_192_ctr_datatype_Decimal64_iv_16_aad_None = r"""'4889E792B71077B1'"""
-
-example_mode_aes_192_ctr_datatype_Decimal128_iv_16_aad_None = r"""'4889E792B71077B18446050EBFD861B5'"""
-
-example_mode_aes_192_ctr_datatype_UUID_iv_16_aad_None = r"""'8FD654CEB3D487D0249DD664BF7E1A25'"""
-
-example_mode_aes_192_ctr_datatype_Date_iv_16_aad_None = r"""'3E80'"""
-
-example_mode_aes_192_ctr_datatype_DateTime_iv_16_aad_None = r"""'2617EBCC'"""
-
-example_mode_aes_192_ctr_datatype_DateTime64_iv_16_aad_None = r"""'4376EAF0D81177B1'"""
-
-example_mode_aes_192_ctr_datatype_LowCardinality_iv_16_aad_None = r"""'59'"""
-
-example_mode_aes_192_ctr_datatype_Array_iv_16_aad_None = r"""'69C5'"""
-
-example_mode_aes_192_ctr_datatype_NULL_iv_16_aad_None = r"""'\\N'"""
-
-example_mode_aes_192_ctr_datatype_IPv4_iv_16_aad_None = r"""'45450639'"""
-
-example_mode_aes_192_ctr_datatype_IPv6_iv_16_aad_None = r"""'48C6EA2AB710F2128446050E13C7E1B4'"""
-
-example_mode_aes_192_ctr_datatype_Enum8_iv_16_aad_None = r"""'69'"""
-
-example_mode_aes_192_ctr_datatype_Enum16_iv_16_aad_None = r"""'69C7'"""
-
-example_mode_aes_256_ctr_datatype_String_iv_16_aad_None = r"""'58'"""
-
-example_mode_aes_256_ctr_datatype_FixedString_iv_16_aad_None = r"""'58'"""
-
-example_mode_aes_256_ctr_datatype_UInt8_iv_16_aad_None = r"""'68'"""
-
-example_mode_aes_256_ctr_datatype_UInt16_iv_16_aad_None = r"""'6858'"""
-
-example_mode_aes_256_ctr_datatype_UInt32_iv_16_aad_None = r"""'68588817'"""
-
-example_mode_aes_256_ctr_datatype_UInt64_iv_16_aad_None = r"""'685888173CDE4488'"""
-
-example_mode_aes_256_ctr_datatype_Int8_iv_16_aad_None = r"""'68'"""
-
-example_mode_aes_256_ctr_datatype_Int16_iv_16_aad_None = r"""'6858'"""
-
-example_mode_aes_256_ctr_datatype_Int32_iv_16_aad_None = r"""'68588817'"""
-
-example_mode_aes_256_ctr_datatype_Int64_iv_16_aad_None = r"""'685888173CDE4488'"""
-
-example_mode_aes_256_ctr_datatype_Float32_iv_16_aad_None = r"""'69580828'"""
-
-example_mode_aes_256_ctr_datatype_Float64_iv_16_aad_None = r"""'695888173CDEB4B7'"""
-
-example_mode_aes_256_ctr_datatype_Decimal32_iv_16_aad_None = r"""'49168817'"""
-
-example_mode_aes_256_ctr_datatype_Decimal64_iv_16_aad_None = r"""'491688173CDE4488'"""
-
-example_mode_aes_256_ctr_datatype_Decimal128_iv_16_aad_None = r"""'491688173CDE448870E043A7733CC726'"""
-
-example_mode_aes_256_ctr_datatype_UUID_iv_16_aad_None = r"""'8E493B4B381AB4E9D03B90CD739ABCB6'"""
-
-example_mode_aes_256_ctr_datatype_Date_iv_16_aad_None = r"""'3F1F'"""
-
-example_mode_aes_256_ctr_datatype_DateTime_iv_16_aad_None = r"""'27888449'"""
-
-example_mode_aes_256_ctr_datatype_DateTime64_iv_16_aad_None = r"""'42E9857553DF4488'"""
-
-example_mode_aes_256_ctr_datatype_LowCardinality_iv_16_aad_None = r"""'58'"""
-
-example_mode_aes_256_ctr_datatype_Array_iv_16_aad_None = r"""'685A'"""
-
-example_mode_aes_256_ctr_datatype_NULL_iv_16_aad_None = r"""'\\N'"""
-
-example_mode_aes_256_ctr_datatype_IPv4_iv_16_aad_None = r"""'44DA69BC'"""
-
-example_mode_aes_256_ctr_datatype_IPv6_iv_16_aad_None = r"""'495985AF3CDEC12B70E043A7DF234727'"""
-
-example_mode_aes_256_ctr_datatype_Enum8_iv_16_aad_None = r"""'68'"""
-
-example_mode_aes_256_ctr_datatype_Enum16_iv_16_aad_None = r"""'6858'"""
-
-example_mode_aes_128_ecb_datatype_bytes_iv_None_aad_None = r"""'7B62A15720E13327948BF706B89CF2BE'"""
-
-example_mode_aes_128_ecb_datatype_emptystring_iv_None_aad_None = r"""'F30C69C4F945E654EBD4B388B1C8F790'"""
-
-example_mode_aes_192_ecb_datatype_bytes_iv_None_aad_None = r"""'C60D7A90C41260E3CD03422E9163144A'"""
-
-example_mode_aes_192_ecb_datatype_emptystring_iv_None_aad_None = r"""'D8ED6FC305C161EFCF57A383DAF31A83'"""
-
-example_mode_aes_256_ecb_datatype_bytes_iv_None_aad_None = r"""'B73CDD4E7705F0C516612F860715EBE3'"""
-
-example_mode_aes_256_ecb_datatype_emptystring_iv_None_aad_None = r"""'217E121CBD32CEC1F6FD3EBDF414BC34'"""
-
-example_mode_aes_128_cbc_datatype_bytes_iv_None_aad_None = r"""'7B62A15720E13327948BF706B89CF2BE'"""
-
-example_mode_aes_128_cbc_datatype_emptystring_iv_None_aad_None = r"""'F30C69C4F945E654EBD4B388B1C8F790'"""
-
-example_mode_aes_192_cbc_datatype_bytes_iv_None_aad_None = r"""'C60D7A90C41260E3CD03422E9163144A'"""
-
-example_mode_aes_192_cbc_datatype_emptystring_iv_None_aad_None = r"""'D8ED6FC305C161EFCF57A383DAF31A83'"""
-
-example_mode_aes_256_cbc_datatype_bytes_iv_None_aad_None = r"""'B73CDD4E7705F0C516612F860715EBE3'"""
-
-example_mode_aes_256_cbc_datatype_emptystring_iv_None_aad_None = r"""'217E121CBD32CEC1F6FD3EBDF414BC34'"""
-
-example_mode_aes_128_cbc_datatype_bytes_iv_16_aad_None = r"""'CDA4B7027137998B9A33C2096C9A50DD'"""
-
-example_mode_aes_128_cbc_datatype_emptystring_iv_16_aad_None = r"""'56A77308430BA344FFBF016999795ED5'"""
-
-example_mode_aes_192_cbc_datatype_bytes_iv_16_aad_None = r"""'67771349942D4F812553F2E1E3FFB276'"""
-
-example_mode_aes_192_cbc_datatype_emptystring_iv_16_aad_None = r"""'62E9214DB5E239F0CAD31ADF26AB313F'"""
-
-example_mode_aes_256_cbc_datatype_bytes_iv_16_aad_None = r"""'6046ECF8094941C6DEC9278FF6F137E9'"""
-
-example_mode_aes_256_cbc_datatype_emptystring_iv_16_aad_None = r"""'4EC7785DA650D55B71B52816B1DB5AD3'"""
-
-example_mode_aes_128_cfb128_datatype_bytes_iv_None_aad_None = r"""'10'"""
-
-example_mode_aes_128_cfb128_datatype_emptystring_iv_None_aad_None = r"""''"""
-
-example_mode_aes_192_cfb128_datatype_bytes_iv_None_aad_None = r"""'07'"""
-
-example_mode_aes_192_cfb128_datatype_emptystring_iv_None_aad_None = r"""''"""
-
-example_mode_aes_256_cfb128_datatype_bytes_iv_None_aad_None = r"""'B0'"""
-
-example_mode_aes_256_cfb128_datatype_emptystring_iv_None_aad_None = r"""''"""
-
-example_mode_aes_128_cfb128_datatype_bytes_iv_16_aad_None = r"""'32'"""
-
-example_mode_aes_128_cfb128_datatype_emptystring_iv_16_aad_None = r"""''"""
-
-example_mode_aes_192_cfb128_datatype_bytes_iv_16_aad_None = r"""'68'"""
-
-example_mode_aes_192_cfb128_datatype_emptystring_iv_16_aad_None = r"""''"""
-
-example_mode_aes_256_cfb128_datatype_bytes_iv_16_aad_None = r"""'69'"""
-
-example_mode_aes_256_cfb128_datatype_emptystring_iv_16_aad_None = r"""''"""
-
-example_mode_aes_128_ofb_datatype_bytes_iv_None_aad_None = r"""'10'"""
-
-example_mode_aes_128_ofb_datatype_emptystring_iv_None_aad_None = r"""''"""
-
-example_mode_aes_192_ofb_datatype_bytes_iv_None_aad_None = r"""'07'"""
-
-example_mode_aes_192_ofb_datatype_emptystring_iv_None_aad_None = r"""''"""
-
-example_mode_aes_256_ofb_datatype_bytes_iv_None_aad_None = r"""'B0'"""
-
-example_mode_aes_256_ofb_datatype_emptystring_iv_None_aad_None = r"""''"""
-
-example_mode_aes_128_ofb_datatype_bytes_iv_16_aad_None = r"""'32'"""
-
-example_mode_aes_128_ofb_datatype_emptystring_iv_16_aad_None = r"""''"""
-
-example_mode_aes_192_ofb_datatype_bytes_iv_16_aad_None = r"""'68'"""
-
-example_mode_aes_192_ofb_datatype_emptystring_iv_16_aad_None = r"""''"""
-
-example_mode_aes_256_ofb_datatype_bytes_iv_16_aad_None = r"""'69'"""
-
-example_mode_aes_256_ofb_datatype_emptystring_iv_16_aad_None = r"""''"""
-
-example_mode_aes_128_gcm_datatype_bytes_iv_12_aad_None = r"""'ED7AF588306031432D60AE52CB0522C131'"""
-
-example_mode_aes_128_gcm_datatype_emptystring_iv_12_aad_None = r"""'BF165C92C4F89A189DCD3A9CCD549D64'"""
-
-example_mode_aes_192_gcm_datatype_bytes_iv_12_aad_None = r"""'4AF425C405715C1F91B04661C96F5942E9'"""
-
-example_mode_aes_192_gcm_datatype_emptystring_iv_12_aad_None = r"""'F95400D38FC8B708F21C1A5CC97E2611'"""
-
-example_mode_aes_256_gcm_datatype_bytes_iv_12_aad_None = r"""'56C3D480260AD4984887DA3D7CBDFB952B'"""
-
-example_mode_aes_256_gcm_datatype_emptystring_iv_12_aad_None = r"""'4C24D7C3019165A77A8AE2FB9E130FBB'"""
-
-example_mode_aes_128_gcm_datatype_bytes_iv_12_aad_True = r"""'EDC8BCDDFC79319818DD61E1FAE4DA61ED'"""
-
-example_mode_aes_128_gcm_datatype_emptystring_iv_12_aad_True = r"""'9E4606A8AD25466858006BD90DA530F5'"""
-
-example_mode_aes_192_gcm_datatype_bytes_iv_12_aad_True = r"""'4A77EBA169E3B27FF66C04DDA4D6CEFCF2'"""
-
-example_mode_aes_192_gcm_datatype_emptystring_iv_12_aad_True = r"""'43B2949BA8DFB2A1511C294394E0DFB4'"""
-
-example_mode_aes_256_gcm_datatype_bytes_iv_12_aad_True = r"""'565140DB2A06E0A4E09E71F21A872BC911'"""
-
-example_mode_aes_256_gcm_datatype_emptystring_iv_12_aad_True = r"""'555A1764B65804E27174F272CF88FC11'"""
-
-example_mode_aes_128_ctr_datatype_bytes_iv_None_aad_None = r"""'10'"""
-
-example_mode_aes_128_ctr_datatype_emptystring_iv_None_aad_None = r"""''"""
-
-example_mode_aes_192_ctr_datatype_bytes_iv_None_aad_None = r"""'07'"""
-
-example_mode_aes_192_ctr_datatype_emptystring_iv_None_aad_None = r"""''"""
-
-example_mode_aes_256_ctr_datatype_bytes_iv_None_aad_None = r"""'B0'"""
-
-example_mode_aes_256_ctr_datatype_emptystring_iv_None_aad_None = r"""''"""
-
-example_mode_aes_128_ctr_datatype_bytes_iv_16_aad_None = r"""'32'"""
-
-example_mode_aes_128_ctr_datatype_emptystring_iv_16_aad_None = r"""''"""
-
-example_mode_aes_192_ctr_datatype_bytes_iv_16_aad_None = r"""'68'"""
-
-example_mode_aes_192_ctr_datatype_emptystring_iv_16_aad_None = r"""''"""
-
-example_mode_aes_256_ctr_datatype_bytes_iv_16_aad_None = r"""'69'"""
-
-example_mode_aes_256_ctr_datatype_emptystring_iv_16_aad_None = r"""''"""
-
-example_mode_aes_128_ecb_datatype_utf8string_iv_None_aad_None = r"""'4F5025E938F215F36B4EFEBD8A328B5CB8D530E00C83AD075E2D845A2425D8B5'"""
-
-example_mode_aes_128_ecb_datatype_utf8fixedstring_iv_None_aad_None = r"""'4F5025E938F215F36B4EFEBD8A328B5CB8D530E00C83AD075E2D845A2425D8B5'"""
-
-example_mode_aes_192_ecb_datatype_utf8string_iv_None_aad_None = r"""'7C1CE735A57407291267928DE0E2E479822D3586BD475686D9DAB17103D7B162'"""
-
-example_mode_aes_192_ecb_datatype_utf8fixedstring_iv_None_aad_None = r"""'7C1CE735A57407291267928DE0E2E479822D3586BD475686D9DAB17103D7B162'"""
-
-example_mode_aes_256_ecb_datatype_utf8string_iv_None_aad_None = r"""'3303F819796DDB5046AAFAB8A39FC3AB8A858B18916A30D2E2C3C9C9BBC961FD'"""
-
-example_mode_aes_256_ecb_datatype_utf8fixedstring_iv_None_aad_None = r"""'3303F819796DDB5046AAFAB8A39FC3AB8A858B18916A30D2E2C3C9C9BBC961FD'"""
-
-example_mode_aes_128_cbc_datatype_utf8string_iv_None_aad_None = r"""'4F5025E938F215F36B4EFEBD8A328B5C00AF476CA1EE03B7C0D297C2BF287339'"""
-
-example_mode_aes_128_cbc_datatype_utf8fixedstring_iv_None_aad_None = r"""'4F5025E938F215F36B4EFEBD8A328B5C00AF476CA1EE03B7C0D297C2BF287339'"""
-
-example_mode_aes_192_cbc_datatype_utf8string_iv_None_aad_None = r"""'7C1CE735A57407291267928DE0E2E47918C12F093BCD530F69669FC25B23195A'"""
-
-example_mode_aes_192_cbc_datatype_utf8fixedstring_iv_None_aad_None = r"""'7C1CE735A57407291267928DE0E2E47918C12F093BCD530F69669FC25B23195A'"""
-
-example_mode_aes_256_cbc_datatype_utf8string_iv_None_aad_None = r"""'3303F819796DDB5046AAFAB8A39FC3ABC19300E0966158A167939EDD20D39907'"""
-
-example_mode_aes_256_cbc_datatype_utf8fixedstring_iv_None_aad_None = r"""'3303F819796DDB5046AAFAB8A39FC3ABC19300E0966158A167939EDD20D39907'"""
-
-example_mode_aes_128_cbc_datatype_utf8string_iv_16_aad_None = r"""'0BD95BFF6DE2DC43D936DAF23937B06D602786A6770B627EB56BC7F681B1C9DB'"""
-
-example_mode_aes_128_cbc_datatype_utf8fixedstring_iv_16_aad_None = r"""'0BD95BFF6DE2DC43D936DAF23937B06D602786A6770B627EB56BC7F681B1C9DB'"""
-
-example_mode_aes_192_cbc_datatype_utf8string_iv_16_aad_None = r"""'D619039D0956015C34336196DB3EB5A4710B2B8860344AB2625E9269C5E4A6CC'"""
-
-example_mode_aes_192_cbc_datatype_utf8fixedstring_iv_16_aad_None = r"""'D619039D0956015C34336196DB3EB5A4710B2B8860344AB2625E9269C5E4A6CC'"""
-
-example_mode_aes_256_cbc_datatype_utf8string_iv_16_aad_None = r"""'A7663A9F621A26398B51DFBC099A6FA09032C25FE48CB9D2DE29A8DFD581714D'"""
-
-example_mode_aes_256_cbc_datatype_utf8fixedstring_iv_16_aad_None = r"""'A7663A9F621A26398B51DFBC099A6FA09032C25FE48CB9D2DE29A8DFD581714D'"""
-
-example_mode_aes_128_cfb128_datatype_utf8string_iv_None_aad_None = r"""'571C627072083ECFD8460B39C4132D1B2802275B5B24EF73'"""
-
-example_mode_aes_128_cfb128_datatype_utf8fixedstring_iv_None_aad_None = r"""'571C627072083ECFD8460B39C4132D1B2802275B5B24EF73'"""
-
-example_mode_aes_192_cfb128_datatype_utf8string_iv_None_aad_None = r"""'4074BA58B958623BE94C3FCF833DDDD9AC9F875CC2784719'"""
-
-example_mode_aes_192_cfb128_datatype_utf8fixedstring_iv_None_aad_None = r"""'4074BA58B958623BE94C3FCF833DDDD9AC9F875CC2784719'"""
-
-example_mode_aes_256_cfb128_datatype_utf8string_iv_None_aad_None = r"""'F74D6C5B438F9CA8BEFAA27A02BEAB06F5E4BB666EC25FE2'"""
-
-example_mode_aes_256_cfb128_datatype_utf8fixedstring_iv_None_aad_None = r"""'F74D6C5B438F9CA8BEFAA27A02BEAB06F5E4BB666EC25FE2'"""
-
-example_mode_aes_128_cfb128_datatype_utf8string_iv_16_aad_None = r"""'754B0A4159623CFD2CBB06EE8AADCCB4581E4F5FB9F091DD'"""
-
-example_mode_aes_128_cfb128_datatype_utf8fixedstring_iv_16_aad_None = r"""'754B0A4159623CFD2CBB06EE8AADCCB4581E4F5FB9F091DD'"""
-
-example_mode_aes_192_cfb128_datatype_utf8string_iv_16_aad_None = r"""'2F0444573374B41441C46351EBB0A21FD2D5B29B19D817D8'"""
-
-example_mode_aes_192_cfb128_datatype_utf8fixedstring_iv_16_aad_None = r"""'2F0444573374B41441C46351EBB0A21FD2D5B29B19D817D8'"""
-
-example_mode_aes_256_cfb128_datatype_utf8string_iv_16_aad_None = r"""'2E9B2BD2B8BA872DB56225F82754048C22AA31B7F22AD276'"""
-
-example_mode_aes_256_cfb128_datatype_utf8fixedstring_iv_16_aad_None = r"""'2E9B2BD2B8BA872DB56225F82754048C22AA31B7F22AD276'"""
-
-example_mode_aes_128_ofb_datatype_utf8string_iv_None_aad_None = r"""'571C627072083ECFD8460B39C4132D1B1EFEEBE7197398AE'"""
-
-example_mode_aes_128_ofb_datatype_utf8fixedstring_iv_None_aad_None = r"""'571C627072083ECFD8460B39C4132D1B1EFEEBE7197398AE'"""
-
-example_mode_aes_192_ofb_datatype_utf8string_iv_None_aad_None = r"""'4074BA58B958623BE94C3FCF833DDDD95F6EFF17F7823E17'"""
-
-example_mode_aes_192_ofb_datatype_utf8fixedstring_iv_None_aad_None = r"""'4074BA58B958623BE94C3FCF833DDDD95F6EFF17F7823E17'"""
-
-example_mode_aes_256_ofb_datatype_utf8string_iv_None_aad_None = r"""'F74D6C5B438F9CA8BEFAA27A02BEAB06B24181EFC9F2663B'"""
-
-example_mode_aes_256_ofb_datatype_utf8fixedstring_iv_None_aad_None = r"""'F74D6C5B438F9CA8BEFAA27A02BEAB06B24181EFC9F2663B'"""
-
-example_mode_aes_128_ofb_datatype_utf8string_iv_16_aad_None = r"""'754B0A4159623CFD2CBB06EE8AADCCB46A1C2A356E7D91D8'"""
-
-example_mode_aes_128_ofb_datatype_utf8fixedstring_iv_16_aad_None = r"""'754B0A4159623CFD2CBB06EE8AADCCB46A1C2A356E7D91D8'"""
-
-example_mode_aes_192_ofb_datatype_utf8string_iv_16_aad_None = r"""'2F0444573374B41441C46351EBB0A21F81C68E6CF92A6AF3'"""
-
-example_mode_aes_192_ofb_datatype_utf8fixedstring_iv_16_aad_None = r"""'2F0444573374B41441C46351EBB0A21F81C68E6CF92A6AF3'"""
-
-example_mode_aes_256_ofb_datatype_utf8string_iv_16_aad_None = r"""'2E9B2BD2B8BA872DB56225F82754048CE38E2C23393CF6FD'"""
-
-example_mode_aes_256_ofb_datatype_utf8fixedstring_iv_16_aad_None = r"""'2E9B2BD2B8BA872DB56225F82754048CE38E2C23393CF6FD'"""
-
-example_mode_aes_128_gcm_datatype_utf8string_iv_12_aad_None = r"""'AA556287709BAC848F40F0512ACBA9C1D3324C9C90260B0CDDC3AD7EBB18C53625907FE8745D8FFA'"""
-
-example_mode_aes_128_gcm_datatype_utf8fixedstring_iv_12_aad_None = r"""'AA556287709BAC848F40F0512ACBA9C1D3324C9C90260B0CDDC3AD7EBB18C53625907FE8745D8FFA'"""
-
-example_mode_aes_192_gcm_datatype_utf8string_iv_12_aad_None = r"""'0D390501E362DC4686DB5ADFE35DD613EA762CEE8E06DB20D0A9639BEF09294270D1352D22DB2CAF'"""
-
-example_mode_aes_192_gcm_datatype_utf8fixedstring_iv_12_aad_None = r"""'0D390501E362DC4686DB5ADFE35DD613EA762CEE8E06DB20D0A9639BEF09294270D1352D22DB2CAF'"""
-
-example_mode_aes_256_gcm_datatype_utf8string_iv_12_aad_None = r"""'1108CFFF78E0E41CCBFB61D9DD7FECBEF8AE22FF80D345FCAC905BDB791BC316A9A7D21FB34951F0'"""
-
-example_mode_aes_256_gcm_datatype_utf8fixedstring_iv_12_aad_None = r"""'1108CFFF78E0E41CCBFB61D9DD7FECBEF8AE22FF80D345FCAC905BDB791BC316A9A7D21FB34951F0'"""
-
-example_mode_aes_128_gcm_datatype_utf8string_iv_12_aad_True = r"""'AA556287709BAC848F40F0512ACBA9C1D3324C9C90260B0CD181E1471DC596491F22269EF75F4E5F'"""
-
-example_mode_aes_128_gcm_datatype_utf8fixedstring_iv_12_aad_True = r"""'AA556287709BAC848F40F0512ACBA9C1D3324C9C90260B0CD181E1471DC596491F22269EF75F4E5F'"""
-
-example_mode_aes_192_gcm_datatype_utf8string_iv_12_aad_True = r"""'0D390501E362DC4686DB5ADFE35DD613EA762CEE8E06DB20936BD43E66BAD9322C30B6E5D64110BB'"""
-
-example_mode_aes_192_gcm_datatype_utf8fixedstring_iv_12_aad_True = r"""'0D390501E362DC4686DB5ADFE35DD613EA762CEE8E06DB20936BD43E66BAD9322C30B6E5D64110BB'"""
-
-example_mode_aes_256_gcm_datatype_utf8string_iv_12_aad_True = r"""'1108CFFF78E0E41CCBFB61D9DD7FECBEF8AE22FF80D345FC92F054FDB351668A3790BE74D20869DD'"""
-
-example_mode_aes_256_gcm_datatype_utf8fixedstring_iv_12_aad_True = r"""'1108CFFF78E0E41CCBFB61D9DD7FECBEF8AE22FF80D345FC92F054FDB351668A3790BE74D20869DD'"""
-
-example_mode_aes_128_ctr_datatype_utf8string_iv_None_aad_None = r"""'571C627072083ECFD8460B39C4132D1B60215F9423235540'"""
-
-example_mode_aes_128_ctr_datatype_utf8fixedstring_iv_None_aad_None = r"""'571C627072083ECFD8460B39C4132D1B60215F9423235540'"""
-
-example_mode_aes_192_ctr_datatype_utf8string_iv_None_aad_None = r"""'4074BA58B958623BE94C3FCF833DDDD9EE89664A09F10327'"""
-
-example_mode_aes_192_ctr_datatype_utf8fixedstring_iv_None_aad_None = r"""'4074BA58B958623BE94C3FCF833DDDD9EE89664A09F10327'"""
-
-example_mode_aes_256_ctr_datatype_utf8string_iv_None_aad_None = r"""'F74D6C5B438F9CA8BEFAA27A02BEAB06519900DEC1DB5CF5'"""
-
-example_mode_aes_256_ctr_datatype_utf8fixedstring_iv_None_aad_None = r"""'F74D6C5B438F9CA8BEFAA27A02BEAB06519900DEC1DB5CF5'"""
-
-example_mode_aes_128_ctr_datatype_utf8string_iv_16_aad_None = r"""'754B0A4159623CFD2CBB06EE8AADCCB437EE2D5260EB4958'"""
-
-example_mode_aes_128_ctr_datatype_utf8fixedstring_iv_16_aad_None = r"""'754B0A4159623CFD2CBB06EE8AADCCB437EE2D5260EB4958'"""
-
-example_mode_aes_192_ctr_datatype_utf8string_iv_16_aad_None = r"""'2F0444573374B41441C46351EBB0A21F039E1E85A0813F1D'"""
-
-example_mode_aes_192_ctr_datatype_utf8fixedstring_iv_16_aad_None = r"""'2F0444573374B41441C46351EBB0A21F039E1E85A0813F1D'"""
-
-example_mode_aes_256_ctr_datatype_utf8string_iv_16_aad_None = r"""'2E9B2BD2B8BA872DB56225F82754048C944F1E670DF94BAA'"""
-
-example_mode_aes_256_ctr_datatype_utf8fixedstring_iv_16_aad_None = r"""'2E9B2BD2B8BA872DB56225F82754048C944F1E670DF94BAA'"""
-
diff --git a/tests/testflows/aes_encryption/tests/snapshots/encrypt_mysql.py.encrypt_mysql.snapshot b/tests/testflows/aes_encryption/tests/snapshots/encrypt_mysql.py.encrypt_mysql.snapshot
deleted file mode 100644
index 8d49719796..0000000000
--- a/tests/testflows/aes_encryption/tests/snapshots/encrypt_mysql.py.encrypt_mysql.snapshot
+++ /dev/null
@@ -1,1980 +0,0 @@
-example_mode_aes_128_ecb_datatype_bytes_key_16_iv_None = r"""'7B62A15720E13327948BF706B89CF2BE'"""
-
-example_mode_aes_128_ecb_datatype_emptystring_key_16_iv_None = r"""'F30C69C4F945E654EBD4B388B1C8F790'"""
-
-example_mode_aes_128_ecb_datatype_utf8string_key_16_iv_None = r"""'4F5025E938F215F36B4EFEBD8A328B5CB8D530E00C83AD075E2D845A2425D8B5'"""
-
-example_mode_aes_128_ecb_datatype_utf8fixedstring_key_16_iv_None = r"""'4F5025E938F215F36B4EFEBD8A328B5CB8D530E00C83AD075E2D845A2425D8B5'"""
-
-example_mode_aes_128_ecb_datatype_String_key_16_iv_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'"""
-
-example_mode_aes_128_ecb_datatype_FixedString_key_16_iv_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'"""
-
-example_mode_aes_128_ecb_datatype_UInt8_key_16_iv_None = r"""'4CDF8A192A06AC6EDBDCE2BFB53B7D73'"""
-
-example_mode_aes_128_ecb_datatype_UInt16_key_16_iv_None = r"""'12FB5B75B1CB5DF0DC70D8039758691D'"""
-
-example_mode_aes_128_ecb_datatype_UInt32_key_16_iv_None = r"""'E86C0858C6D9CCD970BA6DC320038306'"""
-
-example_mode_aes_128_ecb_datatype_UInt64_key_16_iv_None = r"""'2D43D83E0250AE8AC4403551B639F694'"""
-
-example_mode_aes_128_ecb_datatype_Int8_key_16_iv_None = r"""'4CDF8A192A06AC6EDBDCE2BFB53B7D73'"""
-
-example_mode_aes_128_ecb_datatype_Int16_key_16_iv_None = r"""'12FB5B75B1CB5DF0DC70D8039758691D'"""
-
-example_mode_aes_128_ecb_datatype_Int32_key_16_iv_None = r"""'E86C0858C6D9CCD970BA6DC320038306'"""
-
-example_mode_aes_128_ecb_datatype_Int64_key_16_iv_None = r"""'2D43D83E0250AE8AC4403551B639F694'"""
-
-example_mode_aes_128_ecb_datatype_Float32_key_16_iv_None = r"""'FF4D70D9A1050E6BBDD0325FC45CC22D'"""
-
-example_mode_aes_128_ecb_datatype_Float64_key_16_iv_None = r"""'75FE6B4A722A31D7760680CC1B9F131D'"""
-
-example_mode_aes_128_ecb_datatype_Decimal32_key_16_iv_None = r"""'83BBD7CCE7E5A38071653870475D48D2'"""
-
-example_mode_aes_128_ecb_datatype_Decimal64_key_16_iv_None = r"""'BE0DD9302B2952CE9CC3721DD85C8E66'"""
-
-example_mode_aes_128_ecb_datatype_Decimal128_key_16_iv_None = r"""'5F3DBFA74809E45E03980357B26787AFF30C69C4F945E654EBD4B388B1C8F790'"""
-
-example_mode_aes_128_ecb_datatype_UUID_key_16_iv_None = r"""'FF9161B222B4A67481271035745F06D9F30C69C4F945E654EBD4B388B1C8F790'"""
-
-example_mode_aes_128_ecb_datatype_Date_key_16_iv_None = r"""'1E4FBE33752D96D147E890C29A409BFE'"""
-
-example_mode_aes_128_ecb_datatype_DateTime_key_16_iv_None = r"""'384F3D97B78D52C73CD06C0E1B6DE399'"""
-
-example_mode_aes_128_ecb_datatype_DateTime64_key_16_iv_None = r"""'C7F50A2D0175F3ED280AD42FF01FF5F2'"""
-
-example_mode_aes_128_ecb_datatype_LowCardinality_key_16_iv_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'"""
-
-example_mode_aes_128_ecb_datatype_Array_key_16_iv_None = r"""'D9152D05CFA9E162983A5A2E883109B4'"""
-
-example_mode_aes_128_ecb_datatype_NULL_key_16_iv_None = r"""'\\N'"""
-
-example_mode_aes_128_ecb_datatype_IPv4_key_16_iv_None = r"""'4F32782638C1F33C6A7202CA83F0C12C'"""
-
-example_mode_aes_128_ecb_datatype_IPv6_key_16_iv_None = r"""'F54700FF04ADAD342BA6830DB12AD7E9F30C69C4F945E654EBD4B388B1C8F790'"""
-
-example_mode_aes_128_ecb_datatype_Enum8_key_16_iv_None = r"""'4CDF8A192A06AC6EDBDCE2BFB53B7D73'"""
-
-example_mode_aes_128_ecb_datatype_Enum16_key_16_iv_None = r"""'12FB5B75B1CB5DF0DC70D8039758691D'"""
-
-example_mode_aes_128_ecb_datatype_bytes_key_24_iv_None = r"""'0E7A1A2ED5C8BCC0B811B44D7FEA9E51'"""
-
-example_mode_aes_128_ecb_datatype_emptystring_key_24_iv_None = r"""'644DD62B737880C0203A16C9844616A6'"""
-
-example_mode_aes_128_ecb_datatype_utf8string_key_24_iv_None = r"""'4A970096F9F40F5507A678BF07F22B6B0644E044B974D161C223EA94DCB43B5D'"""
-
-example_mode_aes_128_ecb_datatype_utf8fixedstring_key_24_iv_None = r"""'4A970096F9F40F5507A678BF07F22B6B0644E044B974D161C223EA94DCB43B5D'"""
-
-example_mode_aes_128_ecb_datatype_String_key_24_iv_None = r"""'697175286BC73A26C572DBD9480738F3'"""
-
-example_mode_aes_128_ecb_datatype_FixedString_key_24_iv_None = r"""'697175286BC73A26C572DBD9480738F3'"""
-
-example_mode_aes_128_ecb_datatype_UInt8_key_24_iv_None = r"""'113A22E44AC1C4B397CC8204C069F5F4'"""
-
-example_mode_aes_128_ecb_datatype_UInt16_key_24_iv_None = r"""'94DD57978311932F2E9FED922796A023'"""
-
-example_mode_aes_128_ecb_datatype_UInt32_key_24_iv_None = r"""'CB84F00C70A72890AF6F7106AE8109CB'"""
-
-example_mode_aes_128_ecb_datatype_UInt64_key_24_iv_None = r"""'973944561BDA0D954449BEBD64C9ED7A'"""
-
-example_mode_aes_128_ecb_datatype_Int8_key_24_iv_None = r"""'113A22E44AC1C4B397CC8204C069F5F4'"""
-
-example_mode_aes_128_ecb_datatype_Int16_key_24_iv_None = r"""'94DD57978311932F2E9FED922796A023'"""
-
-example_mode_aes_128_ecb_datatype_Int32_key_24_iv_None = r"""'CB84F00C70A72890AF6F7106AE8109CB'"""
-
-example_mode_aes_128_ecb_datatype_Int64_key_24_iv_None = r"""'973944561BDA0D954449BEBD64C9ED7A'"""
-
-example_mode_aes_128_ecb_datatype_Float32_key_24_iv_None = r"""'7BCD3C1EB87CDA7BBA4B19929367243E'"""
-
-example_mode_aes_128_ecb_datatype_Float64_key_24_iv_None = r"""'3712B5B24D8F17CA7BE784AB7D57514E'"""
-
-example_mode_aes_128_ecb_datatype_Decimal32_key_24_iv_None = r"""'37BE2C0520C1A4C6F88CCBA2EEC020E5'"""
-
-example_mode_aes_128_ecb_datatype_Decimal64_key_24_iv_None = r"""'9ACC742A0FD36A80FEA2DBA2D73C4BFA'"""
-
-example_mode_aes_128_ecb_datatype_Decimal128_key_24_iv_None = r"""'EE8E9F15CAE8C5B6F2E0547636DEAF14644DD62B737880C0203A16C9844616A6'"""
-
-example_mode_aes_128_ecb_datatype_UUID_key_24_iv_None = r"""'6FD5580CC0B329922B575B79D4AD6E70644DD62B737880C0203A16C9844616A6'"""
-
-example_mode_aes_128_ecb_datatype_Date_key_24_iv_None = r"""'B0ADFA31B83C5B33B277097C33B06CB4'"""
-
-example_mode_aes_128_ecb_datatype_DateTime_key_24_iv_None = r"""'0632CF6416213B4153D247F4A85EAB19'"""
-
-example_mode_aes_128_ecb_datatype_DateTime64_key_24_iv_None = r"""'3D1049375E6EA3599E7AC2C753B1AA7F'"""
-
-example_mode_aes_128_ecb_datatype_LowCardinality_key_24_iv_None = r"""'697175286BC73A26C572DBD9480738F3'"""
-
-example_mode_aes_128_ecb_datatype_Array_key_24_iv_None = r"""'129253539B09D45C2147884BB2B866BD'"""
-
-example_mode_aes_128_ecb_datatype_NULL_key_24_iv_None = r"""'\\N'"""
-
-example_mode_aes_128_ecb_datatype_IPv4_key_24_iv_None = r"""'B0D8302DB6F6B772E883A9353CDC28F0'"""
-
-example_mode_aes_128_ecb_datatype_IPv6_key_24_iv_None = r"""'781ABF0C605281F93A00B9BADD2CD1E3644DD62B737880C0203A16C9844616A6'"""
-
-example_mode_aes_128_ecb_datatype_Enum8_key_24_iv_None = r"""'113A22E44AC1C4B397CC8204C069F5F4'"""
-
-example_mode_aes_128_ecb_datatype_Enum16_key_24_iv_None = r"""'94DD57978311932F2E9FED922796A023'"""
-
-example_mode_aes_192_ecb_datatype_bytes_key_24_iv_None = r"""'C60D7A90C41260E3CD03422E9163144A'"""
-
-example_mode_aes_192_ecb_datatype_emptystring_key_24_iv_None = r"""'D8ED6FC305C161EFCF57A383DAF31A83'"""
-
-example_mode_aes_192_ecb_datatype_utf8string_key_24_iv_None = r"""'7C1CE735A57407291267928DE0E2E479822D3586BD475686D9DAB17103D7B162'"""
-
-example_mode_aes_192_ecb_datatype_utf8fixedstring_key_24_iv_None = r"""'7C1CE735A57407291267928DE0E2E479822D3586BD475686D9DAB17103D7B162'"""
-
-example_mode_aes_192_ecb_datatype_String_key_24_iv_None = r"""'1AE38A541D466EDFED572EE839B0907F'"""
-
-example_mode_aes_192_ecb_datatype_FixedString_key_24_iv_None = r"""'1AE38A541D466EDFED572EE839B0907F'"""
-
-example_mode_aes_192_ecb_datatype_UInt8_key_24_iv_None = r"""'01CC3C67F07C3FA6E5EFB7AE5F19130B'"""
-
-example_mode_aes_192_ecb_datatype_UInt16_key_24_iv_None = r"""'B50A3019F16B9C643FB40259E4B09308'"""
-
-example_mode_aes_192_ecb_datatype_UInt32_key_24_iv_None = r"""'9F32F3F6B3C3B1830F56B5B94C93875D'"""
-
-example_mode_aes_192_ecb_datatype_UInt64_key_24_iv_None = r"""'8DE807D54B7717BFC773567D9FFE292D'"""
-
-example_mode_aes_192_ecb_datatype_Int8_key_24_iv_None = r"""'01CC3C67F07C3FA6E5EFB7AE5F19130B'"""
-
-example_mode_aes_192_ecb_datatype_Int16_key_24_iv_None = r"""'B50A3019F16B9C643FB40259E4B09308'"""
-
-example_mode_aes_192_ecb_datatype_Int32_key_24_iv_None = r"""'9F32F3F6B3C3B1830F56B5B94C93875D'"""
-
-example_mode_aes_192_ecb_datatype_Int64_key_24_iv_None = r"""'8DE807D54B7717BFC773567D9FFE292D'"""
-
-example_mode_aes_192_ecb_datatype_Float32_key_24_iv_None = r"""'4E0C122631ED64EAD726833291A81878'"""
-
-example_mode_aes_192_ecb_datatype_Float64_key_24_iv_None = r"""'3F723599278E22E4692CE7D7D5F9A12F'"""
-
-example_mode_aes_192_ecb_datatype_Decimal32_key_24_iv_None = r"""'2420D49DBAA5CEF7D853C98DA1BD33BF'"""
-
-example_mode_aes_192_ecb_datatype_Decimal64_key_24_iv_None = r"""'FDF594113FCC2776653ED109A51FADF1'"""
-
-example_mode_aes_192_ecb_datatype_Decimal128_key_24_iv_None = r"""'79207931793E374FB5A3A2AC1ECA857AD8ED6FC305C161EFCF57A383DAF31A83'"""
-
-example_mode_aes_192_ecb_datatype_UUID_key_24_iv_None = r"""'9FDB738E78D0D2F774C484ED82A854E4D8ED6FC305C161EFCF57A383DAF31A83'"""
-
-example_mode_aes_192_ecb_datatype_Date_key_24_iv_None = r"""'2CDD4685168FA3E2A7FA2092E86F44D4'"""
-
-example_mode_aes_192_ecb_datatype_DateTime_key_24_iv_None = r"""'A4BEE097872E44FAD94D6707D6643DF5'"""
-
-example_mode_aes_192_ecb_datatype_DateTime64_key_24_iv_None = r"""'1798B23C09F783623943560DF142E0F3'"""
-
-example_mode_aes_192_ecb_datatype_LowCardinality_key_24_iv_None = r"""'1AE38A541D466EDFED572EE839B0907F'"""
-
-example_mode_aes_192_ecb_datatype_Array_key_24_iv_None = r"""'7C0B9021CAF2CBBB06DBF589740DCC65'"""
-
-example_mode_aes_192_ecb_datatype_NULL_key_24_iv_None = r"""'\\N'"""
-
-example_mode_aes_192_ecb_datatype_IPv4_key_24_iv_None = r"""'B20465C932A0719BA04E2F76371510D8'"""
-
-example_mode_aes_192_ecb_datatype_IPv6_key_24_iv_None = r"""'CCCDC9B9C3F182254591DFEDDCE9F232D8ED6FC305C161EFCF57A383DAF31A83'"""
-
-example_mode_aes_192_ecb_datatype_Enum8_key_24_iv_None = r"""'01CC3C67F07C3FA6E5EFB7AE5F19130B'"""
-
-example_mode_aes_192_ecb_datatype_Enum16_key_24_iv_None = r"""'B50A3019F16B9C643FB40259E4B09308'"""
-
-example_mode_aes_192_ecb_datatype_bytes_key_32_iv_None = r"""'4977677DCA6485E59B6D2AEC781DB50E'"""
-
-example_mode_aes_192_ecb_datatype_emptystring_key_32_iv_None = r"""'4F9776A389026F399064946440DF432F'"""
-
-example_mode_aes_192_ecb_datatype_utf8string_key_32_iv_None = r"""'718D9D0FCE92DF4C73C6ADF970082475F5B91A80060E2F74BDB70F4D61D51128'"""
-
-example_mode_aes_192_ecb_datatype_utf8fixedstring_key_32_iv_None = r"""'718D9D0FCE92DF4C73C6ADF970082475F5B91A80060E2F74BDB70F4D61D51128'"""
-
-example_mode_aes_192_ecb_datatype_String_key_32_iv_None = r"""'851106E40808E28682DAC1AD840A7E92'"""
-
-example_mode_aes_192_ecb_datatype_FixedString_key_32_iv_None = r"""'851106E40808E28682DAC1AD840A7E92'"""
-
-example_mode_aes_192_ecb_datatype_UInt8_key_32_iv_None = r"""'077626FAA6FD46322732E0A107849CBE'"""
-
-example_mode_aes_192_ecb_datatype_UInt16_key_32_iv_None = r"""'C55FFF6925F48B2DDDD3F8696A6EE21A'"""
-
-example_mode_aes_192_ecb_datatype_UInt32_key_32_iv_None = r"""'7F3A3604968AC5BB1578D256A221442A'"""
-
-example_mode_aes_192_ecb_datatype_UInt64_key_32_iv_None = r"""'FCC1BC19F3A2F8F0484BD2BF3A069BB9'"""
-
-example_mode_aes_192_ecb_datatype_Int8_key_32_iv_None = r"""'077626FAA6FD46322732E0A107849CBE'"""
-
-example_mode_aes_192_ecb_datatype_Int16_key_32_iv_None = r"""'C55FFF6925F48B2DDDD3F8696A6EE21A'"""
-
-example_mode_aes_192_ecb_datatype_Int32_key_32_iv_None = r"""'7F3A3604968AC5BB1578D256A221442A'"""
-
-example_mode_aes_192_ecb_datatype_Int64_key_32_iv_None = r"""'FCC1BC19F3A2F8F0484BD2BF3A069BB9'"""
-
-example_mode_aes_192_ecb_datatype_Float32_key_32_iv_None = r"""'57AC570C827D0B10A340A635080E4BED'"""
-
-example_mode_aes_192_ecb_datatype_Float64_key_32_iv_None = r"""'EB761A3EB9A06676C875E70C6323B6D3'"""
-
-example_mode_aes_192_ecb_datatype_Decimal32_key_32_iv_None = r"""'07757D905A8DF38EEC7EAC2436BC883D'"""
-
-example_mode_aes_192_ecb_datatype_Decimal64_key_32_iv_None = r"""'B3DD7C625F5C9CAEB24B014AAF1660CF'"""
-
-example_mode_aes_192_ecb_datatype_Decimal128_key_32_iv_None = r"""'AF4EE89B714CBB6ED41802268A6C291F4F9776A389026F399064946440DF432F'"""
-
-example_mode_aes_192_ecb_datatype_UUID_key_32_iv_None = r"""'6DDADFA4AD0FEA6DD4AE756F5E13E0EE4F9776A389026F399064946440DF432F'"""
-
-example_mode_aes_192_ecb_datatype_Date_key_32_iv_None = r"""'D2212BB509C49D9DCBE970F86D34C4BE'"""
-
-example_mode_aes_192_ecb_datatype_DateTime_key_32_iv_None = r"""'C3AB19DCEFE1F61019484A2589D69037'"""
-
-example_mode_aes_192_ecb_datatype_DateTime64_key_32_iv_None = r"""'FB427597072B72E5C3D1D65247DB6A8C'"""
-
-example_mode_aes_192_ecb_datatype_LowCardinality_key_32_iv_None = r"""'851106E40808E28682DAC1AD840A7E92'"""
-
-example_mode_aes_192_ecb_datatype_Array_key_32_iv_None = r"""'D0FE4D4B34CFA03960FA609F1AA18D79'"""
-
-example_mode_aes_192_ecb_datatype_NULL_key_32_iv_None = r"""'\\N'"""
-
-example_mode_aes_192_ecb_datatype_IPv4_key_32_iv_None = r"""'F07B737C70748F1ACDF5DBB874B4D78B'"""
-
-example_mode_aes_192_ecb_datatype_IPv6_key_32_iv_None = r"""'C95A36120328FDE78278655287FF91F44F9776A389026F399064946440DF432F'"""
-
-example_mode_aes_192_ecb_datatype_Enum8_key_32_iv_None = r"""'077626FAA6FD46322732E0A107849CBE'"""
-
-example_mode_aes_192_ecb_datatype_Enum16_key_32_iv_None = r"""'C55FFF6925F48B2DDDD3F8696A6EE21A'"""
-
-example_mode_aes_256_ecb_datatype_bytes_key_32_iv_None = r"""'B73CDD4E7705F0C516612F860715EBE3'"""
-
-example_mode_aes_256_ecb_datatype_emptystring_key_32_iv_None = r"""'217E121CBD32CEC1F6FD3EBDF414BC34'"""
-
-example_mode_aes_256_ecb_datatype_utf8string_key_32_iv_None = r"""'3303F819796DDB5046AAFAB8A39FC3AB8A858B18916A30D2E2C3C9C9BBC961FD'"""
-
-example_mode_aes_256_ecb_datatype_utf8fixedstring_key_32_iv_None = r"""'3303F819796DDB5046AAFAB8A39FC3AB8A858B18916A30D2E2C3C9C9BBC961FD'"""
-
-example_mode_aes_256_ecb_datatype_String_key_32_iv_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'"""
-
-example_mode_aes_256_ecb_datatype_FixedString_key_32_iv_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'"""
-
-example_mode_aes_256_ecb_datatype_UInt8_key_32_iv_None = r"""'3605C5E38A448F5FEFABADF3B9983FDF'"""
-
-example_mode_aes_256_ecb_datatype_UInt16_key_32_iv_None = r"""'2E5299C7A5672D8779BA9DDDE1DBCE00'"""
-
-example_mode_aes_256_ecb_datatype_UInt32_key_32_iv_None = r"""'D8876CDF9B97DD110E780F958C1EA2AA'"""
-
-example_mode_aes_256_ecb_datatype_UInt64_key_32_iv_None = r"""'F6E11A48B6D830F7B8D0817885C05D3C'"""
-
-example_mode_aes_256_ecb_datatype_Int8_key_32_iv_None = r"""'3605C5E38A448F5FEFABADF3B9983FDF'"""
-
-example_mode_aes_256_ecb_datatype_Int16_key_32_iv_None = r"""'2E5299C7A5672D8779BA9DDDE1DBCE00'"""
-
-example_mode_aes_256_ecb_datatype_Int32_key_32_iv_None = r"""'D8876CDF9B97DD110E780F958C1EA2AA'"""
-
-example_mode_aes_256_ecb_datatype_Int64_key_32_iv_None = r"""'F6E11A48B6D830F7B8D0817885C05D3C'"""
-
-example_mode_aes_256_ecb_datatype_Float32_key_32_iv_None = r"""'A11ED1B75CF1C04C6CA3A31E76627D4C'"""
-
-example_mode_aes_256_ecb_datatype_Float64_key_32_iv_None = r"""'464C85EB7DB36D95CF48A3431CC7B2BC'"""
-
-example_mode_aes_256_ecb_datatype_Decimal32_key_32_iv_None = r"""'988C793BD81036C1D05EC47F43851269'"""
-
-example_mode_aes_256_ecb_datatype_Decimal64_key_32_iv_None = r"""'50FFB9C104DBFF3F415F12BA73D6FF1C'"""
-
-example_mode_aes_256_ecb_datatype_Decimal128_key_32_iv_None = r"""'B04C40C085A262E3AA27F8E7F6831DCB217E121CBD32CEC1F6FD3EBDF414BC34'"""
-
-example_mode_aes_256_ecb_datatype_UUID_key_32_iv_None = r"""'6A36D74ACB38B95FA77BC757A7AB2C34217E121CBD32CEC1F6FD3EBDF414BC34'"""
-
-example_mode_aes_256_ecb_datatype_Date_key_32_iv_None = r"""'F1CFA361A9B08FC101F3A4707A3E04D2'"""
-
-example_mode_aes_256_ecb_datatype_DateTime_key_32_iv_None = r"""'D58178485CD1AE1C30F68383307B8BC5'"""
-
-example_mode_aes_256_ecb_datatype_DateTime64_key_32_iv_None = r"""'A19B65BCB740B2AF4D421CE1DEC43608'"""
-
-example_mode_aes_256_ecb_datatype_LowCardinality_key_32_iv_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'"""
-
-example_mode_aes_256_ecb_datatype_Array_key_32_iv_None = r"""'C4071E4FD44F004347EA9932326B7038'"""
-
-example_mode_aes_256_ecb_datatype_NULL_key_32_iv_None = r"""'\\N'"""
-
-example_mode_aes_256_ecb_datatype_IPv4_key_32_iv_None = r"""'6C7950041CB4041D4D8036FCD22E3B06'"""
-
-example_mode_aes_256_ecb_datatype_IPv6_key_32_iv_None = r"""'8CBF2DC164F4086B8DD14B75E3065621217E121CBD32CEC1F6FD3EBDF414BC34'"""
-
-example_mode_aes_256_ecb_datatype_Enum8_key_32_iv_None = r"""'3605C5E38A448F5FEFABADF3B9983FDF'"""
-
-example_mode_aes_256_ecb_datatype_Enum16_key_32_iv_None = r"""'2E5299C7A5672D8779BA9DDDE1DBCE00'"""
-
-example_mode_aes_256_ecb_datatype_bytes_key_64_iv_None = r"""'2600697679EF0B3989C4EA3C0323CB8B'"""
-
-example_mode_aes_256_ecb_datatype_emptystring_key_64_iv_None = r"""'1F788FE6D86C317549697FBF0C07FA43'"""
-
-example_mode_aes_256_ecb_datatype_utf8string_key_64_iv_None = r"""'AB49D11AECD4A57A8BB4155C9F6733FBC9E3E51C40CDF6FA420050B461F48FA7'"""
-
-example_mode_aes_256_ecb_datatype_utf8fixedstring_key_64_iv_None = r"""'AB49D11AECD4A57A8BB4155C9F6733FBC9E3E51C40CDF6FA420050B461F48FA7'"""
-
-example_mode_aes_256_ecb_datatype_String_key_64_iv_None = r"""'7492B9A2D0E86DAF1DBCAEDBAD9E3D7E'"""
-
-example_mode_aes_256_ecb_datatype_FixedString_key_64_iv_None = r"""'7492B9A2D0E86DAF1DBCAEDBAD9E3D7E'"""
-
-example_mode_aes_256_ecb_datatype_UInt8_key_64_iv_None = r"""'FE2DE0EEF32A0510DC312ED77D1293EB'"""
-
-example_mode_aes_256_ecb_datatype_UInt16_key_64_iv_None = r"""'6805EDF8559E85ECBC4CA0AC3E241CB5'"""
-
-example_mode_aes_256_ecb_datatype_UInt32_key_64_iv_None = r"""'B2E6C9CE7EB187B7F56E754587C6BDBE'"""
-
-example_mode_aes_256_ecb_datatype_UInt64_key_64_iv_None = r"""'4F805F6D67E44124754951AEC9FDCEF3'"""
-
-example_mode_aes_256_ecb_datatype_Int8_key_64_iv_None = r"""'FE2DE0EEF32A0510DC312ED77D1293EB'"""
-
-example_mode_aes_256_ecb_datatype_Int16_key_64_iv_None = r"""'6805EDF8559E85ECBC4CA0AC3E241CB5'"""
-
-example_mode_aes_256_ecb_datatype_Int32_key_64_iv_None = r"""'B2E6C9CE7EB187B7F56E754587C6BDBE'"""
-
-example_mode_aes_256_ecb_datatype_Int64_key_64_iv_None = r"""'4F805F6D67E44124754951AEC9FDCEF3'"""
-
-example_mode_aes_256_ecb_datatype_Float32_key_64_iv_None = r"""'8014D3F1CFF0B7A66AE06FBDFA006FA6'"""
-
-example_mode_aes_256_ecb_datatype_Float64_key_64_iv_None = r"""'2C734E3A5A82C65E8918FA329B936114'"""
-
-example_mode_aes_256_ecb_datatype_Decimal32_key_64_iv_None = r"""'95245BC3292B4749E8CC7B5FDD26CAD9'"""
-
-example_mode_aes_256_ecb_datatype_Decimal64_key_64_iv_None = r"""'443682D0541F666078718D4790C3CE4E'"""
-
-example_mode_aes_256_ecb_datatype_Decimal128_key_64_iv_None = r"""'BE7F01084B171062CB4CCCCF9BB77D671F788FE6D86C317549697FBF0C07FA43'"""
-
-example_mode_aes_256_ecb_datatype_UUID_key_64_iv_None = r"""'65F2B1003C30A2E7148652BA06EF09FC1F788FE6D86C317549697FBF0C07FA43'"""
-
-example_mode_aes_256_ecb_datatype_Date_key_64_iv_None = r"""'D72724C85F90712153FC49FB33432644'"""
-
-example_mode_aes_256_ecb_datatype_DateTime_key_64_iv_None = r"""'B734143D37365E5C3325E0396BABC2AB'"""
-
-example_mode_aes_256_ecb_datatype_DateTime64_key_64_iv_None = r"""'78DDC273BE606E8F546538FC02508360'"""
-
-example_mode_aes_256_ecb_datatype_LowCardinality_key_64_iv_None = r"""'7492B9A2D0E86DAF1DBCAEDBAD9E3D7E'"""
-
-example_mode_aes_256_ecb_datatype_Array_key_64_iv_None = r"""'592C364BE5AEBE911096DEB1F6C75AB9'"""
-
-example_mode_aes_256_ecb_datatype_NULL_key_64_iv_None = r"""'\\N'"""
-
-example_mode_aes_256_ecb_datatype_IPv4_key_64_iv_None = r"""'F5401B3B979784C3FF4C86DD726872F9'"""
-
-example_mode_aes_256_ecb_datatype_IPv6_key_64_iv_None = r"""'3F810185F7D07B5E5A897E96BCA930ED1F788FE6D86C317549697FBF0C07FA43'"""
-
-example_mode_aes_256_ecb_datatype_Enum8_key_64_iv_None = r"""'FE2DE0EEF32A0510DC312ED77D1293EB'"""
-
-example_mode_aes_256_ecb_datatype_Enum16_key_64_iv_None = r"""'6805EDF8559E85ECBC4CA0AC3E241CB5'"""
-
-example_mode_aes_128_cbc_datatype_bytes_key_16_iv_None = r"""'7B62A15720E13327948BF706B89CF2BE'"""
-
-example_mode_aes_128_cbc_datatype_emptystring_key_16_iv_None = r"""'F30C69C4F945E654EBD4B388B1C8F790'"""
-
-example_mode_aes_128_cbc_datatype_utf8string_key_16_iv_None = r"""'4F5025E938F215F36B4EFEBD8A328B5C00AF476CA1EE03B7C0D297C2BF287339'"""
-
-example_mode_aes_128_cbc_datatype_utf8fixedstring_key_16_iv_None = r"""'4F5025E938F215F36B4EFEBD8A328B5C00AF476CA1EE03B7C0D297C2BF287339'"""
-
-example_mode_aes_128_cbc_datatype_String_key_16_iv_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'"""
-
-example_mode_aes_128_cbc_datatype_FixedString_key_16_iv_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'"""
-
-example_mode_aes_128_cbc_datatype_UInt8_key_16_iv_None = r"""'4CDF8A192A06AC6EDBDCE2BFB53B7D73'"""
-
-example_mode_aes_128_cbc_datatype_UInt16_key_16_iv_None = r"""'12FB5B75B1CB5DF0DC70D8039758691D'"""
-
-example_mode_aes_128_cbc_datatype_UInt32_key_16_iv_None = r"""'E86C0858C6D9CCD970BA6DC320038306'"""
-
-example_mode_aes_128_cbc_datatype_UInt64_key_16_iv_None = r"""'2D43D83E0250AE8AC4403551B639F694'"""
-
-example_mode_aes_128_cbc_datatype_Int8_key_16_iv_None = r"""'4CDF8A192A06AC6EDBDCE2BFB53B7D73'"""
-
-example_mode_aes_128_cbc_datatype_Int16_key_16_iv_None = r"""'12FB5B75B1CB5DF0DC70D8039758691D'"""
-
-example_mode_aes_128_cbc_datatype_Int32_key_16_iv_None = r"""'E86C0858C6D9CCD970BA6DC320038306'"""
-
-example_mode_aes_128_cbc_datatype_Int64_key_16_iv_None = r"""'2D43D83E0250AE8AC4403551B639F694'"""
-
-example_mode_aes_128_cbc_datatype_Float32_key_16_iv_None = r"""'FF4D70D9A1050E6BBDD0325FC45CC22D'"""
-
-example_mode_aes_128_cbc_datatype_Float64_key_16_iv_None = r"""'75FE6B4A722A31D7760680CC1B9F131D'"""
-
-example_mode_aes_128_cbc_datatype_Decimal32_key_16_iv_None = r"""'83BBD7CCE7E5A38071653870475D48D2'"""
-
-example_mode_aes_128_cbc_datatype_Decimal64_key_16_iv_None = r"""'BE0DD9302B2952CE9CC3721DD85C8E66'"""
-
-example_mode_aes_128_cbc_datatype_Decimal128_key_16_iv_None = r"""'5F3DBFA74809E45E03980357B26787AF0D55B905F5525D3F5916FF811D8A6E7E'"""
-
-example_mode_aes_128_cbc_datatype_UUID_key_16_iv_None = r"""'FF9161B222B4A67481271035745F06D991B6833DF67CBA9BC6E1AAEADBE363BB'"""
-
-example_mode_aes_128_cbc_datatype_Date_key_16_iv_None = r"""'1E4FBE33752D96D147E890C29A409BFE'"""
-
-example_mode_aes_128_cbc_datatype_DateTime_key_16_iv_None = r"""'384F3D97B78D52C73CD06C0E1B6DE399'"""
-
-example_mode_aes_128_cbc_datatype_DateTime64_key_16_iv_None = r"""'C7F50A2D0175F3ED280AD42FF01FF5F2'"""
-
-example_mode_aes_128_cbc_datatype_LowCardinality_key_16_iv_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'"""
-
-example_mode_aes_128_cbc_datatype_Array_key_16_iv_None = r"""'D9152D05CFA9E162983A5A2E883109B4'"""
-
-example_mode_aes_128_cbc_datatype_NULL_key_16_iv_None = r"""'\\N'"""
-
-example_mode_aes_128_cbc_datatype_IPv4_key_16_iv_None = r"""'4F32782638C1F33C6A7202CA83F0C12C'"""
-
-example_mode_aes_128_cbc_datatype_IPv6_key_16_iv_None = r"""'F54700FF04ADAD342BA6830DB12AD7E9B1B4BE8B15BAE0B2C9196D69E3D53C6C'"""
-
-example_mode_aes_128_cbc_datatype_Enum8_key_16_iv_None = r"""'4CDF8A192A06AC6EDBDCE2BFB53B7D73'"""
-
-example_mode_aes_128_cbc_datatype_Enum16_key_16_iv_None = r"""'12FB5B75B1CB5DF0DC70D8039758691D'"""
-
-example_mode_aes_192_cbc_datatype_bytes_key_24_iv_None = r"""'C60D7A90C41260E3CD03422E9163144A'"""
-
-example_mode_aes_192_cbc_datatype_emptystring_key_24_iv_None = r"""'D8ED6FC305C161EFCF57A383DAF31A83'"""
-
-example_mode_aes_192_cbc_datatype_utf8string_key_24_iv_None = r"""'7C1CE735A57407291267928DE0E2E47918C12F093BCD530F69669FC25B23195A'"""
-
-example_mode_aes_192_cbc_datatype_utf8fixedstring_key_24_iv_None = r"""'7C1CE735A57407291267928DE0E2E47918C12F093BCD530F69669FC25B23195A'"""
-
-example_mode_aes_192_cbc_datatype_String_key_24_iv_None = r"""'1AE38A541D466EDFED572EE839B0907F'"""
-
-example_mode_aes_192_cbc_datatype_FixedString_key_24_iv_None = r"""'1AE38A541D466EDFED572EE839B0907F'"""
-
-example_mode_aes_192_cbc_datatype_UInt8_key_24_iv_None = r"""'01CC3C67F07C3FA6E5EFB7AE5F19130B'"""
-
-example_mode_aes_192_cbc_datatype_UInt16_key_24_iv_None = r"""'B50A3019F16B9C643FB40259E4B09308'"""
-
-example_mode_aes_192_cbc_datatype_UInt32_key_24_iv_None = r"""'9F32F3F6B3C3B1830F56B5B94C93875D'"""
-
-example_mode_aes_192_cbc_datatype_UInt64_key_24_iv_None = r"""'8DE807D54B7717BFC773567D9FFE292D'"""
-
-example_mode_aes_192_cbc_datatype_Int8_key_24_iv_None = r"""'01CC3C67F07C3FA6E5EFB7AE5F19130B'"""
-
-example_mode_aes_192_cbc_datatype_Int16_key_24_iv_None = r"""'B50A3019F16B9C643FB40259E4B09308'"""
-
-example_mode_aes_192_cbc_datatype_Int32_key_24_iv_None = r"""'9F32F3F6B3C3B1830F56B5B94C93875D'"""
-
-example_mode_aes_192_cbc_datatype_Int64_key_24_iv_None = r"""'8DE807D54B7717BFC773567D9FFE292D'"""
-
-example_mode_aes_192_cbc_datatype_Float32_key_24_iv_None = r"""'4E0C122631ED64EAD726833291A81878'"""
-
-example_mode_aes_192_cbc_datatype_Float64_key_24_iv_None = r"""'3F723599278E22E4692CE7D7D5F9A12F'"""
-
-example_mode_aes_192_cbc_datatype_Decimal32_key_24_iv_None = r"""'2420D49DBAA5CEF7D853C98DA1BD33BF'"""
-
-example_mode_aes_192_cbc_datatype_Decimal64_key_24_iv_None = r"""'FDF594113FCC2776653ED109A51FADF1'"""
-
-example_mode_aes_192_cbc_datatype_Decimal128_key_24_iv_None = r"""'79207931793E374FB5A3A2AC1ECA857A583603B3047000A843425EECA4C35311'"""
-
-example_mode_aes_192_cbc_datatype_UUID_key_24_iv_None = r"""'9FDB738E78D0D2F774C484ED82A854E46B580C61DBE08478DC523DA6AD605078'"""
-
-example_mode_aes_192_cbc_datatype_Date_key_24_iv_None = r"""'2CDD4685168FA3E2A7FA2092E86F44D4'"""
-
-example_mode_aes_192_cbc_datatype_DateTime_key_24_iv_None = r"""'A4BEE097872E44FAD94D6707D6643DF5'"""
-
-example_mode_aes_192_cbc_datatype_DateTime64_key_24_iv_None = r"""'1798B23C09F783623943560DF142E0F3'"""
-
-example_mode_aes_192_cbc_datatype_LowCardinality_key_24_iv_None = r"""'1AE38A541D466EDFED572EE839B0907F'"""
-
-example_mode_aes_192_cbc_datatype_Array_key_24_iv_None = r"""'7C0B9021CAF2CBBB06DBF589740DCC65'"""
-
-example_mode_aes_192_cbc_datatype_NULL_key_24_iv_None = r"""'\\N'"""
-
-example_mode_aes_192_cbc_datatype_IPv4_key_24_iv_None = r"""'B20465C932A0719BA04E2F76371510D8'"""
-
-example_mode_aes_192_cbc_datatype_IPv6_key_24_iv_None = r"""'CCCDC9B9C3F182254591DFEDDCE9F2326879326F3973401A6293A92BCB8EDFC4'"""
-
-example_mode_aes_192_cbc_datatype_Enum8_key_24_iv_None = r"""'01CC3C67F07C3FA6E5EFB7AE5F19130B'"""
-
-example_mode_aes_192_cbc_datatype_Enum16_key_24_iv_None = r"""'B50A3019F16B9C643FB40259E4B09308'"""
-
-example_mode_aes_256_cbc_datatype_bytes_key_32_iv_None = r"""'B73CDD4E7705F0C516612F860715EBE3'"""
-
-example_mode_aes_256_cbc_datatype_emptystring_key_32_iv_None = r"""'217E121CBD32CEC1F6FD3EBDF414BC34'"""
-
-example_mode_aes_256_cbc_datatype_utf8string_key_32_iv_None = r"""'3303F819796DDB5046AAFAB8A39FC3ABC19300E0966158A167939EDD20D39907'"""
-
-example_mode_aes_256_cbc_datatype_utf8fixedstring_key_32_iv_None = r"""'3303F819796DDB5046AAFAB8A39FC3ABC19300E0966158A167939EDD20D39907'"""
-
-example_mode_aes_256_cbc_datatype_String_key_32_iv_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'"""
-
-example_mode_aes_256_cbc_datatype_FixedString_key_32_iv_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'"""
-
-example_mode_aes_256_cbc_datatype_UInt8_key_32_iv_None = r"""'3605C5E38A448F5FEFABADF3B9983FDF'"""
-
-example_mode_aes_256_cbc_datatype_UInt16_key_32_iv_None = r"""'2E5299C7A5672D8779BA9DDDE1DBCE00'"""
-
-example_mode_aes_256_cbc_datatype_UInt32_key_32_iv_None = r"""'D8876CDF9B97DD110E780F958C1EA2AA'"""
-
-example_mode_aes_256_cbc_datatype_UInt64_key_32_iv_None = r"""'F6E11A48B6D830F7B8D0817885C05D3C'"""
-
-example_mode_aes_256_cbc_datatype_Int8_key_32_iv_None = r"""'3605C5E38A448F5FEFABADF3B9983FDF'"""
-
-example_mode_aes_256_cbc_datatype_Int16_key_32_iv_None = r"""'2E5299C7A5672D8779BA9DDDE1DBCE00'"""
-
-example_mode_aes_256_cbc_datatype_Int32_key_32_iv_None = r"""'D8876CDF9B97DD110E780F958C1EA2AA'"""
-
-example_mode_aes_256_cbc_datatype_Int64_key_32_iv_None = r"""'F6E11A48B6D830F7B8D0817885C05D3C'"""
-
-example_mode_aes_256_cbc_datatype_Float32_key_32_iv_None = r"""'A11ED1B75CF1C04C6CA3A31E76627D4C'"""
-
-example_mode_aes_256_cbc_datatype_Float64_key_32_iv_None = r"""'464C85EB7DB36D95CF48A3431CC7B2BC'"""
-
-example_mode_aes_256_cbc_datatype_Decimal32_key_32_iv_None = r"""'988C793BD81036C1D05EC47F43851269'"""
-
-example_mode_aes_256_cbc_datatype_Decimal64_key_32_iv_None = r"""'50FFB9C104DBFF3F415F12BA73D6FF1C'"""
-
-example_mode_aes_256_cbc_datatype_Decimal128_key_32_iv_None = r"""'B04C40C085A262E3AA27F8E7F6831DCB36585C228B0286E7A8D8DBAF754C4C38'"""
-
-example_mode_aes_256_cbc_datatype_UUID_key_32_iv_None = r"""'6A36D74ACB38B95FA77BC757A7AB2C3428548E6132D69A22B320775A21ABA11F'"""
-
-example_mode_aes_256_cbc_datatype_Date_key_32_iv_None = r"""'F1CFA361A9B08FC101F3A4707A3E04D2'"""
-
-example_mode_aes_256_cbc_datatype_DateTime_key_32_iv_None = r"""'D58178485CD1AE1C30F68383307B8BC5'"""
-
-example_mode_aes_256_cbc_datatype_DateTime64_key_32_iv_None = r"""'A19B65BCB740B2AF4D421CE1DEC43608'"""
-
-example_mode_aes_256_cbc_datatype_LowCardinality_key_32_iv_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'"""
-
-example_mode_aes_256_cbc_datatype_Array_key_32_iv_None = r"""'C4071E4FD44F004347EA9932326B7038'"""
-
-example_mode_aes_256_cbc_datatype_NULL_key_32_iv_None = r"""'\\N'"""
-
-example_mode_aes_256_cbc_datatype_IPv4_key_32_iv_None = r"""'6C7950041CB4041D4D8036FCD22E3B06'"""
-
-example_mode_aes_256_cbc_datatype_IPv6_key_32_iv_None = r"""'8CBF2DC164F4086B8DD14B75E3065621393DE8421BAA5AE5E87096AEA7087507'"""
-
-example_mode_aes_256_cbc_datatype_Enum8_key_32_iv_None = r"""'3605C5E38A448F5FEFABADF3B9983FDF'"""
-
-example_mode_aes_256_cbc_datatype_Enum16_key_32_iv_None = r"""'2E5299C7A5672D8779BA9DDDE1DBCE00'"""
-
-example_mode_aes_128_cbc_datatype_bytes_key_16_iv_16 = r"""'CDA4B7027137998B9A33C2096C9A50DD'"""
-
-example_mode_aes_128_cbc_datatype_emptystring_key_16_iv_16 = r"""'56A77308430BA344FFBF016999795ED5'"""
-
-example_mode_aes_128_cbc_datatype_utf8string_key_16_iv_16 = r"""'0BD95BFF6DE2DC43D936DAF23937B06D602786A6770B627EB56BC7F681B1C9DB'"""
-
-example_mode_aes_128_cbc_datatype_utf8fixedstring_key_16_iv_16 = r"""'0BD95BFF6DE2DC43D936DAF23937B06D602786A6770B627EB56BC7F681B1C9DB'"""
-
-example_mode_aes_128_cbc_datatype_String_key_16_iv_16 = r"""'D017D171B3865D6EA347E14167261F41'"""
-
-example_mode_aes_128_cbc_datatype_FixedString_key_16_iv_16 = r"""'D017D171B3865D6EA347E14167261F41'"""
-
-example_mode_aes_128_cbc_datatype_UInt8_key_16_iv_16 = r"""'A5BD67663C14A01DC9AB3B5F7B0F9383'"""
-
-example_mode_aes_128_cbc_datatype_UInt16_key_16_iv_16 = r"""'02D98283BEADCA1AC6EF925F9BF86960'"""
-
-example_mode_aes_128_cbc_datatype_UInt32_key_16_iv_16 = r"""'E72BD2245C3B2B7474300D09DBD85F3F'"""
-
-example_mode_aes_128_cbc_datatype_UInt64_key_16_iv_16 = r"""'C9032C59328DEA2EE03ACDBEDFAE7475'"""
-
-example_mode_aes_128_cbc_datatype_Int8_key_16_iv_16 = r"""'A5BD67663C14A01DC9AB3B5F7B0F9383'"""
-
-example_mode_aes_128_cbc_datatype_Int16_key_16_iv_16 = r"""'02D98283BEADCA1AC6EF925F9BF86960'"""
-
-example_mode_aes_128_cbc_datatype_Int32_key_16_iv_16 = r"""'E72BD2245C3B2B7474300D09DBD85F3F'"""
-
-example_mode_aes_128_cbc_datatype_Int64_key_16_iv_16 = r"""'C9032C59328DEA2EE03ACDBEDFAE7475'"""
-
-example_mode_aes_128_cbc_datatype_Float32_key_16_iv_16 = r"""'A5425BDEB6B83E311C45249DAF3153F5'"""
-
-example_mode_aes_128_cbc_datatype_Float64_key_16_iv_16 = r"""'EEDA98EC4045C7D351F3905313073B79'"""
-
-example_mode_aes_128_cbc_datatype_Decimal32_key_16_iv_16 = r"""'52EBB74292ECD37A29E9809166CC77DB'"""
-
-example_mode_aes_128_cbc_datatype_Decimal64_key_16_iv_16 = r"""'95EF455767EC8FBD32BAAEFFB44FEEB7'"""
-
-example_mode_aes_128_cbc_datatype_Decimal128_key_16_iv_16 = r"""'94C066884FA09B0D3C750F20A2823304A2FE20B6B69AB18373E3F58623E0D7FB'"""
-
-example_mode_aes_128_cbc_datatype_UUID_key_16_iv_16 = r"""'1D909C15BB882E89AD68B1EFEAC72148DCD05E2303B6BE19007A945AFB778B42'"""
-
-example_mode_aes_128_cbc_datatype_Date_key_16_iv_16 = r"""'24A4F8CE8A9FAE48A0AFEB8A6203EFEA'"""
-
-example_mode_aes_128_cbc_datatype_DateTime_key_16_iv_16 = r"""'0DD5554819E3995B1B6B00362AEE9424'"""
-
-example_mode_aes_128_cbc_datatype_DateTime64_key_16_iv_16 = r"""'0E55319903957C9D1FDA4FB65C3871CB'"""
-
-example_mode_aes_128_cbc_datatype_LowCardinality_key_16_iv_16 = r"""'D017D171B3865D6EA347E14167261F41'"""
-
-example_mode_aes_128_cbc_datatype_Array_key_16_iv_16 = r"""'D53C82A5D13256B88DF41C1C1D924E40'"""
-
-example_mode_aes_128_cbc_datatype_NULL_key_16_iv_16 = r"""'\\N'"""
-
-example_mode_aes_128_cbc_datatype_IPv4_key_16_iv_16 = r"""'C0D81AAB3134EAB5B1F190958C6A29F9'"""
-
-example_mode_aes_128_cbc_datatype_IPv6_key_16_iv_16 = r"""'AE1A36F75C9BB387121445069A9968CA247FA4459ED3C8809089FEE334EB1EC7'"""
-
-example_mode_aes_128_cbc_datatype_Enum8_key_16_iv_16 = r"""'A5BD67663C14A01DC9AB3B5F7B0F9383'"""
-
-example_mode_aes_128_cbc_datatype_Enum16_key_16_iv_16 = r"""'02D98283BEADCA1AC6EF925F9BF86960'"""
-
-example_mode_aes_128_cbc_datatype_bytes_key_24_iv_24 = r"""'FD4D81969EDCB22A5B5DE4E21BDFE267'"""
-
-example_mode_aes_128_cbc_datatype_emptystring_key_24_iv_24 = r"""'BEFE724909AC17B32920D0400312227E'"""
-
-example_mode_aes_128_cbc_datatype_utf8string_key_24_iv_24 = r"""'A4FBBF549A9D453212CB69882DF12D34DAA659D7D176B78DE14F6AF36E0BE2C9'"""
-
-example_mode_aes_128_cbc_datatype_utf8fixedstring_key_24_iv_24 = r"""'A4FBBF549A9D453212CB69882DF12D34DAA659D7D176B78DE14F6AF36E0BE2C9'"""
-
-example_mode_aes_128_cbc_datatype_String_key_24_iv_24 = r"""'73C9874744984892250CCCEC8541D690'"""
-
-example_mode_aes_128_cbc_datatype_FixedString_key_24_iv_24 = r"""'73C9874744984892250CCCEC8541D690'"""
-
-example_mode_aes_128_cbc_datatype_UInt8_key_24_iv_24 = r"""'0E97B8F125240D96125B8AC23A798981'"""
-
-example_mode_aes_128_cbc_datatype_UInt16_key_24_iv_24 = r"""'9118F2C6B4E17730C62F85CB22E9A446'"""
-
-example_mode_aes_128_cbc_datatype_UInt32_key_24_iv_24 = r"""'2A189EB114A9487142573673C0F30929'"""
-
-example_mode_aes_128_cbc_datatype_UInt64_key_24_iv_24 = r"""'B6CA3E3C1C7830203FABD429664E81B3'"""
-
-example_mode_aes_128_cbc_datatype_Int8_key_24_iv_24 = r"""'0E97B8F125240D96125B8AC23A798981'"""
-
-example_mode_aes_128_cbc_datatype_Int16_key_24_iv_24 = r"""'9118F2C6B4E17730C62F85CB22E9A446'"""
-
-example_mode_aes_128_cbc_datatype_Int32_key_24_iv_24 = r"""'2A189EB114A9487142573673C0F30929'"""
-
-example_mode_aes_128_cbc_datatype_Int64_key_24_iv_24 = r"""'B6CA3E3C1C7830203FABD429664E81B3'"""
-
-example_mode_aes_128_cbc_datatype_Float32_key_24_iv_24 = r"""'79B44B6E26BC4BBACBBE312329F8C86D'"""
-
-example_mode_aes_128_cbc_datatype_Float64_key_24_iv_24 = r"""'C23864E616278AD006ED806C1EF89F71'"""
-
-example_mode_aes_128_cbc_datatype_Decimal32_key_24_iv_24 = r"""'4E14763E17CD954A2754768FF664CECE'"""
-
-example_mode_aes_128_cbc_datatype_Decimal64_key_24_iv_24 = r"""'A5D655F79EA638ECD6879A515853DD50'"""
-
-example_mode_aes_128_cbc_datatype_Decimal128_key_24_iv_24 = r"""'5C1C88BE7B68B91167BD317D3E6291A0D7920AEDA123237D0223EFB15F9C8ADC'"""
-
-example_mode_aes_128_cbc_datatype_UUID_key_24_iv_24 = r"""'ADF1CF6C8AF83CBD4BB3313E7E88FE8C377730890CC89DD91E95436ABC5E4F3A'"""
-
-example_mode_aes_128_cbc_datatype_Date_key_24_iv_24 = r"""'3127F80211A13ED02CED473BF2BFC28B'"""
-
-example_mode_aes_128_cbc_datatype_DateTime_key_24_iv_24 = r"""'A6B567CCFCE4F693BD6575D2D4DF498B'"""
-
-example_mode_aes_128_cbc_datatype_DateTime64_key_24_iv_24 = r"""'410F1A2A9E39722A1D0B549C3ADF9526'"""
-
-example_mode_aes_128_cbc_datatype_LowCardinality_key_24_iv_24 = r"""'73C9874744984892250CCCEC8541D690'"""
-
-example_mode_aes_128_cbc_datatype_Array_key_24_iv_24 = r"""'14A8202D2CACBE584BE9313C72F0478D'"""
-
-example_mode_aes_128_cbc_datatype_NULL_key_24_iv_24 = r"""'\\N'"""
-
-example_mode_aes_128_cbc_datatype_IPv4_key_24_iv_24 = r"""'9C554B2C04C5C9EAC0E7E36F1BD5CB80'"""
-
-example_mode_aes_128_cbc_datatype_IPv6_key_24_iv_24 = r"""'D548D293E5F41FE72A940A6A29EDBCDA8AAEBAC8BA27FB0B4DB65DAD63895B9F'"""
-
-example_mode_aes_128_cbc_datatype_Enum8_key_24_iv_24 = r"""'0E97B8F125240D96125B8AC23A798981'"""
-
-example_mode_aes_128_cbc_datatype_Enum16_key_24_iv_24 = r"""'9118F2C6B4E17730C62F85CB22E9A446'"""
-
-example_mode_aes_192_cbc_datatype_bytes_key_24_iv_16 = r"""'67771349942D4F812553F2E1E3FFB276'"""
-
-example_mode_aes_192_cbc_datatype_emptystring_key_24_iv_16 = r"""'62E9214DB5E239F0CAD31ADF26AB313F'"""
-
-example_mode_aes_192_cbc_datatype_utf8string_key_24_iv_16 = r"""'D619039D0956015C34336196DB3EB5A4710B2B8860344AB2625E9269C5E4A6CC'"""
-
-example_mode_aes_192_cbc_datatype_utf8fixedstring_key_24_iv_16 = r"""'D619039D0956015C34336196DB3EB5A4710B2B8860344AB2625E9269C5E4A6CC'"""
-
-example_mode_aes_192_cbc_datatype_String_key_24_iv_16 = r"""'A3DB45D129A5C9FDB5ED66E782B28BD2'"""
-
-example_mode_aes_192_cbc_datatype_FixedString_key_24_iv_16 = r"""'A3DB45D129A5C9FDB5ED66E782B28BD2'"""
-
-example_mode_aes_192_cbc_datatype_UInt8_key_24_iv_16 = r"""'F2A751470B32C58822F23B1417C11279'"""
-
-example_mode_aes_192_cbc_datatype_UInt16_key_24_iv_16 = r"""'CA1ECFEA89CF520D8FA14A38235E5FA5'"""
-
-example_mode_aes_192_cbc_datatype_UInt32_key_24_iv_16 = r"""'57F211370522621F23B59C8304878904'"""
-
-example_mode_aes_192_cbc_datatype_UInt64_key_24_iv_16 = r"""'DCF974CD88752B215284625F9164F5D4'"""
-
-example_mode_aes_192_cbc_datatype_Int8_key_24_iv_16 = r"""'F2A751470B32C58822F23B1417C11279'"""
-
-example_mode_aes_192_cbc_datatype_Int16_key_24_iv_16 = r"""'CA1ECFEA89CF520D8FA14A38235E5FA5'"""
-
-example_mode_aes_192_cbc_datatype_Int32_key_24_iv_16 = r"""'57F211370522621F23B59C8304878904'"""
-
-example_mode_aes_192_cbc_datatype_Int64_key_24_iv_16 = r"""'DCF974CD88752B215284625F9164F5D4'"""
-
-example_mode_aes_192_cbc_datatype_Float32_key_24_iv_16 = r"""'62EBE4FD1035D405BBD6C41436780E13'"""
-
-example_mode_aes_192_cbc_datatype_Float64_key_24_iv_16 = r"""'5706FC9892A4C1AB48FC93E13C9C72FE'"""
-
-example_mode_aes_192_cbc_datatype_Decimal32_key_24_iv_16 = r"""'BB056843D369A5E55982C92AD52EEC07'"""
-
-example_mode_aes_192_cbc_datatype_Decimal64_key_24_iv_16 = r"""'70ACD4156F9AC1444A75EFCB9202CA00'"""
-
-example_mode_aes_192_cbc_datatype_Decimal128_key_24_iv_16 = r"""'04748A45840A0CAAC83F139DB01C504B01FC56631A8B2FFBE68F2FC85B6FEEDE'"""
-
-example_mode_aes_192_cbc_datatype_UUID_key_24_iv_16 = r"""'D7B2ABC08F67823F61C3E8F680C12B3A8AA3E3711D412CB55ACFBC89C14949A8'"""
-
-example_mode_aes_192_cbc_datatype_Date_key_24_iv_16 = r"""'734BBE526E56B280E90E53DDEA7DB69B'"""
-
-example_mode_aes_192_cbc_datatype_DateTime_key_24_iv_16 = r"""'9B9BE7CC20F75DA3F39F688DE3A1ADAA'"""
-
-example_mode_aes_192_cbc_datatype_DateTime64_key_24_iv_16 = r"""'554FCAAF985378A561F7C6ED91E20C89'"""
-
-example_mode_aes_192_cbc_datatype_LowCardinality_key_24_iv_16 = r"""'A3DB45D129A5C9FDB5ED66E782B28BD2'"""
-
-example_mode_aes_192_cbc_datatype_Array_key_24_iv_16 = r"""'D85AF1078F110329896EFC462340171E'"""
-
-example_mode_aes_192_cbc_datatype_NULL_key_24_iv_16 = r"""'\\N'"""
-
-example_mode_aes_192_cbc_datatype_IPv4_key_24_iv_16 = r"""'6AF45078B1E924B6C107D4C0236EA937'"""
-
-example_mode_aes_192_cbc_datatype_IPv6_key_24_iv_16 = r"""'9E4F8E54B265A340090DC7FE4F53BB50048442F5632A7B1630AE80DFD938E9AA'"""
-
-example_mode_aes_192_cbc_datatype_Enum8_key_24_iv_16 = r"""'F2A751470B32C58822F23B1417C11279'"""
-
-example_mode_aes_192_cbc_datatype_Enum16_key_24_iv_16 = r"""'CA1ECFEA89CF520D8FA14A38235E5FA5'"""
-
-example_mode_aes_192_cbc_datatype_bytes_key_32_iv_32 = r"""'34FFC84A0D7CAD43F6BDB7F0C57CE511'"""
-
-example_mode_aes_192_cbc_datatype_emptystring_key_32_iv_32 = r"""'B9937ECA1C6EADCCA37CD7E8BA89D939'"""
-
-example_mode_aes_192_cbc_datatype_utf8string_key_32_iv_32 = r"""'00A1C691A68F5BF50BA973D72A5DBFBD579279FD953AE222F41FD0DAF48A3C90'"""
-
-example_mode_aes_192_cbc_datatype_utf8fixedstring_key_32_iv_32 = r"""'00A1C691A68F5BF50BA973D72A5DBFBD579279FD953AE222F41FD0DAF48A3C90'"""
-
-example_mode_aes_192_cbc_datatype_String_key_32_iv_32 = r"""'508551DA505F6538F90DC607423CFAD4'"""
-
-example_mode_aes_192_cbc_datatype_FixedString_key_32_iv_32 = r"""'508551DA505F6538F90DC607423CFAD4'"""
-
-example_mode_aes_192_cbc_datatype_UInt8_key_32_iv_32 = r"""'C2D3A1603DBAC305D8180F85A3830300'"""
-
-example_mode_aes_192_cbc_datatype_UInt16_key_32_iv_32 = r"""'A7EEA5561C4BB75015632824CAE9AC1E'"""
-
-example_mode_aes_192_cbc_datatype_UInt32_key_32_iv_32 = r"""'97EE21986E9A9F3A4F67851D05C93830'"""
-
-example_mode_aes_192_cbc_datatype_UInt64_key_32_iv_32 = r"""'474F106EAC813E4B432B2CA58D11F0E1'"""
-
-example_mode_aes_192_cbc_datatype_Int8_key_32_iv_32 = r"""'C2D3A1603DBAC305D8180F85A3830300'"""
-
-example_mode_aes_192_cbc_datatype_Int16_key_32_iv_32 = r"""'A7EEA5561C4BB75015632824CAE9AC1E'"""
-
-example_mode_aes_192_cbc_datatype_Int32_key_32_iv_32 = r"""'97EE21986E9A9F3A4F67851D05C93830'"""
-
-example_mode_aes_192_cbc_datatype_Int64_key_32_iv_32 = r"""'474F106EAC813E4B432B2CA58D11F0E1'"""
-
-example_mode_aes_192_cbc_datatype_Float32_key_32_iv_32 = r"""'3C76B134B1FF458CBE4430DCDF3EE8F9'"""
-
-example_mode_aes_192_cbc_datatype_Float64_key_32_iv_32 = r"""'0C2C54B82F3B7A889696EACBBBC5AA96'"""
-
-example_mode_aes_192_cbc_datatype_Decimal32_key_32_iv_32 = r"""'A038F21DD2F3C6FE3382C849E6BCC6B8'"""
-
-example_mode_aes_192_cbc_datatype_Decimal64_key_32_iv_32 = r"""'CE5E44EF4BAC3455C1FE57C82498FC32'"""
-
-example_mode_aes_192_cbc_datatype_Decimal128_key_32_iv_32 = r"""'DF51ED3C3BE2A229F07C4C9BB64902DD9383D2999BDD4E3FEFE023671B90CA88'"""
-
-example_mode_aes_192_cbc_datatype_UUID_key_32_iv_32 = r"""'B4A04107B9945309227C08EEE5516367F2C64F1587FEB4720620AA04485CA18C'"""
-
-example_mode_aes_192_cbc_datatype_Date_key_32_iv_32 = r"""'60253CED16ECAB1D34A5CC131E55B769'"""
-
-example_mode_aes_192_cbc_datatype_DateTime_key_32_iv_32 = r"""'99C6EE6DF7A06D02FE4D60018784F129'"""
-
-example_mode_aes_192_cbc_datatype_DateTime64_key_32_iv_32 = r"""'C0329F9CB5CFDDDEA74275618A099FAE'"""
-
-example_mode_aes_192_cbc_datatype_LowCardinality_key_32_iv_32 = r"""'508551DA505F6538F90DC607423CFAD4'"""
-
-example_mode_aes_192_cbc_datatype_Array_key_32_iv_32 = r"""'53161975B2A33AAFB8379B39B255D45A'"""
-
-example_mode_aes_192_cbc_datatype_NULL_key_32_iv_32 = r"""'\\N'"""
-
-example_mode_aes_192_cbc_datatype_IPv4_key_32_iv_32 = r"""'2B2ACE9C2914F3F2F9E206D25CD29429'"""
-
-example_mode_aes_192_cbc_datatype_IPv6_key_32_iv_32 = r"""'16AF2466967A2705EC5D588C0C155457A3EC9F82C1C5FB98CE86AC5697EF7223'"""
-
-example_mode_aes_192_cbc_datatype_Enum8_key_32_iv_32 = r"""'C2D3A1603DBAC305D8180F85A3830300'"""
-
-example_mode_aes_192_cbc_datatype_Enum16_key_32_iv_32 = r"""'A7EEA5561C4BB75015632824CAE9AC1E'"""
-
-example_mode_aes_256_cbc_datatype_bytes_key_32_iv_16 = r"""'6046ECF8094941C6DEC9278FF6F137E9'"""
-
-example_mode_aes_256_cbc_datatype_emptystring_key_32_iv_16 = r"""'4EC7785DA650D55B71B52816B1DB5AD3'"""
-
-example_mode_aes_256_cbc_datatype_utf8string_key_32_iv_16 = r"""'A7663A9F621A26398B51DFBC099A6FA09032C25FE48CB9D2DE29A8DFD581714D'"""
-
-example_mode_aes_256_cbc_datatype_utf8fixedstring_key_32_iv_16 = r"""'A7663A9F621A26398B51DFBC099A6FA09032C25FE48CB9D2DE29A8DFD581714D'"""
-
-example_mode_aes_256_cbc_datatype_String_key_32_iv_16 = r"""'5E22454D9AC4F1A47B04E2FD98A76140'"""
-
-example_mode_aes_256_cbc_datatype_FixedString_key_32_iv_16 = r"""'5E22454D9AC4F1A47B04E2FD98A76140'"""
-
-example_mode_aes_256_cbc_datatype_UInt8_key_32_iv_16 = r"""'FE35EEF14D6AA67AA2EBA474253CA19A'"""
-
-example_mode_aes_256_cbc_datatype_UInt16_key_32_iv_16 = r"""'2D22C6B58140E591BEF7986C7770FF21'"""
-
-example_mode_aes_256_cbc_datatype_UInt32_key_32_iv_16 = r"""'4EB4923E19AA24206B135D5B25CB31AB'"""
-
-example_mode_aes_256_cbc_datatype_UInt64_key_32_iv_16 = r"""'173B7CAFFCBED9B814C0ECD50A9477F6'"""
-
-example_mode_aes_256_cbc_datatype_Int8_key_32_iv_16 = r"""'FE35EEF14D6AA67AA2EBA474253CA19A'"""
-
-example_mode_aes_256_cbc_datatype_Int16_key_32_iv_16 = r"""'2D22C6B58140E591BEF7986C7770FF21'"""
-
-example_mode_aes_256_cbc_datatype_Int32_key_32_iv_16 = r"""'4EB4923E19AA24206B135D5B25CB31AB'"""
-
-example_mode_aes_256_cbc_datatype_Int64_key_32_iv_16 = r"""'173B7CAFFCBED9B814C0ECD50A9477F6'"""
-
-example_mode_aes_256_cbc_datatype_Float32_key_32_iv_16 = r"""'E639AA3E45D8C2759181FD736CD58EDC'"""
-
-example_mode_aes_256_cbc_datatype_Float64_key_32_iv_16 = r"""'CFEF3FDC054997559DF5DCFB5F215B58'"""
-
-example_mode_aes_256_cbc_datatype_Decimal32_key_32_iv_16 = r"""'E2F57A092A1759D39F4AE67C9543FAB8'"""
-
-example_mode_aes_256_cbc_datatype_Decimal64_key_32_iv_16 = r"""'6259A2CFD3D83352A44C03DB050077B3'"""
-
-example_mode_aes_256_cbc_datatype_Decimal128_key_32_iv_16 = r"""'AEC71CA2D87098392689F9EB2ED93A84FA5787E643E28CB3C2013F8FCC24E387'"""
-
-example_mode_aes_256_cbc_datatype_UUID_key_32_iv_16 = r"""'88BA86B14A468DC92084B7152B172E142D88CBFB639A8FF2F480F1727972251C'"""
-
-example_mode_aes_256_cbc_datatype_Date_key_32_iv_16 = r"""'C67C84B1C6BF4527A7E730499FF39C86'"""
-
-example_mode_aes_256_cbc_datatype_DateTime_key_32_iv_16 = r"""'7FDC1B0797A5F3C04CDA82729A1EA4AA'"""
-
-example_mode_aes_256_cbc_datatype_DateTime64_key_32_iv_16 = r"""'B1B7401FB2B65BCB3448C1BE179F6AA6'"""
-
-example_mode_aes_256_cbc_datatype_LowCardinality_key_32_iv_16 = r"""'5E22454D9AC4F1A47B04E2FD98A76140'"""
-
-example_mode_aes_256_cbc_datatype_Array_key_32_iv_16 = r"""'6BB1E8429CC612B0AA74282B81D4FE8A'"""
-
-example_mode_aes_256_cbc_datatype_NULL_key_32_iv_16 = r"""'\\N'"""
-
-example_mode_aes_256_cbc_datatype_IPv4_key_32_iv_16 = r"""'51364C8DC6882CA1F03CF7FB45117EEF'"""
-
-example_mode_aes_256_cbc_datatype_IPv6_key_32_iv_16 = r"""'87A1C4D4672EFE64DC98E040EAD6B3126C899C263577B3D8EE8A3952BE5CDC1B'"""
-
-example_mode_aes_256_cbc_datatype_Enum8_key_32_iv_16 = r"""'FE35EEF14D6AA67AA2EBA474253CA19A'"""
-
-example_mode_aes_256_cbc_datatype_Enum16_key_32_iv_16 = r"""'2D22C6B58140E591BEF7986C7770FF21'"""
-
-example_mode_aes_256_cbc_datatype_bytes_key_64_iv_64 = r"""'BC91CDADF0BD3A8E9FF014B1E494FE7E'"""
-
-example_mode_aes_256_cbc_datatype_emptystring_key_64_iv_64 = r"""'A574B24357860C4B9C580D4CBE6C22C7'"""
-
-example_mode_aes_256_cbc_datatype_utf8string_key_64_iv_64 = r"""'3DA0F0C80E8067C1A0B5C82EF7A2D12A1EAD3C258827367A46D13D522B4D85DC'"""
-
-example_mode_aes_256_cbc_datatype_utf8fixedstring_key_64_iv_64 = r"""'3DA0F0C80E8067C1A0B5C82EF7A2D12A1EAD3C258827367A46D13D522B4D85DC'"""
-
-example_mode_aes_256_cbc_datatype_String_key_64_iv_64 = r"""'4CE9C9AFDC1E1E1EF2D1F4C141CE1874'"""
-
-example_mode_aes_256_cbc_datatype_FixedString_key_64_iv_64 = r"""'4CE9C9AFDC1E1E1EF2D1F4C141CE1874'"""
-
-example_mode_aes_256_cbc_datatype_UInt8_key_64_iv_64 = r"""'89E81101BF6A6E1DBEB6C0EAA67BEF14'"""
-
-example_mode_aes_256_cbc_datatype_UInt16_key_64_iv_64 = r"""'3124E8A62599D6C8A0C16A7ED0F01C58'"""
-
-example_mode_aes_256_cbc_datatype_UInt32_key_64_iv_64 = r"""'DD8866C2B2E443073D2F7B5A6FEE92E9'"""
-
-example_mode_aes_256_cbc_datatype_UInt64_key_64_iv_64 = r"""'C45A6D56D06F8A3A6A753D9BADBE88A4'"""
-
-example_mode_aes_256_cbc_datatype_Int8_key_64_iv_64 = r"""'89E81101BF6A6E1DBEB6C0EAA67BEF14'"""
-
-example_mode_aes_256_cbc_datatype_Int16_key_64_iv_64 = r"""'3124E8A62599D6C8A0C16A7ED0F01C58'"""
-
-example_mode_aes_256_cbc_datatype_Int32_key_64_iv_64 = r"""'DD8866C2B2E443073D2F7B5A6FEE92E9'"""
-
-example_mode_aes_256_cbc_datatype_Int64_key_64_iv_64 = r"""'C45A6D56D06F8A3A6A753D9BADBE88A4'"""
-
-example_mode_aes_256_cbc_datatype_Float32_key_64_iv_64 = r"""'66778B8F543C2C8402865CFB41187A09'"""
-
-example_mode_aes_256_cbc_datatype_Float64_key_64_iv_64 = r"""'F05D98EC189434B1F9177D0915FE939F'"""
-
-example_mode_aes_256_cbc_datatype_Decimal32_key_64_iv_64 = r"""'81190FEC7ADDBD8B919DD85AD71FF0B3'"""
-
-example_mode_aes_256_cbc_datatype_Decimal64_key_64_iv_64 = r"""'AB8B69F837890ED5684B071FF2359BED'"""
-
-example_mode_aes_256_cbc_datatype_Decimal128_key_64_iv_64 = r"""'765BDA3E9FA6177EB1839155F9C55A856315AB458B1DC334DF821A6FD768BFC8'"""
-
-example_mode_aes_256_cbc_datatype_UUID_key_64_iv_64 = r"""'99588BF38D9D6A2ABBEBD22E02F4D0F1CD5787AF78FE18679B8CF02A53D2600E'"""
-
-example_mode_aes_256_cbc_datatype_Date_key_64_iv_64 = r"""'ABEEA4FD2E771A3936EB591F674E4CDA'"""
-
-example_mode_aes_256_cbc_datatype_DateTime_key_64_iv_64 = r"""'C7EC851BCD2FBA03E58AC9F027E06444'"""
-
-example_mode_aes_256_cbc_datatype_DateTime64_key_64_iv_64 = r"""'53D42045D02E68F0D565EB8E093C83B8'"""
-
-example_mode_aes_256_cbc_datatype_LowCardinality_key_64_iv_64 = r"""'4CE9C9AFDC1E1E1EF2D1F4C141CE1874'"""
-
-example_mode_aes_256_cbc_datatype_Array_key_64_iv_64 = r"""'5A3063DCD98C7C59B41068F26DA0CC52'"""
-
-example_mode_aes_256_cbc_datatype_NULL_key_64_iv_64 = r"""'\\N'"""
-
-example_mode_aes_256_cbc_datatype_IPv4_key_64_iv_64 = r"""'1F12AE92E01133B2BB3F4F5AC6041FC9'"""
-
-example_mode_aes_256_cbc_datatype_IPv6_key_64_iv_64 = r"""'32406EB5546AECA4EE235A586577B14A5F6070FE879D6E07E6431748E3C2E80F'"""
-
-example_mode_aes_256_cbc_datatype_Enum8_key_64_iv_64 = r"""'89E81101BF6A6E1DBEB6C0EAA67BEF14'"""
-
-example_mode_aes_256_cbc_datatype_Enum16_key_64_iv_64 = r"""'3124E8A62599D6C8A0C16A7ED0F01C58'"""
-
-example_mode_aes_128_cfb128_datatype_bytes_key_16_iv_None = r"""'10'"""
-
-example_mode_aes_128_cfb128_datatype_emptystring_key_16_iv_None = r"""''"""
-
-example_mode_aes_128_cfb128_datatype_utf8string_key_16_iv_None = r"""'571C627072083ECFD8460B39C4132D1B2802275B5B24EF73'"""
-
-example_mode_aes_128_cfb128_datatype_utf8fixedstring_key_16_iv_None = r"""'571C627072083ECFD8460B39C4132D1B2802275B5B24EF73'"""
-
-example_mode_aes_128_cfb128_datatype_String_key_16_iv_None = r"""'21'"""
-
-example_mode_aes_128_cfb128_datatype_FixedString_key_16_iv_None = r"""'21'"""
-
-example_mode_aes_128_cfb128_datatype_UInt8_key_16_iv_None = r"""'11'"""
-
-example_mode_aes_128_cfb128_datatype_UInt16_key_16_iv_None = r"""'11DF'"""
-
-example_mode_aes_128_cfb128_datatype_UInt32_key_16_iv_None = r"""'11DFC1B5'"""
-
-example_mode_aes_128_cfb128_datatype_UInt64_key_16_iv_None = r"""'11DFC1B5F66CFD6A'"""
-
-example_mode_aes_128_cfb128_datatype_Int8_key_16_iv_None = r"""'11'"""
-
-example_mode_aes_128_cfb128_datatype_Int16_key_16_iv_None = r"""'11DF'"""
-
-example_mode_aes_128_cfb128_datatype_Int32_key_16_iv_None = r"""'11DFC1B5'"""
-
-example_mode_aes_128_cfb128_datatype_Int64_key_16_iv_None = r"""'11DFC1B5F66CFD6A'"""
-
-example_mode_aes_128_cfb128_datatype_Float32_key_16_iv_None = r"""'10DF418A'"""
-
-example_mode_aes_128_cfb128_datatype_Float64_key_16_iv_None = r"""'10DFC1B5F66C0D55'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal32_key_16_iv_None = r"""'3091C1B5'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal64_key_16_iv_None = r"""'3091C1B5F66CFD6A'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal128_key_16_iv_None = r"""'3091C1B5F66CFD6A1DC46D66907BEEB1'"""
-
-example_mode_aes_128_cfb128_datatype_UUID_key_16_iv_None = r"""'F7CE72E9F2A80D0BBD1FBE0C90DD9521'"""
-
-example_mode_aes_128_cfb128_datatype_Date_key_16_iv_None = r"""'4698'"""
-
-example_mode_aes_128_cfb128_datatype_DateTime_key_16_iv_None = r"""'5E0FCDEB'"""
-
-example_mode_aes_128_cfb128_datatype_DateTime64_key_16_iv_None = r"""'3B6ECCD7996DFD6A'"""
-
-example_mode_aes_128_cfb128_datatype_LowCardinality_key_16_iv_None = r"""'21'"""
-
-example_mode_aes_128_cfb128_datatype_Array_key_16_iv_None = r"""'11DD'"""
-
-example_mode_aes_128_cfb128_datatype_NULL_key_16_iv_None = r"""'\\N'"""
-
-example_mode_aes_128_cfb128_datatype_IPv4_key_16_iv_None = r"""'3D5D201E'"""
-
-example_mode_aes_128_cfb128_datatype_IPv6_key_16_iv_None = r"""'30DECC0DF66C78C91DC46D663C646EB0'"""
-
-example_mode_aes_128_cfb128_datatype_Enum8_key_16_iv_None = r"""'11'"""
-
-example_mode_aes_128_cfb128_datatype_Enum16_key_16_iv_None = r"""'11DF'"""
-
-example_mode_aes_192_cfb128_datatype_bytes_key_24_iv_None = r"""'07'"""
-
-example_mode_aes_192_cfb128_datatype_emptystring_key_24_iv_None = r"""''"""
-
-example_mode_aes_192_cfb128_datatype_utf8string_key_24_iv_None = r"""'4074BA58B958623BE94C3FCF833DDDD9AC9F875CC2784719'"""
-
-example_mode_aes_192_cfb128_datatype_utf8fixedstring_key_24_iv_None = r"""'4074BA58B958623BE94C3FCF833DDDD9AC9F875CC2784719'"""
-
-example_mode_aes_192_cfb128_datatype_String_key_24_iv_None = r"""'36'"""
-
-example_mode_aes_192_cfb128_datatype_FixedString_key_24_iv_None = r"""'36'"""
-
-example_mode_aes_192_cfb128_datatype_UInt8_key_24_iv_None = r"""'06'"""
-
-example_mode_aes_192_cfb128_datatype_UInt16_key_24_iv_None = r"""'06B7'"""
-
-example_mode_aes_192_cfb128_datatype_UInt32_key_24_iv_None = r"""'06B7199D'"""
-
-example_mode_aes_192_cfb128_datatype_UInt64_key_24_iv_None = r"""'06B7199D3D3CA19E'"""
-
-example_mode_aes_192_cfb128_datatype_Int8_key_24_iv_None = r"""'06'"""
-
-example_mode_aes_192_cfb128_datatype_Int16_key_24_iv_None = r"""'06B7'"""
-
-example_mode_aes_192_cfb128_datatype_Int32_key_24_iv_None = r"""'06B7199D'"""
-
-example_mode_aes_192_cfb128_datatype_Int64_key_24_iv_None = r"""'06B7199D3D3CA19E'"""
-
-example_mode_aes_192_cfb128_datatype_Float32_key_24_iv_None = r"""'07B799A2'"""
-
-example_mode_aes_192_cfb128_datatype_Float64_key_24_iv_None = r"""'07B7199D3D3C51A1'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal32_key_24_iv_None = r"""'27F9199D'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal64_key_24_iv_None = r"""'27F9199D3D3CA19E'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal128_key_24_iv_None = r"""'27F9199D3D3CA19E2CCE5990D7551E73'"""
-
-example_mode_aes_192_cfb128_datatype_UUID_key_24_iv_None = r"""'E0A6AAC139F851FF8C158AFAD7F365E3'"""
-
-example_mode_aes_192_cfb128_datatype_Date_key_24_iv_None = r"""'51F0'"""
-
-example_mode_aes_192_cfb128_datatype_DateTime_key_24_iv_None = r"""'496715C3'"""
-
-example_mode_aes_192_cfb128_datatype_DateTime64_key_24_iv_None = r"""'2C0614FF523DA19E'"""
-
-example_mode_aes_192_cfb128_datatype_LowCardinality_key_24_iv_None = r"""'36'"""
-
-example_mode_aes_192_cfb128_datatype_Array_key_24_iv_None = r"""'06B5'"""
-
-example_mode_aes_192_cfb128_datatype_NULL_key_24_iv_None = r"""'\\N'"""
-
-example_mode_aes_192_cfb128_datatype_IPv4_key_24_iv_None = r"""'2A35F836'"""
-
-example_mode_aes_192_cfb128_datatype_IPv6_key_24_iv_None = r"""'27B614253D3C243D2CCE59907B4A9E72'"""
-
-example_mode_aes_192_cfb128_datatype_Enum8_key_24_iv_None = r"""'06'"""
-
-example_mode_aes_192_cfb128_datatype_Enum16_key_24_iv_None = r"""'06B7'"""
-
-example_mode_aes_256_cfb128_datatype_bytes_key_32_iv_None = r"""'B0'"""
-
-example_mode_aes_256_cfb128_datatype_emptystring_key_32_iv_None = r"""''"""
-
-example_mode_aes_256_cfb128_datatype_utf8string_key_32_iv_None = r"""'F74D6C5B438F9CA8BEFAA27A02BEAB06F5E4BB666EC25FE2'"""
-
-example_mode_aes_256_cfb128_datatype_utf8fixedstring_key_32_iv_None = r"""'F74D6C5B438F9CA8BEFAA27A02BEAB06F5E4BB666EC25FE2'"""
-
-example_mode_aes_256_cfb128_datatype_String_key_32_iv_None = r"""'81'"""
-
-example_mode_aes_256_cfb128_datatype_FixedString_key_32_iv_None = r"""'81'"""
-
-example_mode_aes_256_cfb128_datatype_UInt8_key_32_iv_None = r"""'B1'"""
-
-example_mode_aes_256_cfb128_datatype_UInt16_key_32_iv_None = r"""'B18E'"""
-
-example_mode_aes_256_cfb128_datatype_UInt32_key_32_iv_None = r"""'B18ECF9E'"""
-
-example_mode_aes_256_cfb128_datatype_UInt64_key_32_iv_None = r"""'B18ECF9EC7EB5F0D'"""
-
-example_mode_aes_256_cfb128_datatype_Int8_key_32_iv_None = r"""'B1'"""
-
-example_mode_aes_256_cfb128_datatype_Int16_key_32_iv_None = r"""'B18E'"""
-
-example_mode_aes_256_cfb128_datatype_Int32_key_32_iv_None = r"""'B18ECF9E'"""
-
-example_mode_aes_256_cfb128_datatype_Int64_key_32_iv_None = r"""'B18ECF9EC7EB5F0D'"""
-
-example_mode_aes_256_cfb128_datatype_Float32_key_32_iv_None = r"""'B08E4FA1'"""
-
-example_mode_aes_256_cfb128_datatype_Float64_key_32_iv_None = r"""'B08ECF9EC7EBAF32'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal32_key_32_iv_None = r"""'90C0CF9E'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal64_key_32_iv_None = r"""'90C0CF9EC7EB5F0D'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal128_key_32_iv_None = r"""'90C0CF9EC7EB5F0D7B78C42556D668AC'"""
-
-example_mode_aes_256_cfb128_datatype_UUID_key_32_iv_None = r"""'579F7CC2C32FAF6CDBA3174F5670133C'"""
-
-example_mode_aes_256_cfb128_datatype_Date_key_32_iv_None = r"""'E6C9'"""
-
-example_mode_aes_256_cfb128_datatype_DateTime_key_32_iv_None = r"""'FE5EC3C0'"""
-
-example_mode_aes_256_cfb128_datatype_DateTime64_key_32_iv_None = r"""'9B3FC2FCA8EA5F0D'"""
-
-example_mode_aes_256_cfb128_datatype_LowCardinality_key_32_iv_None = r"""'81'"""
-
-example_mode_aes_256_cfb128_datatype_Array_key_32_iv_None = r"""'B18C'"""
-
-example_mode_aes_256_cfb128_datatype_NULL_key_32_iv_None = r"""'\\N'"""
-
-example_mode_aes_256_cfb128_datatype_IPv4_key_32_iv_None = r"""'9D0C2E35'"""
-
-example_mode_aes_256_cfb128_datatype_IPv6_key_32_iv_None = r"""'908FC226C7EBDAAE7B78C425FAC9E8AD'"""
-
-example_mode_aes_256_cfb128_datatype_Enum8_key_32_iv_None = r"""'B1'"""
-
-example_mode_aes_256_cfb128_datatype_Enum16_key_32_iv_None = r"""'B18E'"""
-
-example_mode_aes_128_cfb128_datatype_bytes_key_16_iv_16 = r"""'32'"""
-
-example_mode_aes_128_cfb128_datatype_emptystring_key_16_iv_16 = r"""''"""
-
-example_mode_aes_128_cfb128_datatype_utf8string_key_16_iv_16 = r"""'754B0A4159623CFD2CBB06EE8AADCCB4581E4F5FB9F091DD'"""
-
-example_mode_aes_128_cfb128_datatype_utf8fixedstring_key_16_iv_16 = r"""'754B0A4159623CFD2CBB06EE8AADCCB4581E4F5FB9F091DD'"""
-
-example_mode_aes_128_cfb128_datatype_String_key_16_iv_16 = r"""'03'"""
-
-example_mode_aes_128_cfb128_datatype_FixedString_key_16_iv_16 = r"""'03'"""
-
-example_mode_aes_128_cfb128_datatype_UInt8_key_16_iv_16 = r"""'33'"""
-
-example_mode_aes_128_cfb128_datatype_UInt16_key_16_iv_16 = r"""'3388'"""
-
-example_mode_aes_128_cfb128_datatype_UInt32_key_16_iv_16 = r"""'3388A984'"""
-
-example_mode_aes_128_cfb128_datatype_UInt64_key_16_iv_16 = r"""'3388A984DD06FF58'"""
-
-example_mode_aes_128_cfb128_datatype_Int8_key_16_iv_16 = r"""'33'"""
-
-example_mode_aes_128_cfb128_datatype_Int16_key_16_iv_16 = r"""'3388'"""
-
-example_mode_aes_128_cfb128_datatype_Int32_key_16_iv_16 = r"""'3388A984'"""
-
-example_mode_aes_128_cfb128_datatype_Int64_key_16_iv_16 = r"""'3388A984DD06FF58'"""
-
-example_mode_aes_128_cfb128_datatype_Float32_key_16_iv_16 = r"""'328829BB'"""
-
-example_mode_aes_128_cfb128_datatype_Float64_key_16_iv_16 = r"""'3288A984DD060F67'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal32_key_16_iv_16 = r"""'12C6A984'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal64_key_16_iv_16 = r"""'12C6A984DD06FF58'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal128_key_16_iv_16 = r"""'12C6A984DD06FF58E93960B1DEC50F1E'"""
-
-example_mode_aes_128_cfb128_datatype_UUID_key_16_iv_16 = r"""'D5991AD8D9C20F3949E2B3DBDE63748E'"""
-
-example_mode_aes_128_cfb128_datatype_Date_key_16_iv_16 = r"""'64CF'"""
-
-example_mode_aes_128_cfb128_datatype_DateTime_key_16_iv_16 = r"""'7C58A5DA'"""
-
-example_mode_aes_128_cfb128_datatype_DateTime64_key_16_iv_16 = r"""'1939A4E6B207FF58'"""
-
-example_mode_aes_128_cfb128_datatype_LowCardinality_key_16_iv_16 = r"""'03'"""
-
-example_mode_aes_128_cfb128_datatype_Array_key_16_iv_16 = r"""'338A'"""
-
-example_mode_aes_128_cfb128_datatype_NULL_key_16_iv_16 = r"""'\\N'"""
-
-example_mode_aes_128_cfb128_datatype_IPv4_key_16_iv_16 = r"""'1F0A482F'"""
-
-example_mode_aes_128_cfb128_datatype_IPv6_key_16_iv_16 = r"""'1289A43CDD067AFBE93960B172DA8F1F'"""
-
-example_mode_aes_128_cfb128_datatype_Enum8_key_16_iv_16 = r"""'33'"""
-
-example_mode_aes_128_cfb128_datatype_Enum16_key_16_iv_16 = r"""'3388'"""
-
-example_mode_aes_128_cfb128_datatype_bytes_key_24_iv_24 = r"""'5B'"""
-
-example_mode_aes_128_cfb128_datatype_emptystring_key_24_iv_24 = r"""''"""
-
-example_mode_aes_128_cfb128_datatype_utf8string_key_24_iv_24 = r"""'1CB4A1306DD44E12FB99CA2398A56D5C6FFFA5BE700B5B9B'"""
-
-example_mode_aes_128_cfb128_datatype_utf8fixedstring_key_24_iv_24 = r"""'1CB4A1306DD44E12FB99CA2398A56D5C6FFFA5BE700B5B9B'"""
-
-example_mode_aes_128_cfb128_datatype_String_key_24_iv_24 = r"""'6A'"""
-
-example_mode_aes_128_cfb128_datatype_FixedString_key_24_iv_24 = r"""'6A'"""
-
-example_mode_aes_128_cfb128_datatype_UInt8_key_24_iv_24 = r"""'5A'"""
-
-example_mode_aes_128_cfb128_datatype_UInt16_key_24_iv_24 = r"""'5A77'"""
-
-example_mode_aes_128_cfb128_datatype_UInt32_key_24_iv_24 = r"""'5A7702F5'"""
-
-example_mode_aes_128_cfb128_datatype_UInt64_key_24_iv_24 = r"""'5A7702F5E9B08DB7'"""
-
-example_mode_aes_128_cfb128_datatype_Int8_key_24_iv_24 = r"""'5A'"""
-
-example_mode_aes_128_cfb128_datatype_Int16_key_24_iv_24 = r"""'5A77'"""
-
-example_mode_aes_128_cfb128_datatype_Int32_key_24_iv_24 = r"""'5A7702F5'"""
-
-example_mode_aes_128_cfb128_datatype_Int64_key_24_iv_24 = r"""'5A7702F5E9B08DB7'"""
-
-example_mode_aes_128_cfb128_datatype_Float32_key_24_iv_24 = r"""'5B7782CA'"""
-
-example_mode_aes_128_cfb128_datatype_Float64_key_24_iv_24 = r"""'5B7702F5E9B07D88'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal32_key_24_iv_24 = r"""'7B3902F5'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal64_key_24_iv_24 = r"""'7B3902F5E9B08DB7'"""
-
-example_mode_aes_128_cfb128_datatype_Decimal128_key_24_iv_24 = r"""'7B3902F5E9B08DB73E1BAC7CCCCDAEF6'"""
-
-example_mode_aes_128_cfb128_datatype_UUID_key_24_iv_24 = r"""'BC66B1A9ED747DD69EC07F16CC6BD566'"""
-
-example_mode_aes_128_cfb128_datatype_Date_key_24_iv_24 = r"""'0D30'"""
-
-example_mode_aes_128_cfb128_datatype_DateTime_key_24_iv_24 = r"""'15A70EAB'"""
-
-example_mode_aes_128_cfb128_datatype_DateTime64_key_24_iv_24 = r"""'70C60F9786B18DB7'"""
-
-example_mode_aes_128_cfb128_datatype_LowCardinality_key_24_iv_24 = r"""'6A'"""
-
-example_mode_aes_128_cfb128_datatype_Array_key_24_iv_24 = r"""'5A75'"""
-
-example_mode_aes_128_cfb128_datatype_NULL_key_24_iv_24 = r"""'\\N'"""
-
-example_mode_aes_128_cfb128_datatype_IPv4_key_24_iv_24 = r"""'76F5E35E'"""
-
-example_mode_aes_128_cfb128_datatype_IPv6_key_24_iv_24 = r"""'7B760F4DE9B008143E1BAC7C60D22EF7'"""
-
-example_mode_aes_128_cfb128_datatype_Enum8_key_24_iv_24 = r"""'5A'"""
-
-example_mode_aes_128_cfb128_datatype_Enum16_key_24_iv_24 = r"""'5A77'"""
-
-example_mode_aes_192_cfb128_datatype_bytes_key_24_iv_16 = r"""'68'"""
-
-example_mode_aes_192_cfb128_datatype_emptystring_key_24_iv_16 = r"""''"""
-
-example_mode_aes_192_cfb128_datatype_utf8string_key_24_iv_16 = r"""'2F0444573374B41441C46351EBB0A21FD2D5B29B19D817D8'"""
-
-example_mode_aes_192_cfb128_datatype_utf8fixedstring_key_24_iv_16 = r"""'2F0444573374B41441C46351EBB0A21FD2D5B29B19D817D8'"""
-
-example_mode_aes_192_cfb128_datatype_String_key_24_iv_16 = r"""'59'"""
-
-example_mode_aes_192_cfb128_datatype_FixedString_key_24_iv_16 = r"""'59'"""
-
-example_mode_aes_192_cfb128_datatype_UInt8_key_24_iv_16 = r"""'69'"""
-
-example_mode_aes_192_cfb128_datatype_UInt16_key_24_iv_16 = r"""'69C7'"""
-
-example_mode_aes_192_cfb128_datatype_UInt32_key_24_iv_16 = r"""'69C7E792'"""
-
-example_mode_aes_192_cfb128_datatype_UInt64_key_24_iv_16 = r"""'69C7E792B71077B1'"""
-
-example_mode_aes_192_cfb128_datatype_Int8_key_24_iv_16 = r"""'69'"""
-
-example_mode_aes_192_cfb128_datatype_Int16_key_24_iv_16 = r"""'69C7'"""
-
-example_mode_aes_192_cfb128_datatype_Int32_key_24_iv_16 = r"""'69C7E792'"""
-
-example_mode_aes_192_cfb128_datatype_Int64_key_24_iv_16 = r"""'69C7E792B71077B1'"""
-
-example_mode_aes_192_cfb128_datatype_Float32_key_24_iv_16 = r"""'68C767AD'"""
-
-example_mode_aes_192_cfb128_datatype_Float64_key_24_iv_16 = r"""'68C7E792B710878E'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal32_key_24_iv_16 = r"""'4889E792'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal64_key_24_iv_16 = r"""'4889E792B71077B1'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal128_key_24_iv_16 = r"""'4889E792B71077B18446050EBFD861B5'"""
-
-example_mode_aes_192_cfb128_datatype_UUID_key_24_iv_16 = r"""'8FD654CEB3D487D0249DD664BF7E1A25'"""
-
-example_mode_aes_192_cfb128_datatype_Date_key_24_iv_16 = r"""'3E80'"""
-
-example_mode_aes_192_cfb128_datatype_DateTime_key_24_iv_16 = r"""'2617EBCC'"""
-
-example_mode_aes_192_cfb128_datatype_DateTime64_key_24_iv_16 = r"""'4376EAF0D81177B1'"""
-
-example_mode_aes_192_cfb128_datatype_LowCardinality_key_24_iv_16 = r"""'59'"""
-
-example_mode_aes_192_cfb128_datatype_Array_key_24_iv_16 = r"""'69C5'"""
-
-example_mode_aes_192_cfb128_datatype_NULL_key_24_iv_16 = r"""'\\N'"""
-
-example_mode_aes_192_cfb128_datatype_IPv4_key_24_iv_16 = r"""'45450639'"""
-
-example_mode_aes_192_cfb128_datatype_IPv6_key_24_iv_16 = r"""'48C6EA2AB710F2128446050E13C7E1B4'"""
-
-example_mode_aes_192_cfb128_datatype_Enum8_key_24_iv_16 = r"""'69'"""
-
-example_mode_aes_192_cfb128_datatype_Enum16_key_24_iv_16 = r"""'69C7'"""
-
-example_mode_aes_192_cfb128_datatype_bytes_key_32_iv_32 = r"""'31'"""
-
-example_mode_aes_192_cfb128_datatype_emptystring_key_32_iv_32 = r"""''"""
-
-example_mode_aes_192_cfb128_datatype_utf8string_key_32_iv_32 = r"""'76632DB12BCFF36187A90B6990CFA6D8D9CFB425308D13E0'"""
-
-example_mode_aes_192_cfb128_datatype_utf8fixedstring_key_32_iv_32 = r"""'76632DB12BCFF36187A90B6990CFA6D8D9CFB425308D13E0'"""
-
-example_mode_aes_192_cfb128_datatype_String_key_32_iv_32 = r"""'00'"""
-
-example_mode_aes_192_cfb128_datatype_FixedString_key_32_iv_32 = r"""'00'"""
-
-example_mode_aes_192_cfb128_datatype_UInt8_key_32_iv_32 = r"""'30'"""
-
-example_mode_aes_192_cfb128_datatype_UInt16_key_32_iv_32 = r"""'30A0'"""
-
-example_mode_aes_192_cfb128_datatype_UInt32_key_32_iv_32 = r"""'30A08E74'"""
-
-example_mode_aes_192_cfb128_datatype_UInt64_key_32_iv_32 = r"""'30A08E74AFAB30C4'"""
-
-example_mode_aes_192_cfb128_datatype_Int8_key_32_iv_32 = r"""'30'"""
-
-example_mode_aes_192_cfb128_datatype_Int16_key_32_iv_32 = r"""'30A0'"""
-
-example_mode_aes_192_cfb128_datatype_Int32_key_32_iv_32 = r"""'30A08E74'"""
-
-example_mode_aes_192_cfb128_datatype_Int64_key_32_iv_32 = r"""'30A08E74AFAB30C4'"""
-
-example_mode_aes_192_cfb128_datatype_Float32_key_32_iv_32 = r"""'31A00E4B'"""
-
-example_mode_aes_192_cfb128_datatype_Float64_key_32_iv_32 = r"""'31A08E74AFABC0FB'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal32_key_32_iv_32 = r"""'11EE8E74'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal64_key_32_iv_32 = r"""'11EE8E74AFAB30C4'"""
-
-example_mode_aes_192_cfb128_datatype_Decimal128_key_32_iv_32 = r"""'11EE8E74AFAB30C4422B6D36C4A76572'"""
-
-example_mode_aes_192_cfb128_datatype_UUID_key_32_iv_32 = r"""'D6B13D28AB6FC0A5E2F0BE5CC4011EE2'"""
-
-example_mode_aes_192_cfb128_datatype_Date_key_32_iv_32 = r"""'67E7'"""
-
-example_mode_aes_192_cfb128_datatype_DateTime_key_32_iv_32 = r"""'7F70822A'"""
-
-example_mode_aes_192_cfb128_datatype_DateTime64_key_32_iv_32 = r"""'1A118316C0AA30C4'"""
-
-example_mode_aes_192_cfb128_datatype_LowCardinality_key_32_iv_32 = r"""'00'"""
-
-example_mode_aes_192_cfb128_datatype_Array_key_32_iv_32 = r"""'30A2'"""
-
-example_mode_aes_192_cfb128_datatype_NULL_key_32_iv_32 = r"""'\\N'"""
-
-example_mode_aes_192_cfb128_datatype_IPv4_key_32_iv_32 = r"""'1C226FDF'"""
-
-example_mode_aes_192_cfb128_datatype_IPv6_key_32_iv_32 = r"""'11A183CCAFABB567422B6D3668B8E573'"""
-
-example_mode_aes_192_cfb128_datatype_Enum8_key_32_iv_32 = r"""'30'"""
-
-example_mode_aes_192_cfb128_datatype_Enum16_key_32_iv_32 = r"""'30A0'"""
-
-example_mode_aes_256_cfb128_datatype_bytes_key_32_iv_16 = r"""'69'"""
-
-example_mode_aes_256_cfb128_datatype_emptystring_key_32_iv_16 = r"""''"""
-
-example_mode_aes_256_cfb128_datatype_utf8string_key_32_iv_16 = r"""'2E9B2BD2B8BA872DB56225F82754048C22AA31B7F22AD276'"""
-
-example_mode_aes_256_cfb128_datatype_utf8fixedstring_key_32_iv_16 = r"""'2E9B2BD2B8BA872DB56225F82754048C22AA31B7F22AD276'"""
-
-example_mode_aes_256_cfb128_datatype_String_key_32_iv_16 = r"""'58'"""
-
-example_mode_aes_256_cfb128_datatype_FixedString_key_32_iv_16 = r"""'58'"""
-
-example_mode_aes_256_cfb128_datatype_UInt8_key_32_iv_16 = r"""'68'"""
-
-example_mode_aes_256_cfb128_datatype_UInt16_key_32_iv_16 = r"""'6858'"""
-
-example_mode_aes_256_cfb128_datatype_UInt32_key_32_iv_16 = r"""'68588817'"""
-
-example_mode_aes_256_cfb128_datatype_UInt64_key_32_iv_16 = r"""'685888173CDE4488'"""
-
-example_mode_aes_256_cfb128_datatype_Int8_key_32_iv_16 = r"""'68'"""
-
-example_mode_aes_256_cfb128_datatype_Int16_key_32_iv_16 = r"""'6858'"""
-
-example_mode_aes_256_cfb128_datatype_Int32_key_32_iv_16 = r"""'68588817'"""
-
-example_mode_aes_256_cfb128_datatype_Int64_key_32_iv_16 = r"""'685888173CDE4488'"""
-
-example_mode_aes_256_cfb128_datatype_Float32_key_32_iv_16 = r"""'69580828'"""
-
-example_mode_aes_256_cfb128_datatype_Float64_key_32_iv_16 = r"""'695888173CDEB4B7'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal32_key_32_iv_16 = r"""'49168817'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal64_key_32_iv_16 = r"""'491688173CDE4488'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal128_key_32_iv_16 = r"""'491688173CDE448870E043A7733CC726'"""
-
-example_mode_aes_256_cfb128_datatype_UUID_key_32_iv_16 = r"""'8E493B4B381AB4E9D03B90CD739ABCB6'"""
-
-example_mode_aes_256_cfb128_datatype_Date_key_32_iv_16 = r"""'3F1F'"""
-
-example_mode_aes_256_cfb128_datatype_DateTime_key_32_iv_16 = r"""'27888449'"""
-
-example_mode_aes_256_cfb128_datatype_DateTime64_key_32_iv_16 = r"""'42E9857553DF4488'"""
-
-example_mode_aes_256_cfb128_datatype_LowCardinality_key_32_iv_16 = r"""'58'"""
-
-example_mode_aes_256_cfb128_datatype_Array_key_32_iv_16 = r"""'685A'"""
-
-example_mode_aes_256_cfb128_datatype_NULL_key_32_iv_16 = r"""'\\N'"""
-
-example_mode_aes_256_cfb128_datatype_IPv4_key_32_iv_16 = r"""'44DA69BC'"""
-
-example_mode_aes_256_cfb128_datatype_IPv6_key_32_iv_16 = r"""'495985AF3CDEC12B70E043A7DF234727'"""
-
-example_mode_aes_256_cfb128_datatype_Enum8_key_32_iv_16 = r"""'68'"""
-
-example_mode_aes_256_cfb128_datatype_Enum16_key_32_iv_16 = r"""'6858'"""
-
-example_mode_aes_256_cfb128_datatype_bytes_key_64_iv_64 = r"""'D3'"""
-
-example_mode_aes_256_cfb128_datatype_emptystring_key_64_iv_64 = r"""''"""
-
-example_mode_aes_256_cfb128_datatype_utf8string_key_64_iv_64 = r"""'942D6C993F1DE6D874AD5CCF2109CE7D9EC333A5AE718F82'"""
-
-example_mode_aes_256_cfb128_datatype_utf8fixedstring_key_64_iv_64 = r"""'942D6C993F1DE6D874AD5CCF2109CE7D9EC333A5AE718F82'"""
-
-example_mode_aes_256_cfb128_datatype_String_key_64_iv_64 = r"""'E2'"""
-
-example_mode_aes_256_cfb128_datatype_FixedString_key_64_iv_64 = r"""'E2'"""
-
-example_mode_aes_256_cfb128_datatype_UInt8_key_64_iv_64 = r"""'D2'"""
-
-example_mode_aes_256_cfb128_datatype_UInt16_key_64_iv_64 = r"""'D2EE'"""
-
-example_mode_aes_256_cfb128_datatype_UInt32_key_64_iv_64 = r"""'D2EECF5C'"""
-
-example_mode_aes_256_cfb128_datatype_UInt64_key_64_iv_64 = r"""'D2EECF5CBB79257D'"""
-
-example_mode_aes_256_cfb128_datatype_Int8_key_64_iv_64 = r"""'D2'"""
-
-example_mode_aes_256_cfb128_datatype_Int16_key_64_iv_64 = r"""'D2EE'"""
-
-example_mode_aes_256_cfb128_datatype_Int32_key_64_iv_64 = r"""'D2EECF5C'"""
-
-example_mode_aes_256_cfb128_datatype_Int64_key_64_iv_64 = r"""'D2EECF5CBB79257D'"""
-
-example_mode_aes_256_cfb128_datatype_Float32_key_64_iv_64 = r"""'D3EE4F63'"""
-
-example_mode_aes_256_cfb128_datatype_Float64_key_64_iv_64 = r"""'D3EECF5CBB79D542'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal32_key_64_iv_64 = r"""'F3A0CF5C'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal64_key_64_iv_64 = r"""'F3A0CF5CBB79257D'"""
-
-example_mode_aes_256_cfb128_datatype_Decimal128_key_64_iv_64 = r"""'F3A0CF5CBB79257DB12F3A9075610DD7'"""
-
-example_mode_aes_256_cfb128_datatype_UUID_key_64_iv_64 = r"""'34FF7C00BFBDD51C11F4E9FA75C77647'"""
-
-example_mode_aes_256_cfb128_datatype_Date_key_64_iv_64 = r"""'85A9'"""
-
-example_mode_aes_256_cfb128_datatype_DateTime_key_64_iv_64 = r"""'9D3EC302'"""
-
-example_mode_aes_256_cfb128_datatype_DateTime64_key_64_iv_64 = r"""'F85FC23ED478257D'"""
-
-example_mode_aes_256_cfb128_datatype_LowCardinality_key_64_iv_64 = r"""'E2'"""
-
-example_mode_aes_256_cfb128_datatype_Array_key_64_iv_64 = r"""'D2EC'"""
-
-example_mode_aes_256_cfb128_datatype_NULL_key_64_iv_64 = r"""'\\N'"""
-
-example_mode_aes_256_cfb128_datatype_IPv4_key_64_iv_64 = r"""'FE6C2EF7'"""
-
-example_mode_aes_256_cfb128_datatype_IPv6_key_64_iv_64 = r"""'F3EFC2E4BB79A0DEB12F3A90D97E8DD6'"""
-
-example_mode_aes_256_cfb128_datatype_Enum8_key_64_iv_64 = r"""'D2'"""
-
-example_mode_aes_256_cfb128_datatype_Enum16_key_64_iv_64 = r"""'D2EE'"""
-
-example_mode_aes_128_ofb_datatype_bytes_key_16_iv_None = r"""'10'"""
-
-example_mode_aes_128_ofb_datatype_emptystring_key_16_iv_None = r"""''"""
-
-example_mode_aes_128_ofb_datatype_utf8string_key_16_iv_None = r"""'571C627072083ECFD8460B39C4132D1B1EFEEBE7197398AE'"""
-
-example_mode_aes_128_ofb_datatype_utf8fixedstring_key_16_iv_None = r"""'571C627072083ECFD8460B39C4132D1B1EFEEBE7197398AE'"""
-
-example_mode_aes_128_ofb_datatype_String_key_16_iv_None = r"""'21'"""
-
-example_mode_aes_128_ofb_datatype_FixedString_key_16_iv_None = r"""'21'"""
-
-example_mode_aes_128_ofb_datatype_UInt8_key_16_iv_None = r"""'11'"""
-
-example_mode_aes_128_ofb_datatype_UInt16_key_16_iv_None = r"""'11DF'"""
-
-example_mode_aes_128_ofb_datatype_UInt32_key_16_iv_None = r"""'11DFC1B5'"""
-
-example_mode_aes_128_ofb_datatype_UInt64_key_16_iv_None = r"""'11DFC1B5F66CFD6A'"""
-
-example_mode_aes_128_ofb_datatype_Int8_key_16_iv_None = r"""'11'"""
-
-example_mode_aes_128_ofb_datatype_Int16_key_16_iv_None = r"""'11DF'"""
-
-example_mode_aes_128_ofb_datatype_Int32_key_16_iv_None = r"""'11DFC1B5'"""
-
-example_mode_aes_128_ofb_datatype_Int64_key_16_iv_None = r"""'11DFC1B5F66CFD6A'"""
-
-example_mode_aes_128_ofb_datatype_Float32_key_16_iv_None = r"""'10DF418A'"""
-
-example_mode_aes_128_ofb_datatype_Float64_key_16_iv_None = r"""'10DFC1B5F66C0D55'"""
-
-example_mode_aes_128_ofb_datatype_Decimal32_key_16_iv_None = r"""'3091C1B5'"""
-
-example_mode_aes_128_ofb_datatype_Decimal64_key_16_iv_None = r"""'3091C1B5F66CFD6A'"""
-
-example_mode_aes_128_ofb_datatype_Decimal128_key_16_iv_None = r"""'3091C1B5F66CFD6A1DC46D66907BEEB1'"""
-
-example_mode_aes_128_ofb_datatype_UUID_key_16_iv_None = r"""'F7CE72E9F2A80D0BBD1FBE0C90DD9521'"""
-
-example_mode_aes_128_ofb_datatype_Date_key_16_iv_None = r"""'4698'"""
-
-example_mode_aes_128_ofb_datatype_DateTime_key_16_iv_None = r"""'5E0FCDEB'"""
-
-example_mode_aes_128_ofb_datatype_DateTime64_key_16_iv_None = r"""'3B6ECCD7996DFD6A'"""
-
-example_mode_aes_128_ofb_datatype_LowCardinality_key_16_iv_None = r"""'21'"""
-
-example_mode_aes_128_ofb_datatype_Array_key_16_iv_None = r"""'11DD'"""
-
-example_mode_aes_128_ofb_datatype_NULL_key_16_iv_None = r"""'\\N'"""
-
-example_mode_aes_128_ofb_datatype_IPv4_key_16_iv_None = r"""'3D5D201E'"""
-
-example_mode_aes_128_ofb_datatype_IPv6_key_16_iv_None = r"""'30DECC0DF66C78C91DC46D663C646EB0'"""
-
-example_mode_aes_128_ofb_datatype_Enum8_key_16_iv_None = r"""'11'"""
-
-example_mode_aes_128_ofb_datatype_Enum16_key_16_iv_None = r"""'11DF'"""
-
-example_mode_aes_192_ofb_datatype_bytes_key_24_iv_None = r"""'07'"""
-
-example_mode_aes_192_ofb_datatype_emptystring_key_24_iv_None = r"""''"""
-
-example_mode_aes_192_ofb_datatype_utf8string_key_24_iv_None = r"""'4074BA58B958623BE94C3FCF833DDDD95F6EFF17F7823E17'"""
-
-example_mode_aes_192_ofb_datatype_utf8fixedstring_key_24_iv_None = r"""'4074BA58B958623BE94C3FCF833DDDD95F6EFF17F7823E17'"""
-
-example_mode_aes_192_ofb_datatype_String_key_24_iv_None = r"""'36'"""
-
-example_mode_aes_192_ofb_datatype_FixedString_key_24_iv_None = r"""'36'"""
-
-example_mode_aes_192_ofb_datatype_UInt8_key_24_iv_None = r"""'06'"""
-
-example_mode_aes_192_ofb_datatype_UInt16_key_24_iv_None = r"""'06B7'"""
-
-example_mode_aes_192_ofb_datatype_UInt32_key_24_iv_None = r"""'06B7199D'"""
-
-example_mode_aes_192_ofb_datatype_UInt64_key_24_iv_None = r"""'06B7199D3D3CA19E'"""
-
-example_mode_aes_192_ofb_datatype_Int8_key_24_iv_None = r"""'06'"""
-
-example_mode_aes_192_ofb_datatype_Int16_key_24_iv_None = r"""'06B7'"""
-
-example_mode_aes_192_ofb_datatype_Int32_key_24_iv_None = r"""'06B7199D'"""
-
-example_mode_aes_192_ofb_datatype_Int64_key_24_iv_None = r"""'06B7199D3D3CA19E'"""
-
-example_mode_aes_192_ofb_datatype_Float32_key_24_iv_None = r"""'07B799A2'"""
-
-example_mode_aes_192_ofb_datatype_Float64_key_24_iv_None = r"""'07B7199D3D3C51A1'"""
-
-example_mode_aes_192_ofb_datatype_Decimal32_key_24_iv_None = r"""'27F9199D'"""
-
-example_mode_aes_192_ofb_datatype_Decimal64_key_24_iv_None = r"""'27F9199D3D3CA19E'"""
-
-example_mode_aes_192_ofb_datatype_Decimal128_key_24_iv_None = r"""'27F9199D3D3CA19E2CCE5990D7551E73'"""
-
-example_mode_aes_192_ofb_datatype_UUID_key_24_iv_None = r"""'E0A6AAC139F851FF8C158AFAD7F365E3'"""
-
-example_mode_aes_192_ofb_datatype_Date_key_24_iv_None = r"""'51F0'"""
-
-example_mode_aes_192_ofb_datatype_DateTime_key_24_iv_None = r"""'496715C3'"""
-
-example_mode_aes_192_ofb_datatype_DateTime64_key_24_iv_None = r"""'2C0614FF523DA19E'"""
-
-example_mode_aes_192_ofb_datatype_LowCardinality_key_24_iv_None = r"""'36'"""
-
-example_mode_aes_192_ofb_datatype_Array_key_24_iv_None = r"""'06B5'"""
-
-example_mode_aes_192_ofb_datatype_NULL_key_24_iv_None = r"""'\\N'"""
-
-example_mode_aes_192_ofb_datatype_IPv4_key_24_iv_None = r"""'2A35F836'"""
-
-example_mode_aes_192_ofb_datatype_IPv6_key_24_iv_None = r"""'27B614253D3C243D2CCE59907B4A9E72'"""
-
-example_mode_aes_192_ofb_datatype_Enum8_key_24_iv_None = r"""'06'"""
-
-example_mode_aes_192_ofb_datatype_Enum16_key_24_iv_None = r"""'06B7'"""
-
-example_mode_aes_256_ofb_datatype_bytes_key_32_iv_None = r"""'B0'"""
-
-example_mode_aes_256_ofb_datatype_emptystring_key_32_iv_None = r"""''"""
-
-example_mode_aes_256_ofb_datatype_utf8string_key_32_iv_None = r"""'F74D6C5B438F9CA8BEFAA27A02BEAB06B24181EFC9F2663B'"""
-
-example_mode_aes_256_ofb_datatype_utf8fixedstring_key_32_iv_None = r"""'F74D6C5B438F9CA8BEFAA27A02BEAB06B24181EFC9F2663B'"""
-
-example_mode_aes_256_ofb_datatype_String_key_32_iv_None = r"""'81'"""
-
-example_mode_aes_256_ofb_datatype_FixedString_key_32_iv_None = r"""'81'"""
-
-example_mode_aes_256_ofb_datatype_UInt8_key_32_iv_None = r"""'B1'"""
-
-example_mode_aes_256_ofb_datatype_UInt16_key_32_iv_None = r"""'B18E'"""
-
-example_mode_aes_256_ofb_datatype_UInt32_key_32_iv_None = r"""'B18ECF9E'"""
-
-example_mode_aes_256_ofb_datatype_UInt64_key_32_iv_None = r"""'B18ECF9EC7EB5F0D'"""
-
-example_mode_aes_256_ofb_datatype_Int8_key_32_iv_None = r"""'B1'"""
-
-example_mode_aes_256_ofb_datatype_Int16_key_32_iv_None = r"""'B18E'"""
-
-example_mode_aes_256_ofb_datatype_Int32_key_32_iv_None = r"""'B18ECF9E'"""
-
-example_mode_aes_256_ofb_datatype_Int64_key_32_iv_None = r"""'B18ECF9EC7EB5F0D'"""
-
-example_mode_aes_256_ofb_datatype_Float32_key_32_iv_None = r"""'B08E4FA1'"""
-
-example_mode_aes_256_ofb_datatype_Float64_key_32_iv_None = r"""'B08ECF9EC7EBAF32'"""
-
-example_mode_aes_256_ofb_datatype_Decimal32_key_32_iv_None = r"""'90C0CF9E'"""
-
-example_mode_aes_256_ofb_datatype_Decimal64_key_32_iv_None = r"""'90C0CF9EC7EB5F0D'"""
-
-example_mode_aes_256_ofb_datatype_Decimal128_key_32_iv_None = r"""'90C0CF9EC7EB5F0D7B78C42556D668AC'"""
-
-example_mode_aes_256_ofb_datatype_UUID_key_32_iv_None = r"""'579F7CC2C32FAF6CDBA3174F5670133C'"""
-
-example_mode_aes_256_ofb_datatype_Date_key_32_iv_None = r"""'E6C9'"""
-
-example_mode_aes_256_ofb_datatype_DateTime_key_32_iv_None = r"""'FE5EC3C0'"""
-
-example_mode_aes_256_ofb_datatype_DateTime64_key_32_iv_None = r"""'9B3FC2FCA8EA5F0D'"""
-
-example_mode_aes_256_ofb_datatype_LowCardinality_key_32_iv_None = r"""'81'"""
-
-example_mode_aes_256_ofb_datatype_Array_key_32_iv_None = r"""'B18C'"""
-
-example_mode_aes_256_ofb_datatype_NULL_key_32_iv_None = r"""'\\N'"""
-
-example_mode_aes_256_ofb_datatype_IPv4_key_32_iv_None = r"""'9D0C2E35'"""
-
-example_mode_aes_256_ofb_datatype_IPv6_key_32_iv_None = r"""'908FC226C7EBDAAE7B78C425FAC9E8AD'"""
-
-example_mode_aes_256_ofb_datatype_Enum8_key_32_iv_None = r"""'B1'"""
-
-example_mode_aes_256_ofb_datatype_Enum16_key_32_iv_None = r"""'B18E'"""
-
-example_mode_aes_128_ofb_datatype_bytes_key_16_iv_16 = r"""'32'"""
-
-example_mode_aes_128_ofb_datatype_emptystring_key_16_iv_16 = r"""''"""
-
-example_mode_aes_128_ofb_datatype_utf8string_key_16_iv_16 = r"""'754B0A4159623CFD2CBB06EE8AADCCB46A1C2A356E7D91D8'"""
-
-example_mode_aes_128_ofb_datatype_utf8fixedstring_key_16_iv_16 = r"""'754B0A4159623CFD2CBB06EE8AADCCB46A1C2A356E7D91D8'"""
-
-example_mode_aes_128_ofb_datatype_String_key_16_iv_16 = r"""'03'"""
-
-example_mode_aes_128_ofb_datatype_FixedString_key_16_iv_16 = r"""'03'"""
-
-example_mode_aes_128_ofb_datatype_UInt8_key_16_iv_16 = r"""'33'"""
-
-example_mode_aes_128_ofb_datatype_UInt16_key_16_iv_16 = r"""'3388'"""
-
-example_mode_aes_128_ofb_datatype_UInt32_key_16_iv_16 = r"""'3388A984'"""
-
-example_mode_aes_128_ofb_datatype_UInt64_key_16_iv_16 = r"""'3388A984DD06FF58'"""
-
-example_mode_aes_128_ofb_datatype_Int8_key_16_iv_16 = r"""'33'"""
-
-example_mode_aes_128_ofb_datatype_Int16_key_16_iv_16 = r"""'3388'"""
-
-example_mode_aes_128_ofb_datatype_Int32_key_16_iv_16 = r"""'3388A984'"""
-
-example_mode_aes_128_ofb_datatype_Int64_key_16_iv_16 = r"""'3388A984DD06FF58'"""
-
-example_mode_aes_128_ofb_datatype_Float32_key_16_iv_16 = r"""'328829BB'"""
-
-example_mode_aes_128_ofb_datatype_Float64_key_16_iv_16 = r"""'3288A984DD060F67'"""
-
-example_mode_aes_128_ofb_datatype_Decimal32_key_16_iv_16 = r"""'12C6A984'"""
-
-example_mode_aes_128_ofb_datatype_Decimal64_key_16_iv_16 = r"""'12C6A984DD06FF58'"""
-
-example_mode_aes_128_ofb_datatype_Decimal128_key_16_iv_16 = r"""'12C6A984DD06FF58E93960B1DEC50F1E'"""
-
-example_mode_aes_128_ofb_datatype_UUID_key_16_iv_16 = r"""'D5991AD8D9C20F3949E2B3DBDE63748E'"""
-
-example_mode_aes_128_ofb_datatype_Date_key_16_iv_16 = r"""'64CF'"""
-
-example_mode_aes_128_ofb_datatype_DateTime_key_16_iv_16 = r"""'7C58A5DA'"""
-
-example_mode_aes_128_ofb_datatype_DateTime64_key_16_iv_16 = r"""'1939A4E6B207FF58'"""
-
-example_mode_aes_128_ofb_datatype_LowCardinality_key_16_iv_16 = r"""'03'"""
-
-example_mode_aes_128_ofb_datatype_Array_key_16_iv_16 = r"""'338A'"""
-
-example_mode_aes_128_ofb_datatype_NULL_key_16_iv_16 = r"""'\\N'"""
-
-example_mode_aes_128_ofb_datatype_IPv4_key_16_iv_16 = r"""'1F0A482F'"""
-
-example_mode_aes_128_ofb_datatype_IPv6_key_16_iv_16 = r"""'1289A43CDD067AFBE93960B172DA8F1F'"""
-
-example_mode_aes_128_ofb_datatype_Enum8_key_16_iv_16 = r"""'33'"""
-
-example_mode_aes_128_ofb_datatype_Enum16_key_16_iv_16 = r"""'3388'"""
-
-example_mode_aes_128_ofb_datatype_bytes_key_24_iv_24 = r"""'5B'"""
-
-example_mode_aes_128_ofb_datatype_emptystring_key_24_iv_24 = r"""''"""
-
-example_mode_aes_128_ofb_datatype_utf8string_key_24_iv_24 = r"""'1CB4A1306DD44E12FB99CA2398A56D5CE691EFBA49066039'"""
-
-example_mode_aes_128_ofb_datatype_utf8fixedstring_key_24_iv_24 = r"""'1CB4A1306DD44E12FB99CA2398A56D5CE691EFBA49066039'"""
-
-example_mode_aes_128_ofb_datatype_String_key_24_iv_24 = r"""'6A'"""
-
-example_mode_aes_128_ofb_datatype_FixedString_key_24_iv_24 = r"""'6A'"""
-
-example_mode_aes_128_ofb_datatype_UInt8_key_24_iv_24 = r"""'5A'"""
-
-example_mode_aes_128_ofb_datatype_UInt16_key_24_iv_24 = r"""'5A77'"""
-
-example_mode_aes_128_ofb_datatype_UInt32_key_24_iv_24 = r"""'5A7702F5'"""
-
-example_mode_aes_128_ofb_datatype_UInt64_key_24_iv_24 = r"""'5A7702F5E9B08DB7'"""
-
-example_mode_aes_128_ofb_datatype_Int8_key_24_iv_24 = r"""'5A'"""
-
-example_mode_aes_128_ofb_datatype_Int16_key_24_iv_24 = r"""'5A77'"""
-
-example_mode_aes_128_ofb_datatype_Int32_key_24_iv_24 = r"""'5A7702F5'"""
-
-example_mode_aes_128_ofb_datatype_Int64_key_24_iv_24 = r"""'5A7702F5E9B08DB7'"""
-
-example_mode_aes_128_ofb_datatype_Float32_key_24_iv_24 = r"""'5B7782CA'"""
-
-example_mode_aes_128_ofb_datatype_Float64_key_24_iv_24 = r"""'5B7702F5E9B07D88'"""
-
-example_mode_aes_128_ofb_datatype_Decimal32_key_24_iv_24 = r"""'7B3902F5'"""
-
-example_mode_aes_128_ofb_datatype_Decimal64_key_24_iv_24 = r"""'7B3902F5E9B08DB7'"""
-
-example_mode_aes_128_ofb_datatype_Decimal128_key_24_iv_24 = r"""'7B3902F5E9B08DB73E1BAC7CCCCDAEF6'"""
-
-example_mode_aes_128_ofb_datatype_UUID_key_24_iv_24 = r"""'BC66B1A9ED747DD69EC07F16CC6BD566'"""
-
-example_mode_aes_128_ofb_datatype_Date_key_24_iv_24 = r"""'0D30'"""
-
-example_mode_aes_128_ofb_datatype_DateTime_key_24_iv_24 = r"""'15A70EAB'"""
-
-example_mode_aes_128_ofb_datatype_DateTime64_key_24_iv_24 = r"""'70C60F9786B18DB7'"""
-
-example_mode_aes_128_ofb_datatype_LowCardinality_key_24_iv_24 = r"""'6A'"""
-
-example_mode_aes_128_ofb_datatype_Array_key_24_iv_24 = r"""'5A75'"""
-
-example_mode_aes_128_ofb_datatype_NULL_key_24_iv_24 = r"""'\\N'"""
-
-example_mode_aes_128_ofb_datatype_IPv4_key_24_iv_24 = r"""'76F5E35E'"""
-
-example_mode_aes_128_ofb_datatype_IPv6_key_24_iv_24 = r"""'7B760F4DE9B008143E1BAC7C60D22EF7'"""
-
-example_mode_aes_128_ofb_datatype_Enum8_key_24_iv_24 = r"""'5A'"""
-
-example_mode_aes_128_ofb_datatype_Enum16_key_24_iv_24 = r"""'5A77'"""
-
-example_mode_aes_192_ofb_datatype_bytes_key_24_iv_16 = r"""'68'"""
-
-example_mode_aes_192_ofb_datatype_emptystring_key_24_iv_16 = r"""''"""
-
-example_mode_aes_192_ofb_datatype_utf8string_key_24_iv_16 = r"""'2F0444573374B41441C46351EBB0A21F81C68E6CF92A6AF3'"""
-
-example_mode_aes_192_ofb_datatype_utf8fixedstring_key_24_iv_16 = r"""'2F0444573374B41441C46351EBB0A21F81C68E6CF92A6AF3'"""
-
-example_mode_aes_192_ofb_datatype_String_key_24_iv_16 = r"""'59'"""
-
-example_mode_aes_192_ofb_datatype_FixedString_key_24_iv_16 = r"""'59'"""
-
-example_mode_aes_192_ofb_datatype_UInt8_key_24_iv_16 = r"""'69'"""
-
-example_mode_aes_192_ofb_datatype_UInt16_key_24_iv_16 = r"""'69C7'"""
-
-example_mode_aes_192_ofb_datatype_UInt32_key_24_iv_16 = r"""'69C7E792'"""
-
-example_mode_aes_192_ofb_datatype_UInt64_key_24_iv_16 = r"""'69C7E792B71077B1'"""
-
-example_mode_aes_192_ofb_datatype_Int8_key_24_iv_16 = r"""'69'"""
-
-example_mode_aes_192_ofb_datatype_Int16_key_24_iv_16 = r"""'69C7'"""
-
-example_mode_aes_192_ofb_datatype_Int32_key_24_iv_16 = r"""'69C7E792'"""
-
-example_mode_aes_192_ofb_datatype_Int64_key_24_iv_16 = r"""'69C7E792B71077B1'"""
-
-example_mode_aes_192_ofb_datatype_Float32_key_24_iv_16 = r"""'68C767AD'"""
-
-example_mode_aes_192_ofb_datatype_Float64_key_24_iv_16 = r"""'68C7E792B710878E'"""
-
-example_mode_aes_192_ofb_datatype_Decimal32_key_24_iv_16 = r"""'4889E792'"""
-
-example_mode_aes_192_ofb_datatype_Decimal64_key_24_iv_16 = r"""'4889E792B71077B1'"""
-
-example_mode_aes_192_ofb_datatype_Decimal128_key_24_iv_16 = r"""'4889E792B71077B18446050EBFD861B5'"""
-
-example_mode_aes_192_ofb_datatype_UUID_key_24_iv_16 = r"""'8FD654CEB3D487D0249DD664BF7E1A25'"""
-
-example_mode_aes_192_ofb_datatype_Date_key_24_iv_16 = r"""'3E80'"""
-
-example_mode_aes_192_ofb_datatype_DateTime_key_24_iv_16 = r"""'2617EBCC'"""
-
-example_mode_aes_192_ofb_datatype_DateTime64_key_24_iv_16 = r"""'4376EAF0D81177B1'"""
-
-example_mode_aes_192_ofb_datatype_LowCardinality_key_24_iv_16 = r"""'59'"""
-
-example_mode_aes_192_ofb_datatype_Array_key_24_iv_16 = r"""'69C5'"""
-
-example_mode_aes_192_ofb_datatype_NULL_key_24_iv_16 = r"""'\\N'"""
-
-example_mode_aes_192_ofb_datatype_IPv4_key_24_iv_16 = r"""'45450639'"""
-
-example_mode_aes_192_ofb_datatype_IPv6_key_24_iv_16 = r"""'48C6EA2AB710F2128446050E13C7E1B4'"""
-
-example_mode_aes_192_ofb_datatype_Enum8_key_24_iv_16 = r"""'69'"""
-
-example_mode_aes_192_ofb_datatype_Enum16_key_24_iv_16 = r"""'69C7'"""
-
-example_mode_aes_192_ofb_datatype_bytes_key_32_iv_32 = r"""'31'"""
-
-example_mode_aes_192_ofb_datatype_emptystring_key_32_iv_32 = r"""''"""
-
-example_mode_aes_192_ofb_datatype_utf8string_key_32_iv_32 = r"""'76632DB12BCFF36187A90B6990CFA6D86DA0963C4A14697B'"""
-
-example_mode_aes_192_ofb_datatype_utf8fixedstring_key_32_iv_32 = r"""'76632DB12BCFF36187A90B6990CFA6D86DA0963C4A14697B'"""
-
-example_mode_aes_192_ofb_datatype_String_key_32_iv_32 = r"""'00'"""
-
-example_mode_aes_192_ofb_datatype_FixedString_key_32_iv_32 = r"""'00'"""
-
-example_mode_aes_192_ofb_datatype_UInt8_key_32_iv_32 = r"""'30'"""
-
-example_mode_aes_192_ofb_datatype_UInt16_key_32_iv_32 = r"""'30A0'"""
-
-example_mode_aes_192_ofb_datatype_UInt32_key_32_iv_32 = r"""'30A08E74'"""
-
-example_mode_aes_192_ofb_datatype_UInt64_key_32_iv_32 = r"""'30A08E74AFAB30C4'"""
-
-example_mode_aes_192_ofb_datatype_Int8_key_32_iv_32 = r"""'30'"""
-
-example_mode_aes_192_ofb_datatype_Int16_key_32_iv_32 = r"""'30A0'"""
-
-example_mode_aes_192_ofb_datatype_Int32_key_32_iv_32 = r"""'30A08E74'"""
-
-example_mode_aes_192_ofb_datatype_Int64_key_32_iv_32 = r"""'30A08E74AFAB30C4'"""
-
-example_mode_aes_192_ofb_datatype_Float32_key_32_iv_32 = r"""'31A00E4B'"""
-
-example_mode_aes_192_ofb_datatype_Float64_key_32_iv_32 = r"""'31A08E74AFABC0FB'"""
-
-example_mode_aes_192_ofb_datatype_Decimal32_key_32_iv_32 = r"""'11EE8E74'"""
-
-example_mode_aes_192_ofb_datatype_Decimal64_key_32_iv_32 = r"""'11EE8E74AFAB30C4'"""
-
-example_mode_aes_192_ofb_datatype_Decimal128_key_32_iv_32 = r"""'11EE8E74AFAB30C4422B6D36C4A76572'"""
-
-example_mode_aes_192_ofb_datatype_UUID_key_32_iv_32 = r"""'D6B13D28AB6FC0A5E2F0BE5CC4011EE2'"""
-
-example_mode_aes_192_ofb_datatype_Date_key_32_iv_32 = r"""'67E7'"""
-
-example_mode_aes_192_ofb_datatype_DateTime_key_32_iv_32 = r"""'7F70822A'"""
-
-example_mode_aes_192_ofb_datatype_DateTime64_key_32_iv_32 = r"""'1A118316C0AA30C4'"""
-
-example_mode_aes_192_ofb_datatype_LowCardinality_key_32_iv_32 = r"""'00'"""
-
-example_mode_aes_192_ofb_datatype_Array_key_32_iv_32 = r"""'30A2'"""
-
-example_mode_aes_192_ofb_datatype_NULL_key_32_iv_32 = r"""'\\N'"""
-
-example_mode_aes_192_ofb_datatype_IPv4_key_32_iv_32 = r"""'1C226FDF'"""
-
-example_mode_aes_192_ofb_datatype_IPv6_key_32_iv_32 = r"""'11A183CCAFABB567422B6D3668B8E573'"""
-
-example_mode_aes_192_ofb_datatype_Enum8_key_32_iv_32 = r"""'30'"""
-
-example_mode_aes_192_ofb_datatype_Enum16_key_32_iv_32 = r"""'30A0'"""
-
-example_mode_aes_256_ofb_datatype_bytes_key_32_iv_16 = r"""'69'"""
-
-example_mode_aes_256_ofb_datatype_emptystring_key_32_iv_16 = r"""''"""
-
-example_mode_aes_256_ofb_datatype_utf8string_key_32_iv_16 = r"""'2E9B2BD2B8BA872DB56225F82754048CE38E2C23393CF6FD'"""
-
-example_mode_aes_256_ofb_datatype_utf8fixedstring_key_32_iv_16 = r"""'2E9B2BD2B8BA872DB56225F82754048CE38E2C23393CF6FD'"""
-
-example_mode_aes_256_ofb_datatype_String_key_32_iv_16 = r"""'58'"""
-
-example_mode_aes_256_ofb_datatype_FixedString_key_32_iv_16 = r"""'58'"""
-
-example_mode_aes_256_ofb_datatype_UInt8_key_32_iv_16 = r"""'68'"""
-
-example_mode_aes_256_ofb_datatype_UInt16_key_32_iv_16 = r"""'6858'"""
-
-example_mode_aes_256_ofb_datatype_UInt32_key_32_iv_16 = r"""'68588817'"""
-
-example_mode_aes_256_ofb_datatype_UInt64_key_32_iv_16 = r"""'685888173CDE4488'"""
-
-example_mode_aes_256_ofb_datatype_Int8_key_32_iv_16 = r"""'68'"""
-
-example_mode_aes_256_ofb_datatype_Int16_key_32_iv_16 = r"""'6858'"""
-
-example_mode_aes_256_ofb_datatype_Int32_key_32_iv_16 = r"""'68588817'"""
-
-example_mode_aes_256_ofb_datatype_Int64_key_32_iv_16 = r"""'685888173CDE4488'"""
-
-example_mode_aes_256_ofb_datatype_Float32_key_32_iv_16 = r"""'69580828'"""
-
-example_mode_aes_256_ofb_datatype_Float64_key_32_iv_16 = r"""'695888173CDEB4B7'"""
-
-example_mode_aes_256_ofb_datatype_Decimal32_key_32_iv_16 = r"""'49168817'"""
-
-example_mode_aes_256_ofb_datatype_Decimal64_key_32_iv_16 = r"""'491688173CDE4488'"""
-
-example_mode_aes_256_ofb_datatype_Decimal128_key_32_iv_16 = r"""'491688173CDE448870E043A7733CC726'"""
-
-example_mode_aes_256_ofb_datatype_UUID_key_32_iv_16 = r"""'8E493B4B381AB4E9D03B90CD739ABCB6'"""
-
-example_mode_aes_256_ofb_datatype_Date_key_32_iv_16 = r"""'3F1F'"""
-
-example_mode_aes_256_ofb_datatype_DateTime_key_32_iv_16 = r"""'27888449'"""
-
-example_mode_aes_256_ofb_datatype_DateTime64_key_32_iv_16 = r"""'42E9857553DF4488'"""
-
-example_mode_aes_256_ofb_datatype_LowCardinality_key_32_iv_16 = r"""'58'"""
-
-example_mode_aes_256_ofb_datatype_Array_key_32_iv_16 = r"""'685A'"""
-
-example_mode_aes_256_ofb_datatype_NULL_key_32_iv_16 = r"""'\\N'"""
-
-example_mode_aes_256_ofb_datatype_IPv4_key_32_iv_16 = r"""'44DA69BC'"""
-
-example_mode_aes_256_ofb_datatype_IPv6_key_32_iv_16 = r"""'495985AF3CDEC12B70E043A7DF234727'"""
-
-example_mode_aes_256_ofb_datatype_Enum8_key_32_iv_16 = r"""'68'"""
-
-example_mode_aes_256_ofb_datatype_Enum16_key_32_iv_16 = r"""'6858'"""
-
-example_mode_aes_256_ofb_datatype_bytes_key_64_iv_64 = r"""'D3'"""
-
-example_mode_aes_256_ofb_datatype_emptystring_key_64_iv_64 = r"""''"""
-
-example_mode_aes_256_ofb_datatype_utf8string_key_64_iv_64 = r"""'942D6C993F1DE6D874AD5CCF2109CE7D063DC690F1843081'"""
-
-example_mode_aes_256_ofb_datatype_utf8fixedstring_key_64_iv_64 = r"""'942D6C993F1DE6D874AD5CCF2109CE7D063DC690F1843081'"""
-
-example_mode_aes_256_ofb_datatype_String_key_64_iv_64 = r"""'E2'"""
-
-example_mode_aes_256_ofb_datatype_FixedString_key_64_iv_64 = r"""'E2'"""
-
-example_mode_aes_256_ofb_datatype_UInt8_key_64_iv_64 = r"""'D2'"""
-
-example_mode_aes_256_ofb_datatype_UInt16_key_64_iv_64 = r"""'D2EE'"""
-
-example_mode_aes_256_ofb_datatype_UInt32_key_64_iv_64 = r"""'D2EECF5C'"""
-
-example_mode_aes_256_ofb_datatype_UInt64_key_64_iv_64 = r"""'D2EECF5CBB79257D'"""
-
-example_mode_aes_256_ofb_datatype_Int8_key_64_iv_64 = r"""'D2'"""
-
-example_mode_aes_256_ofb_datatype_Int16_key_64_iv_64 = r"""'D2EE'"""
-
-example_mode_aes_256_ofb_datatype_Int32_key_64_iv_64 = r"""'D2EECF5C'"""
-
-example_mode_aes_256_ofb_datatype_Int64_key_64_iv_64 = r"""'D2EECF5CBB79257D'"""
-
-example_mode_aes_256_ofb_datatype_Float32_key_64_iv_64 = r"""'D3EE4F63'"""
-
-example_mode_aes_256_ofb_datatype_Float64_key_64_iv_64 = r"""'D3EECF5CBB79D542'"""
-
-example_mode_aes_256_ofb_datatype_Decimal32_key_64_iv_64 = r"""'F3A0CF5C'"""
-
-example_mode_aes_256_ofb_datatype_Decimal64_key_64_iv_64 = r"""'F3A0CF5CBB79257D'"""
-
-example_mode_aes_256_ofb_datatype_Decimal128_key_64_iv_64 = r"""'F3A0CF5CBB79257DB12F3A9075610DD7'"""
-
-example_mode_aes_256_ofb_datatype_UUID_key_64_iv_64 = r"""'34FF7C00BFBDD51C11F4E9FA75C77647'"""
-
-example_mode_aes_256_ofb_datatype_Date_key_64_iv_64 = r"""'85A9'"""
-
-example_mode_aes_256_ofb_datatype_DateTime_key_64_iv_64 = r"""'9D3EC302'"""
-
-example_mode_aes_256_ofb_datatype_DateTime64_key_64_iv_64 = r"""'F85FC23ED478257D'"""
-
-example_mode_aes_256_ofb_datatype_LowCardinality_key_64_iv_64 = r"""'E2'"""
-
-example_mode_aes_256_ofb_datatype_Array_key_64_iv_64 = r"""'D2EC'"""
-
-example_mode_aes_256_ofb_datatype_NULL_key_64_iv_64 = r"""'\\N'"""
-
-example_mode_aes_256_ofb_datatype_IPv4_key_64_iv_64 = r"""'FE6C2EF7'"""
-
-example_mode_aes_256_ofb_datatype_IPv6_key_64_iv_64 = r"""'F3EFC2E4BB79A0DEB12F3A90D97E8DD6'"""
-
-example_mode_aes_256_ofb_datatype_Enum8_key_64_iv_64 = r"""'D2'"""
-
-example_mode_aes_256_ofb_datatype_Enum16_key_64_iv_64 = r"""'D2EE'"""
-