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 - part_log
- 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 - query_log
- - toYYYYMM(event_date) - - 7500 -
- - - - system - trace_log
- - toYYYYMM(event_date) - 7500 -
- - - - system - query_thread_log
- 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'""" -